70
72
GParamSpec *pspec);
71
73
static void gimp_data_editor_dispose (GObject *object);
75
static void gimp_data_editor_style_set (GtkWidget *widget,
76
GtkStyle *prev_style);
78
static void gimp_data_editor_set_context (GimpDocked *docked,
79
GimpContext *context);
73
80
static void gimp_data_editor_set_aux_info (GimpDocked *docked,
75
82
static GList * gimp_data_editor_get_aux_info (GimpDocked *docked);
83
static gchar * gimp_data_editor_get_title (GimpDocked *docked);
77
85
static void gimp_data_editor_real_set_data (GimpDataEditor *editor,
88
static void gimp_data_editor_data_changed (GimpContext *context,
90
GimpDataEditor *editor);
91
static gboolean gimp_data_editor_name_key_press (GtkWidget *widget,
93
GimpDataEditor *editor);
80
94
static void gimp_data_editor_name_activate (GtkWidget *widget,
81
95
GimpDataEditor *editor);
82
96
static gboolean gimp_data_editor_name_focus_out (GtkWidget *widget,
93
107
static void gimp_data_editor_save_dirty (GimpDataEditor *editor);
96
static GimpEditorClass *parent_class = NULL;
100
gimp_data_editor_get_type (void)
102
static GType type = 0;
106
static const GTypeInfo view_info =
108
sizeof (GimpDataEditorClass),
109
NULL, /* base_init */
110
NULL, /* base_finalize */
111
(GClassInitFunc) gimp_data_editor_class_init,
112
NULL, /* class_finalize */
113
NULL, /* class_data */
114
sizeof (GimpDataEditor),
116
(GInstanceInitFunc) gimp_data_editor_init,
118
static const GInterfaceInfo docked_iface_info =
120
(GInterfaceInitFunc) gimp_data_editor_docked_iface_init,
121
NULL, /* iface_finalize */
122
NULL /* iface_data */
125
type = g_type_register_static (GIMP_TYPE_EDITOR,
129
g_type_add_interface_static (type, GIMP_TYPE_DOCKED,
110
G_DEFINE_TYPE_WITH_CODE (GimpDataEditor, gimp_data_editor, GIMP_TYPE_EDITOR,
111
G_IMPLEMENT_INTERFACE (GIMP_TYPE_DOCKED,
112
gimp_data_editor_docked_iface_init))
114
#define parent_class gimp_data_editor_parent_class
116
static GimpDockedInterface *parent_docked_iface = NULL;
137
120
gimp_data_editor_class_init (GimpDataEditorClass *klass)
139
GObjectClass *object_class = G_OBJECT_CLASS (klass);
141
parent_class = g_type_class_peek_parent (klass);
122
GObjectClass *object_class = G_OBJECT_CLASS (klass);
123
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
143
125
object_class->constructor = gimp_data_editor_constructor;
144
126
object_class->set_property = gimp_data_editor_set_property;
145
127
object_class->get_property = gimp_data_editor_get_property;
146
128
object_class->dispose = gimp_data_editor_dispose;
130
widget_class->style_set = gimp_data_editor_style_set;
148
132
klass->set_data = gimp_data_editor_real_set_data;
150
134
g_object_class_install_property (object_class, PROP_DATA_FACTORY,
151
135
g_param_spec_object ("data-factory",
153
137
GIMP_TYPE_DATA_FACTORY,
138
GIMP_PARAM_READWRITE |
155
139
G_PARAM_CONSTRUCT_ONLY));
141
g_object_class_install_property (object_class, PROP_CONTEXT,
142
g_param_spec_object ("context",
145
GIMP_PARAM_READWRITE));
157
147
g_object_class_install_property (object_class, PROP_DATA,
158
148
g_param_spec_object ("data",
151
GIMP_PARAM_READWRITE));
153
gtk_widget_class_install_style_property (widget_class,
154
g_param_spec_int ("minimal-height",
158
DEFAULT_MINIMAL_HEIGHT,
159
GIMP_PARAM_READABLE));
165
163
gimp_data_editor_init (GimpDataEditor *editor)
167
165
editor->data_factory = NULL;
166
editor->context = NULL;
168
167
editor->data = NULL;
169
168
editor->data_editable = FALSE;
172
171
gtk_box_pack_start (GTK_BOX (editor), editor->name_entry, FALSE, FALSE, 0);
173
172
gtk_widget_show (editor->name_entry);
174
gtk_editable_set_editable (GTK_EDITABLE (editor->name_entry), FALSE);
176
g_signal_connect (editor->name_entry, "key-press-event",
177
G_CALLBACK (gimp_data_editor_name_key_press),
175
179
g_signal_connect (editor->name_entry, "activate",
176
G_CALLBACK (gimp_data_editor_name_activate),
180
G_CALLBACK (gimp_data_editor_name_activate),
178
g_signal_connect (editor->name_entry, "focus_out_event",
179
G_CALLBACK (gimp_data_editor_name_focus_out),
182
g_signal_connect (editor->name_entry, "focus-out-event",
183
G_CALLBACK (gimp_data_editor_name_focus_out),
184
gimp_data_editor_docked_iface_init (GimpDockedInterface *docked_iface)
188
gimp_data_editor_docked_iface_init (GimpDockedInterface *iface)
186
docked_iface->set_aux_info = gimp_data_editor_set_aux_info;
187
docked_iface->get_aux_info = gimp_data_editor_get_aux_info;
190
parent_docked_iface = g_type_interface_peek_parent (iface);
192
if (! parent_docked_iface)
193
parent_docked_iface = g_type_default_interface_peek (GIMP_TYPE_DOCKED);
195
iface->set_context = gimp_data_editor_set_context;
196
iface->set_aux_info = gimp_data_editor_set_aux_info;
197
iface->get_aux_info = gimp_data_editor_get_aux_info;
198
iface->get_title = gimp_data_editor_get_title;
235
250
case PROP_DATA_FACTORY:
236
251
editor->data_factory = g_value_get_object (value);
254
gimp_docked_set_context (GIMP_DOCKED (object),
255
g_value_get_object (value));
239
gimp_data_editor_set_data (editor,
240
(GimpData *) g_value_get_object (value));
258
gimp_data_editor_set_data (editor, g_value_get_object (value));
243
261
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
279
300
gimp_data_editor_set_data (editor, NULL);
304
gimp_docked_set_context (GIMP_DOCKED (editor), NULL);
282
306
G_OBJECT_CLASS (parent_class)->dispose (object);
310
gimp_data_editor_style_set (GtkWidget *widget,
311
GtkStyle *prev_style)
313
GimpDataEditor *editor = GIMP_DATA_EDITOR (widget);
316
if (GTK_WIDGET_CLASS (parent_class)->style_set)
317
GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style);
319
gtk_widget_style_get (widget,
320
"minimal-height", &minimal_height,
324
gtk_widget_set_size_request (editor->view, -1, minimal_height);
328
gimp_data_editor_set_context (GimpDocked *docked,
329
GimpContext *context)
331
GimpDataEditor *editor = GIMP_DATA_EDITOR (docked);
333
if (context == editor->context)
336
if (parent_docked_iface->set_context)
337
parent_docked_iface->set_context (docked, context);
341
g_signal_handlers_disconnect_by_func (editor->context,
342
gimp_data_editor_data_changed,
345
g_object_unref (editor->context);
348
editor->context = context;
355
g_object_ref (editor->context);
357
data_type = editor->data_factory->container->children_type;
358
data = GIMP_DATA (gimp_context_get_by_type (editor->context, data_type));
360
g_signal_connect (editor->context,
361
gimp_context_type_to_signal_name (data_type),
362
G_CALLBACK (gimp_data_editor_data_changed),
365
gimp_data_editor_data_changed (editor->context, data, editor);
369
#define AUX_INFO_EDIT_ACTIVE "edit-active"
285
370
#define AUX_INFO_CURRENT_DATA "current-data"
291
376
GimpDataEditor *editor = GIMP_DATA_EDITOR (docked);
379
parent_docked_iface->set_aux_info (docked, aux_info);
294
381
for (list = aux_info; list; list = g_list_next (list))
296
383
GimpSessionInfoAux *aux = list->data;
298
if (! strcmp (aux->name, AUX_INFO_CURRENT_DATA))
303
gimp_container_get_child_by_name (editor->data_factory->container,
307
gimp_data_editor_set_data (editor, data);
385
if (! strcmp (aux->name, AUX_INFO_EDIT_ACTIVE))
387
gboolean edit_active;
389
edit_active = ! g_ascii_strcasecmp (aux->value, "true");
391
gimp_data_editor_set_edit_active (editor, edit_active);
393
else if (! strcmp (aux->name, AUX_INFO_CURRENT_DATA))
395
if (! editor->edit_active)
400
gimp_container_get_child_by_name (editor->data_factory->container,
404
gimp_data_editor_set_data (editor, data);
313
411
gimp_data_editor_get_aux_info (GimpDocked *docked)
315
GimpDataEditor *editor = GIMP_DATA_EDITOR (docked);
316
GList *aux_info = NULL;
413
GimpDataEditor *editor = GIMP_DATA_EDITOR (docked);
415
GimpSessionInfoAux *aux;
417
aux_info = parent_docked_iface->get_aux_info (docked);
419
aux = gimp_session_info_aux_new (AUX_INFO_EDIT_ACTIVE,
420
editor->edit_active ? "true" : "false");
421
aux_info = g_list_append (aux_info, aux);
318
423
if (editor->data)
320
GimpSessionInfoAux *aux;
323
427
value = gimp_object_get_name (GIMP_OBJECT (editor->data));
437
gimp_data_editor_get_title (GimpDocked *docked)
439
GimpDataEditor *editor = GIMP_DATA_EDITOR (docked);
440
GimpDataEditorClass *editor_class = GIMP_DATA_EDITOR_GET_CLASS (editor);
442
if (editor->data_editable)
443
return g_strdup (editor_class->title);
445
return g_strdup_printf (_("%s (read only)"), editor_class->title);
333
449
gimp_data_editor_real_set_data (GimpDataEditor *editor,
336
454
if (editor->data)
338
456
g_signal_handlers_disconnect_by_func (editor->data,
360
478
gtk_entry_set_text (GTK_ENTRY (editor->name_entry), "");
363
editor->data_editable = (editor->data && editor->data->writable);
365
gtk_widget_set_sensitive (editor->name_entry, editor->data_editable);
481
editable = (editor->data && editor->data->writable);
483
if (editor->data_editable != editable)
485
editor->data_editable = editable;
487
gtk_editable_set_editable (GTK_EDITABLE (editor->name_entry), editable);
488
gimp_docked_title_changed (GIMP_DOCKED (editor));
395
519
return editor->data;
523
gimp_data_editor_set_edit_active (GimpDataEditor *editor,
524
gboolean edit_active)
526
g_return_if_fail (GIMP_IS_DATA_EDITOR (editor));
528
if (editor->edit_active != edit_active)
530
editor->edit_active = edit_active;
532
if (editor->edit_active && editor->context)
537
data_type = editor->data_factory->container->children_type;
538
data = GIMP_DATA (gimp_context_get_by_type (editor->context,
541
gimp_data_editor_set_data (editor, data);
547
gimp_data_editor_get_edit_active (GimpDataEditor *editor)
549
g_return_val_if_fail (GIMP_IS_DATA_EDITOR (editor), FALSE);
551
return editor->edit_active;
399
555
/* private functions */
558
gimp_data_editor_data_changed (GimpContext *context,
560
GimpDataEditor *editor)
562
if (editor->edit_active)
563
gimp_data_editor_set_data (editor, data);
567
gimp_data_editor_name_key_press (GtkWidget *widget,
569
GimpDataEditor *editor)
571
if (kevent->keyval == GDK_Escape)
573
gtk_entry_set_text (GTK_ENTRY (editor->name_entry),
574
gimp_object_get_name (GIMP_OBJECT (editor->data)));
402
582
gimp_data_editor_name_activate (GtkWidget *widget,
403
583
GimpDataEditor *editor)
405
585
if (editor->data)
407
const gchar *entry_text;
409
entry_text = gtk_entry_get_text (GTK_ENTRY (widget));
411
gimp_object_set_name (GIMP_OBJECT (editor->data), entry_text);
589
new_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (widget)));
590
new_name = g_strstrip (new_name);
592
if (strlen (new_name))
594
gimp_object_take_name (GIMP_OBJECT (editor->data), new_name);
598
gtk_entry_set_text (GTK_ENTRY (widget),
599
gimp_object_get_name (GIMP_OBJECT (editor->data)));
450
640
GimpData *data = editor->data;
452
642
if (data && data->dirty && data->writable)
453
gimp_data_factory_data_save_single (editor->data_factory, data);
644
GError *error = NULL;
646
if (! gimp_data_factory_data_save_single (editor->data_factory, data,
649
gimp_message (editor->data_factory->gimp, G_OBJECT (editor),
651
"%s", error->message);
652
g_clear_error (&error);