~ubuntu-branches/ubuntu/natty/bluefish/natty-proposed

« back to all changes in this revision

Viewing changes to src/html2.c

  • Committer: Bazaar Package Importer
  • Author(s): Davide Puricelli (evo)
  • Date: 2005-04-23 17:05:18 UTC
  • mto: (1.1.5 upstream) (5.1.2 sid)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20050423170518-izh2k25xve7ui1jx
Tags: upstream-1.0
ImportĀ upstreamĀ versionĀ 1.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 * along with this program; if not, write to the Free Software
19
19
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20
20
 */
21
 
#include "default_include.h"
 
21
/* #define DEBUG */
22
22
 
 
23
#include <gtk/gtk.h>
23
24
#include <string.h>     /* strlen() */
 
25
#include <stdlib.h>     /* strtol() */
24
26
 
 
27
#include "bluefish.h"
 
28
#include "bf_lib.h" /* string_is_color*/
25
29
#include "gtk_easy.h"
26
30
#include "bf_lib.h"  /* strip_any_whitespace() */
27
 
#include "bluefish.h"
28
31
#include "stringlist.h"
29
32
#include "document.h"
30
 
#include "html.h"
 
33
#include "html2.h"
31
34
#include "cap.h"
32
 
#include "pixmaps.h" /* new_pixmap */
33
 
#include "coloursel.h"  /* color_but_new */
34
 
 
35
 
#ifdef OLD_CSS_DIALOG
36
 
GList *garbage = NULL;
37
 
 
38
 
typedef struct {
39
 
        GtkWidget *table;
40
 
        GtkWidget *dialog;
41
 
        GtkWidget *label;
42
 
        GtkWidget *combo[54];
43
 
        GtkWidget *spin[2];
44
 
        GtkWidget *entry[4];
45
 
        GtkWidget *check[6];
46
 
        GtkWidget *radio[10];
47
 
        GtkWidget *okbutton;
48
 
        GtkWidget *cancelbutton;
49
 
        gint abort;
50
 
        gchar *tmpstring;
51
 
} Thtml2dialog;
52
 
 
53
 
void html2_dialog_cancel(GtkWidget * widget, Thtml2dialog * data);
54
 
void html2_dialog_ok(GtkWidget * widget, Thtml2dialog * data);
55
 
Thtml2dialog *startdialog(gchar * title, gint rows, gint cols);
56
 
void middle_dialog(Thtml2dialog * this_ds, gint leftbuts, gint middlebuts, gint rightbuts, gint topbuts, gint botbuts);
57
 
 
58
 
void html2_dialog_cancel(GtkWidget * widget, Thtml2dialog * data)
59
 
{
60
 
        gtk_signal_handlers_destroy(GTK_OBJECT(data->dialog));
61
 
        gtk_main_quit();
62
 
        DEBUG_MSG("html2_dialog_cancel, gtk_main_quit() called\n");
63
 
}
64
 
 
65
 
void html2_dialog_ok(GtkWidget * widget, Thtml2dialog * data)
66
 
{
67
 
        data->abort = 0;
68
 
        DEBUG_MSG("html2_dialog_ok, abort=%d, calling cancel to stop this gtk_main()\n", data->abort);
69
 
        html2_dialog_cancel(widget, data);
70
 
}
71
 
 
72
 
Thtml2dialog *startdialog(gchar * title, gint rows, gint cols)
73
 
{
74
 
 
75
 
        Thtml2dialog *return_ds;
76
 
        return_ds = g_malloc(sizeof(Thtml2dialog));
77
 
 
78
 
        return_ds->abort = 1;
79
 
        return_ds->dialog = gtk_window_new(GTK_WINDOW_DIALOG);
80
 
        gtk_container_border_width(GTK_CONTAINER(return_ds->dialog), 10);
81
 
        /*gtk_signal_connect (GTK_OBJECT (return_ds->dialog), "delete_event", GTK_SIGNAL_FUNC
82
 
           (html2_dialog_cancel), return_ds); */
83
 
        gtk_signal_connect(GTK_OBJECT(return_ds->dialog), "destroy", GTK_SIGNAL_FUNC(html2_dialog_cancel), return_ds);
84
 
        gtk_window_set_title(GTK_WINDOW(return_ds->dialog), title);
85
 
        gtk_window_position(GTK_WINDOW(return_ds->dialog), GTK_WIN_POS_CENTER);
86
 
 
87
 
        return_ds->table = gtk_table_new(rows, cols, 0);
88
 
        gtk_container_add(GTK_CONTAINER(return_ds->dialog), return_ds->table);
89
 
        return return_ds;
90
 
}
91
 
 
92
 
void middle_dialog(Thtml2dialog * this_ds, gint leftbuts, gint middlebuts, gint rightbuts, gint topbuts, gint botbuts)
93
 
{
94
 
        this_ds->okbutton = bf_stock_ok_button(GTK_SIGNAL_FUNC(html2_dialog_ok), this_ds);
95
 
        this_ds->cancelbutton = bf_stock_cancel_button(GTK_SIGNAL_FUNC(html2_dialog_cancel), this_ds);
96
 
 
97
 
        GTK_WIDGET_SET_FLAGS(this_ds->okbutton, GTK_CAN_DEFAULT);
98
 
        GTK_WIDGET_SET_FLAGS(this_ds->cancelbutton, GTK_CAN_DEFAULT);
99
 
        gtk_table_attach_defaults(GTK_TABLE(this_ds->table), this_ds->okbutton, leftbuts, middlebuts, topbuts, botbuts);
100
 
        gtk_table_attach_defaults(GTK_TABLE(this_ds->table), this_ds->cancelbutton, middlebuts, rightbuts, topbuts, botbuts);
101
 
 
102
 
        gtk_widget_show_all(this_ds->dialog);
103
 
        gtk_widget_realize(this_ds->dialog);
104
 
        gtk_window_set_default(GTK_WINDOW(this_ds->dialog), this_ds->okbutton);
105
 
        gtk_grab_add(this_ds->dialog);
106
 
        DEBUG_MSG("middle_dialog, about to call gtk_main()\n");
107
 
        gtk_main();
108
 
        DEBUG_MSG("middle_dialog, this gtk_main() is finished\n");
109
 
}
110
 
 
111
 
 
112
 
gchar *insert_if_string(gchar * formatstring, GtkWidget * entry, gchar * return_if_empty)
113
 
{
114
 
        gchar *string2return;
115
 
 
116
 
        if (strlen(gtk_entry_get_text(GTK_ENTRY(entry))) > 1) {
117
 
                string2return = g_strdup_printf(formatstring, gtk_entry_get_text(GTK_ENTRY(entry)));
118
 
                garbage = g_list_append(garbage, string2return);
119
 
        } else {
120
 
                if (return_if_empty == NULL) {
121
 
                        string2return = g_strdup("");
122
 
                        garbage = g_list_append(garbage, string2return);
123
 
                } else {
124
 
                        string2return = return_if_empty;
125
 
                }
126
 
        }
127
 
        DEBUG_MSG("insert_if_string, garbage=%p, lenght=%d\n", garbage, g_list_length(garbage));
128
 
        DEBUG_MSG("insert_if_string, finished, string2return=%p\n", string2return);
129
 
        return string2return;
130
 
}
131
 
 
132
 
GList *make_length_list(gfloat from, gfloat to, gint allow_percentage, gint high_percentage)
133
 
{
134
 
 
135
 
        GList *list2return;
136
 
 
137
 
        list2return = g_list_append(NULL, "");
138
 
 
139
 
        if ((from < 0.1) && (to > 0.3)) {
140
 
                list2return = g_list_append(list2return, "0.1em");
141
 
                list2return = g_list_append(list2return, "0.2em");
142
 
                list2return = g_list_append(list2return, "0.3em");
143
 
                list2return = g_list_append(list2return, "0.5em");
144
 
                list2return = g_list_append(list2return, "0.1ex");
145
 
                list2return = g_list_append(list2return, "0.2ex");
146
 
                list2return = g_list_append(list2return, "0.3ex");
147
 
                list2return = g_list_append(list2return, "0.5ex");
148
 
                list2return = g_list_append(list2return, "1pt");
149
 
                list2return = g_list_append(list2return, "2pt");
150
 
                list2return = g_list_append(list2return, "4pt");
151
 
                list2return = g_list_append(list2return, "6pt");
152
 
        }
153
 
        if ((from < 0.5) && (to > 3)) {
154
 
                list2return = g_list_append(list2return, "0.7em");
155
 
                list2return = g_list_append(list2return, "1em");
156
 
                list2return = g_list_append(list2return, "2em");
157
 
                list2return = g_list_append(list2return, "3em");
158
 
                list2return = g_list_append(list2return, "0.7ex");
159
 
                list2return = g_list_append(list2return, "1ex");
160
 
                list2return = g_list_append(list2return, "2ex");
161
 
                list2return = g_list_append(list2return, "3ex");
162
 
                list2return = g_list_append(list2return, "7pt");
163
 
                list2return = g_list_append(list2return, "10pt");
164
 
                list2return = g_list_append(list2return, "12pt");
165
 
                list2return = g_list_append(list2return, "15pt");
166
 
        }
167
 
        if ((from < 3) && (to > 15)) {
168
 
                list2return = g_list_append(list2return, "6em");
169
 
                list2return = g_list_append(list2return, "9em");
170
 
                list2return = g_list_append(list2return, "12em");
171
 
                list2return = g_list_append(list2return, "15em");
172
 
                list2return = g_list_append(list2return, "6ex");
173
 
                list2return = g_list_append(list2return, "9ex");
174
 
                list2return = g_list_append(list2return, "12ex");
175
 
                list2return = g_list_append(list2return, "15ex");
176
 
                list2return = g_list_append(list2return, "20pt");
177
 
                list2return = g_list_append(list2return, "25pt");
178
 
                list2return = g_list_append(list2return, "30pt");
179
 
                list2return = g_list_append(list2return, "50pt");
180
 
        }
181
 
        if (allow_percentage == 1) {
182
 
                list2return = g_list_append(list2return, "10%");
183
 
                list2return = g_list_append(list2return, "20%");
184
 
                list2return = g_list_append(list2return, "30%");
185
 
                list2return = g_list_append(list2return, "40%");
186
 
                list2return = g_list_append(list2return, "50%");
187
 
                list2return = g_list_append(list2return, "60%");
188
 
                list2return = g_list_append(list2return, "70%");
189
 
                list2return = g_list_append(list2return, "80%");
190
 
                list2return = g_list_append(list2return, "90%");
191
 
                list2return = g_list_append(list2return, "100%");
192
 
        }
193
 
        if (high_percentage == 1) {
194
 
                list2return = g_list_append(list2return, "110%");
195
 
                list2return = g_list_append(list2return, "120%");
196
 
                list2return = g_list_append(list2return, "130%");
197
 
                list2return = g_list_append(list2return, "140%");
198
 
                list2return = g_list_append(list2return, "160%");
199
 
                list2return = g_list_append(list2return, "180%");
200
 
                list2return = g_list_append(list2return, "200%");
201
 
                list2return = g_list_append(list2return, "250%");
202
 
                list2return = g_list_append(list2return, "300%");
203
 
                list2return = g_list_append(list2return, "500%");
204
 
        }
205
 
        return list2return;
206
 
}
207
 
 
208
 
 
209
 
/* the actual functions dialogs */
210
 
 
211
 
 
212
 
void insert_class(GtkWidget * widget, gpointer data)
213
 
{
214
 
 
215
 
        Thtml2dialog *ds;
216
 
 
217
 
        ds = startdialog(_("Insert class"), 3, 4);
218
 
 
219
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("Insert class")), 1, 3, 0, 1);
220
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("CLASS=")), 0, 1, 1, 2);
221
 
 
222
 
        ds->combo[1] = combo_with_popdown(NULL, main_v->current_project.classlist, 1);
223
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), ds->combo[1], 1, 4, 1, 2);
224
 
 
225
 
        middle_dialog(ds, 0, 2, 4, 2, 3);
226
 
 
227
 
        if (ds->abort != 1) {
228
 
                ds->tmpstring = g_strdup_printf(cap(" CLASS=\"%s\" "), gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[1])->entry)));
229
 
                main_v->current_project.classlist =
230
 
                        add_to_stringlist(main_v->current_project.classlist, gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[1])->entry)));
