OSDN Git Service

clear btn, about btn, dicts info ...
[eb123/eb123.git] / src / builder.c
1
2 #include "defs.h"
3
4 #include "builder.h"
5
6 G_DEFINE_TYPE(Builder, builder, GTK_TYPE_BUILDER);
7
8 Builder *_builder = NULL;
9
10 static void builder_class_init(BuilderClass *klass)
11 {
12 }
13
14 static void builder_init(Builder *self)
15 {
16     //self->b = gtk_builder_new();
17     builder_load(self);
18     _builder = self;
19 }
20
21 static int builder_load_glade_xml(Builder *self, gchar *dir)
22 {
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);
26     g_free(fname);
27     printf("load res = %d\n", res);
28     return res;
29 }
30
31 void builder_load(Builder *self)
32 {
33     int res = builder_load_glade_xml(self, "");
34     if(!res)
35     {
36 #ifdef KP123_DATADIR
37         res = builder_load_glade_xml(self, EB123_DATADIR);
38 #endif
39     }
40     if(!res)
41     {
42         g_printf("failed to load glade ui\n");
43         gtk_main_quit();
44     }
45 }
46
47 void builder_grab_focus(Builder *self, gchar *name)
48 {
49     GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
50     if(w)
51     {
52         gtk_widget_grab_focus(w);
53     }
54 }
55
56 gint builder_get_int(Builder *self, const gchar *name)
57 {
58     gint ret = 0;
59     GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
60     if(GTK_IS_SPIN_BUTTON(w))
61     {
62         ret = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w));
63     }
64     if(GTK_IS_COMBO_BOX(w))
65     {
66         ret = gtk_combo_box_get_active(GTK_COMBO_BOX(w));
67         if(ret < 0) ret = 0;
68     }
69     if(GTK_IS_CHECK_BUTTON(w))
70     {
71         ret = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
72     }
73     return ret;
74 }
75
76 void builder_set_int(Builder *self, const gchar *name, gint value)
77 {
78     GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
79     if(GTK_IS_SPIN_BUTTON(w))
80     {
81         gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), value);
82     }
83     if(GTK_IS_COMBO_BOX(w))
84     {
85         gtk_combo_box_set_active(GTK_COMBO_BOX(w), value);
86     }
87     if(GTK_IS_CHECK_BUTTON(w))
88     {
89         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), value);
90     }
91     if(GTK_IS_ENTRY(w))
92     {
93         gchar *buf[16];
94         sprintf(buf, "%d", value);
95         return gtk_entry_set_text(GTK_ENTRY(w), (value >= 0) ? buf : "");
96     }
97 }
98
99 const gchar* builder_get_str(Builder *self, const gchar *name)
100 {
101     GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
102     if(GTK_IS_ENTRY(w))
103     {
104         return gtk_entry_get_text(GTK_ENTRY(w));
105     }
106     if(GTK_IS_COMBO_BOX(w))
107     {
108         GtkComboBox *combo = GTK_COMBO_BOX(w);
109         if(gtk_combo_box_get_has_entry(combo))
110         {
111             return gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(combo))));
112         }
113         if(GTK_IS_COMBO_BOX_TEXT(w))
114         {
115             return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(w));
116         }
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))
120         {
121             GtkTreeIter iter;
122             if(gtk_tree_model_iter_nth_child(m, &iter, NULL, n))
123             {
124                 gchar *str;
125                 gtk_tree_model_get(m, &iter, 0, &str, -1);
126                 return str;
127             }
128         }
129     }
130     if(GTK_IS_COLOR_BUTTON(w))
131     {
132         GdkColor color;
133         gtk_color_button_get_color(GTK_COLOR_BUTTON(w), &color);
134         return gtk_color_selection_palette_to_string(&color, 1);
135     }
136     return NULL;
137 }
138
139 void builder_set_str(Builder *self, const gchar *name, const gchar *value)
140 {
141     GtkWidget *w = GTK_WIDGET(gtk_builder_get_object(GTK_BUILDER(self), name));
142     if(GTK_IS_ENTRY(w))
143     {
144         gtk_entry_set_text(GTK_ENTRY(w), value);
145     }
146     if(GTK_IS_COLOR_BUTTON(w))
147     {
148         GdkColor color;
149         gdk_color_parse(value, &color);
150         gtk_color_button_set_color(GTK_COLOR_BUTTON(w), &color);
151     }
152 }
153
154 void builder_install_text_cellrenderer(Builder *self, gchar *box)
155 {
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))
158     {
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);
162     }
163 }
164