Commit d81bb54fa0bbcdd54b314b3b3acc7eb3cff0609e

  • avatar
  • Sam Thursfield <sam @dja…go.(none)>
  • Wed Aug 12 19:57:29 CEST 2009
[gsettings] Expose settings editor as widget or dialog.
  
308308static void
309309glade_app_show_settings_default (GladeApp *app, GladeWidget *widget, GladeProperty *property)
310310{
311 glade_settings_editor_show (app->priv->settings_editor, widget, property);
311 glade_settings_editor_show_dialog (app->priv->settings_editor, widget, property);
312312}
313313
314314static gboolean
  
141141 -1);
142142};
143143
144static void
145remove_clicked (GtkButton *button,
146 GladeSettingsEditor *self)
147{
148 GtkTreeIter iter;
149 GladeProperty *property;
150 GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(self->view));
151
152 if (!gtk_tree_selection_get_selected (selection, NULL, &iter))
153 return;
154
155 gtk_tree_model_get (self->data, &iter,
156 GLADE_SETTINGS_EDITOR_COLUMN_PROPERTY, &property,
157 -1);
158 gtk_list_store_remove (GTK_LIST_STORE (self->data), &iter);
159
160 self->property = NULL;
161 glade_property_set_binding (property, NULL);
162};
163
164static void
165dialog_response (GtkDialog *dialog,
166 GtkResponseType response,
167 GladeSettingsEditor *self)
168{
169 GtkWidget *content_area = gtk_dialog_get_content_area (GTK_DIALOG (self->dialog));
170 gtk_container_remove (GTK_CONTAINER (content_area), self->panel);
171
172 gtk_widget_destroy (GTK_WIDGET (dialog));
173 self->dialog = NULL;
174};
175
144176void
145glade_settings_editor_show (GladeSettingsEditor *self,
146 GladeWidget *widget,
147 GladeProperty *property)
177glade_settings_editor_show_dialog (GladeSettingsEditor *self,
178 GladeWidget *widget,
179 GladeProperty *property)
148180{
181 GtkWidget *button, *action_area;
182
149183 glade_settings_editor_set_widget (self, widget);
150184 glade_settings_editor_set_property (self, property);
151185
186 /* Dialog is already showing */
187 if (self->dialog != NULL)
188 return;
189
190 if (gtk_widget_get_parent (self->panel) != NULL)
191 {
192 g_warning ("glade_settings_editor_show_dialog: this editor's panel widget is "
193 "already packed somewhere.");
194 return;
195 };
196
197 self->dialog = gtk_dialog_new_with_buttons (_("Settings connections"),
198 GTK_WINDOW (glade_app_get_window ()), 0,
199 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
200 NULL);
201 gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (self->dialog))),
202 self->panel);
203 g_signal_connect (self->dialog, "response", G_CALLBACK (dialog_response), self);
204
152205 gtk_widget_show_all (self->dialog);
153206};
154207
208/* Return the widget to be packed somewhere */
209GtkWidget *
210glade_settings_editor_get_widget (GladeSettingsEditor *self)
211{
212 /* Warn if things won't work, but return the widget anyway */
213 if (self->dialog != NULL)
214 g_warning ("glade_settings_editor_get_widget: This settings editor is showing its "
215 "dialog, so its widget cannot be used elsewhere.");
216 else if (gtk_widget_get_parent (self->panel) != NULL)
217 g_warning ("glade_settings_editor_get_widget: Widget is already packed somewhere.");
218
219 return self->panel;
220};
221
155222void
156223glade_settings_editor_set_widget (GladeSettingsEditor *self,
157224 GladeWidget *widget)
307307 glade_signal_free (new_signal);*/
308308}
309309
310static void
311remove_clicked (GtkButton *button,
312 GladeSettingsEditor *self)
313{
314 GtkTreeIter iter;
315 GladeProperty *property;
316
317 if (!gtk_tree_selection_get_selected (gtk_tree_view_get_selection (self->view),
318 NULL, &iter))
319 return;
320
321 gtk_tree_model_get (self->data, &iter,
322 GLADE_SETTINGS_EDITOR_COLUMN_PROPERTY, &property,
323 -1);
324 gtk_list_store_remove (GTK_LIST_STORE (self->data), &iter);
325
326 self->property = NULL;
327 glade_property_set_binding (property, NULL);
328};
329
330static void
331dialog_response (GtkDialog *dialog)
332{
333 gtk_widget_hide (GTK_WIDGET (dialog));
334};
335
336310static GObject*
337311glade_settings_editor_constructor (GType type,
338312 guint n_construct_properties,
316316 GObject *retval;
317317 GtkCellRenderer *cell_renderer;
318318 GtkTreeViewColumn *column;
319 GtkWidget *frame, *alignment, *button, *action_area;
320319
321320 retval = G_OBJECT_CLASS (glade_settings_editor_parent_class)->constructor
322321 (type, n_construct_properties, construct_properties);
324324 self->data = GTK_TREE_MODEL (gtk_list_store_new (3, GLADE_TYPE_PROPERTY,
325325 G_TYPE_STRING, G_TYPE_STRING));
326326
327 self->dialog = gtk_dialog_new_with_buttons (_("Settings connections"),
328 GTK_WINDOW (glade_app_get_window ()), 0,
329 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
330 NULL);
331
332327 self->view = gtk_tree_view_new_with_model (self->data);
333328 gtk_widget_set_size_request (self->view, 200, 200);
334329
344344
345345 g_signal_connect (cell_renderer, "edited", G_CALLBACK (key_edited), self);
346346
347 gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (self->dialog))),
348 self->view);
347 self->panel = self->view;
348 g_object_ref_sink (self->panel);
349349
350 /* Add 'remove' button to action area. */
351 button = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
352 g_signal_connect (button, "clicked", remove_clicked, self);
353
354 action_area = gtk_dialog_get_action_area (GTK_DIALOG (self->dialog));
355 gtk_container_add (GTK_BOX (action_area), button);
356 gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (action_area), button, TRUE);
357
358 g_signal_connect (self->dialog, "response", G_CALLBACK (dialog_response), NULL);
359
360350 return retval;
361351};
362352
369369static void
370370glade_settings_editor_finalize (GObject *object)
371371{
372 //GladeSettingsEditor *self = GLADE_SETTINGS_EDITOR (object);
372 GladeSettingsEditor *self = GLADE_SETTINGS_EDITOR (object);
373373
374 g_object_unref (self->panel);
375 if (self->dialog != NULL)
376 gtk_widget_destroy (self->dialog);
377
374378 G_OBJECT_CLASS (glade_settings_editor_parent_class)->finalize (object);
375379}
376380
377381static void
378382glade_settings_editor_init (GladeSettingsEditor *self)
379383{
384 /* Editor UI */
385 self->dialog = NULL;
386 self->panel = NULL;
387
388 /* Things being edited */
380389 self->widget = NULL;
381390 self->property = NULL;
382391 self->property_notify_id = 0;
  
3535 GladeProperty *property; /* Currently selected property */
3636 int property_notify_id; /* Signal handler connected to notify::settings-key */
3737
38 GtkWidget *dialog, *view;
38 GtkWidget *dialog, *panel, *view;
3939 GtkTreeModel *data;
4040};
4141
4848
4949GladeSettingsEditor *glade_settings_editor_new ();
5050
51void glade_settings_editor_show (GladeSettingsEditor *self, GladeWidget *widget,
52 GladeProperty *property);
51void glade_settings_editor_show_dialog (GladeSettingsEditor *self, GladeWidget *widget,
52 GladeProperty *property);
53GtkWidget *glade_settings_editor_get_widget (GladeSettingsEditor *self);
5354
5455void glade_settings_editor_set_widget (GladeSettingsEditor *self, GladeWidget *widget);
5556void glade_settings_editor_set_property (GladeSettingsEditor *self, GladeProperty *property);