1 /* GIMP - The GNU Image Manipulation Program
2 *
3 * gimpcageoptions.c
4 * Copyright (C) 2010 Michael Muré <batolettre@gmail.com>
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20 #include "config.h"
21
22 #include <gegl.h>
23 #include <gtk/gtk.h>
24
25 #include "libgimpconfig/gimpconfig.h"
26 #include "libgimpwidgets/gimpwidgets.h"
27
28 #include "tools-types.h"
29
30 #include "gimpcageoptions.h"
31 #include "gimptooloptions-gui.h"
32
33 #include "gimp-intl.h"
34
35
36 enum
37 {
38 PROP_0,
39 PROP_CAGE_MODE,
40 PROP_FILL_PLAIN_COLOR
41 };
42
43
44 static void gimp_cage_options_set_property (GObject *object,
45 guint property_id,
46 const GValue *value,
47 GParamSpec *pspec);
48 static void gimp_cage_options_get_property (GObject *object,
49 guint property_id,
50 GValue *value,
51 GParamSpec *pspec);
52
53
G_DEFINE_TYPE(GimpCageOptions,gimp_cage_options,GIMP_TYPE_TOOL_OPTIONS)54 G_DEFINE_TYPE (GimpCageOptions, gimp_cage_options,
55 GIMP_TYPE_TOOL_OPTIONS)
56
57 #define parent_class gimp_cage_options_parent_class
58
59
60 static void
61 gimp_cage_options_class_init (GimpCageOptionsClass *klass)
62 {
63 GObjectClass *object_class = G_OBJECT_CLASS (klass);
64
65 object_class->set_property = gimp_cage_options_set_property;
66 object_class->get_property = gimp_cage_options_get_property;
67
68 GIMP_CONFIG_PROP_ENUM (object_class, PROP_CAGE_MODE,
69 "cage-mode",
70 NULL, NULL,
71 GIMP_TYPE_CAGE_MODE,
72 GIMP_CAGE_MODE_CAGE_CHANGE,
73 GIMP_PARAM_STATIC_STRINGS);
74
75 GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_FILL_PLAIN_COLOR,
76 "fill-plain-color",
77 _("Fill the original position\n"
78 "of the cage with a color"),
79 NULL,
80 FALSE,
81 GIMP_PARAM_STATIC_STRINGS);
82 }
83
84 static void
gimp_cage_options_init(GimpCageOptions * options)85 gimp_cage_options_init (GimpCageOptions *options)
86 {
87 }
88
89 static void
gimp_cage_options_set_property(GObject * object,guint property_id,const GValue * value,GParamSpec * pspec)90 gimp_cage_options_set_property (GObject *object,
91 guint property_id,
92 const GValue *value,
93 GParamSpec *pspec)
94 {
95 GimpCageOptions *options = GIMP_CAGE_OPTIONS (object);
96
97 switch (property_id)
98 {
99 case PROP_CAGE_MODE:
100 options->cage_mode = g_value_get_enum (value);
101 break;
102 case PROP_FILL_PLAIN_COLOR:
103 options->fill_plain_color = g_value_get_boolean (value);
104 break;
105
106 default:
107 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
108 break;
109 }
110 }
111
112 static void
gimp_cage_options_get_property(GObject * object,guint property_id,GValue * value,GParamSpec * pspec)113 gimp_cage_options_get_property (GObject *object,
114 guint property_id,
115 GValue *value,
116 GParamSpec *pspec)
117 {
118 GimpCageOptions *options = GIMP_CAGE_OPTIONS (object);
119
120 switch (property_id)
121 {
122 case PROP_CAGE_MODE:
123 g_value_set_enum (value, options->cage_mode);
124 break;
125 case PROP_FILL_PLAIN_COLOR:
126 g_value_set_boolean (value, options->fill_plain_color);
127 break;
128
129 default:
130 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
131 break;
132 }
133 }
134
135 GtkWidget *
gimp_cage_options_gui(GimpToolOptions * tool_options)136 gimp_cage_options_gui (GimpToolOptions *tool_options)
137 {
138 GObject *config = G_OBJECT (tool_options);
139 GtkWidget *vbox = gimp_tool_options_gui (tool_options);
140 GtkWidget *mode;
141 GtkWidget *button;
142
143 mode = gimp_prop_enum_radio_box_new (config, "cage-mode", 0, 0);
144 gtk_box_pack_start (GTK_BOX (vbox), mode, FALSE, FALSE, 0);
145 gtk_widget_show (mode);
146
147 button = gimp_prop_check_button_new (config, "fill-plain-color", NULL);
148 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
149 gtk_widget_show (button);
150
151 return vbox;
152 }
153