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