231
 
                insert_dbl_text(ds->tmpstring, "");
232
 
                g_free(ds->tmpstring);
233
 
        }
234
 
 
235
 
        if (GTK_IS_WIDGET(ds->dialog))
236
 
                gtk_widget_destroy(ds->dialog);
237
 
        g_free(ds);
238
 
}
239
 
/* *************************
240
 
        better ones in html.c
241
 
        *************************
242
 
 
243
 
void insert_div(GtkWidget * widget, gpointer data)
244
 
{
245
 
 
246
 
        Thtml2dialog *ds;
247
 
 
248
 
        ds = startdialog(_("DIV"), 3, 4);
249
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("DIV")), 1, 3, 0, 1);
250
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("class ")), 0, 1, 1, 2);
251
 
        ds->combo[1] = gtk_combo_new();
252
 
        if (main_v->current_project.classlist != NULL) {
253
 
                gtk_combo_set_popdown_strings(GTK_COMBO(ds->combo[1]), main_v->current_project.classlist);
254
 
        }
255
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), ds->combo[1], 1, 4, 1, 2);
256
 
 
257
 
        middle_dialog(ds, 0, 2, 4, 2, 3);
258
 
 
259
 
        if (ds->abort != 1) {
260
 
                ds->tmpstring = g_strdup_printf(cap("<DIV CLASS=\"%s\">"), gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[1])->entry)));
261
 
                insert_dbl_text(ds->tmpstring, cap("</DIV>"));
262
 
                main_v->current_project.classlist =
263
 
                        add_to_stringlist(main_v->current_project.classlist, gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[1])->entry)));
264
 
                g_free(ds->tmpstring);
265
 
        }
266
 
 
267
 
        if (GTK_IS_WIDGET(ds->dialog))
268
 
                gtk_widget_destroy(ds->dialog);
269
 
        g_free(ds);
270
 
} */
271
 
 
272
 
/* *************************
273
 
        better ones in html.c
274
 
        *************************
275
 
void insert_span(GtkWidget * widget, gpointer data)
276
 
{
277
 
 
278
 
        Thtml2dialog *ds;
279
 
 
280
 
        ds = startdialog(_("SPAN"), 3, 4);
281
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("SPAN")), 1, 3, 0, 1);
282
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("class ")), 0, 1, 1, 2);
283
 
        ds->combo[1] = gtk_combo_new();
284
 
        if (main_v->current_project.classlist != NULL) {
285
 
                gtk_combo_set_popdown_strings(GTK_COMBO(ds->combo[1]), main_v->current_project.classlist);
286
 
        }
287
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), ds->combo[1], 1, 4, 1, 2);
288
 
 
289
 
        middle_dialog(ds, 0, 2, 4, 2, 3);
290
 
 
291
 
        if (ds->abort != 1) {
292
 
                ds->tmpstring = g_strdup_printf(cap("<SPAN CLASS=\"%s\">"), gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[1])->entry)));
293
 
                insert_dbl_text(ds->tmpstring, cap("</SPAN>"));
294
 
                main_v->current_project.classlist =
295
 
                        add_to_stringlist(main_v->current_project.classlist, gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[1])->entry)));
296
 
                g_free(ds->tmpstring);
297
 
        }
298
 
 
299
 
        if (GTK_IS_WIDGET(ds->dialog))
300
 
                gtk_widget_destroy(ds->dialog);
301
 
        g_free(ds);
302
 
}*/
303
 
 
304
 
/* the complex CSS dialog */
305
 
void sizing_unit_font_cb(GtkWidget * widget, Thtml2dialog * data)
306
 
{
307
 
        GList *tmplist;
308
 
 
309
 
        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->radio[1]))) {
310
 
                tmplist = g_list_append(NULL, "");
311
 
                tmplist = g_list_append(tmplist, "xx-small");
312
 
                tmplist = g_list_append(tmplist, "x-small");
313
 
                tmplist = g_list_append(tmplist, "small");
314
 
                tmplist = g_list_append(tmplist, "medium");
315
 
                tmplist = g_list_append(tmplist, "large");
316
 
                tmplist = g_list_append(tmplist, "x-large");
317
 
                tmplist = g_list_append(tmplist, "xx-large");
318
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[5]), tmplist);
319
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[6]), tmplist);
320
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[5])->entry)), FALSE);
321
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[6])->entry)), FALSE);
322
 
                g_list_free(tmplist);
323
 
        } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->radio[2]))) {
324
 
                tmplist = g_list_append(NULL, "");
325
 
                tmplist = g_list_append(tmplist, "larger");
326
 
                tmplist = g_list_append(tmplist, "smaller");
327
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[5]), tmplist);
328
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[6]), tmplist);
329
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[5])->entry)), FALSE);
330
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[6])->entry)), FALSE);
331
 
                g_list_free(tmplist);
332
 
        } else {
333
 
                tmplist = make_length_list(2.9, 20, 1, 1);
334
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[5]), tmplist);
335
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[6]), tmplist);
336
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[5])->entry)), TRUE);
337
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[6])->entry)), TRUE);
338
 
                g_list_free(tmplist);
339
 
        }
340
 
}
341
 
 
342
 
void sizing_unit_bg_cb(GtkWidget * widget, Thtml2dialog * data)
343
 
{
344
 
        GList *tmplist;
345
 
 
346
 
        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->radio[4]))) {
347
 
                tmplist = make_length_list(0, 0, 1, 0);
348
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[16]), tmplist);
349
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[17]), tmplist);
350
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[16])->entry)), TRUE);
351
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[17])->entry)), TRUE);
352
 
                g_list_free(tmplist);
353
 
        } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->radio[5]))) {
354
 
                tmplist = g_list_append(NULL, "");
355
 
                tmplist = g_list_append(tmplist, "1cm");
356
 
                tmplist = g_list_append(tmplist, "2cm");
357
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[16]), tmplist);
358
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[17]), tmplist);
359
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[16])->entry)), TRUE);
360
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[17])->entry)), TRUE);
361
 
                g_list_free(tmplist);
362
 
        } else {
363
 
                tmplist = g_list_append(NULL, "");
364
 
                tmplist = g_list_append(tmplist, "top");
365
 
                tmplist = g_list_append(tmplist, "center");
366
 
                tmplist = g_list_append(tmplist, "bottom");
367
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[16]), tmplist);
368
 
                g_list_free(tmplist);
369
 
                tmplist = g_list_append(NULL, "");
370
 
                tmplist = g_list_append(tmplist, "left");
371
 
                tmplist = g_list_append(tmplist, "center");
372
 
                tmplist = g_list_append(tmplist, "right");
373
 
                gtk_combo_set_popdown_strings(GTK_COMBO(data->combo[17]), tmplist);
374
 
                g_list_free(tmplist);
375
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[16])->entry)), FALSE);
376
 
                gtk_editable_set_editable(GTK_EDITABLE(GTK_ENTRY(GTK_COMBO(data->combo[17])->entry)), FALSE);
377
 
        }
378
 
}
379
 
 
380
 
void insert_in_stylesheet(GtkWidget * widget, gpointer data)
381
 
{
382
 
 
383
 
        Thtml2dialog *ds;
384
 
        GtkWidget *notebook, *table, *vbox, *frame, *file_but;
385
 
        GList *tmplist = NULL;
386
 
        GSList *group;
387
 
        gchar *fontstring, *bgncolorstring, *textstring, *margstring, *padstring, *sizeplacestring, *borderstring, *classistring;
388
 
 
389
 
        ds = startdialog(_("New style"), 6, 4);
390
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("Insert new style")), 1, 3, 0, 1);
391
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("tag")), 0, 1, 1, 2);
392
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("class")), 0, 1, 2, 3);
393
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), gtk_label_new(_("pseudo class")), 0, 1, 3, 4);
394
 
 
395
 
        tmplist = glist_with_html_tags(0);
396
 
        ds->combo[8] = combo_with_popdown(NULL, tmplist, 1);
397
 
        g_list_free(tmplist);
398
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), ds->combo[8], 1, 3, 1, 2);
399
 
        ds->combo[9] = combo_with_popdown(NULL, main_v->current_project.classlist, 1);
400
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), ds->combo[9], 1, 3, 2, 3);
401
 
        tmplist = g_list_append(NULL, "");
402
 
        tmplist = g_list_append(tmplist, "link");
403
 
        tmplist = g_list_append(tmplist, "visited");
404
 
        tmplist = g_list_append(tmplist, "active");
405
 
        tmplist = g_list_append(tmplist, "hover");
406
 
        tmplist = g_list_append(tmplist, "focus");
407
 
        tmplist = g_list_append(tmplist, "after");
408
 
        tmplist = g_list_append(tmplist, "before");
409
 
        tmplist = g_list_append(tmplist, "first-line");
410
 
        tmplist = g_list_append(tmplist, "first-letter");
411
 
        tmplist = g_list_append(tmplist, "first-child");
412
 
        ds->combo[10] = combo_with_popdown(NULL, tmplist, 1);
413
 
        g_list_free(tmplist);
414
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), ds->combo[10], 1, 3, 3, 4);
415
 
 
416
 
        notebook = gtk_notebook_new();
417
 
        gtk_notebook_set_tab_border(GTK_NOTEBOOK(notebook), 0);
418
 
        gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_BOTTOM);
419
 
        gtk_table_attach_defaults(GTK_TABLE(ds->table), notebook, 0, 4, 4, 5);
420
 
 
421
 
        /* start on font tab */
422
 
        table = gtk_table_new(4, 9, 0);
423
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("font-family")), 0, 1, 1, 2);
424
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("font-style")), 0, 1, 2, 3);
425
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("font-variant")), 0, 1, 3, 4);
426
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("font-weight")), 0, 1, 4, 5);
427
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("font-size")), 2, 3, 5, 6);
428
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("line-height")), 2, 3, 7, 8);
429
 
        ds->check[1] = gtk_check_button_new_with_label(_("Insert as one line"));
430
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->check[1], 0, 4, 0, 1);
431
 
 
432
 
        ds->combo[1] = combo_with_popdown(NULL, main_v->current_project.fontlist, 1);
433
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[1], 1, 4, 1, 2);
434
 
 
435
 
        tmplist = g_list_append(NULL, "");
436
 
        tmplist = g_list_append(tmplist, "normal");
437
 
        tmplist = g_list_append(tmplist, "italic");
438
 
        tmplist = g_list_append(tmplist, "oblique");
439
 
        ds->combo[2] = combo_with_popdown(NULL, tmplist, 0);
440
 
        g_list_free(tmplist);
441
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[2], 1, 4, 2, 3);
442
 
 
443
 
        tmplist = g_list_append(NULL, "");
444
 
        tmplist = g_list_append(tmplist, "normal");
445
 
        tmplist = g_list_append(tmplist, "small-caps");
446
 
        ds->combo[3] = combo_with_popdown(NULL, tmplist, 0);
447
 
        g_list_free(tmplist);
448
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[3], 1, 4, 3, 4);
449
 
 
450
 
        tmplist = g_list_append(NULL, "");
451
 
        tmplist = g_list_append(tmplist, "normal");
452
 
        tmplist = g_list_append(tmplist, "bold");
453
 
        tmplist = g_list_append(tmplist, "bolder");
454
 
        tmplist = g_list_append(tmplist, "lighter");
455
 
        tmplist = g_list_append(tmplist, "100");
456
 
        tmplist = g_list_append(tmplist, "200");
457
 
        tmplist = g_list_append(tmplist, "300");
458
 
        tmplist = g_list_append(tmplist, "400");
459
 
        tmplist = g_list_append(tmplist, "500");
460
 
        tmplist = g_list_append(tmplist, "600");
461
 
        tmplist = g_list_append(tmplist, "700");
462
 
        tmplist = g_list_append(tmplist, "800");
463
 
        tmplist = g_list_append(tmplist, "900");
464
 
        ds->combo[4] = combo_with_popdown(NULL, tmplist, 0);
465
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[4], 1, 4, 4, 5);
466
 
        g_list_free(tmplist);
467
 
 
468
 
        tmplist = g_list_append(NULL, "");
469
 
        ds->combo[5] = combo_with_popdown(NULL, tmplist, 1);
470
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[5], 2, 4, 6, 7);
471
 
 
472
 
        tmplist = g_list_append(NULL, "");
