6 G_DEFINE_TYPE(Builder, builder, GTK_TYPE_BUILDER);
8 Builder *_builder = NULL;
10 static void builder_class_init(BuilderClass *klass)
14 static void builder_init(Builder *self)
16 //self->b = gtk_builder_new();
21 static int builder_load_glade_xml(Builder *self, gchar *dir)
23 gchar *fname = g_build_filename(dir, "eb123.glade", NULL);
24 int res = gtk_builder_add_from_file(GTK_BUILDER(self), fname, NULL);
29 void builder_load(Builder *self)
31 int res = builder_load_glade_xml(self, "");
35 res = builder_load_glade_xml(self, EB123_DATADIR);
40 g_printf("failed to load glade ui\n");
45 void builder_grab_focus(Builder *self, gchar *name)
47 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
50 gtk_widget_grab_focus(w);
54 void builder_set_visible(Builder *self, gchar *name, gboolean visible)
56 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
59 gtk_widget_set_visible(w, visible);
63 gint builder_get_int(Builder *self, const gchar *name)
66 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
67 if(GTK_IS_SPIN_BUTTON(w))
69 ret = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w));
71 if(GTK_IS_COMBO_BOX(w))
73 ret = gtk_combo_box_get_active(GTK_COMBO_BOX(w));
75 if(GTK_IS_TOGGLE_BUTTON(w))
77 ret = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
82 void builder_set_int(Builder *self, const gchar *name, gint value)
84 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
85 if(GTK_IS_SPIN_BUTTON(w))
87 gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), value);
89 if(GTK_IS_COMBO_BOX(w))
91 gtk_combo_box_set_active(GTK_COMBO_BOX(w), value);
93 if(GTK_IS_TOGGLE_BUTTON(w))
95 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), value);
100 sprintf(buf, "%d", value);
101 return gtk_entry_set_text(GTK_ENTRY(w), (value >= 0) ? buf : "");
105 const gchar* builder_get_str(Builder *self, const gchar *name)
107 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
110 return gtk_entry_get_text(GTK_ENTRY(w));
112 if(GTK_IS_COMBO_BOX(w))
114 GtkComboBox *combo = GTK_COMBO_BOX(w);
115 if(gtk_combo_box_get_has_entry(combo))
117 return gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo))));
119 if(GTK_IS_COMBO_BOX_TEXT(w))
121 return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(w));
123 gint n = gtk_combo_box_get_active(GTK_COMBO_BOX(w));
126 GtkTreeModel *m = gtk_combo_box_get_model(GTK_COMBO_BOX(w));
127 if(GTK_IS_LIST_STORE(m))
130 if(gtk_tree_model_iter_nth_child(m, &iter, NULL, n))
133 gtk_tree_model_get(m, &iter, 0, &str, -1);
139 if(GTK_IS_COLOR_BUTTON(w))
142 gtk_color_button_get_color(GTK_COLOR_BUTTON(w), &color);
143 return gtk_color_selection_palette_to_string(&color, 1);
145 if(GTK_IS_FONT_BUTTON(w))
147 return gtk_font_button_get_font_name(GTK_FONT_BUTTON(w));
151 return gtk_label_get_text(GTK_LABEL(w));
156 void builder_set_str(Builder *self, const gchar *name, const gchar *value)
158 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
161 gtk_entry_set_text(GTK_ENTRY(w), value);
163 if(GTK_IS_COLOR_BUTTON(w))
166 gdk_color_parse(value, &color);
167 gtk_color_button_set_color(GTK_COLOR_BUTTON(w), &color);
171 gtk_label_set_text(GTK_LABEL(w), value);
173 if(GTK_IS_FONT_BUTTON(w))
175 gtk_font_button_set_font_name(GTK_FONT_BUTTON(w), value);
177 if(GTK_IS_COMBO_BOX(w))
179 if(gtk_combo_box_get_has_entry(GTK_COMBO_BOX(w)))
181 GtkEntry *entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(w)));
182 gtk_entry_set_text(entry, value);
187 void builder_install_text_cellrenderer(Builder *self, gchar *box)
189 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), box));
190 if((GTK_IS_COMBO_BOX(w) || GTK_IS_TREE_VIEW(w)) && !GTK_IS_COMBO_BOX_TEXT(w))
192 GtkCellRenderer *cell = gtk_cell_renderer_text_new();
193 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(w), cell, TRUE);
194 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(w), cell, "text", 0, NULL);