diff options
author | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2017-12-31 14:41:32 -0300 |
---|---|---|
committer | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2017-12-31 14:41:32 -0300 |
commit | 76385f17994d3ad5b26b1d8b011b69f79b3ca665 (patch) | |
tree | 39cd765f1f705185a4c107f9d6a61baab40f8d7e | |
parent | 4c0e415eeafe8099b00a5ba4ca75a76b1d496e87 (diff) | |
download | glade-76385f17994d3ad5b26b1d8b011b69f79b3ca665.tar.gz |
GladebaseEditor: Implement it as a template class
Simplify UI by removing general tab and only keeping the hierarchy editor
-rw-r--r-- | gladeui/Makefile.am | 1 | ||||
-rw-r--r-- | gladeui/glade-base-editor.c | 547 | ||||
-rw-r--r-- | gladeui/glade-base-editor.ui | 259 | ||||
-rw-r--r-- | gladeui/gladeui-resources.gresource.xml | 1 |
4 files changed, 450 insertions, 358 deletions
diff --git a/gladeui/Makefile.am b/gladeui/Makefile.am index 381ea55b..a02d3af3 100644 --- a/gladeui/Makefile.am +++ b/gladeui/Makefile.am @@ -62,6 +62,7 @@ UI_FILES = \ glade-project-properties.ui \ glade-adaptor-chooser-widget.ui \ glade-adaptor-chooser.ui \ + glade-base-editor.ui \ glade-property-label.ui GRAPHICS_FILES = \ diff --git a/gladeui/glade-base-editor.c b/gladeui/glade-base-editor.c index 916078f1..44e4d41c 100644 --- a/gladeui/glade-base-editor.c +++ b/gladeui/glade-base-editor.c @@ -75,8 +75,8 @@ struct _GladeBaseEditorPrivate GladeWidget *gcontainer; /* The container we are editing */ /* Editor UI */ - GtkWidget *paned, *table, *treeview, *main_scroll, *notebook; - GtkWidget *remove_button; + GtkWidget *paned, *table, *treeview, *tip_label; + GtkWidget *add_button, *delete_button, *help_button; GladeSignalEditor *signal_editor; GList *child_types; @@ -265,30 +265,30 @@ glade_base_editor_fill_store_real (GladeBaseEditor *e, /* Have to check parents here for compatibility (could be the parenting menuitem of this menu * supports a menuitem...) */ if (glade_base_editor_get_type_info (e, NULL, - G_OBJECT_TYPE (child), - GLADE_BASE_EDITOR_CLASS_NAME, - &type_name, -1)) - { - gtk_tree_store_append (GTK_TREE_STORE (e->priv->model), &iter, parent); - - name = glade_base_editor_get_display_name (e, gchild); - - gtk_tree_store_set (GTK_TREE_STORE (e->priv->model), &iter, - GLADE_BASE_EDITOR_GWIDGET, gchild, - GLADE_BASE_EDITOR_OBJECT, child, - GLADE_BASE_EDITOR_TYPE_NAME, type_name, - GLADE_BASE_EDITOR_NAME, name, - GLADE_BASE_EDITOR_CHILD_TYPES, - get_children_model_for_child_type (e, G_OBJECT_TYPE (child)), - -1); - - glade_base_editor_fill_store_real (e, gchild, &iter); - - g_free (name); - g_free (type_name); - } + G_OBJECT_TYPE (child), + GLADE_BASE_EDITOR_CLASS_NAME, + &type_name, -1)) + { + gtk_tree_store_append (GTK_TREE_STORE (e->priv->model), &iter, parent); + + name = glade_base_editor_get_display_name (e, gchild); + + gtk_tree_store_set (GTK_TREE_STORE (e->priv->model), &iter, + GLADE_BASE_EDITOR_GWIDGET, gchild, + GLADE_BASE_EDITOR_OBJECT, child, + GLADE_BASE_EDITOR_TYPE_NAME, type_name, + GLADE_BASE_EDITOR_NAME, name, + GLADE_BASE_EDITOR_CHILD_TYPES, + get_children_model_for_child_type (e, G_OBJECT_TYPE (child)), + -1); + + glade_base_editor_fill_store_real (e, gchild, &iter); + + g_free (name); + g_free (type_name); + } else - glade_base_editor_fill_store_real (e, gchild, parent); + glade_base_editor_fill_store_real (e, gchild, parent); } g_list_free (children); @@ -359,7 +359,7 @@ glade_base_editor_name_activate (GtkEntry *entry, GladeWidget *gchild) * the widget which would otherwise break. */ if (!glade_widget_has_prop_refs (gchild)) - new_name = glade_project_new_widget_name (editor->priv->project, NULL, GLADE_UNNAMED_PREFIX); + new_name = glade_project_new_widget_name (editor->priv->project, NULL, GLADE_UNNAMED_PREFIX); } else new_name = g_strdup (text); @@ -405,10 +405,11 @@ glade_base_editor_clear (GladeBaseEditor *editor) { GladeBaseEditorPrivate *e = editor->priv; - gtk_container_foreach (GTK_CONTAINER (e->table), - (GtkCallback)gtk_widget_destroy, NULL); + gtk_widget_show (e->tip_label); + gtk_container_foreach (GTK_CONTAINER (e->table), + (GtkCallback)gtk_widget_destroy, NULL); e->row = 0; - gtk_widget_set_sensitive (e->remove_button, FALSE); + gtk_widget_set_sensitive (e->delete_button, FALSE); glade_signal_editor_load_widget (e->signal_editor, NULL); } @@ -427,7 +428,7 @@ glade_base_editor_treeview_cursor_changed (GtkTreeView *treeview, return; glade_base_editor_clear (editor); - gtk_widget_set_sensitive (e->remove_button, TRUE); + gtk_widget_set_sensitive (e->delete_button, TRUE); gtk_tree_model_get (e->model, &iter, GLADE_BASE_EDITOR_GWIDGET, &gchild, @@ -559,7 +560,6 @@ glade_base_editor_child_change_type (GladeBaseEditor *editor, } /* Start of glade-command */ - if (glade_base_editor_get_type_info (editor, NULL, type, GLADE_BASE_EDITOR_CLASS_NAME, @@ -650,10 +650,10 @@ glade_base_editor_child_type_edited (GtkCellRendererText *cell, GLADE_BASE_EDITOR_CLASS_NAME, &type_name, -1); if (strcmp (type_name, new_text) == 0) - { - g_free (type_name); - break; - } + { + g_free (type_name); + break; + } g_free (type_name); } @@ -692,7 +692,7 @@ glade_base_editor_reorder_children (GladeBaseEditor *editor, static void glade_base_editor_add_child (GladeBaseEditor *editor, GType type, - GladeBaseEditorAddMode add_mode) + GladeBaseEditorAddMode add_mode) { GladeBaseEditorPrivate *e = editor->priv; GtkTreeIter iter, new_iter; @@ -708,17 +708,17 @@ glade_base_editor_add_child (GladeBaseEditor *editor, (selected_iter = glade_base_editor_get_child_selected (editor, &iter))) { if (add_mode == ADD_CHILD) - { - gtk_tree_model_get (e->model, &iter, - GLADE_BASE_EDITOR_GWIDGET, &gparent, -1); - g_object_unref (gparent); - } + { + gtk_tree_model_get (e->model, &iter, + GLADE_BASE_EDITOR_GWIDGET, &gparent, -1); + g_object_unref (gparent); + } else if (add_mode == ADD_SIBLING && - gtk_tree_model_iter_parent (e->model, &new_iter, &iter)) + gtk_tree_model_iter_parent (e->model, &new_iter, &iter)) { gtk_tree_model_get (e->model, &new_iter, GLADE_BASE_EDITOR_GWIDGET, &gparent, -1); - g_object_unref (gparent); + g_object_unref (gparent); } } @@ -763,7 +763,7 @@ glade_base_editor_add_child (GladeBaseEditor *editor, GLADE_BASE_EDITOR_CHILD_TYPES, get_children_model_for_type (editor, G_OBJECT_TYPE (glade_widget_get_object (gparent))), - -1); + -1); glade_base_editor_reorder_children (editor, &new_iter); @@ -806,7 +806,7 @@ glade_base_editor_popup (GladeBaseEditor *editor, GladeWidget *widget) G_OBJECT_TYPE (glade_widget_get_object (widget)))) == NULL) model = get_children_model_for_type (editor, - G_OBJECT_TYPE (glade_widget_get_object (editor->priv->gcontainer))); + G_OBJECT_TYPE (glade_widget_get_object (editor->priv->gcontainer))); g_assert (model); @@ -905,8 +905,7 @@ glade_base_editor_popup_handler (GtkWidget *treeview, gtk_tree_path_free (path); - gtk_menu_popup (GTK_MENU (popup), NULL, NULL, NULL, NULL, - event->button, event->time); + gtk_menu_popup_at_pointer (GTK_MENU (popup), (GdkEvent*) event); } return TRUE; } @@ -1480,9 +1479,101 @@ glade_base_editor_delete_child_impl (GladeBaseEditor *editor, } static void +glade_base_editor_block_callbacks (GladeBaseEditor *editor, gboolean block) +{ + GladeBaseEditorPrivate *e = editor->priv; + if (block) + { + g_signal_handlers_block_by_func (e->model, glade_base_editor_row_inserted, + editor); + if (e->project) + { + g_signal_handlers_block_by_func (e->project, + glade_base_editor_project_remove_widget, + editor); + g_signal_handlers_block_by_func (e->project, + glade_base_editor_project_add_widget, + editor); + g_signal_handlers_block_by_func (e->project, + glade_base_editor_project_changed, + editor); + } + } + else + { + g_signal_handlers_unblock_by_func (e->model, + glade_base_editor_row_inserted, + editor); + if (e->project) + { + g_signal_handlers_unblock_by_func (e->project, + glade_base_editor_project_remove_widget, + editor); + g_signal_handlers_unblock_by_func (e->project, + glade_base_editor_project_add_widget, + editor); + g_signal_handlers_unblock_by_func (e->project, + glade_base_editor_project_changed, + editor); + } + } +} + +static void +glade_base_editor_realize_callback (GtkWidget *widget, gpointer user_data) +{ + GladeBaseEditor *editor = GLADE_BASE_EDITOR (widget); + + glade_base_editor_block_callbacks (editor, TRUE); + + glade_base_editor_fill_store (editor); + gtk_tree_view_expand_all (GTK_TREE_VIEW (editor->priv->treeview)); + + glade_base_editor_block_callbacks (editor, FALSE); +} + +static void +glade_base_editor_init (GladeBaseEditor *editor) +{ + GladeBaseEditorPrivate *e; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + + gtk_widget_init_template (GTK_WIDGET (editor)); + + e = editor->priv = glade_base_editor_get_instance_private (editor); + + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes (_("Label"), renderer, + "text", + GLADE_BASE_EDITOR_NAME, + NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (e->treeview), column); + + renderer = gtk_cell_renderer_combo_new (); + g_object_set (renderer, + "has-entry", FALSE, + "text-column", GLADE_BASE_EDITOR_CLASS_NAME, + "editable", TRUE, NULL); + + g_signal_connect (G_OBJECT (renderer), "edited", + G_CALLBACK (glade_base_editor_child_type_edited), editor); + + column = gtk_tree_view_column_new_with_attributes (_("Type"), renderer, + "text", + GLADE_BASE_EDITOR_TYPE_NAME, + "model", + GLADE_BASE_EDITOR_CHILD_TYPES, + NULL); + + gtk_tree_view_append_column (GTK_TREE_VIEW (e->treeview), column); +} + +static void glade_base_editor_class_init (GladeBaseEditorClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); glade_base_editor_parent_class = g_type_class_peek_parent (klass); @@ -1610,261 +1701,22 @@ glade_base_editor_class_init (GladeBaseEditorClass *klass) _glade_stop_emission_accumulator, NULL, _glade_marshal_BOOLEAN__OBJECT_OBJECT, G_TYPE_BOOLEAN, 2, G_TYPE_OBJECT, G_TYPE_OBJECT); -} - -static void -glade_base_editor_block_callbacks (GladeBaseEditor *editor, gboolean block) -{ - GladeBaseEditorPrivate *e = editor->priv; - if (block) - { - g_signal_handlers_block_by_func (e->model, glade_base_editor_row_inserted, - editor); - if (e->project) - { - g_signal_handlers_block_by_func (e->project, - glade_base_editor_project_remove_widget, - editor); - g_signal_handlers_block_by_func (e->project, - glade_base_editor_project_add_widget, - editor); - g_signal_handlers_block_by_func (e->project, - glade_base_editor_project_changed, - editor); - } - } - else - { - g_signal_handlers_unblock_by_func (e->model, - glade_base_editor_row_inserted, - editor); - if (e->project) - { - g_signal_handlers_unblock_by_func (e->project, - glade_base_editor_project_remove_widget, - editor); - g_signal_handlers_unblock_by_func (e->project, - glade_base_editor_project_add_widget, - editor); - g_signal_handlers_unblock_by_func (e->project, - glade_base_editor_project_changed, - editor); - } - } -} - -static void -glade_base_editor_realize_callback (GtkWidget *widget, gpointer user_data) -{ - GladeBaseEditor *editor = GLADE_BASE_EDITOR (widget); - - glade_base_editor_block_callbacks (editor, TRUE); - - glade_base_editor_fill_store (editor); - gtk_tree_view_expand_all (GTK_TREE_VIEW (editor->priv->treeview)); - - glade_base_editor_block_callbacks (editor, FALSE); -} - - -static void -glade_base_editor_switch_page (GtkNotebook *notebook, - GtkWidget *page, - guint page_num, - GladeBaseEditor *editor) -{ - GladeBaseEditorPrivate *e = editor->priv; - - if (page_num == 0) - glade_signal_editor_load_widget (e->signal_editor, e->gcontainer); - else - { - GtkTreeIter iter; - GladeWidget *gchild = NULL; - - if (glade_base_editor_get_child_selected (editor, &iter)) - { - gtk_tree_model_get (e->model, &iter, - GLADE_BASE_EDITOR_GWIDGET, &gchild, -1); - g_object_unref (G_OBJECT (gchild)); - } - - if (gchild) - glade_signal_editor_load_widget (e->signal_editor, gchild); - else - glade_signal_editor_load_widget (e->signal_editor, NULL); - } -} - - -static void -glade_base_editor_init (GladeBaseEditor *editor) -{ - GladeBaseEditorPrivate *e; - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - GtkWidget *paned, *hbox, *vbox, *tree_vbox, *scroll, *button_table, *button, - *label; - - gtk_orientable_set_orientation (GTK_ORIENTABLE (editor), - GTK_ORIENTATION_VERTICAL); - gtk_box_set_spacing (GTK_BOX (editor), 8); - - e = editor->priv = glade_base_editor_get_instance_private (editor); - - /* Paned */ - e->paned = paned = gtk_paned_new (GTK_ORIENTATION_VERTICAL); - gtk_widget_show (paned); - gtk_box_pack_start (GTK_BOX (editor), e->paned, TRUE, TRUE, 0); - - /* Notebook */ - e->notebook = gtk_notebook_new (); - gtk_widget_show (e->notebook); - gtk_paned_pack1 (GTK_PANED (paned), e->notebook, TRUE, FALSE); - - /* ScrolledWindow */ - e->main_scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_show (e->main_scroll); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (e->main_scroll), - GTK_SHADOW_NONE); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (e->main_scroll), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - - /* translators: refers to a tab name used to group all the relevant widget's properties */ - label = gtk_label_new (_("General")); - gtk_widget_show (label); - gtk_notebook_append_page (GTK_NOTEBOOK (e->notebook), e->main_scroll, label); - - /* Hbox */ - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8); - gtk_widget_show (hbox); - - /* translators: refers to a tab name used to show the widget hierarchy */ - label = gtk_label_new (_("Hierarchy")); - gtk_widget_show (label); - gtk_notebook_append_page (GTK_NOTEBOOK (e->notebook), hbox, label); - - /* TreeView Vbox */ - tree_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8); - gtk_widget_show (tree_vbox); - gtk_box_pack_start (GTK_BOX (hbox), tree_vbox, FALSE, TRUE, 0); - - /* ScrolledWindow */ - scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_show (scroll); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), - GTK_SHADOW_NONE); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - gtk_box_pack_start (GTK_BOX (tree_vbox), scroll, TRUE, TRUE, 0); - - /* TreeView */ - e->treeview = gtk_tree_view_new (); - gtk_widget_show (e->treeview); - gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (e->treeview), TRUE); - gtk_tree_view_set_reorderable (GTK_TREE_VIEW (e->treeview), TRUE); - - gtk_widget_add_events (e->treeview, GDK_KEY_PRESS_MASK); - g_signal_connect (e->treeview, "key-press-event", - G_CALLBACK (glade_base_editor_treeview_key_press_event), - editor); - - g_signal_connect (e->treeview, "cursor-changed", - G_CALLBACK (glade_base_editor_treeview_cursor_changed), - editor); - - g_signal_connect (e->treeview, "button-press-event", - G_CALLBACK (glade_base_editor_popup_handler), editor); - - - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes (_("Label"), renderer, - "text", - GLADE_BASE_EDITOR_NAME, - NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (e->treeview), column); - - renderer = gtk_cell_renderer_combo_new (); - g_object_set (renderer, - "has-entry", FALSE, - "text-column", GLADE_BASE_EDITOR_CLASS_NAME, - "editable", TRUE, NULL); - - g_signal_connect (G_OBJECT (renderer), "edited", - G_CALLBACK (glade_base_editor_child_type_edited), editor); - - column = gtk_tree_view_column_new_with_attributes (_("Type"), renderer, - "text", - GLADE_BASE_EDITOR_TYPE_NAME, - "model", - GLADE_BASE_EDITOR_CHILD_TYPES, - NULL); - - gtk_tree_view_append_column (GTK_TREE_VIEW (e->treeview), column); - - gtk_container_add (GTK_CONTAINER (scroll), e->treeview); - - /* Add/Remove buttons */ - button_table = gtk_grid_new (); - gtk_orientable_set_orientation (GTK_ORIENTABLE (button_table), - GTK_ORIENTATION_VERTICAL); - gtk_grid_set_column_homogeneous (GTK_GRID (button_table), TRUE); - - gtk_widget_show (button_table); - gtk_grid_set_column_spacing (GTK_GRID (button_table), 8); - gtk_box_pack_start (GTK_BOX (tree_vbox), button_table, FALSE, TRUE, 0); - - button = gtk_button_new_from_icon_name ("list-add", GTK_ICON_SIZE_BUTTON); - gtk_widget_set_hexpand (button, TRUE); - gtk_widget_show (button); - g_signal_connect (button, "clicked", - G_CALLBACK (glade_base_editor_add_activate), editor); - gtk_grid_attach (GTK_GRID (button_table), button, 0, 0, 1, 1); - - e->remove_button = button = gtk_button_new_from_icon_name ("list-remove", GTK_ICON_SIZE_BUTTON); - gtk_widget_show (button); - gtk_widget_set_hexpand (button, TRUE); - g_signal_connect (button, "clicked", - G_CALLBACK (glade_base_editor_delete_activate), editor); - gtk_grid_attach (GTK_GRID (button_table), button, 1, 0, 1, 1); - - /* Properties Vbox */ - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8); - gtk_widget_show (vbox); - gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); - - /* ScrolledWindow */ - scroll = gtk_scrolled_window_new (NULL, NULL); - gtk_widget_show (scroll); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), - GTK_SHADOW_NONE); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), - GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0); - - /* Tables */ - e->table = gtk_grid_new (); - gtk_orientable_set_orientation (GTK_ORIENTABLE (e->table), - GTK_ORIENTATION_VERTICAL); - gtk_grid_set_column_spacing (GTK_GRID (e->table), 4); - gtk_grid_set_row_spacing (GTK_GRID (e->table), 4); - gtk_widget_show (e->table); - gtk_container_add (GTK_CONTAINER (scroll), e->table); - - /* Signal Editor */ - e->signal_editor = glade_signal_editor_new (); - gtk_widget_show (GTK_WIDGET (e->signal_editor)); - gtk_widget_set_size_request (GTK_WIDGET (e->signal_editor), -1, 96); - gtk_paned_pack2 (GTK_PANED (paned), GTK_WIDGET (e->signal_editor), FALSE, - FALSE); - - /* Update the treeview on realize event */ - g_signal_connect (editor, "realize", - G_CALLBACK (glade_base_editor_realize_callback), NULL); - - g_signal_connect (G_OBJECT (e->notebook), "switch-page", - G_CALLBACK (glade_base_editor_switch_page), editor); + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/gladeui/glade-base-editor.ui"); + gtk_widget_class_bind_template_child_private (widget_class, GladeBaseEditor, paned); + gtk_widget_class_bind_template_child_private (widget_class, GladeBaseEditor, treeview); + gtk_widget_class_bind_template_child_private (widget_class, GladeBaseEditor, add_button); + gtk_widget_class_bind_template_child_private (widget_class, GladeBaseEditor, delete_button); + gtk_widget_class_bind_template_child_private (widget_class, GladeBaseEditor, help_button); + gtk_widget_class_bind_template_child_private (widget_class, GladeBaseEditor, table); + gtk_widget_class_bind_template_child_private (widget_class, GladeBaseEditor, signal_editor); + gtk_widget_class_bind_template_child_private (widget_class, GladeBaseEditor, tip_label); + gtk_widget_class_bind_template_callback (widget_class, glade_base_editor_realize_callback); + gtk_widget_class_bind_template_callback (widget_class, glade_base_editor_treeview_cursor_changed); + gtk_widget_class_bind_template_callback (widget_class, glade_base_editor_popup_handler); + gtk_widget_class_bind_template_callback (widget_class, glade_base_editor_treeview_key_press_event); + gtk_widget_class_bind_template_callback (widget_class, glade_base_editor_add_activate); + gtk_widget_class_bind_template_callback (widget_class, glade_base_editor_delete_activate); } /********************************* Public API *********************************/ @@ -1873,8 +1725,8 @@ glade_base_editor_init (GladeBaseEditor *editor) * @container: a container this new editor will edit. * @main_editable: the custom #GladeEditable for @container, or %NULL * @... A NULL terminated list of gchar *, GType - * - * Creates a new GladeBaseEditor with @container toplevel + * + * Creates a new GladeBaseEditor with @container toplevel * support for all the object types indicated in the variable argument list. * Argument List: * o The type name @@ -1914,15 +1766,8 @@ glade_base_editor_new (GObject *container, GladeEditable *main_editable, ...) g_signal_connect (e->model, "row-inserted", G_CALLBACK (glade_base_editor_row_inserted), editor); - /* Invent one if not provided */ - if (!main_editable) - main_editable = - glade_widget_adaptor_create_editable (glade_widget_get_adaptor (gcontainer), - GLADE_PAGE_GENERAL); - - glade_editable_load (main_editable, gcontainer); - gtk_widget_show (GTK_WIDGET (main_editable)); - gtk_container_add (GTK_CONTAINER (e->main_scroll), GTK_WIDGET (main_editable)); + if (main_editable) + g_warning ("%s main_editable is deprecated, the editor will only show the hierarchy editor", __func__); child_type = g_new0 (ChildTypeTab, 1); child_type->parent_type = G_OBJECT_TYPE (container); @@ -1941,7 +1786,7 @@ glade_base_editor_new (GObject *container, GladeEditable *main_editable, ...) GLADE_BASE_EDITOR_CLASS_NAME, name, -1); if (editor->priv->add_type == 0) - editor->priv->add_type = iter_type; + editor->priv->add_type = iter_type; } va_end (args); @@ -1961,7 +1806,7 @@ glade_base_editor_new (GObject *container, GladeEditable *main_editable, ...) * @editor: A #GladeBaseEditor * @parent_type: the parent type these child types will apply to * @... A NULL terminated list of gchar *, GType - * + * * Appends support for all the object types indicated in the variable argument list. * Argument List: * o The type name @@ -1991,8 +1836,8 @@ glade_base_editor_append_types (GladeBaseEditor *editor, GType parent_type, ...) gtk_list_store_append (GTK_LIST_STORE (child_type->children), &iter); gtk_list_store_set (GTK_LIST_STORE (child_type->children), &iter, GLADE_BASE_EDITOR_GTYPE, va_arg (args, GType), - GLADE_BASE_EDITOR_CLASS_NAME, name, - -1); + GLADE_BASE_EDITOR_CLASS_NAME, name, + -1); } va_end (args); @@ -2007,7 +1852,7 @@ glade_base_editor_append_types (GladeBaseEditor *editor, GType parent_type, ...) * @gchild: a #GladeWidget * * Add @gchild name and type property to @editor - * + * * NOTE: This function is intended to be used in "child-selected" callbacks */ void @@ -2078,7 +1923,7 @@ glade_base_editor_add_default_properties (GladeBaseEditor *editor, * @gchild: a #GladeWidget * @packing: whether we are adding packing properties or not * @...: A NULL terminated list of properties names. - * + * * Add @gchild properties to @editor * * NOTE: This function is intended to be used in "child-selected" callbacks @@ -2105,8 +1950,8 @@ glade_base_editor_add_properties (GladeBaseEditor *editor, glade_widget_create_editor_property (gchild, property, packing, TRUE); if (eprop) glade_base_editor_table_attach (editor, - glade_editor_property_get_item_label (eprop), - GTK_WIDGET (eprop)); + glade_editor_property_get_item_label (eprop), + GTK_WIDGET (eprop)); property = va_arg (args, gchar *); } va_end (args); @@ -2118,7 +1963,7 @@ glade_base_editor_add_properties (GladeBaseEditor *editor, * @editor: a #GladeBaseEditor * @gchild: the #GladeWidget * @page: the #GladeEditorPageType of the desired page for @gchild - * + * * Add @gchild editor of type @page to the base editor * * NOTE: This function is intended to be used in "child-selected" callbacks @@ -2147,6 +1992,7 @@ glade_base_editor_add_editable (GladeBaseEditor *editor, editor->priv->row++; + gtk_widget_hide (editor->priv->tip_label); } @@ -2184,6 +2030,7 @@ glade_base_editor_add_label (GladeBaseEditor *editor, gchar *str) gtk_widget_show (label); editor->priv->row++; + gtk_widget_hide (editor->priv->tip_label); g_free (markup); } @@ -2212,9 +2059,9 @@ glade_base_editor_help (GtkButton *button, gchar *markup) { GtkWidget *dialog; - dialog = gtk_message_dialog_new (GTK_WINDOW (glade_app_get_window ()), + dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (button))), GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, " "); + GTK_MESSAGE_INFO, GTK_BUTTONS_OK, " "); gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), markup); @@ -2237,59 +2084,43 @@ glade_base_editor_pack_new_window (GladeBaseEditor *editor, gchar *title, gchar *help_markup) { - GtkWidget *window, *buttonbox, *button; - gchar *real_title; + GtkWidget *window, *headerbar; + gchar *msg; g_return_val_if_fail (GLADE_IS_BASE_EDITOR (editor), NULL); /* Window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + headerbar = gtk_header_bar_new (); + gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (headerbar), TRUE); + gtk_window_set_titlebar (GTK_WINDOW (window), headerbar); + gtk_widget_show (headerbar); if (title) { - const gchar *widget_name = - glade_widget_get_display_name (editor->priv->gcontainer); + const gchar *name = glade_widget_get_display_name (editor->priv->gcontainer); - real_title = g_strdup_printf ("%s - %s", title, widget_name); - gtk_window_set_title (GTK_WINDOW (window), real_title); - g_free (real_title); + gtk_header_bar_set_title (GTK_HEADER_BAR (headerbar), title); + gtk_header_bar_set_subtitle (GTK_HEADER_BAR (headerbar), name); } g_signal_connect_swapped (G_OBJECT (editor), "notify::container", G_CALLBACK (gtk_widget_destroy), window); - /* Button Box */ - buttonbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); - gtk_widget_show (buttonbox); - gtk_button_box_set_layout (GTK_BUTTON_BOX (buttonbox), GTK_BUTTONBOX_END); - gtk_box_set_spacing (GTK_BOX (buttonbox), 8); - gtk_box_pack_start (GTK_BOX (editor), buttonbox, FALSE, TRUE, 0); + msg = help_markup ? help_markup : + _("<big><b>Tips:</b></big>\n" + " * Right-click over the treeview to add items.\n" + " * Press Delete to remove the selected item.\n" + " * Drag & Drop to reorder.\n" + " * Type column is editable."); - button = gtk_button_new_from_icon_name ("help-browser", GTK_ICON_SIZE_BUTTON); - gtk_widget_show (button); - g_signal_connect (button, "clicked", + gtk_label_set_markup (GTK_LABEL (editor->priv->tip_label), msg); + g_signal_connect (editor->priv->help_button, "clicked", G_CALLBACK (glade_base_editor_help), - help_markup ? help_markup : - _("<big><b>Tips:</b></big>\n" - " * Right-click over the treeview to add items.\n" - " * Press Delete to remove the selected item.\n" - " * Drag & Drop to reorder.\n" - " * Type column is editable.")); - gtk_container_add (GTK_CONTAINER (buttonbox), button); - gtk_button_box_set_child_secondary (GTK_BUTTON_BOX (buttonbox), button, TRUE); - - if (glade_app_get_accel_group ()) - { - gtk_window_add_accel_group (GTK_WINDOW (window), - glade_app_get_accel_group ()); - g_signal_connect (G_OBJECT (window), "key-press-event", - G_CALLBACK (glade_utils_hijack_key_press), NULL); - } + msg); - gtk_widget_show_all (GTK_WIDGET (editor)); - - gtk_container_set_border_width (GTK_CONTAINER (editor), 6); gtk_container_add (GTK_CONTAINER (window), GTK_WIDGET (editor)); + gtk_widget_show_all (GTK_WIDGET (editor)); gtk_window_set_default_size (GTK_WINDOW (window), 640, 480); diff --git a/gladeui/glade-base-editor.ui b/gladeui/glade-base-editor.ui new file mode 100644 index 00000000..bcae0a42 --- /dev/null +++ b/gladeui/glade-base-editor.ui @@ -0,0 +1,259 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Generated with glade 3.21.0 --> +<interface> + <requires lib="gtk+" version="3.20"/> + <requires lib="gladeui" version="0.0"/> + <template class="GladeBaseEditor" parent="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="events"/> + <property name="orientation">vertical</property> + <property name="spacing">8</property> + <signal name="realize" handler="glade_base_editor_realize_callback" swapped="no"/> + <child> + <object class="GtkPaned" id="paned"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events"/> + <property name="orientation">vertical</property> + <property name="wide_handle">True</property> + <child> + <object class="GtkPaned"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="wide_handle">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="events"/> + <property name="orientation">vertical</property> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events"/> + <property name="hscrollbar_policy">never</property> + <property name="vscrollbar_policy">always</property> + <child> + <object class="GtkTreeView" id="treeview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events">GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_TOUCH_MASK</property> + <property name="reorderable">True</property> + <property name="rules_hint">True</property> + <property name="search_column">2</property> + <signal name="button-press-event" handler="glade_base_editor_popup_handler" swapped="no"/> + <signal name="cursor-changed" handler="glade_base_editor_treeview_cursor_changed" swapped="no"/> + <signal name="key-press-event" handler="glade_base_editor_treeview_key_press_event" swapped="no"/> + <child internal-child="selection"> + <object class="GtkTreeSelection"/> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="border_width">4</property> + <child> + <object class="GtkButtonBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="layout_style">expand</property> + <child> + <object class="GtkButton" id="help_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">help-browser</property> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButtonBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="layout_style">expand</property> + <child> + <object class="GtkButton" id="add_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="events"/> + <signal name="clicked" handler="glade_base_editor_add_activate" swapped="no"/> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">list-add</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="delete_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="events"/> + <signal name="clicked" handler="glade_base_editor_delete_activate" swapped="no"/> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="icon_name">list-remove</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="resize">True</property> + <property name="shrink">False</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="tip_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">4</property> + <property name="margin_right">4</property> + <property name="use_markup">True</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="events"/> + <property name="hscrollbar_policy">never</property> + <child> + <object class="GtkViewport"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="events"/> + <child> + <object class="GtkGrid" id="table"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="events"/> + <property name="margin_left">4</property> + <property name="margin_right">4</property> + <property name="orientation">vertical</property> + <property name="row_spacing">4</property> + <property name="column_spacing">4</property> + <child> + <object class="GtkLabel" id="message_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> + </packing> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="resize">True</property> + <property name="shrink">False</property> + </packing> + </child> + </object> + <packing> + <property name="resize">True</property> + <property name="shrink">False</property> + </packing> + </child> + <child> + <object class="GladeSignalEditor" id="signal_editor"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="events"/> + </object> + <packing> + <property name="resize">True</property> + <property name="shrink">False</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </template> +</interface> diff --git a/gladeui/gladeui-resources.gresource.xml b/gladeui/gladeui-resources.gresource.xml index db85eb24..9ee60ee5 100644 --- a/gladeui/gladeui-resources.gresource.xml +++ b/gladeui/gladeui-resources.gresource.xml @@ -8,5 +8,6 @@ <file compressed="true" preprocess="xml-stripblanks">glade-property-label.ui</file> <file compressed="true" preprocess="xml-stripblanks">glade-adaptor-chooser-widget.ui</file> <file compressed="true" preprocess="xml-stripblanks">glade-adaptor-chooser.ui</file> + <file compressed="true" preprocess="xml-stripblanks">glade-base-editor.ui</file> </gresource> </gresources> |