473
 
        ds->combo[6] = combo_with_popdown(NULL, tmplist, 1);
474
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[6], 2, 4, 8, 9);
475
 
 
476
 
        frame = gtk_frame_new("size unit");
477
 
        gtk_table_attach(GTK_TABLE(table), frame, 0, 2, 5, 9, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);
478
 
        vbox = gtk_vbox_new(TRUE, 1);
479
 
        gtk_container_add(GTK_CONTAINER(frame), vbox);
480
 
        ds->radio[1] = gtk_radio_button_new_with_label(NULL, _("absolute size"));
481
 
        gtk_box_pack_start(GTK_BOX(vbox), ds->radio[1], TRUE, TRUE, 0);
482
 
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(ds->radio[1]));
483
 
        ds->radio[2] = gtk_radio_button_new_with_label(group, _("relative size"));
484
 
        gtk_box_pack_start(GTK_BOX(vbox), ds->radio[2], TRUE, TRUE, 0);
485
 
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(ds->radio[2]));
486
 
        ds->radio[3] = gtk_radio_button_new_with_label(group, _("length/percentage"));
487
 
        gtk_box_pack_start(GTK_BOX(vbox), ds->radio[3], TRUE, TRUE, 0);
488
 
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(ds->radio[3]));
489
 
        gtk_signal_connect(GTK_OBJECT(ds->radio[1]), "clicked", sizing_unit_font_cb, ds);
490
 
        gtk_signal_connect(GTK_OBJECT(ds->radio[2]), "clicked", sizing_unit_font_cb, ds);
491
 
        gtk_signal_connect(GTK_OBJECT(ds->radio[3]), "clicked", sizing_unit_font_cb, ds);
492
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ds->radio[3]), 1);
493
 
        /* font tab completed */
494
 
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, apply_font_style(gtk_label_new("Font"), main_v->props.cfg_tab_font));
495
 
 
496
 
        /* margin&padding tab started */
497
 
        /* check 3-4, combo 25-32 */
498
 
 
499
 
        table = table = gtk_table_new(3, 7, 0);
500
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("margin")), 1, 2, 2, 3);
501
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("padding")), 2, 3, 2, 3);
502
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("top")), 0, 1, 3, 4);
503
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("right")), 0, 1, 4, 5);
504
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("bottom")), 0, 1, 5, 6);
505
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("left")), 0, 1, 6, 7);
506
 
        ds->check[3] = gtk_check_button_new_with_label(_("Insert margin as one line"));
507
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->check[3], 0, 3, 0, 1);
508
 
        ds->check[4] = gtk_check_button_new_with_label(_("Insert padding as one line"));
509
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->check[4], 0, 3, 1, 2);
510
 
        tmplist = make_length_list(0.1, 10, 1, 0);
511
 
        g_list_append(tmplist, "auto");
512
 
        ds->combo[25] = combo_with_popdown(NULL, tmplist, 1);
513
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[25], 1, 2, 3, 4);
514
 
        ds->combo[27] = combo_with_popdown(NULL, tmplist, 1);
515
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[27], 1, 2, 4, 5);
516
 
        ds->combo[29] = combo_with_popdown(NULL, tmplist, 1);
517
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[29], 1, 2, 5, 6);
518
 
        ds->combo[31] = combo_with_popdown(NULL, tmplist, 1);
519
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[31], 1, 2, 6, 7);
520
 
        g_list_free(tmplist);
521
 
 
522
 
        tmplist = make_length_list(0.1, 10, 1, 0);
523
 
        ds->combo[26] = combo_with_popdown(NULL, tmplist, 1);
524
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[26], 2, 3, 3, 4);
525
 
        ds->combo[28] = combo_with_popdown(NULL, tmplist, 1);
526
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[28], 2, 3, 4, 5);
527
 
        ds->combo[30] = combo_with_popdown(NULL, tmplist, 1);
528
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[30], 2, 3, 5, 6);
529
 
        ds->combo[32] = combo_with_popdown(NULL, tmplist, 1);
530
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[32], 2, 3, 6, 7);
531
 
        g_list_free(tmplist);
532
 
 
533
 
        /* margin&padding tab completed */
534
 
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table,
535
 
                                                         apply_font_style(gtk_label_new(_("Margin & padding")), main_v->props.cfg_tab_font));
536
 
 
537
 
        /* border tab started */
538
 
        table = table = gtk_table_new(4, 8, 0);
539
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("width")), 1, 2, 3, 4);
540
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("color")), 2, 3, 3, 4);
541
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("style")), 3, 4, 3, 4);
542
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("top")), 0, 1, 4, 5);
543
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("right")), 0, 1, 5, 6);
544
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("bottom")), 0, 1, 6, 7);
545
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("left")), 0, 1, 7, 8);
546
 
        ds->radio[7] = gtk_radio_button_new_with_label(NULL, _("Insert values per property"));
547
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->radio[7], 0, 4, 0, 1);
548
 
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(ds->radio[7]));
549
 
        ds->radio[8] = gtk_radio_button_new_with_label(group, _("Insert values per border side"));
550
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->radio[8], 0, 4, 1, 2);
551
 
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(ds->radio[8]));
552
 
        ds->radio[9] = gtk_radio_button_new_with_label(group, _("Insert top-values as general value for all sides"));
553
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->radio[9], 0, 4, 2, 3);
554
 
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(ds->radio[9]));
555
 
        tmplist = make_length_list(0, 0.5, 0, 0);
556
 
        tmplist = g_list_append(tmplist, "thin");
557
 
        tmplist = g_list_append(tmplist, "medium");
558
 
        tmplist = g_list_append(tmplist, "thick");
559
 
        ds->combo[41] = combo_with_popdown(NULL, tmplist, 1);
560
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[41], 1, 2, 4, 5);
561
 
        ds->combo[44] = combo_with_popdown(NULL, tmplist, 1);
562
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[44], 1, 2, 5, 6);
563
 
        ds->combo[47] = combo_with_popdown(NULL, tmplist, 1);
564
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[47], 1, 2, 6, 7);
565
 
        ds->combo[50] = combo_with_popdown(NULL, tmplist, 1);
566
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[50], 1, 2, 7, 8);
567
 
 
568
 
        ds->combo[42] = combo_with_popdown(NULL, main_v->current_project.colorlist, 1);
569
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[42], 2, 3, 4, 5);
570
 
        ds->combo[45] = combo_with_popdown(NULL, main_v->current_project.colorlist, 1);
571
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[45], 2, 3, 5, 6);
572
 
        ds->combo[48] = combo_with_popdown(NULL, main_v->current_project.colorlist, 1);
573
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[48], 2, 3, 6, 7);
574
 
        ds->combo[51] = combo_with_popdown(NULL, main_v->current_project.colorlist, 1);
575
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[51], 2, 3, 7, 8);
576
 
 
577
 
        tmplist = g_list_append(NULL, "");
578
 
        tmplist = g_list_append(tmplist, "none");
579
 
        tmplist = g_list_append(tmplist, "dotted");
580
 
        tmplist = g_list_append(tmplist, "dashed");
581
 
        tmplist = g_list_append(tmplist, "solid");
582
 
        tmplist = g_list_append(tmplist, "double");
583
 
        tmplist = g_list_append(tmplist, "groove");
584
 
        tmplist = g_list_append(tmplist, "ridge");
585
 
        tmplist = g_list_append(tmplist, "inset");
586
 
        tmplist = g_list_append(tmplist, "outset");
587
 
        ds->combo[43] = combo_with_popdown(NULL, tmplist, 1);
588
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[43], 3, 4, 4, 5);
589
 
        ds->combo[46] = combo_with_popdown(NULL, tmplist, 1);
590
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[46], 3, 4, 5, 6);
591
 
        ds->combo[49] = combo_with_popdown(NULL, tmplist, 1);
592
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[49], 3, 4, 6, 7);
593
 
        ds->combo[52] = combo_with_popdown(NULL, tmplist, 1);
594
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[52], 3, 4, 7, 8);
595
 
        g_list_free(tmplist);
596
 
        /* border tab completed */
597
 
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, apply_font_style(gtk_label_new("Border"), main_v->props.cfg_tab_font));
598
 
 
599
 
        /* size&placement tab started */
600
 
        /* combo 33 - 36 */
601
 
        table = table = gtk_table_new(2, 4, 0);
602
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("width")), 0, 1, 0, 1);
603
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("height")), 0, 1, 1, 2);
604
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("float")), 0, 1, 2, 3);
605
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("clear")), 0, 1, 3, 4);
606
 
        tmplist = make_length_list(2.9, 100, 1, 1);
607
 
        ds->combo[33] = combo_with_popdown(NULL, tmplist, 1);
608
 
        g_list_free(tmplist);
609
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[33], 1, 2, 0, 1);
610
 
        tmplist = make_length_list(2.9, 100, 0, 0);
611
 
        ds->combo[34] = combo_with_popdown(NULL, tmplist, 1);
612
 
        g_list_free(tmplist);
613
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[34], 1, 2, 1, 2);
614
 
        tmplist = g_list_append(NULL, "");
615
 
        tmplist = g_list_append(tmplist, "left");
616
 
        tmplist = g_list_append(tmplist, "right");
617
 
        tmplist = g_list_append(tmplist, "none");
618
 
        ds->combo[35] = combo_with_popdown(NULL, tmplist, 1);
619
 
        g_list_free(tmplist);
620
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[35], 1, 2, 2, 3);
621
 
        tmplist = g_list_append(NULL, "");
622
 
        tmplist = g_list_append(tmplist, "left");
623
 
        tmplist = g_list_append(tmplist, "right");
624
 
        tmplist = g_list_append(tmplist, "none");
625
 
        tmplist = g_list_append(tmplist, "both");
626
 
        ds->combo[36] = combo_with_popdown(NULL, tmplist, 1);
627
 
        g_list_free(tmplist);
628
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[36], 1, 2, 3, 4);
629
 
        /* size&placement tab completed */
630
 
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table,
631
 
                                                         apply_font_style(gtk_label_new(_("Size & placement")), main_v->props.cfg_tab_font));
632
 
 
633
 
        /* color&background tab started */
634
 
        table = table = gtk_table_new(5, 9, 0);
635
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("color")), 0, 1, 0, 1);
636
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("background-color")), 0, 1, 2, 3);
637
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("background-image")), 0, 1, 3, 4);
638
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("background-repeat")), 0, 1, 4, 5);
639
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("background-attachment")), 0, 1, 5, 6);
640
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("background-position")), 2, 4, 6, 7);
641
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("accross")), 2, 3, 7, 8);
642
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("down")), 2, 3, 8, 9);
643
 
 
644
 
        ds->combo[11] = combo_with_popdown(NULL, main_v->current_project.colorlist, 1);
645
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[11], 1, 4, 0, 1);
646
 
        ds->check[2] = gtk_check_button_new_with_label(_("Insert background as one line"));
647
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->check[2], 0, 4, 1, 2);
648
 
        ds->combo[12] = combo_with_popdown(NULL, main_v->current_project.colorlist, 1);
649
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[12], 1, 4, 2, 3);
650
 
        ds->combo[13] = combo_with_popdown(NULL, main_v->current_project.urllist, 1);
651
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[13], 1, 4, 3, 4);
652
 
 
653
 
        tmplist = g_list_append(NULL, "");
654
 
        tmplist = g_list_append(tmplist, "repeat");
655
 
        tmplist = g_list_append(tmplist, "repeat-x");
656
 
        tmplist = g_list_append(tmplist, "repeat-y");
657
 
        tmplist = g_list_append(tmplist, "no-repeat");
658
 
        ds->combo[14] = combo_with_popdown(NULL, tmplist, 0);
659
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[14], 1, 4, 4, 5);
660
 
        g_list_free(tmplist);
661
 
 
662
 
        tmplist = g_list_append(NULL, "");
663
 
        tmplist = g_list_append(tmplist, "scroll");
664
 
        tmplist = g_list_append(tmplist, "fixed");
665
 
        ds->combo[15] = combo_with_popdown(NULL, tmplist, 0);
666
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[15], 1, 4, 5, 6);
667
 
        g_list_free(tmplist);
668
 
 
669
 
        tmplist = g_list_append(NULL, "");
670
 
        ds->combo[16] = combo_with_popdown(NULL, tmplist, 1);
671
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[16], 3, 5, 7, 8);
672
 
 
673
 
        tmplist = g_list_append(NULL, "");
