Mercurial > pidgin.yaz
annotate finch/libgnt/gntutils.c @ 17721:3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Added: If a bindinglist already exists, it isn't brought up again.
Deprecated gnt_widget_bindings_view out of gntutils and moved it to gntbindable
author | Eric Polino <aluink@pidgin.im> |
---|---|
date | Fri, 08 Jun 2007 04:14:56 +0000 |
parents | 8410511f4dbb |
children | ac904659104f |
rev | line source |
---|---|
17718
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
1 /** |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
2 * GNT - The GLib Ncurses Toolkit |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
3 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
4 * GNT is the legal property of its developers, whose names are too numerous |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
5 * to list here. Please refer to the COPYRIGHT file distributed with this |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
6 * source distribution. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
7 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
8 * This library is free software; you can redistribute it and/or modify |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
11 * (at your option) any later version. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
12 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
13 * This program is distributed in the hope that it will be useful, |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
16 * GNU General Public License for more details. |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
17 * |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
18 * You should have received a copy of the GNU General Public License |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
19 * along with this program; if not, write to the Free Software |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
21 */ |
8410511f4dbb
applied changes from 016401bd409e6229fae0ab1e80d9fef9365511b3
Eric Polino <aluink@pidgin.im>
parents:
16125
diff
changeset
|
22 |
16125
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
23 #include "gntbutton.h" |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
24 #include "gntcheckbox.h" |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
25 #include "gntcombobox.h" |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
26 #include "gntentry.h" |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
27 #include "gntlabel.h" |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
28 #include "gntline.h" |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
29 #include "gnttextview.h" |
15979
2c81ebc7bf0b
Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
30 #include "gnttree.h" |
16125
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
31 #include "gntutils.h" |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
32 #include "gntwindow.h" |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
33 #include "gntbindable.h" |
15818 | 34 |
16125
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
35 #include "config.h" |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
36 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
37 #include <stdarg.h> |
15818 | 38 #include <stdlib.h> |
39 #include <string.h> | |
40 | |
16125
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
41 #ifndef NO_LIBXML |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
42 #include <libxml/parser.h> |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
43 #include <libxml/tree.h> |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
44 #endif |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
45 |
15818 | 46 #include "config.h" |
47 | |
48 void gnt_util_get_text_bound(const char *text, int *width, int *height) | |
49 { | |
50 const char *s = text, *last; | |
51 int count = 1, max = 0; | |
52 int len; | |
53 | |
54 /* XXX: ew ... everyone look away */ | |
55 last = s; | |
56 if (s) | |
57 { | |
58 while (*s) | |
59 { | |
60 if (*s == '\n' || *s == '\r') | |
61 { | |
62 count++; | |
63 len = gnt_util_onscreen_width(last, s); | |
64 if (max < len) | |
65 max = len; | |
66 last = s + 1; | |
67 } | |
68 s = g_utf8_next_char(s); | |
69 } | |
70 | |
71 len = gnt_util_onscreen_width(last, s); | |
72 if (max < len) | |
73 max = len; | |
74 } | |
75 | |
76 if (height) | |
77 *height = count; | |
78 if (width) | |
79 *width = max + (count > 1); | |
80 } | |
81 | |
82 int gnt_util_onscreen_width(const char *start, const char *end) | |
83 { | |
84 int width = 0; | |
85 | |
86 if (end == NULL) | |
87 end = start + strlen(start); | |
88 | |
89 while (start < end) { | |
90 width += g_unichar_iswide(g_utf8_get_char(start)) ? 2 : 1; | |
91 start = g_utf8_next_char(start); | |
92 } | |
93 return width; | |
94 } | |
95 | |
96 const char *gnt_util_onscreen_width_to_pointer(const char *string, int len, int *w) | |
97 { | |
98 int size; | |
99 int width = 0; | |
100 const char *str = string; | |
101 | |
102 if (len <= 0) { | |
103 len = gnt_util_onscreen_width(string, NULL); | |
104 } | |
105 | |
106 while (width < len && *str) { | |
107 size = g_unichar_iswide(g_utf8_get_char(str)) ? 2 : 1; | |
108 if (width + size > len) | |
109 break; | |
110 str = g_utf8_next_char(str); | |
111 width += size; | |
112 } | |
113 if (w) | |
114 *w = width; | |
115 return str; | |
116 } | |
117 | |
118 char *gnt_util_onscreen_fit_string(const char *string, int maxw) | |
119 { | |
120 const char *start, *end; | |
121 GString *str; | |
122 | |
123 if (maxw <= 0) | |
124 maxw = getmaxx(stdscr) - 4; | |
125 | |
126 start = string; | |
127 str = g_string_new(NULL); | |
128 | |
129 while (*start) { | |
130 if ((end = strchr(start, '\n')) != NULL || | |
131 (end = strchr(start, '\r')) != NULL) { | |
132 if (gnt_util_onscreen_width(start, end) > maxw) | |
133 end = NULL; | |
134 } | |
135 if (end == NULL) | |
136 end = gnt_util_onscreen_width_to_pointer(start, maxw, NULL); | |
137 str = g_string_append_len(str, start, end - start); | |
138 if (*end) { | |
139 str = g_string_append_c(str, '\n'); | |
140 if (*end == '\n' || *end == '\r') | |
141 end++; | |
142 } | |
143 start = end; | |
144 } | |
145 return g_string_free(str, FALSE); | |
146 } | |
147 | |
148 struct duplicate_fns | |
149 { | |
150 GDupFunc key_dup; | |
151 GDupFunc value_dup; | |
152 GHashTable *table; | |
153 }; | |
154 | |
155 static void | |
156 duplicate_values(gpointer key, gpointer value, gpointer data) | |
157 { | |
158 struct duplicate_fns *fns = data; | |
159 g_hash_table_insert(fns->table, fns->key_dup ? fns->key_dup(key) : key, | |
160 fns->value_dup ? fns->value_dup(value) : value); | |
161 } | |
162 | |
163 GHashTable *g_hash_table_duplicate(GHashTable *src, GHashFunc hash, | |
164 GEqualFunc equal, GDestroyNotify key_d, GDestroyNotify value_d, | |
165 GDupFunc key_dup, GDupFunc value_dup) | |
166 { | |
167 GHashTable *dest = g_hash_table_new_full(hash, equal, key_d, value_d); | |
168 struct duplicate_fns fns = {key_dup, value_dup, dest}; | |
169 g_hash_table_foreach(src, duplicate_values, &fns); | |
170 return dest; | |
171 } | |
172 | |
173 gboolean gnt_boolean_handled_accumulator(GSignalInvocationHint *ihint, | |
174 GValue *return_accu, | |
175 const GValue *handler_return, | |
176 gpointer dummy) | |
177 { | |
178 gboolean continue_emission; | |
179 gboolean signal_handled; | |
180 | |
181 signal_handled = g_value_get_boolean (handler_return); | |
182 g_value_set_boolean (return_accu, signal_handled); | |
183 continue_emission = !signal_handled; | |
184 | |
185 return continue_emission; | |
186 } | |
187 | |
15979
2c81ebc7bf0b
Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
188 |
17721
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
189 GntWidget * gnt_widget_bindings_view(GntWidget *widget){ |
3ee6ea8a66f8
Moved rebinding functionality into GntBindable.
Eric Polino <aluink@pidgin.im>
parents:
17718
diff
changeset
|
190 return GNT_WIDGET(gnt_bindable_bindings_view(GNT_BINDABLE(widget))); |
15979
2c81ebc7bf0b
Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
191 } |
2c81ebc7bf0b
Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
192 |
2c81ebc7bf0b
Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
193 |
2c81ebc7bf0b
Add a way to get a list of bindings for a widget. This can be used by, eg, a window-manager to show helpful messages to the user.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15818
diff
changeset
|
194 |
16125
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
195 #ifndef NO_LIBXML |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
196 static GntWidget * |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
197 gnt_widget_from_xmlnode(xmlNode *node, GntWidget **data[]) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
198 { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
199 GntWidget *widget = NULL; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
200 char *name; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
201 char *id, *prop, *content; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
202 int val; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
203 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
204 if (node == NULL || node->name == NULL || node->type != XML_ELEMENT_NODE) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
205 return NULL; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
206 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
207 name = (char*)node->name; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
208 content = (char*)xmlNodeGetContent(node); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
209 if (strcmp(name + 1, "window") == 0 || strcmp(name + 1, "box") == 0) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
210 xmlNode *ch; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
211 char *title; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
212 gboolean vert = (*name == 'v'); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
213 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
214 if (name[1] == 'w') |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
215 widget = gnt_window_box_new(FALSE, vert); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
216 else |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
217 widget = gnt_box_new(FALSE, vert); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
218 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
219 title = (char*)xmlGetProp(node, (xmlChar*)"title"); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
220 if (title) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
221 gnt_box_set_title(GNT_BOX(widget), title); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
222 xmlFree(title); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
223 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
224 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
225 prop = (char*)xmlGetProp(node, (xmlChar*)"fill"); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
226 if (prop) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
227 if (sscanf(prop, "%d", &val) == 1) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
228 gnt_box_set_fill(GNT_BOX(widget), !!val); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
229 xmlFree(prop); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
230 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
231 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
232 prop = (char*)xmlGetProp(node, (xmlChar*)"align"); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
233 if (prop) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
234 if (sscanf(prop, "%d", &val) == 1) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
235 gnt_box_set_alignment(GNT_BOX(widget), val); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
236 xmlFree(prop); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
237 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
238 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
239 prop = (char*)xmlGetProp(node, (xmlChar*)"pad"); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
240 if (prop) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
241 if (sscanf(prop, "%d", &val) == 1) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
242 gnt_box_set_pad(GNT_BOX(widget), val); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
243 xmlFree(prop); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
244 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
245 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
246 for (ch = node->children; ch; ch=ch->next) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
247 gnt_box_add_widget(GNT_BOX(widget), gnt_widget_from_xmlnode(ch, data)); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
248 } else if (strcmp(name, "button") == 0) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
249 widget = gnt_button_new(content); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
250 } else if (strcmp(name, "label") == 0) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
251 widget = gnt_label_new(content); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
252 } else if (strcmp(name, "entry") == 0) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
253 widget = gnt_entry_new(content); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
254 } else if (strcmp(name, "combobox") == 0) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
255 widget = gnt_combo_box_new(); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
256 } else if (strcmp(name, "checkbox") == 0) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
257 widget = gnt_check_box_new(content); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
258 } else if (strcmp(name, "tree") == 0) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
259 widget = gnt_tree_new(); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
260 } else if (strcmp(name, "textview") == 0) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
261 widget = gnt_text_view_new(); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
262 } else if (strcmp(name + 1, "line") == 0) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
263 widget = gnt_line_new(*name == 'v'); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
264 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
265 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
266 xmlFree(content); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
267 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
268 if (widget == NULL) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
269 g_printerr("Invalid widget name %s\n", name); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
270 return NULL; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
271 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
272 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
273 id = (char*)xmlGetProp(node, (xmlChar*)"id"); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
274 if (id) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
275 int i; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
276 sscanf(id, "%d", &i); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
277 *data[i] = widget; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
278 xmlFree(id); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
279 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
280 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
281 prop = (char*)xmlGetProp(node, (xmlChar*)"border"); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
282 if (prop) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
283 int val; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
284 if (sscanf(prop, "%d", &val) == 1) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
285 if (val) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
286 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_NO_BORDER); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
287 else |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
288 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
289 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
290 xmlFree(prop); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
291 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
292 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
293 prop = (char*)xmlGetProp(node, (xmlChar*)"shadow"); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
294 if (prop) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
295 int val; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
296 if (sscanf(prop, "%d", &val) == 1) { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
297 if (val) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
298 GNT_WIDGET_UNSET_FLAGS(widget, GNT_WIDGET_NO_BORDER); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
299 else |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
300 GNT_WIDGET_SET_FLAGS(widget, GNT_WIDGET_NO_BORDER); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
301 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
302 xmlFree(prop); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
303 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
304 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
305 return widget; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
306 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
307 #endif |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
308 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
309 void gnt_util_parse_widgets(const char *string, int num, ...) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
310 { |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
311 #ifndef NO_LIBXML |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
312 xmlParserCtxtPtr ctxt; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
313 xmlDocPtr doc; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
314 xmlNodePtr node; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
315 va_list list; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
316 GntWidget ***data; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
317 int id; |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
318 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
319 ctxt = xmlNewParserCtxt(); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
320 doc = xmlCtxtReadDoc(ctxt, (xmlChar*)string, NULL, NULL, XML_PARSE_NOBLANKS); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
321 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
322 data = g_new0(GntWidget **, num); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
323 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
324 va_start(list, num); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
325 for (id = 0; id < num; id++) |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
326 data[id] = va_arg(list, gpointer); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
327 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
328 node = xmlDocGetRootElement(doc); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
329 gnt_widget_from_xmlnode(node, data); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
330 |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
331 xmlFreeDoc(doc); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
332 xmlCleanupParser(); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
333 va_end(list); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
334 g_free(data); |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
335 #endif |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
336 } |
5f204f55af09
Add a utility function to create widgets from an XML description.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15979
diff
changeset
|
337 |