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 printf("filename = %s\n", fname);
25 int res = gtk_builder_add_from_file(GTK_BUILDER(self), fname, NULL);
27 printf("load res = %d\n", res);
31 void builder_load(Builder *self)
33 int res = builder_load_glade_xml(self, "");
37 res = builder_load_glade_xml(self, EB123_DATADIR);
42 g_printf("failed to load glade ui\n");
47 void builder_grab_focus(Builder *self, gchar *name)
49 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
52 gtk_widget_grab_focus(w);
56 gint builder_get_int(Builder *self, const gchar *name)
59 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
60 if(GTK_IS_SPIN_BUTTON(w))
62 ret = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w));
64 if(GTK_IS_COMBO_BOX(w))
66 ret = gtk_combo_box_get_active(GTK_COMBO_BOX(w));
69 if(GTK_IS_CHECK_BUTTON(w))
71 ret = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
76 void builder_set_int(Builder *self, const gchar *name, gint value)
78 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
79 if(GTK_IS_SPIN_BUTTON(w))
81 gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), value);
83 if(GTK_IS_COMBO_BOX(w))
85 gtk_combo_box_set_active(GTK_COMBO_BOX(w), value);
87 if(GTK_IS_CHECK_BUTTON(w))
89 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), value);
94 sprintf(buf, "%d", value);
95 return gtk_entry_set_text(GTK_ENTRY(w), (value >= 0) ? buf : "");
99 const gchar* builder_get_str(Builder *self, const gchar *name)
101 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
104 return gtk_entry_get_text(GTK_ENTRY(w));
106 if(GTK_IS_COMBO_BOX(w))
108 GtkComboBox *combo = GTK_COMBO_BOX(w);
109 if(gtk_combo_box_get_has_entry(combo))
111 return gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo))));
113 if(GTK_IS_COMBO_BOX_TEXT(w))
115 return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(w));
117 GtkTreeModel *m = gtk_combo_box_get_model(GTK_COMBO_BOX(w));
118 gint n = gtk_combo_box_get_active(GTK_COMBO_BOX(w));
119 if(GTK_IS_LIST_STORE(m))
122 if(gtk_tree_model_iter_nth_child(m, &iter, NULL, n))
125 gtk_tree_model_get(m, &iter, 0, &str, -1);
130 if(GTK_IS_COLOR_BUTTON(w))
133 gtk_color_button_get_color(GTK_COLOR_BUTTON(w), &color);
134 return gtk_color_selection_palette_to_string(&color, 1);
139 void builder_set_str(Builder *self, const gchar *name, const gchar *value)
141 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
144 gtk_entry_set_text(GTK_ENTRY(w), value);
146 if(GTK_IS_COLOR_BUTTON(w))
149 gdk_color_parse(value, &color);
150 gtk_color_button_set_color(GTK_COLOR_BUTTON(w), &color);
154 void builder_install_text_cellrenderer(Builder *self, gchar *box)
156 GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), box));
157 if((GTK_IS_COMBO_BOX(w) || GTK_IS_TREE_VIEW(w)) && !GTK_IS_COMBO_BOX_TEXT(w))
159 GtkCellRenderer *cell = gtk_cell_renderer_text_new();
160 gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(w), cell, TRUE);
161 gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(w), cell, "text", 0, NULL);