674
 
        ds->combo[17] = combo_with_popdown(NULL, tmplist, 1);
675
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[17], 3, 5, 8, 9);
676
 
 
677
 
        frame = gtk_frame_new(_("size unit"));
678
 
        gtk_table_attach(GTK_TABLE(table), frame, 0, 2, 6, 9, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 5, 5);
679
 
        vbox = gtk_vbox_new(TRUE, 1);
680
 
        group = NULL;
681
 
        gtk_container_add(GTK_CONTAINER(frame), vbox);
682
 
        ds->radio[4] = gtk_radio_button_new_with_label(NULL, _("percentage"));
683
 
        gtk_box_pack_start(GTK_BOX(vbox), ds->radio[4], TRUE, TRUE, 0);
684
 
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(ds->radio[4]));
685
 
        ds->radio[5] = gtk_radio_button_new_with_label(group, _("absolute size"));
686
 
        gtk_box_pack_start(GTK_BOX(vbox), ds->radio[5], TRUE, TRUE, 0);
687
 
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(ds->radio[5]));
688
 
        ds->radio[6] = gtk_radio_button_new_with_label(group, _("keyword"));
689
 
        gtk_box_pack_start(GTK_BOX(vbox), ds->radio[6], TRUE, TRUE, 0);
690
 
        group = gtk_radio_button_group(GTK_RADIO_BUTTON(ds->radio[6]));
691
 
        gtk_signal_connect(GTK_OBJECT(ds->radio[4]), "clicked", sizing_unit_bg_cb, ds);
692
 
        gtk_signal_connect(GTK_OBJECT(ds->radio[5]), "clicked", sizing_unit_bg_cb, ds);
693
 
        gtk_signal_connect(GTK_OBJECT(ds->radio[6]), "clicked", sizing_unit_bg_cb, ds);
694
 
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ds->radio[4]), 1);
695
 
 
696
 
        /* color&background tab completed */
697
 
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table,
698
 
                                                         apply_font_style(gtk_label_new(_("Color & background")), main_v->props.cfg_tab_font));
699
 
 
700
 
        /* text tab started */
701
 
        table = table = gtk_table_new(2, 7, 0);
702
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("word-spacing")), 0, 1, 0, 1);
703
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("letter-spacing")), 0, 1, 1, 2);
704
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("vertical-align")), 0, 1, 2, 3);
705
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("text-align")), 0, 1, 3, 4);
706
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("text-decoration")), 0, 1, 4, 5);
707
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("text-transform")), 0, 1, 5, 6);
708
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("text-indent")), 0, 1, 6, 7);
709
 
 
710
 
        tmplist = make_length_list(0.4, 4, 0, 0);
711
 
        ds->combo[18] = combo_with_popdown(NULL, tmplist, 1);
712
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[18], 1, 2, 0, 1);
713
 
        g_list_free(tmplist);
714
 
        tmplist = make_length_list(0, 0.6, 0, 0);
715
 
        ds->combo[19] = combo_with_popdown(NULL, tmplist, 1);
716
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[19], 1, 2, 1, 2);
717
 
        g_list_free(tmplist);
718
 
        tmplist = g_list_append(NULL, "");
719
 
        tmplist = g_list_append(tmplist, "baseline");
720
 
        tmplist = g_list_append(tmplist, "sub");
721
 
        tmplist = g_list_append(tmplist, "super");
722
 
        tmplist = g_list_append(tmplist, "top");
723
 
        tmplist = g_list_append(tmplist, "text-top");
724
 
        tmplist = g_list_append(tmplist, "middle");
725
 
        tmplist = g_list_append(tmplist, "bottom");
726
 
        tmplist = g_list_append(tmplist, "text-bottom");
727
 
        tmplist = g_list_append(tmplist, "-50%");
728
 
        tmplist = g_list_append(tmplist, "-100%");
729
 
        tmplist = g_list_append(tmplist, "50%");
730
 
        tmplist = g_list_append(tmplist, "100%");
731
 
        ds->combo[20] = combo_with_popdown(NULL, tmplist, 1);
732
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[20], 1, 2, 2, 3);
733
 
        g_list_free(tmplist);
734
 
        tmplist = g_list_append(NULL, "");
735
 
        tmplist = g_list_append(tmplist, "left");
736
 
        tmplist = g_list_append(tmplist, "right");
737
 
        tmplist = g_list_append(tmplist, "center");
738
 
        tmplist = g_list_append(tmplist, "justify");
739
 
        ds->combo[21] = combo_with_popdown(NULL, tmplist, 0);
740
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[21], 1, 2, 3, 4);
741
 
        g_list_free(tmplist);
742
 
        tmplist = g_list_append(NULL, "");
743
 
        tmplist = g_list_append(tmplist, "none");
744
 
        tmplist = g_list_append(tmplist, "underline");
745
 
        tmplist = g_list_append(tmplist, "overline");
746
 
        tmplist = g_list_append(tmplist, "line-trough");
747
 
        tmplist = g_list_append(tmplist, "blink");
748
 
        ds->combo[22] = combo_with_popdown(NULL, tmplist, 0);
749
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[22], 1, 2, 4, 5);
750
 
        g_list_free(tmplist);
751
 
        tmplist = g_list_append(NULL, "");
752
 
        tmplist = g_list_append(tmplist, "none");
753
 
        tmplist = g_list_append(tmplist, "capitalize");
754
 
        tmplist = g_list_append(tmplist, "uppercase");
755
 
        tmplist = g_list_append(tmplist, "lowercase");
756
 
        ds->combo[23] = combo_with_popdown(NULL, tmplist, 0);
757
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[23], 1, 2, 5, 6);
758
 
        g_list_free(tmplist);
759
 
        tmplist = make_length_list(0, 4, 1, 1);
760
 
        ds->combo[24] = combo_with_popdown(NULL, tmplist, 1);
761
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[24], 1, 2, 6, 7);
762
 
        g_list_free(tmplist);
763
 
        /* text tab completed */
764
 
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, apply_font_style(gtk_label_new("Text"), main_v->props.cfg_tab_font));
765
 
 
766
 
        /* classification tab started */
767
 
        /* combo 37-40, check 5, entry 3 */
768
 
        table = table = gtk_table_new(3, 6, 0);
769
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("display")), 0, 1, 0, 1);
770
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("white-space")), 0, 1, 1, 2);
771
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("list-style-type")), 0, 1, 3, 4);
772
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("list-style-image")), 0, 1, 4, 5);
773
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("list-style-position")), 0, 1, 5, 6);
774
 
        tmplist = g_list_append(NULL, "");
775
 
        ds->combo[37] = combo_with_popdown(NULL, tmplist, 1);
776
 
        g_list_free(tmplist);
777
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[37], 1, 2, 0, 1);
778
 
        tmplist = g_list_append(NULL, "");
779
 
        ds->combo[38] = combo_with_popdown(NULL, tmplist, 1);
780
 
        g_list_free(tmplist);
781
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[38], 1, 2, 1, 2);
782
 
        ds->check[5] = gtk_check_button_new_with_label(_("Insert list-item as one line"));
783
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->check[5], 0, 2, 2, 3);
784
 
        tmplist = g_list_append(NULL, "");
785
 
        ds->combo[39] = combo_with_popdown(NULL, tmplist, 1);
786
 
        g_list_free(tmplist);
787
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[39], 1, 2, 3, 4);
788
 
        tmplist = g_list_append(NULL, "");
789
 
        ds->combo[40] = combo_with_popdown(NULL, tmplist, 1);
790
 
        g_list_free(tmplist);
791
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->combo[40], 1, 2, 5, 6);
792
 
        ds->entry[3] = gtk_entry_new();
793
 
        gtk_table_attach_defaults(GTK_TABLE(table), ds->entry[3], 1, 2, 4, 5);
794
 
        file_but = file_but_new(ds->entry[3], ds->dialog, 0);
795
 
        gtk_table_attach(GTK_TABLE(table), file_but, 2, 3, 4, 5, 0, 0, 5, 5);
796
 
        /* classification tab completed */
797
 
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, apply_font_style(gtk_label_new("Classification"), main_v->props.cfg_tab_font));
798
 
 
799
 
        middle_dialog(ds, 0, 2, 4, 5, 6);
800
 
        if (ds->abort != 1) {
801
 
 
802
 
                /* font tab */
803
 
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ds->check[1]))) {
804
 
                        fontstring =
805
 
                                g_strdup_printf("   font: %s %s %s %s%s %s;\n", insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[2])->entry), "normal")
806
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[3])->entry), "normal")
807
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[4])->entry), "normal")
808
 
                                                                , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[5])->entry))
809
 
                                                                , insert_if_string("/%s", GTK_WIDGET(GTK_COMBO(ds->combo[6])->entry), NULL)
810
 
                                                                , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[1])->entry))
811
 
                                );
812
 
                } else {
813
 
                        fontstring =
814
 
                                g_strdup_printf("%s%s%s%s%s%s", insert_if_string("   font-family: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[1])->entry), NULL)
815
 
                                                                , insert_if_string("   font-style: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[2])->entry), NULL)
816
 
                                                                , insert_if_string("   font-variant: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[3])->entry), NULL)
817
 
                                                                , insert_if_string("   font-weight: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[4])->entry), NULL)
818
 
                                                                , insert_if_string("   font-size: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[5])->entry), NULL)
819
 
                                                                , insert_if_string("   line-height: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[6])->entry), NULL)
820
 
                                );
821
 
                }
822
 
                garbage = g_list_append(garbage, fontstring);
823
 
                DEBUG_MSG("style, fontstring=%s\n", fontstring);
824
 
                /* end font tab */
825
 
                /* margin & padding tab */
826
 
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ds->check[3]))) {
827
 
                        margstring =
828
 
                                g_strdup_printf("   margin: %s %s %s %s;\n", insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[25])->entry), "0")
829
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[27])->entry), "0")
830
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[29])->entry), "0")
831
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[31])->entry), "0")
832
 
                                );
833
 
                } else {
834
 
                        margstring =
835
 
                                g_strdup_printf("%s%s%s%s", insert_if_string("   margin-top: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[25])->entry), NULL),
836
 
                                                                insert_if_string("   margin-right: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[27])->entry), NULL)
837
 
                                                                , insert_if_string("   margin-bottom: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[29])->entry), NULL)
838
 
                                                                , insert_if_string("   margin-left: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[31])->entry), NULL)
839
 
                                );
840
 
                }
841
 
                garbage = g_list_append(garbage, margstring);
842
 
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ds->check[4]))) {
843
 
                        padstring =
844
 
                                g_strdup_printf("   padding: %s %s %s %s;\n", insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[26])->entry), "0")
845
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[28])->entry), "0")
846
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[30])->entry), "0")
847
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[32])->entry), "0")
848
 
                                );
849
 
                } else {
850
 
                        padstring =
851
 
                                g_strdup_printf("%s%s%s%s", insert_if_string("   padding-top: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[26])->entry), NULL),
852
 
                                                                insert_if_string("   padding-right: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[28])->entry), NULL)
853
 
                                                                , insert_if_string("   padding-bottom: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[30])->entry), NULL)
854
 
                                                                , insert_if_string("   padding-left: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[32])->entry), NULL)
855
 
                                );
856
 
                }
857
 
                garbage = g_list_append(garbage, padstring);
858
 
                /* end of margin & padding */
859
 
                /* border tab */
860
 
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ds->radio[7]))) {
861
 
                        borderstring =
862
 
                                g_strdup_printf("   border-width: %s %s %s %s;\n   border-color: %s %s %s %s;\n   border-style: %s %s %s %s;\n",
863
 
                                                                insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[41])->entry), "medium")
864
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[44])->entry), "medium")
865
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[47])->entry), "medium")
866
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[50])->entry), "medium")
867
 
                                                                , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[42])->entry))
868
 
                                                                , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[45])->entry))
869
 
                                                                , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[48])->entry))
870
 
                                                                , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[51])->entry))
871
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[43])->entry), "none")
872
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[46])->entry), "none")
873
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[49])->entry), "none")
874
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[52])->entry), "none")
875
 
                                );
876
 
                } else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ds->radio[8]))) {
877
 
                        borderstring =
878
 
                                g_strdup_printf
879
 
                                ("   border-top: %s %s %s;\n   border-right: %s %s %s;\n   border-bottom: %s %s %s;\n   border-left: %s %s %s;\n",
880
 
                                 gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[41])->entry))
