1 /* cssed (c) Iago Rubio, 2003-2005 - A tiny CSS editor.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Library General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16 */
17
18 #ifdef HAVE_CONFIG_H
19 # include <config.h>
20 #endif
21
22 #include <string.h>
23 #include <stdio.h>
24
25 #include <gdk/gdkkeysyms.h>
26 #include <gtk/gtk.h>
27
28 #include "cssedwindow.h"
29 #include "document.h"
30 #include "cssdialogs-interface.h"
31 #include "cssdialogs-functions.h"
32 #include "support.h"
33 #include "cssdialogs-class.h"
34
35 void
key_destroy_func(gpointer data)36 key_destroy_func(gpointer data)
37 {
38 g_free(data);
39 }
40
41 void
value_destroy_func(gpointer data)42 value_destroy_func (gpointer data)
43 {
44 g_free(data);
45 }
46
47 gboolean
key_equal_func(gconstpointer a,gconstpointer b)48 key_equal_func (gconstpointer a, gconstpointer b)
49 {
50 if( strcmp( (gchar*) a, (gchar*) b) == 0 )
51 return TRUE;
52 else
53 return FALSE;
54 }
55
56 GHashTable*
create_and_fill_cssdialogs_hash_table()57 create_and_fill_cssdialogs_hash_table()
58 {
59 GHashTable* hashtable;
60 CssDialogClass* klass;
61 hashtable = g_hash_table_new_full (g_str_hash,
62 key_equal_func,
63 key_destroy_func,
64 value_destroy_func);
65
66 klass = css_dialog_class_new();
67 klass->keyword = g_strdup("(color)");
68 klass->create_function = &create_color_selector_dialog;
69 klass->get_string_function = &cssdialog_color_selector_get_string;
70 g_hash_table_insert( hashtable, klass->keyword, klass );
71
72 klass = css_dialog_class_new();
73 klass->keyword = g_strdup("(angle)");
74 klass->create_function = &create_angle_property_dialog;
75 klass->get_string_function = &cssdialog_angle_property_get_string;
76 g_hash_table_insert( hashtable, klass->keyword, klass );
77
78 klass = css_dialog_class_new();
79 klass->keyword = g_strdup("(background)");
80 klass->create_function = &create_background_property_dialog;
81 klass->get_string_function = &cssdialog_background_property_get_string;
82 g_hash_table_insert( hashtable, klass->keyword, klass );
83
84 klass = css_dialog_class_new();
85 klass->keyword = g_strdup("(border)");
86 klass->create_function = &create_border_properties_dialog;
87 klass->get_string_function = &cssdialog_border_properties_get_string;
88 g_hash_table_insert( hashtable, klass->keyword, klass );
89
90 klass = css_dialog_class_new();
91 klass->keyword = g_strdup("(border-width)");
92 klass->create_function = &create_border_width_properties_dialog;
93 klass->get_string_function = &cssdialog_border_width_properties_get_string;
94 g_hash_table_insert( hashtable, klass->keyword, klass );
95
96 klass = css_dialog_class_new();
97 klass->keyword = g_strdup("(border-width-single)");
98 klass->create_function = &create_border_width_single_properties_dialog;
99 klass->get_string_function = &cssdialog_border_width_single_get_string;
100 g_hash_table_insert( hashtable, klass->keyword, klass );
101
102 klass = css_dialog_class_new();
103 klass->keyword = g_strdup("(increment-reset)");
104 klass->create_function = &create_counter_increment_reset_dialog;
105 klass->get_string_function = &cssdialog_counter_increment_reset_get_string;
106 g_hash_table_insert( hashtable, klass->keyword, klass );
107
108 klass = css_dialog_class_new();
109 klass->keyword = g_strdup("(string)");
110 klass->create_function = &create_string_properties_dialog;
111 klass->get_string_function = &cssdialog_string_properties_get_string;
112 g_hash_table_insert( hashtable, klass->keyword, klass );
113
114 klass = css_dialog_class_new();
115 klass->keyword = g_strdup("(uri)");
116 klass->create_function = &create_uri_value_dialog;
117 klass->get_string_function = &cssdialog_uri_value_get_string;
118 g_hash_table_insert( hashtable, klass->keyword, klass );
119
120 klass = css_dialog_class_new();
121 klass->keyword = g_strdup("(attr)");
122 klass->create_function = &create_attr_value_dialog;
123 klass->get_string_function = &cssdialog_attr_value_get_string;
124 g_hash_table_insert( hashtable, klass->keyword, klass );
125
126 klass = css_dialog_class_new();
127 klass->keyword = g_strdup("(counter)");
128 klass->create_function = &create_counter_property_dialog;
129 klass->get_string_function = &cssdialog_counter_property_get_string;
130 g_hash_table_insert( hashtable, klass->keyword, klass );
131
132 klass = css_dialog_class_new();
133 klass->keyword = g_strdup("(font)");
134 klass->create_function = &create_font_property_dialog;
135 klass->get_string_function = &cssdialog_font_property_get_string;
136 g_hash_table_insert( hashtable, klass->keyword, klass );
137
138 klass = css_dialog_class_new();
139 klass->keyword = g_strdup("(font-family)");
140 klass->create_function = &create_font_family_dialog;
141 klass->get_string_function = &cssdialog_font_family_get_string;
142 g_hash_table_insert( hashtable, klass->keyword, klass );
143
144 klass = css_dialog_class_new();
145 klass->keyword = g_strdup("(font-size)");
146 klass->create_function = &create_font_size_dialog;
147 klass->get_string_function = &cssdialog_font_size_get_string;
148 g_hash_table_insert( hashtable, klass->keyword, klass );
149
150 klass = css_dialog_class_new();
151 klass->keyword = g_strdup("(frequency)");
152 klass->create_function = &create_frecuency_property_dialog;
153 klass->get_string_function = &cssdialog_frecuenzy_property_get_string;
154 g_hash_table_insert( hashtable, klass->keyword, klass );
155
156 klass = css_dialog_class_new();
157 klass->keyword = g_strdup("(identifier)");
158 klass->create_function = &create_identifier_value_dialog;
159 klass->get_string_function = &cssdialog_identifier_value_get_string;
160 g_hash_table_insert( hashtable, klass->keyword, klass );
161
162 klass = css_dialog_class_new();
163 klass->keyword = g_strdup("(integer)");
164 klass->create_function = &create_integer_value_dialog;
165 klass->get_string_function = &cssdialog_integer_value_get_string;
166 g_hash_table_insert( hashtable, klass->keyword, klass );
167
168 klass = css_dialog_class_new();
169 klass->keyword = g_strdup("(length)");
170 klass->create_function = &create_length_value_dialog;
171 klass->get_string_function = &cssdialog_length_value_get_string;
172 g_hash_table_insert( hashtable, klass->keyword, klass );
173
174 klass = css_dialog_class_new();
175 klass->keyword = g_strdup("(list-style)");
176 klass->create_function = &create_list_style_dialog;
177 klass->get_string_function = &cssdialog_list_style_get_string;
178 g_hash_table_insert( hashtable, klass->keyword, klass );
179
180 klass = css_dialog_class_new();
181 klass->keyword = g_strdup("(margin)");
182 klass->create_function = &create_margin_property_dialog;
183 klass->get_string_function = &cssdialog_margin_property_get_string;
184 g_hash_table_insert( hashtable, klass->keyword, klass );
185
186 klass = css_dialog_class_new();
187 klass->keyword = g_strdup("(margin-width)");
188 klass->create_function = &create_margin_width_value_dialog;
189 klass->get_string_function = &cssdialog_margin_width_get_string;
190 g_hash_table_insert( hashtable, klass->keyword, klass );
191
192 klass = css_dialog_class_new();
193 klass->keyword = g_strdup("(number)");
194 klass->create_function = &create_number_value_dialog;
195 klass->get_string_function = &cssdialog_number_value_get_string;
196 g_hash_table_insert( hashtable, klass->keyword, klass );
197
198 klass = css_dialog_class_new();
199 klass->keyword = g_strdup("(padding)");
200 klass->create_function = &create_padding_property_dialog;
201 klass->get_string_function = &cssdialog_padding_property_get_string;
202 g_hash_table_insert( hashtable, klass->keyword, klass );
203
204 klass = css_dialog_class_new();
205 klass->keyword = g_strdup("(outline)");
206 klass->create_function = &create_outline_property_dialog;
207 klass->get_string_function = &cssdialog_outline_property_get_string;
208 g_hash_table_insert( hashtable, klass->keyword, klass );
209
210 klass = css_dialog_class_new();
211 klass->keyword = g_strdup("(pause)");
212 klass->create_function = &create_pause_property_dialog;
213 klass->get_string_function = &cssdialog_pause_property_get_string;
214 g_hash_table_insert( hashtable, klass->keyword, klass );
215
216 klass = css_dialog_class_new();
217 klass->keyword = g_strdup("(percentage)");
218 klass->create_function = &create_percentage_value_dialog;
219 klass->get_string_function = &cssdialog_percentage_value_get_string;
220 g_hash_table_insert( hashtable, klass->keyword, klass );
221
222 klass = css_dialog_class_new();
223 klass->keyword = g_strdup("(percentage-length)");
224 klass->create_function = &create_percentage_length_value_dialog;
225 klass->get_string_function = &cssdialog_percentage_length_value_get_string;
226 g_hash_table_insert( hashtable, klass->keyword, klass );
227
228 klass = css_dialog_class_new();
229 klass->keyword = g_strdup("(play-during)");
230 klass->create_function = &create_play_during_property_dialog;
231 klass->get_string_function = &cssdialog_play_during_property_get_string;
232 g_hash_table_insert( hashtable, klass->keyword, klass );
233
234 klass = css_dialog_class_new();
235 klass->keyword = g_strdup("(quotes)");
236 klass->create_function = &create_quotes_property_dialog;
237 klass->get_string_function = &cssdialog_quotes_property_get_string;
238 g_hash_table_insert( hashtable, klass->keyword, klass );
239
240 klass = css_dialog_class_new();
241 klass->keyword = g_strdup("(shape)");
242 klass->create_function = &create_shape_value_dialog;
243 klass->get_string_function = &cssdialog_shape_value_get_string;
244 g_hash_table_insert( hashtable, klass->keyword, klass );
245
246 klass = css_dialog_class_new();
247 klass->keyword = g_strdup("(size-length)");
248 klass->create_function = &create_size_length_value_dialog;
249 klass->get_string_function = &cssdialog_size_length_value_get_string;
250 g_hash_table_insert( hashtable, klass->keyword, klass );
251
252 klass = css_dialog_class_new();
253 klass->keyword = g_strdup("(text-shadow)");
254 klass->create_function = &create_text_shadow_value_dialog;
255 klass->get_string_function = &cssdialog_text_shadow_value_get_string;
256 g_hash_table_insert( hashtable, klass->keyword, klass );
257
258 klass = css_dialog_class_new();
259 klass->keyword = g_strdup("(voice-family)");
260 klass->create_function = &create_voice_family_value_dialog;
261 klass->get_string_function = &cssdialog_voice_family_value_get_string;
262 g_hash_table_insert( hashtable, klass->keyword, klass );
263
264 klass = css_dialog_class_new();
265 klass->keyword = g_strdup("(width-style-color)");
266 klass->create_function = &create_border_width_style_color_value_dialog;
267 klass->get_string_function = &cssdialog_border_width_style_color_value_get_string;
268 g_hash_table_insert( hashtable, klass->keyword, klass );
269
270 klass = css_dialog_class_new();
271 klass->keyword = g_strdup("(border-style)");
272 klass->create_function = &create_border_style_dialog;
273 klass->get_string_function = &cssdialog_border_style_get_string;
274 g_hash_table_insert( hashtable, klass->keyword, klass );
275
276 return hashtable;
277 }
278