1 /* gbp-glade-properties.c
2 *
3 * Copyright 2018-2019 Christian Hergert <chergert@redhat.com>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * SPDX-License-Identifier: GPL-3.0-or-later
19 */
20
21 #define G_LOG_DOMAIN "gbp-glade-properties"
22
23 #include "config.h"
24
25 #include <glib/gi18n.h>
26
27 #include "gbp-glade-properties.h"
28
29 struct _GbpGladeProperties
30 {
31 DzlDockWidget parent_instance;
32 GtkStackSwitcher *stack_switcher;
33 GtkStack *stack;
34 DzlDockWidget *a11y_dock;
35 DzlDockWidget *common_dock;
36 DzlDockWidget *general_dock;
37 DzlDockWidget *packing_dock;
38 };
39
G_DEFINE_FINAL_TYPE(GbpGladeProperties,gbp_glade_properties,DZL_TYPE_DOCK_WIDGET)40 G_DEFINE_FINAL_TYPE (GbpGladeProperties, gbp_glade_properties, DZL_TYPE_DOCK_WIDGET)
41
42 static void
43 adjust_radio_hexpand (GtkWidget *widget,
44 gpointer user_data)
45 {
46 gtk_widget_set_hexpand (widget, TRUE);
47 }
48
49 static void
gbp_glade_properties_class_init(GbpGladePropertiesClass * klass)50 gbp_glade_properties_class_init (GbpGladePropertiesClass *klass)
51 {
52 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
53
54 gtk_widget_class_set_template_from_resource (widget_class, "/plugins/glade/gbp-glade-properties.ui");
55 gtk_widget_class_set_css_name (widget_class, "gbpgladeproperties");
56 gtk_widget_class_bind_template_child (widget_class, GbpGladeProperties, stack);
57 gtk_widget_class_bind_template_child (widget_class, GbpGladeProperties, stack_switcher);
58 gtk_widget_class_bind_template_child (widget_class, GbpGladeProperties, a11y_dock);
59 gtk_widget_class_bind_template_child (widget_class, GbpGladeProperties, common_dock);
60 gtk_widget_class_bind_template_child (widget_class, GbpGladeProperties, general_dock);
61 gtk_widget_class_bind_template_child (widget_class, GbpGladeProperties, packing_dock);
62 }
63
64 static void
gbp_glade_properties_init(GbpGladeProperties * self)65 gbp_glade_properties_init (GbpGladeProperties *self)
66 {
67 gtk_widget_init_template (GTK_WIDGET (self));
68
69 dzl_dock_widget_set_title (DZL_DOCK_WIDGET (self), _("Unnamed Glade Project"));
70 dzl_dock_widget_set_icon_name (DZL_DOCK_WIDGET (self), "org.gnome.Glade-symbolic");
71
72 gtk_container_foreach (GTK_CONTAINER (self->stack_switcher), adjust_radio_hexpand, NULL);
73 }
74
75 void
gbp_glade_properties_set_widget(GbpGladeProperties * self,GladeWidget * widget)76 gbp_glade_properties_set_widget (GbpGladeProperties *self,
77 GladeWidget *widget)
78 {
79 GladeWidgetAdaptor *adapter;
80 GladeEditable *editable;
81 GladeWidget *parent;
82
83 g_return_if_fail (GBP_IS_GLADE_PROPERTIES (self));
84 g_return_if_fail (!widget || GLADE_IS_WIDGET (widget));
85
86 gtk_container_foreach (GTK_CONTAINER (self->a11y_dock), (GtkCallback)gtk_widget_destroy, NULL);
87 gtk_container_foreach (GTK_CONTAINER (self->general_dock), (GtkCallback)gtk_widget_destroy, NULL);
88 gtk_container_foreach (GTK_CONTAINER (self->common_dock), (GtkCallback)gtk_widget_destroy, NULL);
89 gtk_container_foreach (GTK_CONTAINER (self->packing_dock), (GtkCallback)gtk_widget_destroy, NULL);
90
91 if (widget == NULL)
92 return;
93
94 adapter = glade_widget_get_adaptor (widget);
95
96 /* General page */
97 editable = glade_widget_adaptor_create_editable (adapter, GLADE_PAGE_GENERAL);
98 gtk_container_add (GTK_CONTAINER (self->general_dock), GTK_WIDGET (editable));
99 glade_editable_load (editable, widget);
100 gtk_widget_show (GTK_WIDGET (editable));
101
102 /* Packing page */
103 if ((parent = glade_widget_get_parent (widget)))
104 {
105 GladeWidgetAdaptor *parent_adapter;
106
107 parent_adapter = glade_widget_get_adaptor (parent);
108 editable = glade_widget_adaptor_create_editable (parent_adapter, GLADE_PAGE_PACKING);
109 gtk_container_add (GTK_CONTAINER (self->packing_dock), GTK_WIDGET (editable));
110 glade_editable_load (editable, widget);
111 gtk_widget_show (GTK_WIDGET (editable));
112 }
113
114 /* Common page */
115 editable = glade_widget_adaptor_create_editable (adapter, GLADE_PAGE_COMMON);
116 gtk_container_add (GTK_CONTAINER (self->common_dock), GTK_WIDGET (editable));
117 glade_editable_load (editable, widget);
118 gtk_widget_show (GTK_WIDGET (editable));
119
120 /* A11y page */
121 editable = glade_widget_adaptor_create_editable (adapter, GLADE_PAGE_ATK);
122 gtk_container_add (GTK_CONTAINER (self->a11y_dock), GTK_WIDGET (editable));
123 glade_editable_load (editable, widget);
124 gtk_widget_show (GTK_WIDGET (editable));
125 }
126