881
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[42])->entry))
882
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[43])->entry))
883
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[44])->entry))
884
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[45])->entry))
885
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[46])->entry))
886
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[47])->entry))
887
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[48])->entry))
888
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[49])->entry))
889
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[50])->entry))
890
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[51])->entry))
891
 
                                 , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[52])->entry))
892
 
                                );
893
 
                } else {
894
 
                        borderstring = g_strdup_printf("   border: %s %s %s;\n", gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[41])->entry))
895
 
                                                                                   , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[42])->entry))
896
 
                                                                                   , gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[43])->entry))
897
 
                                );
898
 
                }
899
 
                garbage = g_list_append(garbage, borderstring);
900
 
                DEBUG_MSG("insert_in_stylesheet, borderstring=%s\n", borderstring);
901
 
                /* end border tab */
902
 
                /* size and placement tab */
903
 
                sizeplacestring = g_strdup_printf("%s%s%s%s", insert_if_string("   width: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[33])->entry), NULL)
904
 
                                                                                  , insert_if_string("   height: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[34])->entry), NULL)
905
 
                                                                                  , insert_if_string("   float: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[35])->entry), NULL)
906
 
                                                                                  , insert_if_string("   clear: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[36])->entry), NULL)
907
 
                        );
908
 
                garbage = g_list_append(garbage, sizeplacestring);
909
 
                /* end of size and placement */
910
 
                /* color & background tab */
911
 
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ds->check[2]))) {
912
 
                        bgncolorstring =
913
 
                                g_strdup_printf("%s   background: %s %s %s %s %s %s;\n",
914
 
                                                                insert_if_string("   color: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[11])->entry), NULL)
915
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[12])->entry), "transparent")
916
 
                                                                , insert_if_string("url(%s)", GTK_WIDGET(GTK_COMBO(ds->combo[13])->entry), NULL)
917
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[14])->entry), "repeat")
918
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[15])->entry), "scroll")
919
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[16])->entry), "0%")
920
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[17])->entry), "0%")
921
 
                                );
922
 
                } else {
923
 
                        bgncolorstring =
924
 
                                g_strdup_printf("%s%s%s%s%s%s%s", insert_if_string("   color: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[11])->entry), NULL)
925
 
                                                                , insert_if_string("   background-color: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[12])->entry), NULL)
926
 
                                                                , insert_if_string("   background-image: url(%s);\n", GTK_WIDGET(GTK_COMBO(ds->combo[13])->entry), NULL)
927
 
                                                                , insert_if_string("   background-repeat: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[14])->entry), NULL)
928
 
                                                                , insert_if_string("   background-attachment: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[15])->entry), NULL)
929
 
                                                                , insert_if_string("   background-position: %s", GTK_WIDGET(GTK_COMBO(ds->combo[16])->entry),
930
 
                                                                                                   "   background-position: top")
931
 
                                                                , insert_if_string(" %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[17])->entry), " left;\n")
932
 
                                );
933
 
                }
934
 
                DEBUG_MSG("insert_in_stylesheet, bgncolorstring=%s\n", bgncolorstring);
935
 
                garbage = g_list_append(garbage, bgncolorstring);
936
 
                /* end color & background tab */
937
 
                DEBUG_MSG("insert_in_stylesheet, before text tab\n");
938
 
                /* text tab */
939
 
                textstring =
940
 
                        g_strdup_printf("%s%s%s%s%s%s%s", insert_if_string("   word-spacing: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[18])->entry), NULL)
941
 
                                                        , insert_if_string("   letter-spacing: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[19])->entry), NULL)
942
 
                                                        , insert_if_string("   vertical-align: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[20])->entry), NULL)
943
 
                                                        , insert_if_string("   text-align: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[21])->entry), NULL)
944
 
                                                        , insert_if_string("   text-decoration: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[22])->entry), NULL)
945
 
                                                        , insert_if_string("   text-transform: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[23])->entry), NULL)
946
 
                                                        , insert_if_string("   text-indent: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[24])->entry), NULL)
947
 
                        );
948
 
                garbage = g_list_append(garbage, textstring);
949
 
                /* end text tab */
950
 
                DEBUG_MSG("insert_in_stylesheet, before classification tab\n");
951
 
                /* classification tab */
952
 
                if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ds->check[5]))) {
953
 
                        DEBUG_MSG("insert_in_stylesheet, check[5] = TRUE\n");
954
 
                        classistring =
955
 
                                g_strdup_printf("%s%s   list-style: %s %s %s;\n",
956
 
                                                                insert_if_string("   display: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[37])->entry), NULL)
957
 
                                                                , insert_if_string("   white-space: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[38])->entry), NULL)
958
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[39])->entry), "disc")
959
 
                                                                , insert_if_string("%s", GTK_WIDGET(ds->entry[3]), "none")
960
 
                                                                , insert_if_string("%s", GTK_WIDGET(GTK_COMBO(ds->combo[40])->entry), "outside")
961
 
                                );
962
 
                } else {
963
 
                        DEBUG_MSG("insert_in_stylesheet, check[5] = FALSE\n");
964
 
                        classistring =
965
 
                                g_strdup_printf("%s%s%s%s%s", insert_if_string("   display: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[37])->entry), NULL),
966
 
                                                                insert_if_string("   white-space: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[38])->entry), NULL)
967
 
                                                                , insert_if_string("   list-style-type: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[39])->entry), NULL)
968
 
                                                                , insert_if_string("   list-style-image: %s;\n", GTK_WIDGET(ds->entry[3]), NULL)
969
 
                                                                , insert_if_string("   list-style-position: %s;\n", GTK_WIDGET(GTK_COMBO(ds->combo[40])->entry), NULL)
970
 
                                );
971
 
                }
972
 
                garbage = g_list_append(garbage, classistring);
973
 
                /* end of classification */
974
 
                DEBUG_MSG("insert_in_stylesheet, putting all the strings together\n");
975
 
                ds->tmpstring = g_strdup_printf("%s%s%s {\n%s%s%s%s%s%s%s}\n", gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[8])->entry))
976
 
                                                                                , insert_if_string(".%s", GTK_WIDGET(GTK_COMBO(ds->combo[9])->entry), NULL)
977
 
                                                                                , insert_if_string(":%s", GTK_WIDGET(GTK_COMBO(ds->combo[10])->entry), NULL)
978
 
                                                                                , fontstring, margstring, padstring, borderstring, bgncolorstring, textstring, classistring);
979
 
                DEBUG_MSG("insert_new_style, ds->tmpstring=%s\n", ds->tmpstring);
980
 
                insert_dbl_text(ds->tmpstring, "");
981
 
                DEBUG_MSG("insert_new_style, text inserted\n");
982
 
                main_v->current_project.fontlist =
983
 
                        add_to_stringlist(main_v->current_project.fontlist, gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[1])->entry)));
984
 
                main_v->current_project.classlist =
985
 
                        add_to_stringlist(main_v->current_project.classlist, gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(ds->combo[9])->entry)));
986
 
                g_free(ds->tmpstring);
987
 
        }
988
 
        DEBUG_MSG("insert_new_style, going to destroy dialog\n");
989
 
        if (GTK_IS_WIDGET(ds->dialog))
990
 
                gtk_widget_destroy(ds->dialog);
991
 
        DEBUG_MSG("insert_new_style, free-ing garbage\n");
992
 
        DEBUG_MSG("insert_new_style, garbage=%p, lenght=%d\n", garbage, g_list_length(garbage));
993
 
        if (garbage)
994
 
                free_stringlist(garbage);
995
 
        garbage = NULL;
996
 
        g_free(ds);
997
 
}
998
 
#endif /* OLD_CSS_DIALOG */
999
 
 
1000
 
/**********************************************************************/
1001
 
/**********************************************************************/
1002
 
/********************this is where the new css dialog is***************/
1003
 
/**********************************************************************/
1004
 
/**********************************************************************/
 
35
#include "pixmap.h" /* new_pixmap */
1005
36
 
1006
37
static GList *glist_with_html_tags(gint with_pseudo_classes) {
1007
38
        GList *tmplist;
1014
45
        } else {
1015
46
                tmplist = g_list_append(tmplist, "a");
1016
47
        }
1017
 
        if(main_v->props.allow_h4){
1018
 
                tmplist = g_list_append(tmplist, "abbr");
1019
 
                tmplist = g_list_append(tmplist, "acronym");
1020
 
        }
 
48
        tmplist = g_list_append(tmplist, "abbr");
 
49
        tmplist = g_list_append(tmplist, "acronym");
1021
50
        tmplist = g_list_append(tmplist, "address");
1022
51
        tmplist = g_list_append(tmplist, "applet");
1023
52
        tmplist = g_list_append(tmplist, "area");
1024
53
        tmplist = g_list_append(tmplist, "b");
1025
 
        if(main_v->props.allow_h4){
1026
 
                tmplist = g_list_append(tmplist, "bdo");
1027
 
        }
1028
 
        tmplist = g_list_append(tmplist, "bockquote");
 
54
        tmplist = g_list_append(tmplist, "bdo");
 
55
        tmplist = g_list_append(tmplist, "blockquote");
1029
56
        tmplist = g_list_append(tmplist, "body");
1030
57
        tmplist = g_list_append(tmplist, "br");
1031
 
        if(main_v->props.allow_h4){
1032
 
                tmplist = g_list_append(tmplist, "button");
1033
 
        }
 
58
        tmplist = g_list_append(tmplist, "button");
1034
59
        tmplist = g_list_append(tmplist, "caption");
1035
60
        tmplist = g_list_append(tmplist, "cite");
1036
61
        tmplist = g_list_append(tmplist, "code");
1037
 
        if(main_v->props.allow_h4){
1038
 
                tmplist = g_list_append(tmplist, "col");
1039
 
                tmplist = g_list_append(tmplist, "colgroup");
1040
 
        }
 
62
        tmplist = g_list_append(tmplist, "col");
 
63
        tmplist = g_list_append(tmplist, "colgroup");
1041
64
        tmplist = g_list_append(tmplist, "dd");
1042
 
        if(main_v->props.allow_h4){
1043
 
                tmplist = g_list_append(tmplist, "del");
1044
 
        }
 
65
        tmplist = g_list_append(tmplist, "del");
1045
66
        tmplist = g_list_append(tmplist, "dfn");
1046
67
        tmplist = g_list_append(tmplist, "div");
1047
68
        tmplist = g_list_append(tmplist, "dl");
1048
69
        tmplist = g_list_append(tmplist, "dt");
1049
70
        tmplist = g_list_append(tmplist, "em");
1050
71
        tmplist = g_list_append(tmplist, "embed");
1051
 
        if(main_v->props.allow_h4){
1052
 
                tmplist = g_list_append(tmplist, "fieldset");
1053
 
        }
 
72
        tmplist = g_list_append(tmplist, "fieldset");
1054
73
        tmplist = g_list_append(tmplist, "form");
1055
74
        tmplist = g_list_append(tmplist, "h1");
1056
75
        tmplist = g_list_append(tmplist, "h2");
1060
79
        tmplist = g_list_append(tmplist, "h6");
1061
80
        tmplist = g_list_append(tmplist, "hr");
1062
81
        tmplist = g_list_append(tmplist, "i");
1063
 
        if(main_v->props.allow_h4){
1064
 
                tmplist = g_list_append(tmplist, "iframe");
1065
 
        }
 
82
        tmplist = g_list_append(tmplist, "iframe");
1066
83
        tmplist = g_list_append(tmplist, "img");
1067
84
        tmplist = g_list_append(tmplist, "input");
1068
 
        if(main_v->props.allow_h4){
1069
 
                tmplist = g_list_append(tmplist, "ins");
1070
 
        }
 
85
        tmplist = g_list_append(tmplist, "ins");
1071
86
        tmplist = g_list_append(tmplist, "kbd");
1072
 
        if(main_v->props.allow_h4){
1073
 
                tmplist = g_list_append(tmplist, "label");
1074
 
                tmplist = g_list_append(tmplist, "legend");
1075
 
        }
 
87
        tmplist = g_list_append(tmplist, "label");
 
88
        tmplist = g_list_append(tmplist, "legend");
1076
89
        tmplist = g_list_append(tmplist, "li");
1077
90
        tmplist = g_list_append(tmplist, "map");
1078
 
        if(main_v->props.allow_frames){
1079
 
                tmplist = g_list_append(tmplist, "noframes");
1080
 
        }
 
91
        tmplist = g_list_append(tmplist, "noframes");
1081
92
        tmplist = g_list_append(tmplist, "noscript");
1082
 
        if(main_v->props.allow_h4){
1083
 
                tmplist = g_list_append(tmplist, "object");
1084
 
        }
 
93
        tmplist = g_list_append(tmplist, "object");
1085
94
        tmplist = g_list_append(tmplist, "ol");
1086
 
        if(main_v->props.allow_h4){
1087
 
                tmplist = g_list_append(tmplist, "optgroup");
1088
 
        }
 
95
        tmplist = g_list_append(tmplist, "optgroup");
1089
96
        tmplist = g_list_append(tmplist, "option");
1090
97
        tmplist = g_list_append(tmplist, "p");
1091
98
        tmplist = g_list_append(tmplist, "pre");
1092
 
        if(main_v->props.allow_h4){
1093
 
                tmplist = g_list_append(tmplist, "q");
1094
 
        }
 
99
        tmplist = g_list_append(tmplist, "q");
1095
100
        if(main_v->props.allow_ruby){
1096
101
                tmplist = g_list_append(tmplist, "rb");
1097
102
                tmplist = g_list_append(tmplist, "rp");
1101
106
        tmplist = g_list_append(tmplist, "samp");
1102
107
        tmplist = g_list_append(tmplist, "select");
1103
108
        tmplist = g_list_append(tmplist, "small");
1104
 
        if(main_v->props.allow_h4){
1105
 
                tmplist = g_list_append(tmplist, "span");
1106
 
        }
 
109
        tmplist = g_list_append(tmplist, "span");
1107
110
        tmplist = g_list_append(tmplist, "strong");
1108
111
        tmplist = g_list_append(tmplist, "table");
1109
 
        if(main_v->props.allow_h4){
1110
 
                tmplist = g_list_append(tmplist, "tbody");
1111
 
        }
 
112
        tmplist = g_list_append(tmplist, "tbody");
1112
113
        tmplist = g_list_append(tmplist, "td");
1113
114
        tmplist = g_list_append(tmplist, "textarea");
1114
 
        if(main_v->props.allow_h4){
1115
 
                tmplist = g_list_append(tmplist, "tfoot");
1116
 
        }
 
115
        tmplist = g_list_append(tmplist, "tfoot");
1117
116
        tmplist = g_list_append(tmplist, "th");
1118
 
        if(main_v->props.allow_h4){
1119
 
                tmplist = g_list_append(tmplist, "thead");
1120
 
        }
 
117
        tmplist = g_list_append(tmplist, "thead");
1121
118
        tmplist = g_list_append(tmplist, "tr");
1122
119
        tmplist = g_list_append(tmplist, "tt");
1123
120
        tmplist = g_list_append(tmplist, "ul");
1126
123
        return tmplist;
1127
124
}
1128
125
 
1129
 
#ifdef NEW_CS3
1130
 
 
1131
 
typedef enum {entry, textbox} Tdest_type;
 
126
typedef enum {entry, textbox, wizard} Tdest_type;
1132
127
typedef enum {onestyle, multistyle} Tcs3_style;
1133
128
typedef enum {but_none, but_file, but_style, but_color} Textra_button;
1134
129
typedef struct {
1323
318
        return retlist;
1324
319
}
1325
320
 
1326
 
static void cs3d_destroy_lcb(GtkWidget * widget, GdkEvent *event, Tcs3_diag *diag) {
 
321
static void cs3d_destroy_lcb(GtkWidget * widget, Tcs3_diag *diag) {
1327
322
        window_destroy(diag->win);
1328
323
        g_free(diag);
1329
324
}
1330
325
 
1331
326
static void cs3d_cancel_clicked_lcb(GtkWidget * widget, Tcs3_diag *diag) {
1332
 
        cs3d_destroy_lcb(NULL, NULL, diag);
 
327
        cs3d_destroy_lcb(NULL, diag);
1333
328
}
1334
329
 
1335
330
static void cs3d_ok_clicked_lcb(GtkWidget * widget, Tcs3_diag *diag) {
1395
390
                                gtk_entry_set_text(GTK_ENTRY(dest.entry), stylebuf);
1396
391
                        }
1397
392
                } else if (dest.dest_type == textbox) {
1398
 
                        DEBUG_MSG("cs3d_ok_clicked_lcb, textbox %p?\n", dest.doc->textbox);
1399
 
                        if (dest.doc && dest.doc->textbox && GTK_IS_WIDGET(dest.doc->textbox)) {
 
393
                        if (dest.doc) {
1400
394
                                DEBUG_MSG("cs3d_ok_clicked_lcb, textbox!\n");
1401
395
                                if (dest.doc_start != -1 || dest.doc_end != -1) {
1402
 
                                        doc_replace_text(stylebuf, dest.doc_start, dest.doc_end, dest.doc);
 
396
                                        doc_replace_text(dest.doc, stylebuf, dest.doc_start, dest.doc_end);
1403
397
                                } else {
1404
 
                                        doc_insert_text(dest.doc, stylebuf);
 
398
                                        doc_insert_two_strings(dest.doc, stylebuf, NULL);
1405
399
                                }
1406
400
                        }
 
401
                } else if (dest.dest_type == wizard) {
 
402
                        GtkTextBuffer *buf;
 
403
                        buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(dest.entry));
 
404
                        gtk_text_buffer_set_text(buf, stylebuf, -1);
1407
405
                } else {
1408
406
#ifdef DEVELOPMENT
1409
407
                        g_print("cs3d_ok_clicked_lcb, an unknown dest type, this should never happen!\n");
1411
409
                }
1412
410
                g_free(stylebuf);
1413
411
        }
1414
 
        cs3d_destroy_lcb(NULL, NULL, diag);
 
412
        cs3d_destroy_lcb(NULL, diag);
1415
413
}
1416
414
 
1417
415
static void cs3d_select_row_lcb(GtkWidget *clist, gint row, gint column, GdkEventButton *event, Tcs3_diag *diag) {
1530
528
                        }
1531
529
                        switch(tmp->buttype) {
1532
530
                        case but_color:
1533
 
                                gtk_widget_show(diag->extra_but);
 
531
                                gtk_widget_set_sensitive(diag->extra_but, TRUE);
1534
532
                        break;
1535
533
                        default:
1536
 
                                gtk_widget_hide(diag->extra_but);
 
534
                                gtk_widget_set_sensitive(diag->extra_but, FALSE);
1537
535
                        break;
1538
536
                        }
1539
537
                } else {
1540
 
                                gtk_widget_hide(diag->extra_but);
 
538
                                gtk_widget_set_sensitive(diag->extra_but, FALSE);
1541
539
                }
1542
540
        } else {
1543
 
                gtk_widget_hide(diag->extra_but);
 
541
                gtk_widget_set_sensitive(diag->extra_but, FALSE);
1544
542
        }
1545
543
}
1546
544
 
1554
552
        
1555
553
        diag = g_malloc(sizeof(Tcs3_diag));
1556
554
        diag->win = window_full(_("Cascading StyleSheet dialog"), GTK_WIN_POS_MOUSE, 
1557
 
                        GTK_WINDOW_DIALOG, 5, cs3d_destroy_lcb, diag);
1558
 
        gtk_window_set_wmclass(GTK_WINDOW(diag->win), "Bluefish", "css");
 
555
                        12, G_CALLBACK(cs3d_destroy_lcb), diag, TRUE);
 
556
        gtk_window_set_role(GTK_WINDOW(diag->win), "css");
1559
557
        diag->dest = dest;
1560
558
        diag->styletype = style;
1561
559
        diag->grab = grab;
1562
560
        diag->selected_row = -1;
1563
561
 
1564
 
        vbox = gtk_vbox_new(FALSE, 5);
 
562
        vbox = gtk_vbox_new(FALSE, 0);
1565
563
        gtk_container_add(GTK_CONTAINER(diag->win),vbox);
1566
564
        
1567
 
        table = gtk_table_new(3,3,0);
 
565
        table = gtk_table_new(3, 6, FALSE);
 
566
        gtk_table_set_row_spacings(GTK_TABLE(table), 12);
 
567
        gtk_table_set_col_spacings(GTK_TABLE(table), 12);
1568
568
        gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
1569
569
        tmplist = NULL;
1570
570
        
1571
571
        if (diag->styletype == multistyle) {
1572
572
                tmplist = glist_with_html_tags(1);
1573
573
                diag->selector = combo_with_popdown(NULL, tmplist,1);
1574
 
                gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("selector")), 0,1,0,1);
1575
 
                gtk_table_attach_defaults(GTK_TABLE(table), diag->selector, 1,2,0,1);
 
574
                bf_mnemonic_label_tad_with_alignment(_("_Selector:"), diag->selector, 0, 0.5, table, 0, 1, 0, 1);
 
575
                gtk_table_attach_defaults(GTK_TABLE(table), diag->selector, 1 ,5 , 0, 1);
1576
576
                g_list_free(tmplist);
1577
577
                tmplist = NULL;
1578
578
        } 
1586
586
        diag->property = combo_with_popdown(NULL, tmplist,1);
1587
587
        g_list_free(tmplist);
1588
588
        tmplist = NULL;
1589
 
        gtk_signal_connect(GTK_OBJECT(GTK_COMBO(diag->property)->entry), "activate", cs3d_prop_activate_lcb, diag);
1590
 
        gtk_signal_connect(GTK_OBJECT(GTK_COMBO(diag->property)->entry), "changed", cs3d_prop_activate_lcb, diag);
 
589
        gtk_signal_connect(GTK_OBJECT(GTK_COMBO(diag->property)->entry), "activate", G_CALLBACK(cs3d_prop_activate_lcb), diag);
 
590
        gtk_signal_connect(GTK_OBJECT(GTK_COMBO(diag->property)->entry), "changed", G_CALLBACK(cs3d_prop_activate_lcb), diag);
1591
591
 
1592
592
        diag->value = combo_with_popdown(NULL, tmplist,1);
1593
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("property")), 0,1,1,2);
1594
 
        gtk_table_attach_defaults(GTK_TABLE(table), diag->property, 1,2,1,2);
1595
 
        gtk_table_attach_defaults(GTK_TABLE(table), gtk_label_new(_("value")), 0,1,2,3);
1596
 
        gtk_table_attach_defaults(GTK_TABLE(table), diag->value, 1,2,2,3);
1597
 
 
 
593
        bf_mnemonic_label_tad_with_alignment(_("_Property:"), diag->property, 0, 0.5, table, 0, 1, 1, 2);
 
594
        gtk_table_attach_defaults(GTK_TABLE(table), diag->property, 1, 5, 1, 2);
 
595
        bf_mnemonic_label_tad_with_alignment(_("_Value:"), diag->value, 0, 0.5, table, 0, 1, 2, 3);
 
596
        gtk_table_attach_defaults(GTK_TABLE(table), diag->value, 1, 5, 2, 3);
 
597
        
1598
598
        gtk_widget_realize(diag->win);
1599
599
 
1600
600
        diag->extra_but = color_but_new(GTK_WIDGET(GTK_COMBO(diag->value)->entry), diag->win);
1601
 
        gtk_table_attach_defaults(GTK_TABLE(table), diag->extra_but, 2,3,2,3);
 
601
        gtk_table_attach(GTK_TABLE(table), diag->extra_but, 5, 6, 2, 3, GTK_EXPAND, GTK_EXPAND, 0, 0);
1602
602
 
1603
603
        /* the list widget and the buttons are in a horizontal box */
1604
 
        hbox = gtk_hbox_new(FALSE, 0);
1605
 
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
 
604
        hbox = gtk_hbox_new(FALSE, 12);
 
605
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 18);
1606
606
 
1607
607
        scrolwin = gtk_scrolled_window_new(NULL, NULL);
1608
608
        gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1609
 
        gtk_widget_set_usize(scrolwin, 400, 300);
 
609
        gtk_widget_set_size_request(scrolwin, 400, 300);
1610
610
        gtk_box_pack_start(GTK_BOX(hbox), scrolwin, FALSE, FALSE, 0);
1611
611
        
1612
612
        if (diag->styletype == multistyle) {
1625
625
 
1626
626
        gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolwin), diag->clist);
1627
627
 
1628
 
        vbox2 = gtk_vbox_new(FALSE, 0);
 
628
        vbox2 = gtk_vbox_new(FALSE, 6);
1629
629
        gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0);
1630
630
        
1631
 
        but = bf_stock_button(_(" Add "), cs3d_add_clicked_lcb, diag);
 
631
        but = bf_generic_mnemonic_button(_(" _Add "), G_CALLBACK(cs3d_add_clicked_lcb), diag);
1632
632
        gtk_box_pack_start(GTK_BOX(vbox2), but, FALSE, FALSE, 0);
1633
633
 
1634
 
        but = bf_stock_button(_(" Update "), cs3d_update_clicked_lcb, diag);
 
634
        but = bf_generic_mnemonic_button(_(" _Update "), G_CALLBACK(cs3d_update_clicked_lcb), diag);
1635
635
        gtk_box_pack_start(GTK_BOX(vbox2), but, FALSE, FALSE, 0);
1636
636
        
1637
 
        but = bf_stock_button(_(" Delete "), cs3d_del_clicked_lcb, diag);
 
637
        but = bf_generic_mnemonic_button(_(" _Delete "), G_CALLBACK(cs3d_del_clicked_lcb), diag);
1638
638
        gtk_box_pack_start(GTK_BOX(vbox2), but, FALSE, FALSE, 0);
1639
639
 
1640
640
        /* the ok and cancel button are in a horizontal box below */
1641
 
        hbox = gtk_hbox_new(TRUE, 0);
1642
 
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
1643
 
        but = bf_stock_ok_button(cs3d_ok_clicked_lcb, diag);
1644
 
        gtk_box_pack_start(GTK_BOX(hbox), but, TRUE, TRUE, 0);
1645
 
        but = bf_stock_cancel_button(cs3d_cancel_clicked_lcb, diag);
1646
 
        gtk_box_pack_start(GTK_BOX(hbox), but, TRUE, TRUE, 0);
 
641
        hbox = gtk_hbox_new(FALSE, 0);
 
642
        gtk_box_pack_start(GTK_BOX(hbox), gtk_hseparator_new(), TRUE, TRUE, 0);
 
643
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 12);      
 
644
 
 
645
        hbox = gtk_hbutton_box_new();
 
646
        gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_END);
 
647
        gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbox), 12);
 
648
        
 
649
        but = bf_stock_cancel_button(G_CALLBACK(cs3d_cancel_clicked_lcb), diag);
 
650
        gtk_box_pack_start(GTK_BOX(hbox), but, FALSE, FALSE, 0);
 
651
        but = bf_stock_ok_button(G_CALLBACK(cs3d_ok_clicked_lcb), diag);
 
652
        gtk_box_pack_start(GTK_BOX(hbox), but, FALSE, FALSE, 0);
 
653
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);       
1647
654
        
1648
655
        gtk_widget_show_all(diag->win);
1649
656
        
1823
830
        DEBUG_MSG("css_parse, finished\n");
1824
831
}
1825
832
 
1826
 
void new_css_dialog(GtkWidget *widget, gpointer data) {
 
833
void new_css_dialog(GtkWidget *wid, Tbfwin *bfwin) {
1827
834
        Tcs3_destination dest;
1828
835
        Tcs3_diag *diag;
 
836
        gint sel_start, sel_end;
 
837
        gboolean has_selection;
1829
838
 
1830
839
        dest.dest_type = textbox;
1831
840
        dest.entry = NULL;
1832
 
        dest.doc = main_v->current_document;
1833
 
        if (GTK_EDITABLE(dest.doc->textbox)->has_selection) {
1834
 
                dest.doc_start = GTK_EDITABLE(dest.doc->textbox)->selection_start_pos;
1835
 
                dest.doc_end = GTK_EDITABLE(dest.doc->textbox)->selection_end_pos;
 
841
        dest.doc = bfwin->current_document;
 
842
        if (!doc_get_selection(dest.doc, &sel_start, &sel_end)) {
 
843
                dest.doc_start = -1;
 
844
                dest.doc_end = -1;
 
845
                has_selection = FALSE;
1836
846
        } else {
1837
 
                dest.doc_start = -1; /* have to set these from the selection !! */
1838
 
                dest.doc_end = -1;      /* have to set these from the selection !! */
 
847
                has_selection = TRUE;
 
848
                dest.doc_start = sel_start;
 
849
                dest.doc_end = sel_end;
1839
850
        }
1840
851
        if (dest.doc_start > dest.doc_end) {
1841
852
                gint swap = dest.doc_start;
1844
855
        }
1845
856
 
1846
857
        diag = css_diag(dest, multistyle, NULL, FALSE);
1847
 
        if (GTK_EDITABLE(dest.doc->textbox)->has_selection) {
 
858
        if (has_selection) {
1848
859
                gchar *data;
1849
860
 
1850
 
                data = gtk_editable_get_chars(GTK_EDITABLE(dest.doc->textbox), dest.doc_start, dest.doc_end);
 
861
                data = doc_get_chars(dest.doc, sel_start, sel_end);
1851
862
                DEBUG_MSG("new_css_dialog, data=%p\n", data);
1852
863
                css_parse(diag, data);
1853
864
                g_free(data);
1874
885
 
1875
886
GtkWidget *style_but_new(GtkWidget * which_entry, GtkWidget * win)
1876
887
{
1877
 
        GtkWidget *pixmap, *style_but;
1878
 
 
1879
 
/* style_but = gtk_button_new_with_label("Edit style"); */
1880
 
        style_but = gtk_button_new();
1881
 
        pixmap = new_pixmap(192, win->window, NULL);
1882
 
        gtk_widget_show(pixmap);
1883
 
        gtk_container_add(GTK_CONTAINER(style_but), pixmap);
1884
 
 
1885
 
        gtk_signal_connect(GTK_OBJECT(style_but), "clicked", style_but_clicked_lcb, which_entry);
1886
 
        gtk_widget_show(style_but);
1887
 
        return style_but;
1888
 
}
1889
 
#endif /* #ifdef NEW_CS3 */
 
888
        GtkWidget *style_but, *hbox;
 
889
 
 
890
        style_but = gtk_button_new();
 
891
        hbox = gtk_hbox_new(FALSE, 0);
 
892
        gtk_box_pack_start(GTK_BOX(hbox), new_pixmap(92),FALSE, FALSE, 3);
 
893
        gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new_with_mnemonic(_("_Style...")), TRUE, TRUE, 3);
 
894
        gtk_container_add(GTK_CONTAINER(style_but), hbox);
 
895
        gtk_signal_connect(GTK_OBJECT(style_but), "clicked", G_CALLBACK(style_but_clicked_lcb), which_entry);
 
896
        gtk_widget_show_all(style_but);
 
897
        return style_but;
 
898
}
 
899
 
 
900
static void style_but_for_wizard_clicked_lcb(GtkWidget * widget, GtkWidget * textview)
 
901
{
 
902
        Tcs3_destination dest;
 
903
        Tcs3_diag *diag;
 
904
        gchar *data;
 
905
        GtkWidget *win;
 
906
 
 
907
        dest.dest_type = wizard;
 
908
        dest.entry = textview;
 
909
        dest.doc = NULL;
 
910
 
 
911
        win = gtk_widget_get_toplevel(textview);
 
912
        diag = css_diag(dest, multistyle, win, TRUE);
 
913
        {
 
914
                GtkTextBuffer *buf;
 
915
                GtkTextIter itstart, itend;
 
916
                buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
 
917
                gtk_text_buffer_get_bounds(buf,&itstart,&itend);
 
918
                data = gtk_text_buffer_get_text(buf, &itstart, &itend, FALSE);
 
919
                css_parse(diag, data);
 
920
                g_free(data);
 
921
        }
 
922
}
 
923
 
 
924
GtkWidget *style_but_new_for_wizard(GtkWidget * textview) {
 
925
        GtkWidget *style_but, *hbox;
 
926
 
 
927
        style_but = gtk_button_new();
 
928
        hbox = gtk_hbox_new(FALSE, 0);
 
929
        gtk_box_pack_start(GTK_BOX(hbox), new_pixmap(92),FALSE, FALSE, 6);
 
930
        gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new_with_mnemonic(_("_Style...")), TRUE, TRUE, 6);
 
931
        gtk_container_add(GTK_CONTAINER(style_but), hbox);
 
932
        gtk_signal_connect(GTK_OBJECT(style_but), "clicked", G_CALLBACK(style_but_for_wizard_clicked_lcb), textview);
 
933
        gtk_widget_show_all(style_but);
 
934
        return style_but;
 
935
}
 
936
 
 
937
/*****************/
 
938
/* colorbut code */
 
939
/*****************/
 
940
 
 
941
typedef struct {
 
942
        GtkWidget *win;
 
943
        GtkWidget *hexentry;
 
944
        GtkWidget *websafe;
 
945
        GtkWidget *csel;
 
946
        gint hex_changed_id;
 
947
        gint csel_changed_id;
 
948
        /* the dialog is dual functional: it can be caklled directly from the text, and it can be called by return_color 
 
949
        if called by return_color it is in the modal state */
 
950
        gint is_modal;
 
951
        /* for the modal state */
 
952
        gchar *returnval;
 
953
 
 
954
        /* for the non-modal state */
 
955
        gint startpos;
 
956
        gint endpos;
 
957
        Tbfwin *bfwin;
 
958
} Tcolsel;
 
959
 
 
960
static gchar *GdkColor_to_hexstring(GdkColor *color, gboolean websafe) {
 
961
        gchar *tmpstr;
 
962
 
 
963
        tmpstr = g_malloc(8*sizeof(char));
 
964
        if (websafe) {
 
965
                g_snprintf (tmpstr, 8,"#%.2X%.2X%.2X", (0x33 * color->red/(256*0x33)), (0x33 * color->green/(256*0x33)), (0x33 * color->blue/(256*0x33)) );
 
966
        } else {
 
967
                g_snprintf (tmpstr, 8,"#%.2X%.2X%.2X", color->red/256, color->green/256, color->blue/256);
 
968
        }
 
969
        return tmpstr;
 
970
}
 
971
/*
 
972
static gdouble *hex_to_gdouble_arr(const gchar *color) {
 
973
        static gdouble tmpcol[4];
 
974
        gchar tmpstr[8];
 
975
        long tmpl;
 
976
 
 
977
        if (!string_is_color(color)) {
 
978
                DEBUG_MSG("hex_to_gdouble_arr, color is not a valid #...... color\n");
 
979
                return NULL;
 
980
        }
 
981
        strncpy(tmpstr, &color[1], 2);
 
982
        tmpl = strtol(tmpstr, NULL, 16);
 
983
        tmpcol[0] = (gdouble) tmpl;
 
984
        
 
985
        strncpy(tmpstr, &color[3], 2);
 
986
        tmpl = strtol(tmpstr, NULL, 16);
 
987
        tmpcol[1] = (gdouble) tmpl;
 
988
        
 
989
        strncpy(tmpstr, &color[5], 2);
 
990
        tmpl = strtol(tmpstr, NULL, 16);
 
991
        tmpcol[2] = (gdouble) tmpl;
 
992
 
 
993
        DEBUG_MSG("hex_to_gdouble_arr, R=%d, G=%d, B=%d\n", color[0], color[1], color[2]);
 
994
 
 
995
        tmpcol[3] = 0;
 
996
        return tmpcol;
 
997
}
 
998
*/ 
 
999
static void colsel_destroy_lcb(GtkWidget *widget, Tcolsel *csd) {
 
1000
        DEBUG_MSG("colsel_destroy_lcb, started for csd=%p\n",csd);
 
1001
        g_free(csd->returnval);
 
1002
        g_free(csd);
 
1003
}
 
1004
 
 
1005
static void colsel_ok_clicked_lcb(GtkWidget *widget, Tcolsel *csd) { 
 
1006
        gchar *tmpstr;
 
1007
        GdkColor gcolor;
 
1008
        /* only on a OK click we do the setcolor thing */
 
1009
        gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(csd->csel), &gcolor);
 
1010
 
 
1011
        tmpstr = GdkColor_to_hexstring(&gcolor, FALSE);
 
1012
        if (csd->bfwin) {
 
1013
                csd->bfwin->session->colorlist = add_to_stringlist(csd->bfwin->session->colorlist, tmpstr);
 
1014
        }
 
1015
        
 
1016
        if (csd->is_modal) {
 
1017
                g_free(csd->returnval);
 
1018
                csd->returnval = tmpstr;
 
1019
                gtk_main_quit();
 
1020
        } else {
 
1021
                if (string_is_color(tmpstr)) {
 
1022
                        if (csd->startpos || csd->endpos) {
 
1023
                                DEBUG_MSG("colsel_ok_clicked_lcb, replacing with %s\n", tmpstr);
 
1024
                                doc_replace_text(csd->bfwin->current_document, tmpstr, csd->startpos, csd->endpos);
 
1025
                        } else {
 
1026
                                DEBUG_MSG("colsel_ok_clicked_lcb, inserting %s\n", tmpstr);
 
1027
                                doc_insert_two_strings(csd->bfwin->current_document,tmpstr, NULL);
 
1028
                        }
 
1029
                }
 
1030
                g_free(tmpstr);
 
1031
                window_destroy(csd->win);
 
1032
        }
 
1033
}
 
1034
 
 
1035
static void colsel_cancel_clicked_lcb(GtkWidget *widget, Tcolsel *csd) {
 
1036
        window_destroy(csd->win);
 
1037
}
 
1038
/* declaration needed to connect/disconnect callback */
 
1039
/*static void colsel_color_changed(GtkWidget *widget, Tcolsel *csd);
 
1040
 
 
1041
static void hexentry_color_changed(GtkWidget *widget, Tcolsel *csd) {
 
1042
        gdouble *color;
 
1043
        gchar *tmpstr;
 
1044
        tmpstr=gtk_editable_get_chars(GTK_EDITABLE(csd->hexentry), 0, -1);
 
1045
        if (strlen(tmpstr) == 7){
 
1046
                color = hex_to_gdouble_arr(tmpstr);
 
1047
                if (color) {
 
1048
                        gtk_signal_disconnect(GTK_OBJECT(csd->csel), csd->csel_changed_id);
 
1049
                        gtk_color_selection_set_color(GTK_COLOR_SELECTION(csd->csel), color);
 
1050
                        csd->csel_changed_id = gtk_signal_connect(GTK_OBJECT(csd->csel), "color-changed", G_CALLBACK(colsel_color_changed), csd);
 
1051
                } else {
 
1052
                        tmpstr=NULL;
 
1053
                }
 
1054
        }
 
1055
        g_free(tmpstr);
 
1056
}*/
 
1057
 
 
1058
/*
 
1059
static void colsel_color_changed(GtkWidget *widget, Tcolsel *csd) {
 
1060
        gdouble color[4];
 
1061
        gchar *tmpstr;
 
1062
 
 
1063
        gtk_color_selection_get_color(GTK_COLOR_SELECTION(csd->csel), color);
 
1064
        tmpstr = gdouble_arr_to_hex(color, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(csd->websafe)));
 
1065
 
 
1066
        gtk_signal_disconnect(GTK_OBJECT(csd->hexentry), csd->hex_changed_id);
 
1067
        gtk_entry_set_text(GTK_ENTRY(csd->hexentry), tmpstr);
 
1068
        csd->hex_changed_id = gtk_signal_connect(GTK_OBJECT(csd->hexentry), "changed", G_CALLBACK(hexentry_color_changed), csd);
 
1069
        g_free(tmpstr);
 
1070
}*/
 
1071
 
 
1072
static Tcolsel *colsel_dialog(Tbfwin *bfwin,const gchar *setcolor, gint modal, gint startpos, gint endpos) {
 
1073
        Tcolsel *csd;
 
1074
        GtkWidget *vbox, *hbox, *but;
 
1075
        GdkColor gcolor;
 
1076
        const gchar *this_color=setcolor;
 
1077
 
 
1078
        csd = g_malloc(sizeof(Tcolsel));
 
1079
        /* warning: bfwin might be NULL if this dialog is started by return_color() */
 
1080
        csd->bfwin = bfwin;
 
1081
        csd->is_modal = modal;
 
1082
        csd->startpos = startpos;
 
1083
        csd->endpos = endpos;
 
1084
        csd->returnval = setcolor ? g_strdup(setcolor) : g_strdup("");
 
1085
        
 
1086
        DEBUG_MSG("colsel_dialog, malloced at %p, setcolor=%s\n", csd, setcolor);
 
1087
        csd->win = window_full2(_("Bluefish: Select color"), GTK_WIN_POS_MOUSE, 12, G_CALLBACK(colsel_destroy_lcb), csd, TRUE, NULL);
 
1088
        vbox = gtk_vbox_new(FALSE, 0);
 
1089
        gtk_container_add(GTK_CONTAINER(csd->win), vbox);
 
1090
        csd->csel = gtk_color_selection_new();
 
1091
        gtk_color_selection_set_has_opacity_control(GTK_COLOR_SELECTION(csd->csel), FALSE);
 
1092
        
 
1093
        if (this_color) {
 
1094
                if (gdk_color_parse(this_color, &gcolor)) {
 
1095
                        gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(csd->csel), &gcolor);
 
1096
                } else {
 
1097
                        this_color=NULL;
 
1098
                }
 
1099
        }
 
1100
        if (bfwin && bfwin->session->colorlist) {
 
1101
                GtkSettings* gtksettings;
 
1102
/*              GdkColor *gcolorarr=NULL;
 
1103
                gint num=0;*/
 
1104
                gchar *strings = stringlist_to_string(bfwin->session->colorlist, ":");
 
1105
                strings[strlen(strings)-1] = '\0';
 
1106
                gtksettings = gtk_widget_get_settings(GTK_WIDGET(csd->csel));
 
1107
                g_object_set(G_OBJECT(gtksettings), "gtk-color-palette", strings, NULL); 
 
1108
/*              DEBUG_MSG("colsel_dialog, setting palette from %s\n", strings);
 
1109
                if (gtk_color_selection_palette_from_string(strings, &gcolorarr, &num)) {
 
1110
                        DEBUG_MSG("num=%d, gcolorarr=%p\n",num,gcolorarr);
 
1111
                } else {
 
1112
                        DEBUG_MSG("hmm, failed to parse our string :(\n");
 
1113
                } */
 
1114
                g_free(strings);
 
1115
        }
 
1116
        gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(csd->csel), TRUE);
 
1117
        gtk_box_pack_start(GTK_BOX(vbox), csd->csel, TRUE, TRUE, 0);
 
1118
/*      
 
1119
        csd->csel_changed_id = gtk_signal_connect(GTK_OBJECT(csd->csel), "color-changed", G_CALLBACK(colsel_color_changed), csd);
 
1120
        
 
1121
 
 
1122
        hbox = gtk_hbox_new(FALSE, 0);
 
1123
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 12);
 
1124
        
 
1125
        csd->hexentry = boxed_entry_with_text(this_color, 7, hbox);
 
1126
        csd->hex_changed_id = gtk_signal_connect(GTK_OBJECT(csd->hexentry), "changed", G_CALLBACK(hexentry_color_changed), csd);
 
1127
        csd->websafe = boxed_checkbut_with_value(_("_websafe"), 0, hbox);
 
1128
*/
 
1129
        hbox = gtk_hbox_new(FALSE, 0);
 
1130
        gtk_box_pack_start(GTK_BOX(hbox), gtk_hseparator_new(), TRUE, TRUE, 0);
 
1131
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 12);
 
1132
 
 
1133
        hbox = gtk_hbutton_box_new();
 
1134
        gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_END);
 
1135
        gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbox), 12);
 
1136
        gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
 
1137
 
 
1138
        but = bf_stock_cancel_button(G_CALLBACK(colsel_cancel_clicked_lcb), csd);
 
1139
        gtk_box_pack_start(GTK_BOX(hbox), but, TRUE, TRUE, 0);
 
1140
        but = bf_stock_ok_button(G_CALLBACK(colsel_ok_clicked_lcb), csd);
 
1141
        gtk_window_set_default(GTK_WINDOW(csd->win), but);
 
1142
        gtk_box_pack_start(GTK_BOX(hbox), but, TRUE, TRUE, 0);
 
1143
        gtk_widget_show_all(csd->win);
 
1144
 
 
1145
        DEBUG_MSG("colsel_dialog, finished\n");
 
1146
        return csd;
 
1147
}
 
1148
 
 
1149
void edit_color_dialog(Tdocument *doc, gchar *color, gint startpos, gint endpos) {
 
1150
        colsel_dialog(doc->bfwin, color, FALSE, startpos, endpos);
 
1151
}
 
1152
 
 
1153
void sel_colour_cb(GtkWidget *widget, Tbfwin *bfwin) {
 
1154
        Tcolsel *csd;
 
1155
        gchar *tmpstr=NULL;
 
1156
        gint startpos=0;
 
1157
        gint endpos=0;
 
1158
 
 
1159
        if (doc_get_selection(bfwin->current_document,&startpos , &endpos)) {
 
1160
                DEBUG_MSG("sel_colour_cb, selection found\n");
 
1161
                if (startpos > endpos) {
 
1162
                        gint tmpint;
 
1163
                        tmpint = startpos;
 
1164
                        startpos = endpos;              
 
1165
                        endpos = tmpint;
 
1166
                }
 
1167
                if ((endpos - startpos) == 7) {
 
1168
                        tmpstr = doc_get_chars(bfwin->current_document,startpos,endpos);
 
1169
                        if (!string_is_color(tmpstr)) {
 
1170
                                startpos = endpos = 0;
 
1171
                        }
 
1172
                        DEBUG_MSG("sel_colour_cb, tmpstr = %s (startpos=%d, endpos=%d)\n", tmpstr, startpos, endpos);
 
1173
                } else {
 
1174
                        DEBUG_MSG("sel_colour_cb, startpos=%d, endpos=%d\n", startpos, endpos);
 
1175
                        startpos = endpos = 0;
 
1176
                }
 
1177
        } else {
 
1178
                DEBUG_MSG("sel_colour_cb, NO selection found\n");
 
1179
        }
 
1180
 
 
1181
        csd = colsel_dialog(bfwin, tmpstr, 0, startpos, endpos);
 
1182
        if (tmpstr) {
 
1183
                g_free(tmpstr);
 
1184
        }
 
1185
}
 
1186
 
 
1187
gchar *return_color(gchar *start_value) {
 
1188
        Tcolsel *csd;
 
1189
        gchar *return_text;
 
1190
 
 
1191
        csd = colsel_dialog(NULL,start_value, 1, 0, 0);
 
1192
        DEBUG_MSG("return color, started\n");
 
1193
        gtk_grab_add(csd->win);
 
1194
        gtk_main();
 
1195
 
 
1196
        return_text = g_strdup(csd->returnval);
 
1197
        window_destroy(csd->win);
 
1198
        DEBUG_MSG("return_color, the new gtk_main stopped, return_text=%s, %p\n", return_text, return_text);
 
1199
        return return_text;
 
1200
}
 
1201
 
 
1202
static void color_but_clicked(GtkWidget * widget, GtkWidget * entry)
 
1203
{
 
1204
        gchar *tmpstring, *tmpstr2;
 
1205
 
 
1206
        DEBUG_MSG("color_but_clicked, before return_color\n");
 
1207
        tmpstr2 = gtk_editable_get_chars(GTK_EDITABLE(entry),0 ,-1);
 
1208
        tmpstring = return_color(tmpstr2);
 
1209
        DEBUG_MSG("color_but_clicked, return_color=%s\n", tmpstring);
 
1210
        gtk_entry_set_text(GTK_ENTRY(entry), tmpstring);
 
1211
        g_free(tmpstring);
 
1212
        g_free(tmpstr2);
 
1213
 
 
1214
}
 
1215
 
 
1216
GtkWidget *color_but_new(GtkWidget * which_entry, GtkWidget * win)
 
1217
{
 
1218
        GtkWidget *color_but;
 
1219
 
 
1220
        color_but = gtk_button_new_from_stock(GTK_STOCK_SELECT_COLOR);
 
1221
        gtk_signal_connect(GTK_OBJECT(color_but), "clicked", G_CALLBACK(color_but_clicked), which_entry);
 
1222
        gtk_widget_show(color_but);
 
1223
        return color_but;
 
1224
}