1 /* Bluefish HTML Editor
2 * html.c - menu/toolbar callbacks, inserting functions, and other cool stuff
3 *
4 * Copyright (C) 1998 Olivier Sessink and Chris Mazuc
5 * modifications Copyright (C) 1999 Antti-Juhani Kaijanaho
6 * rewrite November 2000 (C) Olivier Sessink
7 * Copyright (C) 1999-2012 Olivier Sessink
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 */
22
23 /*#define DEBUG*/
24
25 #include <gtk/gtk.h>
26 #include <stdio.h>
27 #include <stdlib.h> /* strtod() */
28 #include <string.h>
29 #include <time.h>
30
31 #include "htmlbar.h"
32 #include "html.h"
33 #include "html_diag.h" /* the new html dialog stuff */
34 #include "html2.h" /* style_but_new */
35 #include "cap.h" /* cap() */
36 #include "../bf_lib.h" /* main_v */
37 #include "../dialog_utils.h"
38 #include "../document.h"
39 #include "../gtk_easy.h"
40 #include "../stringlist.h"
41
42
43 /*****************************************************************************/
44
45 void
htmlbar_insert_special_char(Tbfwin * bfwin,TBFSpecialChars spchar)46 htmlbar_insert_special_char(Tbfwin * bfwin, TBFSpecialChars spchar)
47 {
48 const gchar *sp_chars[] = {
49 NULL, " ", "¦", "­"
50 };
51
52 doc_insert_two_strings(bfwin->current_document, sp_chars[spchar], NULL);
53 }
54
55 void
general_html_menu_cb(Tbfwin * bfwin,guint callback_action,GtkWidget * widget)56 general_html_menu_cb(Tbfwin * bfwin, guint callback_action, GtkWidget * widget)
57 {
58 gchar *tmp;
59 gboolean is_xhtml = get_curlang_option_value(bfwin, lang_is_XHTML);
60 g_print("general_html_menu_cb, switch %d\n",callback_action);
61 switch (callback_action) {
62 case 1:
63 doc_insert_two_strings(bfwin->current_document, cap("<B>"), cap("</B>"));
64 break;
65 case 2:
66 doc_insert_two_strings(bfwin->current_document, cap("<I>"), cap("</I>"));
67 break;
68 case 3:
69 doc_insert_two_strings(bfwin->current_document,
70 is_xhtml ? cap("<SPAN STYLE=\"text-decoration: underline;\">") : cap("<U>")
71 , is_xhtml ? cap("</SPAN>") : cap("</U>"));
72 break;
73 case 4:
74 doc_insert_two_strings(bfwin->current_document, cap("<STRIKE>"), cap("</STRIKE>"));
75 break;
76 case 5:
77 doc_insert_two_strings(bfwin->current_document, cap("<P>"), cap("</P>"));
78 break;
79 case 6:
80 doc_insert_two_strings(bfwin->current_document,
81 get_curlang_option_value(bfwin, self_close_singleton_tags) ? cap("<br />") : cap("<br>"), NULL);
82 break;
83 case 7:
84 doc_insert_two_strings(bfwin->current_document, " ", NULL);
85 break;
86 case 8:
87 doc_insert_two_strings(bfwin->current_document,
88 is_xhtml ? cap("<DIV STYLE=\"text-align: center;\">") : cap("<DIV ALIGN=\"CENTER\">"),
89 cap("</DIV>"));
90 break;
91 case 9:
92 doc_insert_two_strings(bfwin->current_document,
93 is_xhtml ? cap("<DIV STYLE=\"text-align: right;\">") : cap("<DIV ALIGN=\"RIGHT\">"),
94 cap("</DIV>"));
95 break;
96 case 10:
97 doc_insert_two_strings(bfwin->current_document, "<!-- ", " -->");
98 break;
99 case 11:
100 doc_insert_two_strings(bfwin->current_document,
101 is_xhtml ? cap("<SPAN STYLE=\"font-size: larger;\">") : cap("<FONT SIZE=\"+1\">")
102 , is_xhtml ? cap("</SPAN>") : cap("</FONT>"));
103 break;
104 case 12:
105 doc_insert_two_strings(bfwin->current_document,
106 is_xhtml ? cap("<SPAN STYLE=\"font-size: smaller;\">") : cap("<FONT SIZE=\"-1\">")
107 , is_xhtml ? cap("</SPAN>") : cap("</FONT>"));
108 break;
109 case 13:
110 doc_insert_two_strings(bfwin->current_document, cap("<PRE>"), cap("</PRE>"));
111 break;
112 case 14:
113 doc_insert_two_strings(bfwin->current_document, cap("<SUB>"), cap("</SUB>"));
114 break;
115 case 15:
116 doc_insert_two_strings(bfwin->current_document, cap("<SUP>"), cap("</SUP>"));
117 break;
118 case 16:
119 doc_insert_two_strings(bfwin->current_document, cap("<STRONG>"), cap("</STRONG>"));
120 break;
121 case 17:
122 doc_insert_two_strings(bfwin->current_document, cap("<EM>"), cap("</EM>"));
123 break;
124 case 18:
125 doc_insert_two_strings(bfwin->current_document, cap("<H1>"), cap("</H1>"));
126 break;
127 case 19:
128 doc_insert_two_strings(bfwin->current_document, cap("<H2>"), cap("</H2>"));
129 break;
130 case 20:
131 doc_insert_two_strings(bfwin->current_document, cap("<H3>"), cap("</H3>"));
132 break;
133 case 21:
134 doc_insert_two_strings(bfwin->current_document, cap("<H4>"), cap("</H4>"));
135 break;
136 case 22:
137 doc_insert_two_strings(bfwin->current_document, cap("<H5>"), cap("</H5>"));
138 break;
139 case 23:
140 doc_insert_two_strings(bfwin->current_document, cap("<H6>"), cap("</H6>"));
141 break;
142 case 24:
143 doc_insert_two_strings(bfwin->current_document, cap("<TABLE>"), cap("</TABLE>"));
144 break;
145 case 25:
146 doc_insert_two_strings(bfwin->current_document, cap("<TR>"), cap("</TR>"));
147 break;
148 case 26:
149 doc_insert_two_strings(bfwin->current_document, cap("<TH>"), cap("</TH>"));
150 break;
151 case 27:
152 doc_insert_two_strings(bfwin->current_document, cap("<TD>"), cap("</TD>"));
153 break;
154 case 28:
155 doc_insert_two_strings(bfwin->current_document, cap("<CAPTION>"), cap("</CAPTION>"));
156 break;
157 case 29:
158 doc_insert_two_strings(bfwin->current_document, cap("<FRAMESET>"), cap("</FRAMESET>"));
159 break;
160 case 30:
161 doc_insert_two_strings(bfwin->current_document,
162 get_curlang_option_value(bfwin, self_close_singleton_tags) ? cap("<FRAME />") : cap("<FRAME>"), NULL);
163 break;
164 case 31:
165 doc_insert_two_strings(bfwin->current_document, cap("<NOFRAMES>"), cap("</NOFRAMES>"));
166 break;
167 case 32:
168 doc_insert_two_strings(bfwin->current_document,
169 get_curlang_option_value(bfwin, self_close_singleton_tags) ? cap("<BASE TARGET=\"\" />") : cap("<BASE TARGET=\"\">"), NULL);
170 break;
171 case 33:
172 doc_insert_two_strings(bfwin->current_document, cap("<UL>"), cap("</UL>"));
173 break;
174 case 34:
175 doc_insert_two_strings(bfwin->current_document, cap("<OL>"), cap("</OL>"));
176 break;
177 case 35:
178 doc_insert_two_strings(bfwin->current_document, cap("<LI>"), cap("</LI>"));
179 break;
180 case 36:
181 doc_insert_two_strings(bfwin->current_document, cap("<DL>\n\t<DT></DT>\n\t<DD></DD>\n</DL>"), "\n");
182 break;
183 case 37:
184 doc_insert_two_strings(bfwin->current_document, cap("<DT>"), cap("</DT>"));
185 break;
186 case 38:
187 doc_insert_two_strings(bfwin->current_document, cap("<DD>"), cap("</DD>"));
188 break;
189 case 39:
190 doc_insert_two_strings(bfwin->current_document, cap("<MENU>"), cap("</MENU>"));
191 break;
192 case 40:
193 doc_insert_two_strings(bfwin->current_document, cap("<MAP NAME=\""), is_xhtml ?
194 cap("\">\n\t<AREA SHAPE=\"\" COORDS=\"\" HREF=\"\" />\n</MAP>\n") :
195 cap("\">\n\t<AREA SHAPE=\"\" COORDS=\"\" HREF=\"\">\n</MAP>\n"));
196 break;
197 case 41:
198 doc_insert_two_strings(bfwin->current_document,
199 get_curlang_option_value(bfwin, self_close_singleton_tags) ? cap("<BR CLEAR=\"ALL\" />") : cap("<BR CLEAR=\"ALL\">"), NULL);
200 break;
201 case 42:
202 /* the text/css should be always lowercase! */
203 tmp = g_strdup_printf("<%s=\"text/css\"><!--\n", cap("STYLE TYPE"));
204 doc_insert_two_strings(bfwin->current_document, tmp, cap("\n--></STYLE>"));
205 g_free(tmp);
206 break;
207 case 43:
208 doc_insert_two_strings(bfwin->current_document, cap("<NOBR>"), cap("</NOBR>"));
209 break;
210 case 44:
211 tmp = g_strdup_printf("<%s=\"javascript\" %s=\"text/javascript\"><!--\n", cap("SCRIPT LANGUAGE"),
212 cap("TYPE"));
213 doc_insert_two_strings(bfwin->current_document, tmp, cap("\n//--></SCRIPT>"));
214 g_free(tmp);
215 break;
216 /* case 45:
217 tmp = g_strdup_printf("<%s=\"javascript\" %s>", cap("SCRIPT LANGUAGE"), cap("SRC=\"\" TYPE=\"text/javascript\""));
218 doc_insert_two_strings(bfwin->current_document, tmp, cap("</SCRIPT>"));
219 g_free(tmp);
220 break; */
221 /* case 46:
222 tmp = g_strdup_printf("<%s=\"stylesheet\" %s=\"\" %s=\"text/css\">", cap("LINK REL"), cap("HREF"), cap("TYPE"));
223 doc_insert_two_strings(bfwin->current_document, tmp, "");
224 g_free(tmp);
225 break; */
226 case 47:
227 tmp = g_strconcat(cap("<META NAME=\"Generator\" CONTENT=\"")
228 , "Bluefish ", VERSION, " http://bluefish.openoffice.nl/",
229 get_curlang_option_value(bfwin, self_close_singleton_tags) ? "\" />\n" : "\">\n", NULL);
230 doc_insert_two_strings(bfwin->current_document, tmp, NULL);
231 g_free(tmp);
232 break;
233 case 48:
234 doc_insert_two_strings(bfwin->current_document, cap("<DFN>"), cap("</DFN>"));
235 break;
236 case 49:
237 doc_insert_two_strings(bfwin->current_document, cap("<CODE>"), cap("</CODE>"));
238 break;
239 case 50:
240 doc_insert_two_strings(bfwin->current_document, cap("<SAMP>"), cap("</SAMP>"));
241 break;
242 case 51:
243 doc_insert_two_strings(bfwin->current_document, cap("<KBD>"), cap("</KBD>"));
244 break;
245 case 52:
246 doc_insert_two_strings(bfwin->current_document, cap("<VAR>"), cap("</VAR>"));
247 break;
248 case 53:
249 doc_insert_two_strings(bfwin->current_document, cap("<CITE>"), cap("</CITE>"));
250 break;
251 case 54:
252 doc_insert_two_strings(bfwin->current_document, cap("<ABBR>"), cap("</ABBR>"));
253 break;
254 case 55:
255 doc_insert_two_strings(bfwin->current_document, cap("<ACRONYM>"), cap("</ACRONYM>"));
256 break;
257 case 56:
258 doc_insert_two_strings(bfwin->current_document, cap("<SMALL>"), cap("</SMALL>"));
259 break;
260 case 57:
261 doc_insert_two_strings(bfwin->current_document, cap("<BIG>"), cap("</BIG>"));
262 break;
263 case 58:
264 doc_insert_two_strings(bfwin->current_document, cap("<BUTTON>"), cap("</BUTTON>"));
265 break;
266 case 59:
267 doc_insert_two_strings(bfwin->current_document, cap("<SCRIPT>"), cap("</SCRIPT>"));
268 break;
269 case 60:
270 doc_insert_two_strings(bfwin->current_document, cap("<SPAN>"), cap("</SPAN>"));
271 break;
272 case 61:
273 doc_insert_two_strings(bfwin->current_document,
274 get_curlang_option_value(bfwin, self_close_singleton_tags) ? cap("<LINK />") : cap("<LINK>"), NULL);
275 break;
276 case 62:
277 doc_insert_two_strings(bfwin->current_document, cap("<DIV>"), cap("</DIV>"));
278 break;
279 case 63:
280 doc_insert_two_strings(bfwin->current_document, cap("<A>"), cap("</A>"));
281 break;
282 case 64:
283 doc_insert_two_strings(bfwin->current_document,
284 get_curlang_option_value(bfwin, self_close_singleton_tags) ? cap("<IMG />") : cap("<IMG>"), NULL);
285 break;
286 case 65:
287 doc_insert_two_strings(bfwin->current_document,
288 get_curlang_option_value(bfwin, self_close_singleton_tags) ? cap("<INPUT />") : cap("<INPUT>"), NULL);
289 break;
290 case 66:
291 doc_insert_two_strings(bfwin->current_document, cap("<TEXTAREA>"), cap("</TEXTAREA>"));
292 break;
293 case 67:
294 doc_insert_two_strings(bfwin->current_document, cap("<FORM>"), cap("</FORM>"));
295 break;
296 case 68:
297 doc_insert_two_strings(bfwin->current_document, cap("<INS>"), cap("</INS>"));
298 break;
299 case 69:
300 doc_insert_two_strings(bfwin->current_document, cap("<DEL>"), cap("</DEL>"));
301 break;
302 case 70:
303 doc_insert_two_strings(bfwin->current_document, cap("<ARTICLE>"), cap("</ARTICLE>"));
304 break;
305 default:
306 break;
307 }
308 }
309
310
311 /************************************************************************/
312
313 static gchar *
extract_time_string(const gchar * original_string)314 extract_time_string(const gchar *original_string)
315 {
316 static gchar *return_string;
317 gchar *start_ptr;
318 gchar *end_ptr;
319 gint string_size;
320
321 return_string = g_malloc0(32);
322 start_ptr = strchr(original_string, '(');
323 start_ptr++;
324 end_ptr = strchr(original_string, ')');
325 string_size = end_ptr - start_ptr;
326 strncat(return_string, start_ptr, string_size);
327 return return_string;
328 }
329
330 /************************************************************************/
331
332 /* time insert struct */
333 typedef struct {
334 GtkWidget *check[7];
335 GtkWidget *label[7];
336 GtkWidget *dialog;
337 Tbfwin *bfwin;
338 } TimeInsert;
339
340
341 static void
insert_time_destroy_lcb(GtkWidget * widget,TimeInsert * data)342 insert_time_destroy_lcb(GtkWidget * widget, TimeInsert * data)
343 {
344 DEBUG_MSG("insert_time_destroy_lcb, data=%p\n", data);
345 window_destroy(data->dialog);
346 g_free(data);
347 }
348
349 static void
insert_time_callback(GtkWidget * widget,TimeInsert * timeinsert)350 insert_time_callback(GtkWidget * widget, TimeInsert * timeinsert)
351 {
352 const gchar *temp_string;
353 gchar *insert_string;
354 gchar *final_string;
355 gint count;
356
357 insert_string = g_malloc0(32);
358 final_string = g_malloc0(255);
359 for (count = 1; count < 7; count++) {
360 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(timeinsert->check[count]))) {
361 temp_string = gtk_label_get_text(GTK_LABEL(timeinsert->label[count]));
362 insert_string = extract_time_string(temp_string);
363 strncat(final_string, insert_string, 31);
364 strncat(final_string, " ", 31);
365 }
366 DEBUG_MSG("insert_time_callback, count=%d\n", count);
367 }
368
369 DEBUG_MSG("insert_time_callback, final_string=%s\n", final_string);
370 doc_insert_two_strings(timeinsert->bfwin->current_document, final_string, "");
371 DEBUG_MSG("insert_time_callback, text inserted\n");
372 g_free(insert_string);
373 g_free(final_string);
374 insert_time_destroy_lcb(NULL, timeinsert);
375 DEBUG_MSG("insert_time_callback, finished\n");
376 }
377
378 /************************************************************************/
379
380 static void
insert_time_cancel(GtkWidget * widget,TimeInsert * data)381 insert_time_cancel(GtkWidget * widget, TimeInsert * data)
382 {
383 DEBUG_MSG("insert_time_cancel, data=%p\n", data);
384 insert_time_destroy_lcb(widget, data);
385 }
386
387 /************************************************************************/
388 void
insert_time_dialog(Tbfwin * bfwin)389 insert_time_dialog(Tbfwin * bfwin)
390 {
391
392 gint month, year, count;
393 gchar isotime[60];
394 time_t time_var;
395 gchar *temp = NULL;
396 struct tm *time_struct;
397 TimeInsert *timeinsert;
398 GtkWidget *ok_b, *cancel_b, *vbox, *hbox;
399 timeinsert = g_new0(TimeInsert, 1);
400 timeinsert->bfwin = bfwin;
401 time_var = time(NULL);
402 time_struct = localtime(&time_var);
403 DEBUG_MSG("insert_time_cb, timeinsert=%p\n", timeinsert);
404 timeinsert->dialog = window_full2(_("Insert Time"), GTK_WIN_POS_CENTER, 12, G_CALLBACK(insert_time_destroy_lcb), timeinsert,
405 TRUE, bfwin->main_window);
406 vbox = gtk_vbox_new(FALSE, 1);
407 gtk_container_add(GTK_CONTAINER(timeinsert->dialog), vbox);
408
409 for (count = 1; count < 7; count++) {
410 switch (count) {
411 case 1:
412 temp = g_strdup_printf(_(" _Time (%i:%i:%i)"), time_struct->tm_hour, time_struct->tm_min, time_struct->tm_sec);
413 break;
414 case 2:
415 switch (time_struct->tm_wday) {
416 case 0:
417 temp = g_strdup(_(" Day of the _week (Sunday)"));
418 break;
419 case 1:
420 temp = g_strdup(_(" Day of the _week (Monday)"));
421 break;
422 case 2:
423 temp = g_strdup(_(" Day of the _week (Tuesday)"));
424 break;
425 case 3:
426 temp = g_strdup(_(" Day of the _week (Wednesday)"));
427 break;
428 case 4:
429 temp = g_strdup(_(" Day of the _week (Thursday)"));
430 break;
431 case 5:
432 temp = g_strdup(_(" Day of the _week (Friday)"));
433 break;
434 case 6:
435 temp = g_strdup(_(" Day of the _week (Saturday)"));
436 break;
437 default:
438 g_message(_("You appear to have a non existent day!\n"));
439 temp = g_strdup(" ** Error ** see stdout");
440 break;
441 } /* end of switch day of week */
442 break;
443 case 3:
444 month = time_struct->tm_mon + 1;
445 year = time_struct->tm_year;
446 year = 1900 + year;
447 temp = g_strdup_printf(_(" _Date (%i/%i/%i)"), time_struct->tm_mday, month, year);
448 break;
449 case 4:
450 temp = g_strdup_printf(_(" _Unix Time (%i)"), (int) time_var);
451 break;
452 case 5:
453 {
454 gchar *tmpstrtime = bf_portable_time(&time_var);
455 temp = g_strdup_printf(_(" Unix Date _String (%s)"), tmpstrtime);
456 g_free(tmpstrtime);
457 }
458 /* Replace \n on ')' */
459 temp[strlen(temp) - 1] = ')';
460 break;
461 case 6:
462 {
463 gchar *tmpstr = _(" ISO-8601 Ti_me ");
464 #ifdef WIN32
465 glong hours, mins;
466 gchar gmtsign;
467
468 strftime(isotime, 30, "%Y-%m-%dT%H:%M:%S", time_struct);
469 gmtsign = _timezone > 0 ? '-' : '+';
470 hours = abs(_timezone) / 3600;
471 mins = (abs(_timezone) % 3600) / 60;
472 temp = g_strconcat(tmpstr, g_strdup_printf("(%s%c%02ld%02ld)", isotime, gmtsign, hours, mins), NULL);
473
474 #else /* WIN32 */
475 strftime(isotime, 30, "%Y-%m-%dT%H:%M:%S%z", time_struct);
476 temp = g_strconcat(tmpstr, g_strdup_printf("(%s)", isotime), NULL);
477 #endif /* WIN32 */
478 }
479 break;
480 default:
481 break;
482 } /* end of switch count */
483 timeinsert->check[count] = gtk_check_button_new();
484 timeinsert->label[count] = gtk_label_new_with_mnemonic(temp);
485 gtk_label_set_mnemonic_widget(GTK_LABEL(timeinsert->label[count]), timeinsert->check[count]);
486 g_free(temp);
487 gtk_container_add(GTK_CONTAINER(timeinsert->check[count]), GTK_WIDGET(timeinsert->label[count]));
488 gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(timeinsert->check[count]), TRUE, TRUE, 0);
489 } /* end of for loop */
490
491 hbox = gtk_hbox_new(FALSE, 0);
492 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 10);
493 #if GTK_CHECK_VERSION(3,0,0)
494 hbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
495 #else
496 hbox = gtk_hbutton_box_new();
497 #endif
498 gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END);
499 gtk_box_set_spacing(GTK_BOX(hbox), 12);
500 gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
501
502 ok_b = bf_stock_ok_button(G_CALLBACK(insert_time_callback), (gpointer) timeinsert);
503 gtk_window_set_default(GTK_WINDOW(timeinsert->dialog), ok_b);
504 cancel_b = bf_stock_cancel_button(G_CALLBACK(insert_time_cancel), (gpointer) timeinsert);
505 gtk_box_pack_start(GTK_BOX(hbox), cancel_b, TRUE, TRUE, 0);
506 gtk_box_pack_start(GTK_BOX(hbox), ok_b, TRUE, TRUE, 0);
507
508 gtk_widget_show_all(timeinsert->dialog);
509 }
510
511 /************************************************************************/
512 /*
513 gchar *converttohex(gchar * color)
514 {
515 if (!strncasecmp(color, "black", 32)) {
516 return "#000000";
517 }
518 if (!strncasecmp(color, "maroon", 32)) {
519 return "#800000";
520 }
521 if (!strncasecmp(color, "green", 32)) {
522 return "#008000";
523 }
524 if (!strncasecmp(color, "olive", 32)) {
525 return "#808000";
526 }
527 if (!strncasecmp(color, "navy", 32)) {
528 return "#000080";
529 }
530 if (!strncasecmp(color, "purple", 32)) {
531 return "#800080";
532 }
533 if (!strncasecmp(color, "fuchsia", 32)) {
534 return "#FF00FF";
535 }
536 if (!strncasecmp(color, "teal", 32)) {
537 return "#008080";
538 }
539 if (!strncasecmp(color, "gray", 32)) {
540 return "#808080";
541 }
542 if (!strncasecmp(color, "silver", 32)) {
543 return "#C0C0C0";
544 }
545 if (!strncasecmp(color, "red", 32)) {
546 return "#FF0000";
547 }
548 if (!strncasecmp(color, "lime", 32)) {
549 return "#00FF00";
550 }
551 if (!strncasecmp(color, "yellow", 32)) {
552 return "#FFFF00";
553 }
554 if (!strncasecmp(color, "blue", 32)) {
555 return "#0000FF";
556 }
557 if (!strncasecmp(color, "aqua", 32)) {
558 return "#00FFFF";
559 }
560 if (!strncasecmp(color, "white", 32)) {
561 return "#FFFFFF";
562 }
563 return color;
564 } */
565
566 /************************************************************************/
567 /************************************************************************/
568 /**************** **********************/
569 /**************** BELOW ARE ALL DIALOGS MIGRATED **********************/
570 /**************** TO HTML_DIAG FUNCTIONS **********************/
571 /**************** **********************/
572 /************************************************************************/
573 /************************************************************************/
574
575 static void
quickanchorok_lcb(GtkWidget * widget,Thtml_diag * dg)576 quickanchorok_lcb(GtkWidget * widget, Thtml_diag * dg)
577 {
578 gchar *thestring, *finalstring;
579 Tbfwin *bfwin = dg->bfwin;
580
581 thestring = g_strdup(cap("<A"));
582 thestring = insert_string_if_entry(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(dg->combo[2]))), cap("HREF"), thestring,
583 NULL);
584 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("TARGET"), thestring, NULL);
585 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[2]), cap("NAME"), thestring, NULL);
586 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[4]), NULL, thestring, NULL);
587 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[5]), cap("ONCLICK"), thestring, NULL);
588 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[6]), cap("ONDBLCLICK"), thestring, NULL);
589 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[7]), cap("ONMOUSEOVER"), thestring, NULL);
590 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[8]), cap("ONMOUSEDOWN"), thestring, NULL);
591 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[9]), cap("ONMOUSEMOVE"), thestring, NULL);
592 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[10]), cap("ONMOUSEOUT"), thestring, NULL);
593 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[11]), cap("ONMOUSEUP"), thestring, NULL);
594 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[12]), cap("ONKEYDOWN"), thestring, NULL);
595 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[13]), cap("ONKEYPRESS"), thestring, NULL);
596 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[14]), cap("ONKEYUP"), thestring, NULL);
597 thestring = insert_string_if_entry(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(dg->attrwidget[0]))), cap("CLASS"),
598 thestring, NULL);
599 thestring = insert_string_if_entry(GTK_ENTRY(dg->attrwidget[1]), cap("ID"), thestring, NULL);
600 thestring = insert_string_if_entry(GTK_ENTRY(dg->attrwidget[2]), cap("STYLE"), thestring, NULL);
601 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[17]), cap("LANG"), thestring, NULL);
602 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[18]), cap("TITLE"), thestring, NULL);
603 finalstring = g_strdup_printf("%s>", thestring);
604 g_free(thestring);
605
606 bfwin->session->urllist = add_entry_to_stringlist(bfwin->session->urllist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[2]))));
607 bfwin->session->targetlist = add_entry_to_stringlist(bfwin->session->targetlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[1]))));
608 bfwin->session->classlist = add_entry_to_stringlist(bfwin->session->classlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->attrwidget[0]))));
609
610 if (dg->range.end == -1) {
611 doc_insert_two_strings(dg->doc, finalstring, cap("</A>"));
612 } else {
613 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
614 }
615 g_free(finalstring);
616 html_diag_destroy_cb(NULL, dg);
617 }
618
619 static gboolean
string_looks_like_url(gchar * string)620 string_looks_like_url(gchar *string)
621 {
622 if (string == NULL)
623 return FALSE;
624 if (strchr(string, '\n')!=NULL)
625 return FALSE;
626 if (strchr(string, '\t')!=NULL)
627 return FALSE;
628 if (strchr(string, '\r')!=NULL)
629 return FALSE;
630 if (strncmp(string,"http://", 7)==0 ||
631 strncmp(string,"https://", 8)==0 ||
632 strncmp(string,"ftp://", 6)==0) {
633 return TRUE;
634 }
635 /* look for an extension and no spaces */
636 if (g_regex_match_simple("^[\\./a-z0-9]+\\.[a-z]{3,5}$",string,G_REGEX_CASELESS|G_REGEX_ANCHORED,0)) {
637 /*g_print("%s matches regex\n",string);*/
638 return TRUE;
639 }
640 return FALSE;
641 }
642
643 void
quickanchor_dialog(Tbfwin * bfwin,Ttagpopup * data)644 quickanchor_dialog(Tbfwin * bfwin, Ttagpopup * data)
645 {
646 static gchar *aitems[] = { "href", "target", "name", "onkeyup", "onclick", "ondblclick", "onmouseover", "onmousedown",
647 "onmousemove", "onmouseout", "onmouseup", "onkeydown", "onkeypress", "class", "id", "style", "lang", "title", NULL };
648 gchar *custom = NULL;
649 gchar *avalues[19];
650 gchar *url=NULL;
651 Thtml_diag *dg;
652 gint so, eo;
653 GList *rel_link_list = NULL, *tmplist;
654
655
656 GtkWidget *noteb, *dgtable, *file_but;
657 DEBUG_MSG("quickanchor_dialog, bfwin=%p, data=%p\n", bfwin, data);
658 dg = html_diag_new(bfwin, _("Quick Anchor"));
659 fill_dialogvalues(aitems, avalues, &custom, (Ttagpopup *) data, dg);
660
661 noteb = gtk_notebook_new();
662 gtk_box_pack_start(GTK_BOX(dg->vbox), noteb, FALSE, FALSE, 0);
663
664 dgtable = generic_table_inside_notebookframe(noteb, _("Attributes"), 9,3);
665 if (avalues[0] != NULL && avalues[0][0] != '\0') {
666 url = g_strdup(avalues[0]);
667 } else if (doc_get_selection(bfwin->current_document, &so, &eo)){
668 gchar *tmp = doc_get_chars(bfwin->current_document, so, eo);
669 /* if the current selected text is an URL, use it */
670 if (string_looks_like_url(tmp)) {
671 url = tmp;
672 } else {
673 g_free(tmp);
674 }
675 }
676 rel_link_list = list_relative_document_filenames(bfwin->current_document);
677 tmplist = duplicate_stringlist(bfwin->session->urllist, 1);
678 rel_link_list = g_list_concat(tmplist, rel_link_list);
679 dg->combo[2] = html_diag_combobox_with_popdown(url, rel_link_list, 1);
680
681 free_stringlist(rel_link_list);
682 g_free(url);
683 file_but = file_but_new(GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[2]))), 0, bfwin);
684 gtk_table_attach(GTK_TABLE(dgtable), GTK_WIDGET(file_but), 2,3, 0,1, GTK_SHRINK, GTK_SHRINK, 0,0);
685 dialog_mnemonic_label_in_table(_("_HREF:"), dg->combo[2], dgtable, 0,1, 0,1);
686 gtk_table_attach(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[2])), 1,2, 0,1, GTK_EXPAND|GTK_FILL, GTK_SHRINK, 0,0);
687 if (bfwin->session->targetlist == NULL) {
688 bfwin->session->targetlist = list_from_arglist(TRUE, "_top", "_blank", "_parent", "_self", NULL);
689 }
690 dg->combo[1] = html_diag_combobox_with_popdown(avalues[1], bfwin->session->targetlist, 1);
691 dialog_mnemonic_label_in_table(_("_Target:"), dg->combo[1], dgtable, 0,1, 1,2);
692 gtk_table_attach(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[1])), 1,3, 1,2, GTK_EXPAND|GTK_FILL,GTK_SHRINK, 0,0);
693
694 dg->entry[2] = dialog_entry_in_table(avalues[2], dgtable, 1,3, 2,3);
695 dialog_mnemonic_label_in_table(_("_Name:"), dg->entry[2], dgtable, 0,1, 2,3);
696
697 dg->entry[18] = dialog_entry_in_table(avalues[17], dgtable, 1,3, 3,4);
698 dialog_mnemonic_label_in_table(_("Titl_e:"), dg->entry[18], dgtable, 0,1, 3,4);
699
700 generic_class_id_style_section(dg, 0, dgtable, 4, avalues, 13);
701
702 dg->entry[17] = dialog_entry_in_table(avalues[16], dgtable, 1,3, 7,8);
703 dialog_mnemonic_label_in_table(_("_Language:"), dg->entry[17], dgtable, 0,1, 7,8);
704
705 dg->entry[4] = dialog_entry_in_table(custom, dgtable, 1,3, 8,9);
706 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[4], dgtable, 0,1, 8,9);
707
708 dgtable = generic_table_inside_notebookframe(noteb, _("Events"), 10,2);
709
710 dg->entry[5] = dialog_entry_in_table(avalues[4], dgtable, 1,2, 0,1);
711 dialog_mnemonic_label_in_table(_("OnClic_k:"), dg->entry[5], dgtable, 0,1, 0,1);
712
713 dg->entry[6] = dialog_entry_in_table(avalues[5], dgtable, 1,2, 1,2);
714 dialog_mnemonic_label_in_table(_("OnD_blClick:"), dg->entry[6], dgtable, 0,1, 1,2);
715
716 dg->entry[7] = dialog_entry_in_table(avalues[6], dgtable, 1,2, 2,3);
717 dialog_mnemonic_label_in_table(_("OnMouseO_ver:"), dg->entry[7], dgtable, 0,1, 2,3);
718
719 dg->entry[8] = dialog_entry_in_table(avalues[7], dgtable, 1,2, 3,4);
720 dialog_mnemonic_label_in_table(_("OnMouse_Down:"), dg->entry[8], dgtable, 0,1, 3,4);
721
722 dg->entry[9] = dialog_entry_in_table(avalues[8], dgtable, 1,2, 4,5);
723 dialog_mnemonic_label_in_table(_("OnMouse_Move:"), dg->entry[9], dgtable, 0,1, 4,5);
724
725 dg->entry[10] = dialog_entry_in_table(avalues[9], dgtable, 1,2, 5,6);
726 dialog_mnemonic_label_in_table(_("OnMouseOu_t:"), dg->entry[10], dgtable, 0,1, 5,6);
727
728 dg->entry[11] = dialog_entry_in_table(avalues[10], dgtable, 1,2, 6,7);
729 dialog_mnemonic_label_in_table(_("OnMouse_Up:"), dg->entry[11], dgtable, 0,1, 6,7);
730
731 dg->entry[12] = dialog_entry_in_table(avalues[11], dgtable, 1,2, 7,8);
732 dialog_mnemonic_label_in_table(_("OnKeyDo_wn:"), dg->entry[12], dgtable, 0,1, 7,8);
733
734 dg->entry[13] = dialog_entry_in_table(avalues[12], dgtable, 1,2, 8,9);
735 dialog_mnemonic_label_in_table(_("OnKey_Press:"), dg->entry[13], dgtable, 0,1, 8,9);
736
737 dg->entry[14] = dialog_entry_in_table(avalues[3], dgtable, 1,2, 9,10);
738 dialog_mnemonic_label_in_table(_("OnKe_yUp:"), dg->entry[14], dgtable, 0,1, 9,10);
739
740 html_diag_finish(dg, G_CALLBACK(quickanchorok_lcb));
741 gtk_widget_grab_focus(dg->combo[2]);
742 if (custom)
743 g_free(custom);
744 }
745
746 static void
block_tag_editok_lcb(gint type,Thtml_diag * dg)747 block_tag_editok_lcb(gint type, Thtml_diag * dg)
748 {
749 Tbfwin *bfwin = dg->bfwin;
750 gchar *thestring = NULL, *endstring = NULL, *finalstring;
751
752 switch (type) {
753 case 1:
754 thestring = g_strdup(cap("<P"));
755 endstring = g_strdup(cap("</P>"));
756 break;
757 case 2:
758 thestring = g_strdup(cap("<DIV"));
759 endstring = g_strdup(cap("</DIV>"));
760 break;
761 case 3:
762 thestring = g_strdup(cap("<SPAN"));
763 endstring = g_strdup(cap("</SPAN>"));
764 break;
765 case 4:
766 thestring = g_strdup(cap("<H1"));
767 endstring = g_strdup(cap("</H1>"));
768 break;
769 case 5:
770 thestring = g_strdup(cap("<H2"));
771 endstring = g_strdup(cap("</H2>"));
772 break;
773 case 6:
774 thestring = g_strdup(cap("<H3"));
775 endstring = g_strdup(cap("</H3>"));
776 break;
777 case 7:
778 thestring = g_strdup(cap("<H4"));
779 endstring = g_strdup(cap("</H4>"));
780 break;
781 case 8:
782 thestring = g_strdup(cap("<H5"));
783 endstring = g_strdup(cap("</H5>"));
784 break;
785 case 9:
786 thestring = g_strdup(cap("<H6"));
787 endstring = g_strdup(cap("</H6>"));
788 break;
789 }
790
791 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("ALIGN"), thestring, NULL);
792 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[2]), cap("CLASS"), thestring, NULL);
793 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[1]), cap("STYLE"), thestring, NULL);
794 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[2]), cap("NAME"), thestring, NULL);
795 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[3]), cap("ID"), thestring, NULL);
796 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[4]), NULL, thestring, NULL);
797 finalstring = g_strdup_printf("%s>", thestring);
798 g_free(thestring);
799
800 bfwin->session->classlist = add_entry_to_stringlist(bfwin->session->classlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[2]))));
801
802 if (dg->range.end == -1) {
803 doc_insert_two_strings(dg->doc, finalstring, endstring);
804 } else {
805 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
806 }
807 g_free(endstring);
808 g_free(finalstring);
809 html_diag_destroy_cb(NULL, dg);
810 }
811
812 static void
p_editok_lcb(GtkWidget * widget,gpointer data)813 p_editok_lcb(GtkWidget * widget, gpointer data)
814 {
815 block_tag_editok_lcb(1, data);
816 }
817
818 static void
div_editok_lcb(GtkWidget * widget,gpointer data)819 div_editok_lcb(GtkWidget * widget, gpointer data)
820 {
821 block_tag_editok_lcb(2, data);
822 }
823
824 static void
span_editok_lcb(GtkWidget * widget,gpointer data)825 span_editok_lcb(GtkWidget * widget, gpointer data)
826 {
827 block_tag_editok_lcb(3, data);
828 }
829
830 static void
h1_editok_lcb(GtkWidget * widget,gpointer data)831 h1_editok_lcb(GtkWidget * widget, gpointer data)
832 {
833 block_tag_editok_lcb(4, data);
834 }
835
836 static void
h2_editok_lcb(GtkWidget * widget,gpointer data)837 h2_editok_lcb(GtkWidget * widget, gpointer data)
838 {
839 block_tag_editok_lcb(5, data);
840 }
841
842 static void
h3_editok_lcb(GtkWidget * widget,gpointer data)843 h3_editok_lcb(GtkWidget * widget, gpointer data)
844 {
845 block_tag_editok_lcb(6, data);
846 }
847
848 static void
h4_editok_lcb(GtkWidget * widget,gpointer data)849 h4_editok_lcb(GtkWidget * widget, gpointer data)
850 {
851 block_tag_editok_lcb(7, data);
852 }
853
854 static void
h5_editok_lcb(GtkWidget * widget,gpointer data)855 h5_editok_lcb(GtkWidget * widget, gpointer data)
856 {
857 block_tag_editok_lcb(8, data);
858 }
859
860 static void
h6_editok_lcb(GtkWidget * widget,gpointer data)861 h6_editok_lcb(GtkWidget * widget, gpointer data)
862 {
863 block_tag_editok_lcb(9, data);
864 }
865
866 void
block_tag_edit_dialog(Tbfwin * bfwin,gint type,Ttagpopup * data)867 block_tag_edit_dialog(Tbfwin * bfwin, gint type, Ttagpopup * data)
868 {
869 gchar *labeltext;
870 GList *popuplist = NULL;
871 GtkWidget *dgtable, *but;
872
873 static gchar *tagitems[] = { "align", "class", "style", "name", "id", NULL };
874 gchar *tagvalues[6];
875 gchar *custom = NULL;
876 Thtml_diag *dg;
877
878 switch (type) {
879 case 1:
880 labeltext = g_strdup(_("Paragraph"));
881 break;
882 case 2:
883 labeltext = g_strdup(_("Div"));
884 break;
885 case 3:
886 labeltext = g_strdup(_("Span"));
887 break;
888 case 4:
889 labeltext = g_strdup(_("Heading 1"));
890 break;
891 case 5:
892 labeltext = g_strdup(_("Heading 2"));
893 break;
894 case 6:
895 labeltext = g_strdup(_("Heading 3"));
896 break;
897 case 7:
898 labeltext = g_strdup(_("Heading 4"));
899 break;
900 case 8:
901 labeltext = g_strdup(_("Heading 5"));
902 break;
903 case 9:
904 labeltext = g_strdup(_("Heading 6"));
905 break;
906 default:
907 labeltext = g_strdup("");
908 break;
909 }
910 dg = html_diag_new(bfwin, labeltext);
911 g_free(labeltext);
912 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
913
914 dgtable = html_diag_table_in_vbox(dg, 5,4);
915
916 popuplist = g_list_append(NULL, "left");
917 popuplist = g_list_append(popuplist, "center");
918 popuplist = g_list_append(popuplist, "right");
919 dg->combo[1] = html_diag_combobox_with_popdown(tagvalues[0], popuplist, 1);
920 g_list_free(popuplist);
921 dialog_mnemonic_label_in_table(_("Ali_gn:"), dg->combo[1], dgtable, 0,1, 0,1);
922 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[1])), 1,2, 0,1);
923
924 dg->combo[2] = html_diag_combobox_with_popdown(tagvalues[1], bfwin->session->classlist, 1);
925 dialog_mnemonic_label_in_table(_("Cl_ass:"), dg->combo[2], dgtable, 0,1, 1,2);
926 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[2])), 1,2, 1,2);
927
928 dg->entry[1] = dialog_entry_in_table(tagvalues[2], dgtable, 1,3, 2,3);
929 dialog_mnemonic_label_in_table(_("St_yle:"), dg->entry[1], dgtable, 0,1, 2,3);
930
931 but = style_but_new(dg->entry[1], dg->dialog);
932 gtk_table_attach(GTK_TABLE(dgtable), but, 3,4, 2,3, GTK_SHRINK, GTK_SHRINK, 0,0);
933
934 dg->entry[2] = dialog_entry_in_table(tagvalues[3], dgtable, 3,4, 0,1);
935 dialog_mnemonic_label_in_table(_("_Name:"), dg->entry[2], dgtable, 2,3, 0,1);
936
937 dg->entry[3] = dialog_entry_in_table(tagvalues[4], dgtable, 3,4, 1,2);
938 dialog_mnemonic_label_in_table(_("_ID:"), dg->entry[3], dgtable, 2,3, 1,2);
939
940 dg->entry[4] = dialog_entry_in_table(custom, dgtable, 1,4, 3,4);
941 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[4], dgtable, 0,1, 3,4);
942
943 switch (type) {
944 case 1:
945 html_diag_finish(dg, G_CALLBACK(p_editok_lcb));
946 break;
947 case 2:
948 html_diag_finish(dg, G_CALLBACK(div_editok_lcb));
949 break;
950 case 3:
951 html_diag_finish(dg, G_CALLBACK(span_editok_lcb));
952 break;
953 case 4:
954 html_diag_finish(dg, G_CALLBACK(h1_editok_lcb));
955 break;
956 case 5:
957 html_diag_finish(dg, G_CALLBACK(h2_editok_lcb));
958 break;
959 case 6:
960 html_diag_finish(dg, G_CALLBACK(h3_editok_lcb));
961 break;
962 case 7:
963 html_diag_finish(dg, G_CALLBACK(h4_editok_lcb));
964 break;
965 case 8:
966 html_diag_finish(dg, G_CALLBACK(h5_editok_lcb));
967 break;
968 case 9:
969 html_diag_finish(dg, G_CALLBACK(h6_editok_lcb));
970 break;
971 }
972 if (custom)
973 g_free(custom);
974 }
975
976 void
p_dialog(Tbfwin * bfwin,Ttagpopup * data)977 p_dialog(Tbfwin * bfwin, Ttagpopup * data)
978 {
979 block_tag_edit_dialog(bfwin, 1, data);
980 }
981
982 void
div_dialog(Tbfwin * bfwin,Ttagpopup * data)983 div_dialog(Tbfwin * bfwin, Ttagpopup * data)
984 {
985 block_tag_edit_dialog(bfwin, 2, data);
986 }
987
988 void
span_dialog(Tbfwin * bfwin,Ttagpopup * data)989 span_dialog(Tbfwin * bfwin, Ttagpopup * data)
990 {
991 block_tag_edit_dialog(bfwin, 3, data);
992 }
993
994 void
h1_dialog(Tbfwin * bfwin,Ttagpopup * data)995 h1_dialog(Tbfwin * bfwin, Ttagpopup * data)
996 {
997 block_tag_edit_dialog(bfwin, 4, data);
998 }
999
1000 void
h2_dialog(Tbfwin * bfwin,Ttagpopup * data)1001 h2_dialog(Tbfwin * bfwin, Ttagpopup * data)
1002 {
1003 block_tag_edit_dialog(bfwin, 5, data);
1004 }
1005
1006 void
h3_dialog(Tbfwin * bfwin,Ttagpopup * data)1007 h3_dialog(Tbfwin * bfwin, Ttagpopup * data)
1008 {
1009 block_tag_edit_dialog(bfwin, 6, data);
1010 }
1011
1012 void
h4_dialog(Tbfwin * bfwin,Ttagpopup * data)1013 h4_dialog(Tbfwin * bfwin, Ttagpopup * data)
1014 {
1015 block_tag_edit_dialog(bfwin, 7, data);
1016 }
1017
1018 void
h5_dialog(Tbfwin * bfwin,Ttagpopup * data)1019 h5_dialog(Tbfwin * bfwin, Ttagpopup * data)
1020 {
1021 block_tag_edit_dialog(bfwin, 8, data);
1022 }
1023
1024 void
h6_dialog(Tbfwin * bfwin,Ttagpopup * data)1025 h6_dialog(Tbfwin * bfwin, Ttagpopup * data)
1026 {
1027 block_tag_edit_dialog(bfwin, 9, data);
1028 }
1029
1030
1031
1032 static void
quickruleok_lcb(GtkWidget * widget,Thtml_diag * dg)1033 quickruleok_lcb(GtkWidget * widget, Thtml_diag * dg)
1034 {
1035 gchar *thestring, *finalstring;
1036
1037 thestring = g_strdup(cap("<HR"));
1038 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("ALIGN"), thestring, NULL);
1039 thestring = insert_integer_if_spin(dg->spin[1], cap("SIZE"), thestring, FALSE, 1);
1040 thestring = insert_integer_if_spin(dg->spin[2], cap("WIDTH"), thestring,
1041 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->check[1])),
1042 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->check[1])) ? 100 : 0);
1043 thestring = insert_attr_if_checkbox(dg->check[2], get_curlang_option_value(dg->bfwin, lang_is_XHTML) ? cap("NOSHADE=\"noshade\"") : cap("NOSHADE"), thestring);
1044 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[1]), NULL, thestring, NULL);
1045 finalstring = g_strdup_printf(get_curlang_option_value(dg->bfwin, self_close_singleton_tags) ? "%s />" : "%s>", thestring);
1046 g_free(thestring);
1047
1048 if (dg->range.end == -1) {
1049 doc_insert_two_strings(dg->doc, finalstring, NULL);
1050 } else {
1051 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
1052 }
1053
1054 g_free(finalstring);
1055 html_diag_destroy_cb(NULL, dg);
1056 }
1057
1058 void
quickrule_dialog(Tbfwin * bfwin,Ttagpopup * data)1059 quickrule_dialog(Tbfwin * bfwin, Ttagpopup * data)
1060 {
1061 GList *popdownlist = NULL;
1062
1063 static gchar *hritems[] = { "align", "size", "width", "noshade", NULL };
1064 gchar *hrvalues[5];
1065 gchar *custom = NULL;
1066 Thtml_diag *dg;
1067 GtkWidget *dgtable;
1068 GtkAdjustment *dgadj;
1069
1070 dg = html_diag_new(bfwin, _("Horizontal Rule"));
1071 fill_dialogvalues(hritems, hrvalues, &custom, (Ttagpopup *) data, dg);
1072
1073 dgtable = html_diag_table_in_vbox(dg, 5, 10);
1074 gtk_table_set_row_spacings(GTK_TABLE(dgtable), 12);
1075
1076 popdownlist = g_list_insert(popdownlist, "center", 0);
1077 popdownlist = g_list_insert(popdownlist, "left", 1);
1078 popdownlist = g_list_insert(popdownlist, "right", 2);
1079 dg->combo[1] = html_diag_combobox_with_popdown(hrvalues[0], popdownlist, 1);
1080 g_list_free(popdownlist);
1081 dialog_mnemonic_label_in_table(_("_Align:"), dg->combo[1], dgtable, 0,1, 0,1);
1082 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(dg->combo[1]), 1,4, 0,1);
1083
1084 dgadj = (GtkAdjustment *) gtk_adjustment_new((gfloat) 1, 0.0, 200.0, 1.0, 5.0, 0.0);
1085 dg->spin[1] = gtk_spin_button_new(dgadj, 1,0);
1086 /* gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin1), 1); */
1087 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[1], 1,2, 1,2);
1088 dialog_mnemonic_label_in_table(_("_Height:"), dg->spin[1], dgtable, 0,1, 1,2);
1089 parse_integer_for_dialog(hrvalues[1], dg->spin[1], NULL, NULL);
1090
1091 dgadj = (GtkAdjustment *) gtk_adjustment_new((gfloat) 50, 0.0, 600.0, 1.0, 5.0, 0.0);
1092 dg->spin[2] = gtk_spin_button_new(dgadj, 1,0);
1093 /* gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spin2), 1); */
1094 dialog_mnemonic_label_in_table(_("_Width:"), dg->spin[2], dgtable, 0,1, 2,3);
1095 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[2], 1,2, 2,3);
1096
1097 dg->check[1] = gtk_check_button_new_with_mnemonic(_("Is _percent"));
1098 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[1], 3,4, 2,3);
1099
1100 parse_integer_for_dialog(hrvalues[2], dg->spin[2], NULL, dg->check[1]);
1101
1102 dg->check[2] = gtk_check_button_new_with_mnemonic(_("No _shading"));
1103 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[2], 1,2, 3,4);
1104 parse_existence_for_dialog(hrvalues[3], dg->check[2]);
1105
1106 dg->entry[1] = dialog_entry_in_table(custom, dgtable, 1,10, 4,5);
1107 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[1], dgtable, 0,1, 4,5);
1108
1109 html_diag_finish(dg, G_CALLBACK(quickruleok_lcb));
1110
1111 if (custom)
1112 g_free(custom);
1113 }
1114
1115 static void
bodyok_lcb(GtkWidget * widget,Thtml_diag * dg)1116 bodyok_lcb(GtkWidget * widget, Thtml_diag * dg)
1117 {
1118 Tbfwin *bfwin = dg->bfwin;
1119 gchar *thestring, *finalstring;
1120
1121 thestring = g_strdup(cap("<BODY"));
1122 if (dg->entry[1]) {
1123 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[1]), cap("BACKGROUND"), thestring, NULL);
1124 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("BGCOLOR"), thestring, NULL);
1125 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[2]), cap("TEXT"), thestring, NULL);
1126 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[3]), cap("LINK"), thestring, NULL);
1127 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[4]), cap("VLINK"), thestring, NULL);
1128 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[5]), cap("ALINK"), thestring, NULL);
1129 }
1130 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[3]), cap("STYLE"), thestring, NULL);
1131 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[6]), cap("CLASS"), thestring, NULL);
1132 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[4]), cap("ID"), thestring, NULL);
1133 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[5]), cap("LANG"), thestring, NULL);
1134 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[6]), cap("ONLOAD"), thestring, NULL);
1135 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[7]), cap("ONUNLOAD"), thestring, NULL);
1136
1137 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[2]), NULL, thestring, NULL);
1138 finalstring = g_strconcat(thestring, ">\n", NULL);
1139 g_free(thestring);
1140
1141 if (dg->entry[1]) {
1142 bfwin->session->colorlist = add_entry_to_stringlist(bfwin->session->colorlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[1]))));
1143 bfwin->session->colorlist = add_entry_to_stringlist(bfwin->session->colorlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[2]))));
1144 bfwin->session->colorlist = add_entry_to_stringlist(bfwin->session->colorlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[3]))));
1145 bfwin->session->colorlist = add_entry_to_stringlist(bfwin->session->colorlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[4]))));
1146 bfwin->session->colorlist = add_entry_to_stringlist(bfwin->session->colorlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[5]))));
1147 }
1148 bfwin->session->classlist = add_entry_to_stringlist(bfwin->session->classlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[6]))));
1149
1150 if (dg->range.end == -1) {
1151 doc_insert_two_strings(dg->doc, finalstring, cap("</BODY>"));
1152 } else {
1153 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
1154 }
1155
1156 g_free(finalstring);
1157 html_diag_destroy_cb(NULL, dg);
1158 }
1159
1160 void
body_dialog(Tbfwin * bfwin,Ttagpopup * data)1161 body_dialog(Tbfwin * bfwin, Ttagpopup * data)
1162 {
1163 static gchar *bodyitems[] = { "background", "bgcolor", "text", "link", "vlink", "alink", "style", "class", "id", "language",
1164 "onload", "onunload", NULL
1165 };
1166
1167 GtkWidget *color_but, *file_but, *dgtable[3], *stylebut, *noteb, *hbox, *vbox2, *frame;
1168 gchar *bodyvalues[13];
1169 gchar *custom = NULL;
1170 Thtml_diag *dg;
1171
1172 dg = html_diag_new(bfwin, _("Body"));
1173 fill_dialogvalues(bodyitems, bodyvalues, &custom, (Ttagpopup *) data, dg);
1174
1175 noteb = gtk_notebook_new();
1176 gtk_box_pack_start(GTK_BOX(dg->vbox), noteb, FALSE, FALSE, 0);
1177
1178 /* Options Tab */
1179 frame = bf_generic_frame_new(NULL, GTK_SHADOW_NONE, 12);
1180 gtk_notebook_append_page(GTK_NOTEBOOK(noteb), frame, gtk_label_new(_("Options")));
1181 dgtable[1] = gtk_table_new(8, 3, FALSE);
1182 gtk_table_set_row_spacings(GTK_TABLE(dgtable[1]), 6);
1183 gtk_table_set_col_spacings(GTK_TABLE(dgtable[1]), 12);
1184 gtk_container_add(GTK_CONTAINER(frame), dgtable[1]);
1185
1186 dg->entry[3] = dialog_entry_in_table(bodyvalues[6], dgtable[1], 1,2, 0,1);
1187 dialog_mnemonic_label_in_table(_("St_yle:"), dg->entry[3], dgtable[1], 0,1, 0,1);
1188
1189 stylebut = style_but_new(dg->entry[3], dg->dialog);
1190 gtk_table_attach(GTK_TABLE(dgtable[1]), stylebut, 2, 3, 0, 1, GTK_SHRINK, GTK_SHRINK, 0,0);
1191
1192 dg->combo[6] = html_diag_combobox_with_popdown(bodyvalues[7], bfwin->session->classlist, 1);
1193 gtk_table_attach_defaults(GTK_TABLE(dgtable[1]), dg->combo[6], 1,2, 1,2);
1194 dialog_mnemonic_label_in_table(_("Cl_ass:"), dg->combo[6], dgtable[1], 0,1, 1,2);
1195
1196 dg->entry[4] = dialog_entry_in_table(bodyvalues[8], dgtable[1], 1,2, 2,3);
1197 dialog_mnemonic_label_in_table(_("_ID:"), dg->entry[4], dgtable[1], 0,1, 2,3);
1198
1199 dg->entry[5] = dialog_entry_in_table(bodyvalues[9], dgtable[1], 1,2, 3,4);
1200 dialog_mnemonic_label_in_table(_("_Language:"), dg->entry[5], dgtable[1], 0,1, 3,4);
1201
1202 dg->entry[2] = dialog_entry_in_table(custom, dgtable[1], 1,3, 4,5);
1203 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[2], dgtable[1], 0,1, 4,5);
1204
1205 /* Events Tab */
1206 frame = bf_generic_frame_new(NULL, GTK_SHADOW_NONE, 12);
1207 gtk_notebook_append_page(GTK_NOTEBOOK(noteb), frame, gtk_label_new(_("Events")));
1208
1209 vbox2 = gtk_vbox_new(FALSE, 12);
1210 gtk_container_add(GTK_CONTAINER(frame), vbox2);
1211
1212 hbox = gtk_hbox_new(FALSE, 12);
1213 dg->entry[6] = dialog_entry_labeled(bodyvalues[10], _("On _Load:"), hbox, 0);
1214 gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1215
1216 hbox = gtk_hbox_new(FALSE, 12);
1217 dg->entry[7] = dialog_entry_labeled(bodyvalues[11], _("On _Unload:"), hbox, 0);
1218 gtk_box_pack_start(GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
1219
1220 /* Depreciated options tab */
1221 if (!(!main_v->props.allow_dep && !data)) {
1222 frame = bf_generic_frame_new(NULL, GTK_SHADOW_NONE, 12);
1223 gtk_notebook_append_page(GTK_NOTEBOOK(noteb), frame, gtk_label_new(_("Depreciated options")));
1224 dgtable[0] = gtk_table_new(6, 3, FALSE);
1225 gtk_table_set_row_spacings(GTK_TABLE(dgtable[0]), 6);
1226 gtk_table_set_col_spacings(GTK_TABLE(dgtable[0]), 12);
1227 gtk_container_add(GTK_CONTAINER(frame), dgtable[0]);
1228
1229 dg->entry[1] = dialog_entry_in_table(bodyvalues[0], dgtable[0], 1,2, 0,1);
1230 file_but = file_but_new(dg->entry[1], 0, bfwin);
1231 gtk_table_attach(GTK_TABLE(dgtable[0]), GTK_WIDGET(file_but), 2,3, 0,1, GTK_FILL, GTK_FILL, 0,0);
1232 dialog_mnemonic_label_in_table(_("Background _Image:"), dg->entry[1], dgtable[0], 0, 1, 0,1);
1233
1234 dg->combo[1] = html_diag_combobox_with_popdown(bodyvalues[1], bfwin->session->colorlist, 1);
1235 color_but = color_but_new(gtk_bin_get_child(GTK_BIN(dg->combo[1])), dg->dialog);
1236 gtk_table_attach(GTK_TABLE(dgtable[0]), color_but, 2,3, 1,2, GTK_FILL, GTK_FILL, 0,0);
1237 gtk_table_attach_defaults(GTK_TABLE(dgtable[0]), dg->combo[1], 1,2, 1,2);
1238 dialog_mnemonic_label_in_table(_("Back_ground Color:"), dg->combo[1], dgtable[0], 0, 1, 1,2);
1239
1240 dg->combo[2] = html_diag_combobox_with_popdown(bodyvalues[2], bfwin->session->colorlist, 1);
1241 color_but = color_but_new(gtk_bin_get_child(GTK_BIN(dg->combo[2])), dg->dialog);
1242 gtk_table_attach(GTK_TABLE(dgtable[0]), color_but, 2,3, 2,3, GTK_FILL, GTK_FILL, 0,0);
1243 gtk_table_attach_defaults(GTK_TABLE(dgtable[0]), dg->combo[2], 1,2, 2,3);
1244 dialog_mnemonic_label_in_table(_("_Text Color:"), dg->combo[2], dgtable[0], 0,1, 2,3);
1245
1246 dg->combo[3] = html_diag_combobox_with_popdown(bodyvalues[3], bfwin->session->colorlist, 1);
1247 color_but = color_but_new(gtk_bin_get_child(GTK_BIN(dg->combo[3])), dg->dialog);
1248 gtk_table_attach(GTK_TABLE(dgtable[0]), color_but, 2,3, 3,4, GTK_FILL, GTK_FILL, 0,0);
1249 gtk_table_attach_defaults(GTK_TABLE(dgtable[0]), dg->combo[3], 1,2, 3,4);
1250 dialog_mnemonic_label_in_table(_("_Link Color:"), dg->combo[3], dgtable[0], 0,1, 3,4);
1251
1252 dg->combo[4] = html_diag_combobox_with_popdown(bodyvalues[4], bfwin->session->colorlist, 1);
1253 color_but = color_but_new(gtk_bin_get_child(GTK_BIN(dg->combo[4])), dg->dialog);
1254 gtk_table_attach(GTK_TABLE(dgtable[0]), color_but, 2,3, 4,5, GTK_FILL, GTK_FILL, 0,0);
1255 gtk_table_attach_defaults(GTK_TABLE(dgtable[0]), dg->combo[4], 1,2, 4,5);
1256 dialog_mnemonic_label_in_table(_("_Visited Link Color:"), dg->combo[4], dgtable[0], 0, 1, 4,5);
1257
1258 dg->combo[5] = html_diag_combobox_with_popdown(bodyvalues[5], bfwin->session->colorlist, 1);
1259 color_but = color_but_new(gtk_bin_get_child(GTK_BIN(dg->combo[5])), dg->dialog);
1260 gtk_table_attach(GTK_TABLE(dgtable[0]), color_but, 2,3, 5,6, GTK_FILL, GTK_FILL, 0,0);
1261 gtk_table_attach_defaults(GTK_TABLE(dgtable[0]), dg->combo[5], 1,2, 5,6);
1262 dialog_mnemonic_label_in_table(_("_Active Link Color:"), dg->combo[5], dgtable[0], 0, 1, 5,6);
1263
1264 } else {
1265 dg->combo[1] = NULL;
1266 dg->combo[2] = NULL;
1267 dg->combo[3] = NULL;
1268 dg->combo[4] = NULL;
1269 dg->combo[5] = NULL;
1270 dg->entry[1] = NULL;
1271 }
1272
1273 html_diag_finish(dg, G_CALLBACK(bodyok_lcb));
1274
1275 if (custom)
1276 g_free(custom);
1277 }
1278
1279 static void
metaok_lcb(GtkWidget * widget,Thtml_diag * dg)1280 metaok_lcb(GtkWidget * widget, Thtml_diag * dg)
1281 {
1282 gchar *thestring, *finalstring;
1283
1284 thestring = g_strdup(cap("<META"));
1285 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("HTTP-EQUIV"), thestring, NULL);
1286 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[2]), cap("NAME"), thestring, NULL);
1287 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[1]), cap("CONTENT"), thestring, NULL);
1288 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[2]), cap("LANG"), thestring, NULL);
1289 if (get_curlang_option_value(dg->bfwin, lang_is_XHTML)) {
1290 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[2]), cap("XML:LANG"), thestring, NULL);
1291 }
1292 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[3]), cap("SCHEME"), thestring, NULL);
1293 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[4]), NULL, thestring, NULL);
1294 finalstring = g_strconcat(thestring, get_curlang_option_value(dg->bfwin, self_close_singleton_tags) ? " />" : ">", NULL);
1295 g_free(thestring);
1296
1297 if (dg->range.end == -1) {
1298 doc_insert_two_strings(dg->doc, finalstring, NULL);
1299 } else {
1300 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
1301 }
1302 g_free(finalstring);
1303 html_diag_destroy_cb(NULL, dg);
1304 }
1305
1306
1307 void
meta_dialog(Tbfwin * bfwin,Ttagpopup * data)1308 meta_dialog(Tbfwin * bfwin, Ttagpopup * data)
1309 {
1310 GList *popuplist = NULL;
1311
1312 static gchar *tagitems[] = { "http-equiv", "name", "content", "lang", "scheme", NULL };
1313 gchar *tagvalues[6];
1314 gchar *custom = NULL;
1315 Thtml_diag *dg;
1316 GtkWidget *dgtable;
1317
1318 dg = html_diag_new(bfwin, _("Meta"));
1319 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
1320
1321 dgtable = html_diag_table_in_vbox(dg, 5, 10);
1322 popuplist = list_from_arglist(FALSE, "abstract", "audience", "author", "copyright", "date", "description",
1323 "generator", "keywords", "page-topic", "page-type", "publisher", "revisit-after",
1324 "robots", NULL);
1325 dg->combo[2] = html_diag_combobox_with_popdown(tagvalues[1], popuplist, 1);
1326 dialog_mnemonic_label_in_table(_("_Name:"), dg->combo[2], dgtable, 0,1, 0,1);
1327 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[2])), 1,10, 0,1);
1328 g_list_free(popuplist);
1329
1330 /* extra field for Dublin Core meta tags: DC.foo ? */
1331 popuplist = list_from_arglist(FALSE, "expires", "refresh", "content-encoding", "content-location",
1332 "content-language", "content-style-type", "content-script-type", "content-type",
1333 "ext-cache", "cache-control", "pragma", "set-cookie", "PICS-Label", NULL);
1334 dg->combo[1] = html_diag_combobox_with_popdown(tagvalues[0], popuplist, 1);
1335 dialog_mnemonic_label_in_table(_("_HTTP-EQUIV:"), dg->combo[1], dgtable, 0,1, 1,2);
1336 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[1])), 1,10, 1,2);
1337 g_list_free(popuplist);
1338
1339 dg->entry[1] = dialog_entry_in_table(tagvalues[2], dgtable, 1,10, 2,3);
1340 dialog_mnemonic_label_in_table(_("Con_tent:"), dg->entry[1], dgtable, 0,1, 2,3);
1341
1342 dg->entry[2] = dialog_entry_in_table(tagvalues[3], dgtable, 1,10, 3,4);
1343 dialog_mnemonic_label_in_table(_("_Language:"), dg->entry[2], dgtable, 0,1, 3,4);
1344
1345 dg->entry[3] = dialog_entry_in_table(tagvalues[4], dgtable, 1,10, 4,5);
1346 dialog_mnemonic_label_in_table(_("_Scheme:"), dg->entry[3], dgtable, 0,1, 4,5);
1347
1348 dg->entry[4] = dialog_entry_in_table(custom, dgtable, 1,10, 5,6);
1349 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[4], dgtable, 0,1, 5,6);
1350
1351 html_diag_finish(dg, G_CALLBACK(metaok_lcb));
1352 if (custom)
1353 g_free(custom);
1354 }
1355
1356 static void
generalfontdialog_lcb(gint type,GtkWidget * widget,Thtml_diag * dg)1357 generalfontdialog_lcb(gint type, GtkWidget * widget, Thtml_diag * dg)
1358 {
1359 gchar *thestring, *finalstring;
1360
1361 switch (type) {
1362 case 1:
1363 thestring = g_strdup(cap("<FONT"));
1364 break;
1365 case 2:
1366 thestring = g_strdup(cap("<BASEFONT"));
1367 break;
1368 default:
1369 DEBUG_MSG_C("uh-oh: generalfontdialog_lcb, unknown action %d\n", type);
1370 g_return_if_reached();
1371 break;
1372 }
1373 if (strlen(gtk_entry_get_text(GTK_ENTRY(dg->spin[1])))) {
1374 gchar *sizecombo, *tmpstr;
1375 sizecombo = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[1]));
1376 if (strlen(sizecombo)) {
1377 tmpstr = g_strconcat(thestring, cap(" size=\"")
1378 , sizecombo, gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(dg->spin[1])))
1379 , "\"", NULL);
1380 } else {
1381 tmpstr = g_strconcat(thestring, cap(" size=\"")
1382 , gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(dg->spin[1])))
1383 , "\"", NULL);
1384 }
1385 g_free(thestring);
1386 thestring = tmpstr;
1387 g_free(sizecombo);
1388 }
1389 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[2]), cap("COLOR"), thestring, NULL);
1390 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[3]), cap("FACE"), thestring, NULL);
1391 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[1]), NULL, thestring, NULL);
1392 finalstring = g_strconcat(thestring, ">", NULL);
1393 g_free(thestring);
1394
1395 if (dg->range.end == -1) {
1396 doc_insert_two_strings(dg->doc, finalstring, cap("</FONT>"));
1397 } else {
1398 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
1399 }
1400 g_free(finalstring);
1401 html_diag_destroy_cb(NULL, dg);
1402 }
1403
1404 static void
fontok_lcb(GtkWidget * widget,Thtml_diag * dg)1405 fontok_lcb(GtkWidget * widget, Thtml_diag * dg)
1406 {
1407 generalfontdialog_lcb(1, widget, dg);
1408 }
1409
1410 static void
basefontok_lcb(GtkWidget * widget,Thtml_diag * dg)1411 basefontok_lcb(GtkWidget * widget, Thtml_diag * dg)
1412 {
1413 generalfontdialog_lcb(2, widget, dg);
1414 }
1415
1416 static void
generalfontdialog_cb(gint type,Tbfwin * bfwin,Ttagpopup * data)1417 generalfontdialog_cb(gint type, Tbfwin * bfwin, Ttagpopup * data)
1418 {
1419 GList *popdownlist = NULL;
1420 GtkWidget *color_but;
1421
1422 static gchar *tagitems[] = { "size", "face", "color", NULL };
1423 gchar *tagvalues[4];
1424 gchar *custom = NULL;
1425 Thtml_diag *dg;
1426 GtkWidget *dgtable;
1427
1428 switch (type) {
1429 case 1:
1430 dg = html_diag_new(bfwin, _("Font"));
1431 break;
1432 case 2:
1433 dg = html_diag_new(bfwin, _("Base Font"));
1434 break;
1435 default:
1436 return;
1437 break;
1438 }
1439 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
1440
1441 dgtable = html_diag_table_in_vbox(dg, 3, 10);
1442
1443 popdownlist = g_list_insert(popdownlist, "+", 0);
1444 popdownlist = g_list_insert(popdownlist, "-", 1);
1445 popdownlist = g_list_insert(popdownlist, "", 2);
1446 dg->combo[1] = html_diag_combobox_with_popdown("", popdownlist, 0);
1447 g_list_free(popdownlist);
1448 gtk_table_attach_defaults(GTK_TABLE(dgtable), gtk_label_new(_("Size")), 0,1, 0,1);
1449 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[1])), 1,2, 0,1);
1450 dg->spin[1] = spinbut_with_value(NULL, 0, 100, 1.0, 5.0);
1451 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[1], 2,3, 0,1);
1452 parse_integer_for_dialog(tagvalues[0], dg->spin[1], GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[1]))),
1453 NULL);
1454
1455 dg->combo[2] = html_diag_combobox_with_popdown(tagvalues[2], bfwin->session->colorlist, 1);
1456 color_but = color_but_new(gtk_bin_get_child(GTK_BIN(dg->combo[2])), dg->dialog);
1457 gtk_table_attach_defaults(GTK_TABLE(dgtable), gtk_label_new(_("Color")), 6,7, 0,1);
1458 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[2])), 7,9, 0,1);
1459 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(color_but), 9,10, 0,1);
1460
1461 dg->combo[3] = html_diag_combobox_with_popdown(tagvalues[1], bfwin->session->fontlist, 1);
1462 gtk_table_attach_defaults(GTK_TABLE(dgtable), gtk_label_new(_("Face")), 0,1, 1,2);
1463 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[3])), 1,10, 1,2);
1464
1465 dg->entry[1] = dialog_entry_in_table(custom, dgtable, 1,10, 2,3);
1466 gtk_table_attach_defaults(GTK_TABLE(dgtable), gtk_label_new(_("Custom")), 0,1, 2,3);
1467 switch (type) {
1468 case 1:
1469 html_diag_finish(dg, G_CALLBACK(fontok_lcb));
1470 break;
1471 case 2:
1472 html_diag_finish(dg, G_CALLBACK(basefontok_lcb));
1473 break;
1474 }
1475
1476 if (custom)
1477 g_free(custom);
1478 }
1479
1480 void
font_dialog(Tbfwin * bfwin,Ttagpopup * data)1481 font_dialog(Tbfwin * bfwin, Ttagpopup * data)
1482 {
1483 generalfontdialog_cb(1, bfwin, data);
1484 }
1485
1486 void
basefont_dialog(Tbfwin * bfwin,Ttagpopup * data)1487 basefont_dialog(Tbfwin * bfwin, Ttagpopup * data)
1488 {
1489 generalfontdialog_cb(2, bfwin, data);
1490 }
1491
1492 static void
emailok_lcb(GtkWidget * widget,Thtml_diag * dg)1493 emailok_lcb(GtkWidget * widget, Thtml_diag * dg)
1494 {
1495 gchar *finalstring, *tmpstr, *cc, *bcc, *subj, *body;
1496 gchar *urlencoded = NULL;
1497 gboolean have_questionmark = FALSE;
1498 tmpstr = g_strconcat(cap("<A HREF=\"mailto:")
1499 , gtk_entry_get_text(GTK_ENTRY(dg->entry[1]))
1500 , NULL);
1501 if (strlen(gtk_entry_get_text(GTK_ENTRY(dg->entry[2])))) {
1502 cc = g_strconcat("?cc=", gtk_entry_get_text(GTK_ENTRY(dg->entry[2])), NULL);
1503 have_questionmark = TRUE;
1504 } else {
1505 cc = g_strdup("");
1506 }
1507 if (strlen(gtk_entry_get_text(GTK_ENTRY(dg->entry[3])))) {
1508 if (have_questionmark) {
1509 bcc = g_strconcat("&bcc=", gtk_entry_get_text(GTK_ENTRY(dg->entry[3])), NULL);
1510 } else {
1511 bcc = g_strconcat("?bcc=", gtk_entry_get_text(GTK_ENTRY(dg->entry[3])), NULL);
1512 have_questionmark = TRUE;
1513 }
1514 } else {
1515 bcc = g_strdup("");
1516 }
1517 if (strlen(gtk_entry_get_text(GTK_ENTRY(dg->entry[4])))) {
1518 urlencoded = g_uri_escape_string(gtk_entry_get_text(GTK_ENTRY(dg->entry[4])), NULL, FALSE);
1519 if (have_questionmark) {
1520 subj = g_strconcat("&subject=", urlencoded, NULL);
1521 } else {
1522 subj = g_strconcat("?subject=", urlencoded, NULL);
1523 have_questionmark = TRUE;
1524 }
1525 } else {
1526 subj = g_strdup("");
1527 }
1528 if (strlen(gtk_entry_get_text(GTK_ENTRY(dg->entry[5])))) {
1529 urlencoded = g_uri_escape_string(gtk_entry_get_text(GTK_ENTRY(dg->entry[5])), NULL, FALSE);
1530 if (have_questionmark) {
1531 body = g_strconcat("&body=", urlencoded, NULL);
1532 } else {
1533 body = g_strconcat("?body=", urlencoded, NULL);
1534 }
1535 } else {
1536 body = g_strdup("");
1537 }
1538 finalstring = g_strconcat(tmpstr, cc, bcc, subj, body, "\">", NULL);
1539 g_free(tmpstr);
1540 g_free(cc);
1541 g_free(bcc);
1542 g_free(subj);
1543 g_free(body);
1544 g_free(urlencoded);
1545 doc_insert_two_strings(dg->doc, finalstring, cap("</A>"));
1546 g_free(finalstring);
1547 html_diag_destroy_cb(NULL, dg);
1548 }
1549
1550 void
email_dialog(Tbfwin * bfwin,Ttagpopup * data)1551 email_dialog(Tbfwin * bfwin, Ttagpopup * data)
1552 {
1553 GtkWidget *dgtable;
1554 Thtml_diag *dg;
1555
1556 dg = html_diag_new(bfwin, _("E-mail"));
1557
1558 dgtable = gtk_table_new(5, 2, FALSE);
1559 gtk_table_set_col_spacings(GTK_TABLE(dgtable), 12);
1560 gtk_table_set_row_spacings(GTK_TABLE(dgtable), 12);
1561 gtk_box_pack_start(GTK_BOX(dg->vbox), dgtable, FALSE, FALSE, 0);
1562
1563 dg->entry[1] = dialog_entry_in_table(NULL, dgtable, 1,2, 0,1);
1564 dialog_mnemonic_label_in_table(_("_Mail to:"), dg->entry[1], dgtable, 0,1, 0,1);
1565
1566 dg->entry[2] = dialog_entry_in_table(NULL, dgtable, 1,2, 1,2);
1567 dialog_mnemonic_label_in_table(_("_Copy to:"), dg->entry[2], dgtable, 0,1, 1,2);
1568
1569 dg->entry[3] = dialog_entry_in_table(NULL, dgtable, 1,2, 2,3);
1570 dialog_mnemonic_label_in_table(_("Blin_d copy to:"), dg->entry[3], dgtable, 0,1, 2,3);
1571
1572 dg->entry[4] = dialog_entry_in_table(NULL, dgtable, 1,2, 3,4);
1573 dialog_mnemonic_label_in_table(_("with _Subject:"), dg->entry[4], dgtable, 0,1, 3,4);
1574
1575 dg->entry[5] = dialog_entry_in_table(NULL, dgtable, 1,2, 4,5);
1576 dialog_mnemonic_label_in_table(_("with _Body:"), dg->entry[5], dgtable, 0,1, 4,5);
1577
1578 html_diag_finish(dg, G_CALLBACK(emailok_lcb));
1579 }
1580
1581 static void
quicklistok_lcb(GtkWidget * widget,Thtml_diag * dg)1582 quicklistok_lcb(GtkWidget * widget, Thtml_diag * dg)
1583 {
1584 gint active, temp, i;
1585 gchar *finalstring;
1586
1587 if (strlen(gtk_entry_get_text(GTK_ENTRY(dg->spin[1])))) {
1588 temp = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dg->spin[1]));
1589 finalstring = g_malloc((8 + temp * 12) * sizeof(gchar));
1590
1591 active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->radio[1]));
1592
1593 if (active) {
1594 strcpy(finalstring, cap("<OL>"));
1595 } else {
1596 strcpy(finalstring, cap("<UL>"));
1597 }
1598 /**********************************************/
1599 /* TODO: use bf_str_repeat() function !!!!!!! */
1600 /**********************************************/
1601 for (i = 0; i < temp; i++) {
1602 strcat(finalstring, cap("\n\t<LI></LI>"));
1603 }
1604 strcat(finalstring, "\n");
1605
1606 if (active) {
1607 doc_insert_two_strings(dg->doc, finalstring, cap("</OL>"));
1608 } else {
1609 doc_insert_two_strings(dg->doc, finalstring, cap("</UL>"));
1610 }
1611 g_free(finalstring);
1612 }
1613 html_diag_destroy_cb(NULL, dg);
1614 }
1615
1616 void
quicklist_dialog(Tbfwin * bfwin,Ttagpopup * data)1617 quicklist_dialog(Tbfwin * bfwin, Ttagpopup * data)
1618 {
1619 Thtml_diag *dg;
1620 GtkWidget *dgtable;
1621
1622 dg = html_diag_new(bfwin, _("Quick List"));
1623
1624 dgtable = html_diag_table_in_vbox(dg, 2, 10);
1625 dg->spin[1] = spinbut_with_value("3", 0, 500, 1.0, 5.0);
1626 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(dg->spin[1]), 1);
1627 dialog_mnemonic_label_in_table(_("Number of _rows:"), dg->spin[1], dgtable, 0,1, 0,1);
1628 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[1], 1,2, 0,1);
1629
1630 dg->radio[1] = gtk_radio_button_new_with_mnemonic(NULL, _("Or_dered"));
1631 dg->radio[2] = gtk_radio_button_new_with_mnemonic(gtk_radio_button_get_group(GTK_RADIO_BUTTON(dg->radio[1])), _("_Unordered"));
1632 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dg->radio[1]), TRUE);
1633 dialog_mnemonic_label_in_table(_("Style:"), NULL, dgtable, 0,1, 1,2);
1634 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->radio[1], 1,5, 1,2);
1635 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->radio[2], 5,10, 1,2);
1636
1637 html_diag_finish(dg, G_CALLBACK(quicklistok_lcb));
1638
1639 }
1640
1641 static void
framesetdialogok_lcb(GtkWidget * widget,Thtml_diag * dg)1642 framesetdialogok_lcb(GtkWidget * widget, Thtml_diag * dg)
1643 {
1644
1645 gchar *thestring, *finalstring;
1646
1647 thestring = g_strdup(cap("<FRAMESET"));
1648 thestring = insert_string_if_entry((GTK_ENTRY(dg->entry[1])), cap("COLS"), thestring, NULL);
1649 thestring = insert_string_if_entry((GTK_ENTRY(dg->entry[2])), cap("ROWS"), thestring, NULL);
1650 finalstring = g_strconcat(thestring, ">", NULL);
1651 g_free(thestring);
1652
1653 if ((dg->check[1]) && (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->check[1])))) {
1654 gint rowcount = 1, colcount = 1, framecount = 0;
1655 gchar *rowstr, *colstr, *tmpstr, *framestring, *tmp;
1656 rowstr = gtk_editable_get_chars(GTK_EDITABLE(dg->entry[1]), 0, -1);
1657 tmp = rowstr;
1658 while ((tmp = strchr(tmp, ','))) {
1659 rowcount++;
1660 tmp++;
1661 }
1662 g_free(rowstr);
1663 colstr = gtk_editable_get_chars(GTK_EDITABLE(dg->entry[2]), 0, -1);
1664 tmp = colstr;
1665 while ((tmp = strchr(tmp, ','))) {
1666 colcount++;
1667 tmp++;
1668 }
1669 g_free(colstr);
1670
1671 framecount = colcount * rowcount;
1672
1673 if (get_curlang_option_value(dg->bfwin, self_close_singleton_tags) == 1) {
1674 framestring = bf_str_repeat(cap("\n<FRAME />"), framecount);
1675 } else {
1676 framestring = bf_str_repeat(cap("\n<FRAME>"), framecount);
1677 }
1678 tmpstr = g_strconcat(finalstring, framestring, NULL);
1679 g_free(framestring);
1680 g_free(finalstring);
1681 finalstring = tmpstr;
1682 }
1683
1684 if (dg->range.end == -1) {
1685 doc_insert_two_strings(dg->doc, finalstring, cap("\n</FRAMESET>"));
1686 } else {
1687 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
1688 }
1689 g_free(finalstring);
1690 html_diag_destroy_cb(NULL, dg);
1691 }
1692
1693
1694 void
frameset_dialog(Tbfwin * bfwin,Ttagpopup * data)1695 frameset_dialog(Tbfwin * bfwin, Ttagpopup * data)
1696 {
1697 static gchar *tagitems[] = { "cols", "rows", "border", "spacing", NULL };
1698 gchar *tagvalues[5];
1699 gchar *custom = NULL;
1700 Thtml_diag *dg;
1701 GtkWidget *dgtable;
1702
1703 dg = html_diag_new(bfwin, _("Frameset"));
1704 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
1705
1706 dgtable = html_diag_table_in_vbox(dg, 5, 10);
1707
1708 dg->entry[1] = dialog_entry_in_table(tagvalues[0], dgtable, 2,10, 0,1);
1709 dialog_mnemonic_label_in_table(_("Co_ls:"), dg->entry[1], dgtable, 0,2, 0,1);
1710
1711 dg->entry[2] = dialog_entry_in_table(tagvalues[1], dgtable, 2,10, 1,2);
1712 dialog_mnemonic_label_in_table(_("_Rows:"), dg->entry[2], dgtable, 0,2, 1,2);
1713
1714 if (dg->range.end == -1) {
1715 dg->check[1] = gtk_check_button_new();
1716 dialog_mnemonic_label_in_table(_("_Add <frame> elements"), dg->check[1], dgtable, 3,4, 2,3);
1717 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[1], 2,3, 2,3);
1718 } else {
1719 dg->check[1] = NULL;
1720 }
1721
1722 /* THIS IS NO VALID HTML !!!!
1723 dg->check[1] = gtk_check_button_new();
1724 parse_existence_for_dialog(tagvalues[2], dg->check[1]);
1725 gtk_table_attach_defaults(GTK_TABLE(dgtable), gtk_label_new(_("Border")), 0,2, 2,3);
1726 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[1], 2,4, 2,3);
1727
1728 dg->spin[1] = spinbut_with_value(tagvalues[3], 0, 500, 1.0, 5.0);
1729 gtk_table_attach_defaults(GTK_TABLE(dgtable), gtk_label_new(_("Spacing")), 0,2, 3,4);
1730 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[1], 2,4, 3,4);
1731 */
1732 dg->entry[3] = dialog_entry_in_table(custom, dgtable, 2,10, 3,4);
1733 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[3], dgtable, 0,2, 3,4);
1734
1735 html_diag_finish(dg, G_CALLBACK(framesetdialogok_lcb));
1736
1737 if (custom)
1738 g_free(custom);
1739 }
1740
1741
1742 static void
framedialogok_lcb(GtkWidget * widget,Thtml_diag * dg)1743 framedialogok_lcb(GtkWidget * widget, Thtml_diag * dg)
1744 {
1745 Tbfwin *bfwin = dg->bfwin;
1746 gchar *thestring, *finalstring, *tmp;
1747
1748 thestring = g_strdup(cap("<FRAME"));
1749 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("SRC"), thestring, NULL);
1750 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[2]), cap("NAME"), thestring, NULL);
1751 thestring = insert_string_if_entry((GTK_ENTRY(dg->spin[0])), cap("FRAMEBORDER"), thestring, NULL);
1752 tmp = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[3]));
1753 if(strlen(tmp)) {
1754 thestring = g_strconcat(thestring, cap(" SCROLLING=\""), tmp, "\"",NULL);
1755 }
1756 g_free(tmp);
1757 thestring = insert_string_if_entry((GTK_ENTRY(dg->spin[1])), cap("MARGINWIDTH"), thestring, NULL);
1758 thestring = insert_string_if_entry((GTK_ENTRY(dg->spin[2])), cap("MARGINHEIGHT"), thestring, NULL);
1759 thestring = insert_attr_if_checkbox(dg->check[1], get_curlang_option_value(dg->bfwin, lang_is_XHTML) ? cap("NORESIZE=\"noresize\"") : cap("NORESIZE"), thestring);
1760 thestring = insert_string_if_entry((GTK_ENTRY(dg->entry[1])), NULL, thestring, NULL);
1761
1762 bfwin->session->targetlist = add_entry_to_stringlist(bfwin->session->targetlist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[2]))));
1763 bfwin->session->urllist = add_entry_to_stringlist(bfwin->session->urllist, GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[1]))));
1764
1765 if (get_curlang_option_value(bfwin, self_close_singleton_tags)) {
1766 finalstring = g_strconcat(thestring, " />", NULL);
1767 } else {
1768 finalstring = g_strconcat(thestring, ">", NULL);
1769 }
1770 g_free(thestring);
1771
1772 if (dg->range.end == -1) {
1773 doc_insert_two_strings(dg->doc, finalstring, NULL);
1774 } else {
1775 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
1776 }
1777 g_free(finalstring);
1778 html_diag_destroy_cb(NULL, dg);
1779 }
1780
1781 void
frame_dialog(Tbfwin * bfwin,Ttagpopup * data)1782 frame_dialog(Tbfwin * bfwin, Ttagpopup * data)
1783 {
1784 GList *popuplist = NULL;
1785 static gchar *tagitems[] = { "src", "name", "frameborder", "scrolling", "marginwidth", "marginheight", "noresize", NULL };
1786 gchar *tagvalues[9];
1787 gchar *custom = NULL;
1788
1789 GtkWidget *dgtable, *file_but;
1790 Thtml_diag *dg;
1791
1792 dg = html_diag_new(bfwin, _("Frame"));
1793 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
1794
1795 dgtable = html_diag_table_in_vbox(dg, 5, 10);
1796
1797 dg->combo[1] = html_diag_combobox_with_popdown(tagvalues[0], bfwin->session->urllist, 1);
1798 file_but = file_but_new(GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[1]))), 0, bfwin);
1799 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(file_but), 9,10, 0,1);
1800 dialog_mnemonic_label_in_table(_("_Source:"), dg->combo[1], dgtable, 0,1, 0,1);
1801 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[1])), 1,9, 0,1);
1802
1803 dg->combo[2] = html_diag_combobox_with_popdown_sized(tagvalues[1], bfwin->session->targetlist, 1, 90);
1804 dialog_mnemonic_label_in_table(_("_Name:"), dg->combo[2], dgtable, 0,1, 1,2);
1805 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[2], 1,5, 1,2);
1806
1807 dg->spin[1] = spinbut_with_value(tagvalues[4], 0, 500, 1.0, 5.0);
1808 dialog_mnemonic_label_in_table(_("Margin _Width:"), dg->spin[1], dgtable, 0,1, 2,3);
1809 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[1], 1,5, 2,3);
1810
1811 dg->spin[2] = spinbut_with_value(tagvalues[5], 0, 500, 1.0, 5.0);
1812 dialog_mnemonic_label_in_table(_("Margin _Height:"), dg->spin[2], dgtable, 0,1, 3,4);
1813 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[2], 1,5, 3,4);
1814
1815 popuplist = g_list_insert(popuplist, "auto",0);
1816 popuplist = g_list_insert(popuplist, "yes",1);
1817 popuplist = g_list_insert(popuplist, "no",2);
1818 popuplist = g_list_insert(popuplist, "",3);
1819 dg->combo[3] = html_diag_combobox_with_popdown("", popuplist, 0);
1820 g_list_free(popuplist);
1821 dialog_mnemonic_label_in_table(_("Scrollin_g:"), dg->combo[3], dgtable, 5,6, 1,2);
1822 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[3], 6,10, 1,2);
1823
1824 dg->spin[0] = spinbut_with_value(tagvalues[2], 0, 1, 1.0, 1.0);
1825 dialog_mnemonic_label_in_table(_("_Frameborder:"), dg->spin[0], dgtable, 5,6, 2,3);
1826 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[0], 6,10, 2,3);
1827
1828 dg->check[1] = gtk_check_button_new();
1829 parse_existence_for_dialog(tagvalues[6], dg->check[1]);
1830 dialog_mnemonic_label_in_table(_("No _Resize:"), dg->check[1], dgtable, 5,6, 3,4);
1831 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[1], 6,10, 3,4);
1832
1833 /* THIS IS NO HTML
1834 adj = (GtkAdjustment *) gtk_adjustment_new((gfloat) 1, 0.0, 500.0, 1.0, 5.0, 0.0);
1835 spin3 = gtk_spin_button_new(adj, 1,0);
1836 parse_integer_for_dialog(tagvalues[5], spin3, NULL, NULL);
1837 gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(spin3), 1);
1838 gtk_table_attach_defaults(GTK_TABLE(dgtable), gtk_label_new(_("Spacing")), 4,5, 3,4);
1839 gtk_table_attach_defaults(GTK_TABLE(dgtable), spin3, 5,8, 3,4); */
1840
1841 dg->entry[1] = dialog_entry_in_table(custom, dgtable, 1, 10, 4,5);
1842 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[1], dgtable, 0,1, 4,5);
1843
1844 html_diag_finish(dg, G_CALLBACK(framedialogok_lcb));
1845
1846 if (custom)
1847 g_free(custom);
1848 }
1849
1850 static void
audiodialogok_lcb(GtkWidget * widget,Thtml_diag * dg)1851 audiodialogok_lcb(GtkWidget * widget, Thtml_diag * dg)
1852 {
1853 gchar *finalstring, *thestring;
1854 gboolean is_xhtml = get_curlang_option_value(dg->bfwin, lang_is_XHTML);
1855 /* Tag construction */
1856 finalstring = g_strdup(cap("<AUDIO"));
1857 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("SRC"), finalstring, NULL);
1858 finalstring = insert_attr_if_checkbox(dg->check[1], is_xhtml ? cap("AUTOPLAY=\"autoplay\"") : cap("AUTOPLAY"), finalstring);
1859 finalstring = insert_attr_if_checkbox(dg->check[2], is_xhtml ? cap("CONTROLS=\"controls\"") : cap("CONTROLS"), finalstring);
1860 finalstring = insert_attr_if_checkbox(dg->check[3], is_xhtml ? cap("LOOP=\"loop\"") : cap("LOOP"), finalstring);
1861 finalstring = insert_attr_if_checkbox(dg->check[4], is_xhtml ? cap("MUTE=\"mute\"") : cap("MUTE"), finalstring);
1862 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[0])), cap("ID"), finalstring, NULL);
1863 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[3]), cap("CLASS"), finalstring, NULL);
1864 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[2]), cap("PRELOAD"), finalstring, NULL);
1865 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[2])), cap("STYLE"), finalstring, NULL);
1866 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[3])), NULL, finalstring, NULL);
1867 thestring = finalstring;
1868 finalstring = g_strconcat(thestring, ">", NULL);
1869 g_free(thestring);
1870 /* Insert tag in document */
1871 if (dg->range.end == -1) {
1872 doc_insert_two_strings(dg->doc, finalstring, cap("</AUDIO>"));
1873 } else {
1874 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
1875 }
1876
1877 /* Free */
1878 g_free(finalstring);
1879 html_diag_destroy_cb(NULL, dg);
1880 }
1881
1882 void
audio_dialog(Tbfwin * bfwin,Ttagpopup * data)1883 audio_dialog(Tbfwin * bfwin, Ttagpopup * data)
1884 {
1885 /* Controls */
1886 GtkWidget *dgtable, *but;
1887 Thtml_diag *dg;
1888 static gchar *tagitems[] = { "src", "preload", "id", "class", "style", NULL };
1889 gchar *tagvalues[6];
1890 gchar *custom=NULL;
1891
1892 /* Values attributes lists */
1893 GList *listPreload;
1894
1895 /* Dialog construction and settings */
1896 dg = html_diag_new(bfwin, _("Audio"));
1897 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
1898 dgtable = html_diag_table_in_vbox(dg, 6, 11);
1899
1900 dg->combo[1] = html_diag_combobox_with_popdown(tagvalues[0], bfwin->session->urllist, 1);
1901 but = file_but_new(GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[1]))), 0, bfwin);
1902 gtk_table_attach(GTK_TABLE(dgtable), GTK_WIDGET(but), 9,10, 0,1, GTK_SHRINK,GTK_SHRINK,0,0);
1903 dialog_mnemonic_label_in_table(_("_Source:"), dg->combo[1], dgtable, 0,1, 0,1);
1904 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[1])), 1,9, 0,1);
1905
1906 dg->check[1] = gtk_check_button_new();
1907 dialog_mnemonic_label_in_table(_("_Autoplay:"), dg->check[1], dgtable, 0,1, 1,2);
1908 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[1], 1,2, 1,2);
1909
1910 dg->check[2] = gtk_check_button_new();
1911 dialog_mnemonic_label_in_table(_("C_ontrols:"), dg->check[2], dgtable, 2,3, 1,2);
1912 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[2], 3,4, 1,2);
1913
1914 dg->check[3] = gtk_check_button_new();
1915 dialog_mnemonic_label_in_table(_("_Loop:"), dg->check[3], dgtable, 4,5, 1,2);
1916 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[3], 5,6, 1,2);
1917
1918 dg->check[4] = gtk_check_button_new();
1919 dialog_mnemonic_label_in_table(_("M_ute:"), dg->check[4], dgtable, 7,8, 1,2);
1920 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[4], 8,9, 1,2);
1921
1922 listPreload = list_from_arglist(FALSE, "", "auto", "metadata", "none", NULL);
1923 dg->combo[2] = html_diag_combobox_with_popdown(tagvalues[1], listPreload, 1);
1924 dialog_mnemonic_label_in_table(_("_Preload:"), dg->combo[2], dgtable, 0,1, 2,3);
1925 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(dg->combo[2]), 1,4, 2,3);
1926 g_list_free(listPreload);
1927
1928 dg->entry[0] = dialog_entry_in_table(tagvalues[2], dgtable, 5,6, 2,3);
1929 dialog_mnemonic_label_in_table(_("_Id:"), dg->entry[0], dgtable, 4,5, 2,3);
1930
1931 dg->combo[3] = html_diag_combobox_with_popdown(tagvalues[3], bfwin->session->classlist, 1);
1932 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[3], 8,9, 2,3);
1933 dialog_mnemonic_label_in_table(_("Cl_ass:"), dg->combo[3], dgtable, 7,8, 2,3);
1934
1935 dg->entry[2] = dialog_entry_in_table(tagvalues[4], dgtable, 1,8 , 3,4);
1936 dialog_mnemonic_label_in_table(_("_Style:"), dg->entry[2], dgtable, 0,1, 3,4);
1937 but = style_but_new(dg->entry[2], dg->dialog);
1938 gtk_table_attach(GTK_TABLE(dgtable), but, 8,10, 3,4, GTK_SHRINK,GTK_SHRINK,0,0);
1939
1940 dg->entry[3] = dialog_entry_in_table(custom, dgtable, 1,10, 4,5);
1941 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[3], dgtable, 0,1, 4,5);
1942
1943 html_diag_finish(dg, G_CALLBACK(audiodialogok_lcb));
1944 }
1945
1946 static void
canvasdialogok_lcb(GtkWidget * widget,Thtml_diag * dg)1947 canvasdialogok_lcb(GtkWidget * widget, Thtml_diag * dg)
1948 {
1949 gchar *finalstring, *thestring;
1950
1951 /* Tag construction */
1952 finalstring = g_strdup(cap("<CANVAS"));
1953 finalstring = insert_string_if_entry((GTK_ENTRY(dg->spin[1])), cap("WIDTH"), finalstring, NULL);
1954 finalstring = insert_string_if_entry((GTK_ENTRY(dg->spin[0])), cap("HEIGHT"), finalstring, NULL);
1955 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[0])), cap("ID"), finalstring, NULL);
1956 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[1])), cap("STYLE"), finalstring, NULL);
1957 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[0]), cap("CLASS"), finalstring, NULL);
1958 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[2])), NULL, finalstring, NULL);
1959 thestring = finalstring;
1960 finalstring = g_strconcat(thestring, ">", NULL);
1961 g_free(thestring);
1962 /* Insert tag in document */
1963 if (dg->range.end == -1) {
1964 doc_insert_two_strings(dg->doc, finalstring, cap("</CANVAS>"));
1965 } else {
1966 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
1967 }
1968 g_free(finalstring);
1969 html_diag_destroy_cb(NULL, dg);
1970 }
1971
1972 void
canvas_dialog(Tbfwin * bfwin,Ttagpopup * data)1973 canvas_dialog(Tbfwin * bfwin, Ttagpopup * data)
1974 {
1975 /* Controls */
1976 GtkWidget *dgtable, *but;
1977 Thtml_diag *dg;
1978 static gchar *tagitems[] = { "height", "width", "id", "style", "class", NULL };
1979 gchar *tagvalues[6];
1980 gchar *custom=NULL;
1981
1982 /* Dialog construction */
1983 dg = html_diag_new(bfwin, _("Canvas"));
1984 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
1985 dgtable = html_diag_table_in_vbox(dg, 4,3);
1986
1987 dg->entry[0] = dialog_entry_in_table(tagvalues[2], dgtable, 1,2, 0,1);
1988 dialog_mnemonic_label_in_table(_("_Id:"), dg->entry[0], dgtable, 0,1, 0,1);
1989
1990 dg->combo[0] = html_diag_combobox_with_popdown(tagvalues[4], bfwin->session->classlist, 1);
1991 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[0], 1,2, 1,2);
1992 dialog_mnemonic_label_in_table(_("Cl_ass:"), dg->combo[0], dgtable, 0,1, 1,2);
1993
1994 dg->entry[1] = dialog_entry_in_table(tagvalues[3], dgtable, 1,3 , 2,3);
1995 dialog_mnemonic_label_in_table(_("_Style:"), dg->entry[1], dgtable, 0,1, 2,3);
1996 but = style_but_new(dg->entry[1], dg->dialog);
1997 gtk_table_attach(GTK_TABLE(dgtable), but, 3,4, 2,3, GTK_SHRINK,GTK_SHRINK,0,0);
1998
1999 /* Width */
2000 dg->spin[1] = spinbut_with_value(tagvalues[1]?tagvalues[1]:"200", 0, 10000, 1.0, 5.0);
2001 dialog_mnemonic_label_in_table(_("_Width:"), dg->spin[1], dgtable, 2,3, 0,1);
2002 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[1], 3,4, 0,1);
2003
2004 /* Height */
2005 dg->spin[0] = spinbut_with_value(tagvalues[0]?tagvalues[0]:"200", 0, 10000, 1.0, 5.0);
2006 dialog_mnemonic_label_in_table(_("_Height:"), dg->spin[0], dgtable, 2,3, 1,2);
2007 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[0], 3,4, 1,2);
2008
2009 dg->entry[2] = dialog_entry_in_table(custom, dgtable, 1,4, 3,4);
2010 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[2], dgtable, 0,1, 3,4);
2011
2012 html_diag_finish(dg, G_CALLBACK(canvasdialogok_lcb));
2013 }
2014
2015 static void
videodialogok_lcb(GtkWidget * widget,Thtml_diag * dg)2016 videodialogok_lcb(GtkWidget * widget, Thtml_diag * dg)
2017 {
2018 gchar *finalstring, *thestring;
2019 gboolean is_xhtml = get_curlang_option_value(dg->bfwin, lang_is_XHTML);
2020 /* Tag construction */
2021 finalstring = g_strdup(cap("<VIDEO"));
2022 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("SRC"), finalstring, NULL);
2023 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[2]), cap("POSTER"), finalstring, NULL);
2024 finalstring = insert_attr_if_checkbox(dg->check[1], is_xhtml ? cap("AUTOPLAY=\"autoplay\"") : cap("AUTOPLAY"), finalstring);
2025 finalstring = insert_attr_if_checkbox(dg->check[2], is_xhtml ? cap("CONTROLS=\"controls\"") : cap("CONTROLS"), finalstring);
2026 finalstring = insert_attr_if_checkbox(dg->check[3], is_xhtml ? cap("LOOP=\"loop\"") : cap("LOOP"), finalstring);
2027 finalstring = insert_attr_if_checkbox(dg->check[4], is_xhtml ? cap("MUTE=\"mute\"") : cap("MUTE"), finalstring);
2028 finalstring = insert_string_if_entry((GTK_ENTRY(dg->spin[1])), cap("WIDTH"), finalstring, NULL);
2029 finalstring = insert_string_if_entry((GTK_ENTRY(dg->spin[2])), cap("HEIGHT"), finalstring, NULL);
2030 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[0])), cap("ID"), finalstring, NULL);
2031 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[3]), cap("CLASS"), finalstring, NULL);
2032 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[4]), cap("PRELOAD"), finalstring, NULL);
2033 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[1])), cap("STYLE"), finalstring, NULL);
2034 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[2])), NULL, finalstring, NULL);
2035 thestring = finalstring;
2036 finalstring = g_strconcat(thestring, ">", NULL);
2037 g_free(thestring);
2038 /* Insert tag in document */
2039 if (dg->range.end == -1) {
2040 doc_insert_two_strings(dg->doc, finalstring, cap("</VIDEO>"));
2041 } else {
2042 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
2043 }
2044
2045 /* Free */
2046 g_free(finalstring);
2047 html_diag_destroy_cb(NULL, dg);
2048 }
2049
2050 void
video_dialog(Tbfwin * bfwin,Ttagpopup * data)2051 video_dialog(Tbfwin * bfwin, Ttagpopup * data)
2052 {
2053 /* Controls */
2054 GtkWidget *dgtable, *but;
2055 Thtml_diag *dg;
2056
2057 /* Attributes name list */
2058 static gchar *tagitems[] = { "src", "poster", "width", "height", "id", "class", "preload", "style", NULL };
2059 gchar *tagvalues[9];
2060 gchar *custom=NULL;
2061
2062 /* Values attributes lists */
2063 GList *tmplist;
2064
2065 dg = html_diag_new(bfwin, _("Video"));
2066 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
2067 dgtable = html_diag_table_in_vbox(dg, 7,9);
2068
2069 /* Source */
2070 dg->combo[1] = html_diag_combobox_with_popdown(tagvalues[0], bfwin->session->urllist, 1);
2071 but = file_but_new(GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[1]))), 0, bfwin);
2072 gtk_table_attach(GTK_TABLE(dgtable), GTK_WIDGET(but), 8,9, 0,1, GTK_SHRINK,GTK_SHRINK,0,0);
2073 dialog_mnemonic_label_in_table(_("_Source:"), dg->combo[1], dgtable, 0,1, 0,1);
2074 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[1])), 1,8, 0,1);
2075
2076 /* Poster */
2077 dg->combo[2] = html_diag_combobox_with_popdown(tagvalues[1], bfwin->session->urllist, 1);
2078 but = file_but_new(GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[2]))), 0, bfwin);
2079 gtk_table_attach(GTK_TABLE(dgtable), GTK_WIDGET(but), 8,9, 1,2, GTK_SHRINK,GTK_SHRINK,0,0);
2080 dialog_mnemonic_label_in_table(_("_Poster:"), dg->combo[2], dgtable, 0,1, 1,2);
2081 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[2])), 1,8, 1,2);
2082
2083 /* autoplay */
2084 dg->check[1] = gtk_check_button_new();
2085 dialog_mnemonic_label_in_table(_("_Autoplay:"), dg->check[1], dgtable, 0,1, 2,3);
2086 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[1], 1,2, 2,3);
2087
2088 /* controls */
2089 dg->check[2] = gtk_check_button_new();
2090 dialog_mnemonic_label_in_table(_("C_ontrols:"), dg->check[2], dgtable, 2,3, 2,3);
2091 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[2], 3,4, 2,3);
2092
2093 /* loop */
2094 dg->check[3] = gtk_check_button_new();
2095 dialog_mnemonic_label_in_table(_("_Loop:"), dg->check[3], dgtable, 4,5, 2,3);
2096 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[3], 5,6, 2,3);
2097
2098 /* mute */
2099 dg->check[4] = gtk_check_button_new();
2100 dialog_mnemonic_label_in_table(_("M_ute:"), dg->check[4], dgtable, 7,8, 2,3);
2101 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[4], 8,9, 2,3);
2102
2103 /* Width */
2104 dg->spin[1] = spinbut_with_value(tagvalues[2]?tagvalues[2]:"200", 0, 10000, 1.0, 5.0);
2105 dialog_mnemonic_label_in_table(_("_Width:"), dg->spin[1], dgtable, 4,5, 3,4);
2106 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[1], 5,6, 3,4);
2107
2108 /* Height */
2109 dg->spin[2] = spinbut_with_value(tagvalues[3]?tagvalues[3]:"200", 0, 10000, 1.0, 5.0);
2110 dialog_mnemonic_label_in_table(_("_Height:"), dg->spin[2], dgtable, 7,8, 3,4);
2111 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[2], 8,9, 3,4);
2112
2113
2114 dg->entry[0] = dialog_entry_in_table(tagvalues[4], dgtable, 1,4, 4,5);
2115 dialog_mnemonic_label_in_table(_("_Id:"), dg->entry[0], dgtable, 0,1, 4,5);
2116
2117 dg->combo[3] = html_diag_combobox_with_popdown(tagvalues[5], bfwin->session->classlist, 1);
2118 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[3], 5,9, 4,5);
2119 dialog_mnemonic_label_in_table(_("Cl_ass:"), dg->combo[3], dgtable, 4,5, 4,5);
2120
2121 /* Preload */
2122 tmplist = list_from_arglist(FALSE, "", "auto", "metadata", "none", NULL);
2123 dg->combo[4] = html_diag_combobox_with_popdown(tagvalues[6], tmplist, 1);
2124 dialog_mnemonic_label_in_table(_("_Preload:"), dg->combo[4], dgtable, 0,1, 3,4);
2125 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(dg->combo[4]), 1,4, 3,4);
2126 g_list_free(tmplist);
2127
2128 dg->entry[1] = dialog_entry_in_table(tagvalues[7], dgtable, 1,7, 5,6);
2129 dialog_mnemonic_label_in_table(_("_Style:"), dg->entry[1], dgtable, 0,1, 5,6);
2130 but = style_but_new(dg->entry[1], dg->dialog);
2131 gtk_table_attach(GTK_TABLE(dgtable), but, 7,9, 5,6, GTK_SHRINK,GTK_SHRINK,0,0);
2132
2133 dg->entry[2] = dialog_entry_in_table(custom, dgtable, 1,9, 6,7);
2134 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[2], dgtable, 0,1, 6,7);
2135
2136 html_diag_finish(dg, G_CALLBACK(videodialogok_lcb));
2137 }
2138
2139 static void
html5timedialogok_lcb(GtkWidget * widget,Thtml_diag * dg)2140 html5timedialogok_lcb(GtkWidget * widget, Thtml_diag * dg)
2141 {
2142 gchar *finalstring, *thestring;
2143
2144 /* Tag construction */
2145 finalstring = g_strdup(cap("<TIME"));
2146 /* finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[0]), cap("PUBDATE"), finalstring, NULL);*/
2147 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[0])), cap("DATETIME"), finalstring, NULL);
2148 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[1])), NULL, finalstring, NULL);
2149
2150 thestring = finalstring;
2151 finalstring = g_strconcat(thestring, ">", NULL);
2152 g_free(thestring);
2153 /* Insert tag in document */
2154 if (dg->range.end == -1) {
2155 doc_insert_two_strings(dg->doc, finalstring, cap("</TIME>"));
2156 } else {
2157 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
2158 }
2159
2160 /* Free */
2161 g_free(finalstring);
2162 html_diag_destroy_cb(NULL, dg);
2163 }
2164
2165 void
html5time_dialog(Tbfwin * bfwin,Ttagpopup * data)2166 html5time_dialog(Tbfwin * bfwin, Ttagpopup * data)
2167 {
2168 /* Controls */
2169 GtkWidget *dgtable;
2170 Thtml_diag *dg;
2171 GtkWidget* l;
2172
2173 /* there is no more pubdate attribute */
2174 static gchar *tagitems[] = { "datetime", "pubdate", NULL };
2175 gchar *tagvalues[3];
2176 gchar *custom=NULL;
2177
2178 /* Dialog construction */
2179 dg = html_diag_new(bfwin, _("Time"));
2180 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
2181 dgtable = html_diag_table_in_vbox(dg, 4,3);
2182
2183 /* Datetime help */
2184 l = gtk_label_new(_("Datetime format (ex. YYYY-MM-DDThh:mm:ssTZD) :\n\n"
2185 "YYYY - year (e.g. 2009)\n"
2186 "MM - month (e.g. 01 for January)\nDD - day of the month (e.g. 08)\n"
2187 "T - a required separator\nhh - hour (e.g. 22 for 10.00pm)\n"
2188 "mm - minutes (e.g. 55)\nss - seconds (e.g. 03)\n"
2189 "TZD - Time Zone Designator (Z denotes Zulu, also known as Greenwich Mean Time)\n"));
2190 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(l), 0,3, 0,1);
2191
2192 /* Datetime */
2193 dg->entry[0] = dialog_entry_in_table(tagvalues[0], dgtable, 1,3, 1,2);
2194 dialog_mnemonic_label_in_table(_("_Datetime:"), dg->entry[0], dgtable, 0,1, 1,2);
2195
2196 /* Pubdate is removed of html5*/
2197
2198 dg->entry[1] = dialog_entry_in_table(custom, dgtable, 1,3, 3,4);
2199 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[1], dgtable, 0,1, 3,4);
2200
2201 html_diag_finish(dg, G_CALLBACK(html5timedialogok_lcb));
2202 }
2203
2204 /* this is no HTML, but often requested, so we leave it for now */
2205 /* this is HTML5, modified for HTML5, src,type(Valid MIME type),width,height,&globals; */
2206
2207 static void
embedok_lcb(GtkWidget * widget,Thtml_diag * dg)2208 embedok_lcb(GtkWidget * widget, Thtml_diag * dg)
2209 {
2210 gchar *thestring, *finalstring;
2211
2212 finalstring = g_strdup(cap("<EMBED"));
2213 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[0]), cap("SRC"), finalstring, NULL);
2214 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[0])), cap("TYPE"), finalstring, NULL);
2215 finalstring = insert_string_if_entry((GTK_ENTRY(dg->spin[1])), cap("WIDTH"), finalstring, NULL);
2216 finalstring = insert_string_if_entry((GTK_ENTRY(dg->spin[2])), cap("HEIGHT"), finalstring, NULL);
2217 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[1])), cap("ID"), finalstring, NULL);
2218 finalstring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("CLASS"), finalstring, NULL);
2219 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[2])), cap("STYLE"), finalstring, NULL);
2220 finalstring = insert_string_if_entry((GTK_ENTRY(dg->entry[3])), NULL, finalstring, NULL);
2221 thestring = finalstring;
2222 finalstring = g_strconcat(thestring, ">", NULL);
2223 g_free(thestring);
2224 /* Insert tag in document */
2225 if (dg->range.end == -1) {
2226 doc_insert_two_strings(dg->doc, finalstring, cap("</EMBED>"));
2227 } else {
2228 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
2229 }
2230
2231 /* Free */
2232 g_free(finalstring);
2233 html_diag_destroy_cb(NULL, dg);
2234
2235 }
2236
2237 void
embed_dialog(Tbfwin * bfwin,Ttagpopup * data)2238 embed_dialog(Tbfwin * bfwin, Ttagpopup * data)
2239 {
2240 /* Controls */
2241 GtkWidget *dgtable, *but;
2242 Thtml_diag *dg;
2243
2244 /* Attributes name list */
2245 static gchar *tagitems[] = { "src", "type", "width", "height", "id", "class", "style", NULL };
2246 gchar *tagvalues[8];
2247 gchar *custom=NULL;
2248
2249 dg = html_diag_new(bfwin, _("Embed"));
2250 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
2251 dgtable = html_diag_table_in_vbox(dg, 5,5);
2252
2253 dg->combo[0] = html_diag_combobox_with_popdown(tagvalues[0], bfwin->session->urllist, 1);
2254 but = file_but_new(GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[0]))), 0, bfwin);
2255 gtk_table_attach(GTK_TABLE(dgtable), GTK_WIDGET(but), 5,6, 0,1, GTK_SHRINK,GTK_SHRINK,0,0);
2256 dialog_mnemonic_label_in_table(_("_Source:"), dg->combo[0], dgtable, 0,1, 0,1);
2257 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[0])), 1,5, 0,1);
2258
2259 dg->entry[0] = dialog_entry_in_table(tagvalues[1], dgtable, 1,5, 1,2);
2260 dialog_mnemonic_label_in_table(_("_MIME Type:"), dg->entry[0], dgtable, 0,1, 1,2);
2261
2262 dg->spin[1] = spinbut_with_value(tagvalues[2]?tagvalues[2]:"200", 0, 10000, 1.0, 5.0);
2263 dialog_mnemonic_label_in_table(_("_Width:"), dg->spin[1], dgtable, 0,1, 2,3);
2264 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[1], 1,2, 2,3);
2265
2266 dg->spin[2] = spinbut_with_value(tagvalues[3]?tagvalues[3]:"200", 0, 10000, 1.0, 5.0);
2267 dialog_mnemonic_label_in_table(_("_Height:"), dg->spin[2], dgtable, 3,4, 2,3);
2268 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[2], 4,6, 2,3);
2269
2270 dg->entry[1] = dialog_entry_in_table(tagvalues[4], dgtable, 1,2, 3,4);
2271 dialog_mnemonic_label_in_table(_("_Id:"), dg->entry[1], dgtable, 0,1, 3,4);
2272
2273 dg->combo[1] = html_diag_combobox_with_popdown(tagvalues[5], bfwin->session->classlist, 1);
2274 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[1], 4,6, 3,4);
2275 dialog_mnemonic_label_in_table(_("Cl_ass:"), dg->combo[1], dgtable, 3,4, 3,4);
2276
2277 dg->entry[2] = dialog_entry_in_table(tagvalues[6], dgtable, 1,4, 4,5);
2278 dialog_mnemonic_label_in_table(_("_Style:"), dg->entry[2], dgtable, 0,1, 4,5);
2279 but = style_but_new(dg->entry[2], dg->dialog);
2280 gtk_table_attach(GTK_TABLE(dgtable), but, 4,6, 4,5, GTK_SHRINK,GTK_SHRINK,0,0);
2281
2282 dg->entry[3] = dialog_entry_in_table(custom, dgtable, 1,6, 5,6);
2283 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[3], dgtable, 0,1, 5,6);
2284
2285 html_diag_finish(dg, G_CALLBACK(embedok_lcb));
2286 }
2287
2288 static void
scriptok_lcb(GtkWidget * widget,Thtml_diag * dg)2289 scriptok_lcb(GtkWidget * widget, Thtml_diag * dg)
2290 {
2291 gchar *thestring, *finalstring, *endstring;
2292 gboolean is_xhtml = get_curlang_option_value(dg->bfwin, lang_is_XHTML);
2293 thestring = g_strdup(cap("<SCRIPT"));
2294 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[0]), cap("SRC"), thestring, NULL);
2295 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[1]), cap("LANGUAGE"), thestring, NULL);
2296 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[2]), cap("TYPE"), thestring, NULL);
2297 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->combo[3]), cap("CHARSET"), thestring, NULL);
2298 thestring = insert_attr_if_checkbox(dg->check[0], is_xhtml ? cap("ASYNC=\"async\"") : cap("ASYNC"), thestring);
2299 thestring = insert_attr_if_checkbox(dg->check[1], is_xhtml ? cap("DEFER=\"defer\"") : cap("DEFER"), thestring);
2300 thestring = insert_string_if_entry(GTK_ENTRY(dg->entry[1]), NULL, thestring, NULL);
2301 finalstring = g_strconcat(thestring, ">", NULL);
2302 endstring = cap("</SCRIPT>");
2303 g_free(thestring);
2304
2305 if (dg->range.end == -1) {
2306 doc_insert_two_strings(dg->doc, finalstring, endstring);
2307 } else {
2308 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
2309 }
2310 g_free(finalstring);
2311 html_diag_destroy_cb(NULL, dg);
2312 }
2313
2314 void
script_dialog(Tbfwin * bfwin,Ttagpopup * data)2315 script_dialog(Tbfwin * bfwin, Ttagpopup * data)
2316 {
2317 GtkWidget *but;
2318 GList *tmplist, *tmplist2, *tmplist3;
2319 GtkWidget *dgtable;
2320 Thtml_diag *dg;
2321 static gchar *scriptitems[] = { "src", "language", "type", "charset", NULL };
2322 gchar *tagvalues[5];
2323 gchar *custom = NULL;
2324
2325 dg = html_diag_new(bfwin, _("Script"));
2326 fill_dialogvalues(scriptitems, tagvalues, &custom, (Ttagpopup *) data, dg);
2327
2328 dgtable = html_diag_table_in_vbox(dg, 6, 12);
2329
2330 tmplist = g_list_append(NULL, "javascript");
2331 tmplist = g_list_append(tmplist, "javascript1.2");
2332 tmplist = g_list_append(tmplist, "javascript1.1");
2333 tmplist2 = g_list_append(NULL, "application/javascript");
2334 tmplist2 = g_list_append(tmplist2, "text/javascript");
2335 tmplist2 = g_list_append(tmplist2, "application/x-javascript");
2336 tmplist2 = g_list_append(tmplist2, "text/plain");
2337 tmplist2 = g_list_append(tmplist2, "text/html");
2338 tmplist3 = list_from_arglist(FALSE, "UTF-8", "ISO-8859-1", "ISO-8859-15", "ARMSCII-8", "BIG5", "BIG5-HKSCS", "CP866", "EUC-JP", "EUC-KR", "EUC-TW", "GB18030", "GB2312", "GBK", "GEORGIAN-ACADEMY", "HZ", "IBM850", "IBM852", "IBM855", "IBM857", "IBM862", "IBM864", "ISO-2022-JP", "ISO-2022-KR", "ISO-8859-10", "ISO-8859-13", "ISO-8859-14", "ISO-8859-16", "ISO-8859-2", "ISO-8859-3", "ISO-8859-4", "ISO-8859-5", "ISO-8859-6", "ISO-8859-7", "ISO-8859-8", "ISO-8859-8-I", "ISO-8859-9", "ISO-IR-111", "JOHAB", "KOI8R", "KOI8U", "SHIFT_JIS", "TCVN", "TIS-620", "UHC", "VISCII", "WINDOWS-1250", "WINDOWS-1251", "WINDOWS-1252", "WINDOWS-1253", "WINDOWS-1254", "WINDOWS-1255", "WINDOWS-1256", "WINDOWS-1257", "WINDOWS-1258",NULL);
2339
2340 dg->combo[0] = html_diag_combobox_with_popdown(tagvalues[0], bfwin->session->urllist, 1);
2341 but = file_but_new(GTK_WIDGET(gtk_bin_get_child(GTK_BIN(dg->combo[0]))), 0, bfwin);
2342 gtk_table_attach(GTK_TABLE(dgtable), GTK_WIDGET(but), 10,12, 0,1, GTK_SHRINK,GTK_SHRINK,0,0);
2343 dialog_mnemonic_label_in_table(_("_Source:"), dg->combo[0], dgtable, 0,2, 0,1);
2344 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[0])), 2,10, 0,1);
2345
2346 dg->combo[1] = html_diag_combobox_with_popdown(tagvalues[1], tmplist, 1);
2347 dialog_mnemonic_label_in_table(_("_Language:"), dg->combo[1], dgtable, 0,2, 1,2);
2348 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[1], 2,6, 1,2);
2349 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(gtk_label_new(_("(HTML4 only)"))), 7,8, 1,2);
2350
2351 dg->combo[2] = html_diag_combobox_with_popdown(tagvalues[2], tmplist2,1);
2352 dialog_mnemonic_label_in_table(_("MIME _Type:"), dg->combo[2], dgtable, 0,2, 2,3);
2353 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[2], 2,6, 2,3);
2354
2355 dg->combo[3] = html_diag_combobox_with_popdown(tagvalues[3], tmplist3,1);
2356 dialog_mnemonic_label_in_table(_("_Charset:"), dg->combo[3], dgtable, 0,2, 3,4);
2357 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[3], 2,6, 3,4);
2358 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(gtk_label_new(_("(HTML5)"))), 7,8, 3,4);
2359
2360 dg->check[0] = gtk_check_button_new();
2361 dialog_mnemonic_label_in_table(_("_Async:"), dg->check[0], dgtable, 0,1, 4,5);
2362 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[0], 1,2, 4,5);
2363
2364 dg->check[1] = gtk_check_button_new();
2365 dialog_mnemonic_label_in_table(_("_Defer:"), dg->check[1], dgtable, 4,5, 4,5);
2366 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[1], 5,6, 4,5);
2367 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(gtk_label_new(_("(HTML5)"))), 7,8, 4,5);
2368
2369 dg->entry[1] = dialog_entry_in_table(custom, dgtable, 2,12, 5,6);
2370 dialog_mnemonic_label_in_table(_("Custo_m:"), dg->entry[1], dgtable, 0,2, 5,6);
2371
2372 html_diag_finish(dg, G_CALLBACK(scriptok_lcb));
2373 g_list_free(tmplist);
2374 g_list_free(tmplist2);
2375 g_list_free(tmplist3);
2376 }
2377
2378 static void
columncount_auto_toggled_lcb(GtkWidget * checkbutton,Thtml_diag * dg)2379 columncount_auto_toggled_lcb(GtkWidget * checkbutton, Thtml_diag * dg)
2380 {
2381 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton))){
2382 gtk_widget_set_sensitive(dg->spin[0], FALSE);
2383 } else {
2384 gtk_widget_set_sensitive(dg->spin[0], TRUE);
2385 }
2386 }
2387
2388 static void
columnwidth_auto_toggled_lcb(GtkWidget * checkbutton,Thtml_diag * dg)2389 columnwidth_auto_toggled_lcb(GtkWidget * checkbutton, Thtml_diag * dg)
2390 {
2391 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton))){
2392 gtk_widget_set_sensitive(dg->spin[1], FALSE);
2393 gtk_widget_set_sensitive(dg->combo[0], FALSE);
2394 } else {
2395 gtk_widget_set_sensitive(dg->spin[1], TRUE);
2396 gtk_widget_set_sensitive(dg->combo[0], TRUE);
2397 }
2398 }
2399
2400 static void
columngap_normal_clicked_lcb(GtkWidget * checkbutton,Thtml_diag * dg)2401 columngap_normal_clicked_lcb(GtkWidget * checkbutton, Thtml_diag * dg)
2402 {
2403 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton))){
2404 gtk_widget_set_sensitive(dg->spin[2], FALSE);
2405 gtk_widget_set_sensitive(dg->combo[1], FALSE);
2406 } else {
2407 gtk_widget_set_sensitive(dg->spin[2], TRUE);
2408 gtk_widget_set_sensitive(dg->combo[1], TRUE);
2409 }
2410 }
2411
2412 static void
columnrulewidth_changed_lcb(GtkWidget * widget,Thtml_diag * dg)2413 columnrulewidth_changed_lcb(GtkWidget * widget, Thtml_diag * dg)
2414 {
2415 if (strlen(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[5])))) {
2416 gtk_widget_set_sensitive(dg->spin[3], FALSE);
2417 gtk_widget_set_sensitive(dg->combo[4], FALSE);
2418 } else {
2419 gtk_widget_set_sensitive(dg->spin[3], TRUE);
2420 gtk_widget_set_sensitive(dg->combo[4], TRUE);
2421 }
2422 }
2423
2424 static void
columnselector_toggled_lcb(GtkWidget * widget,Thtml_diag * dg)2425 columnselector_toggled_lcb(GtkWidget * widget, Thtml_diag * dg)
2426 {
2427 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->radio[0]))) {
2428 gtk_widget_set_sensitive(dg->entry[0], TRUE);
2429 } else {
2430 gtk_widget_set_sensitive(dg->entry[0], FALSE);
2431 }
2432 }
2433
2434 static void
columnsok_lcb(GtkWidget * widget,Thtml_diag * dg)2435 columnsok_lcb(GtkWidget * widget, Thtml_diag * dg)
2436 {
2437 gchar *thestring, *finalstring, *endstring, *tmpstring;
2438 gboolean moz, webkit;
2439 moz = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->check[3]));
2440 webkit = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->check[4]));
2441
2442 thestring = g_strdup("");
2443 endstring = g_strdup("; ");
2444 finalstring = g_strdup("");
2445 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->radio[0]))) {
2446 if(gtk_entry_get_text_length(GTK_ENTRY(dg->entry[0]))==0) {
2447 finalstring = g_strdup("\n");
2448 endstring = g_strdup(";\n");
2449 } else {
2450 thestring = g_strconcat(thestring, gtk_entry_get_text(GTK_ENTRY(dg->entry[0])), " {\n", NULL);
2451 finalstring = g_strdup("\n}\n");
2452 endstring = g_strdup(";\n");
2453 }
2454 }
2455 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->radio[1]))) {
2456 thestring = g_strdup(" style=\"");
2457 finalstring = g_strdup("\"");
2458 }
2459
2460 tmpstring = g_strdup("columns: ");
2461 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->check[2]))) {
2462 tmpstring = g_strconcat(tmpstring, "auto", NULL);
2463 } else {
2464 tmpstring = g_strconcat(tmpstring, gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(dg->spin[0]))), NULL);
2465 }
2466 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->check[3]))) {
2467 tmpstring = g_strconcat(tmpstring, " auto", endstring, NULL);
2468 } else {
2469 tmpstring = g_strconcat(tmpstring, " ", gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(dg->spin[1]))),
2470 gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[0])), endstring, NULL);
2471 }
2472 thestring = g_strconcat(thestring, tmpstring, NULL);
2473 if (moz) {thestring = g_strconcat(thestring, "-moz-", tmpstring, NULL);}
2474 if (webkit) {thestring = g_strconcat(thestring, "-webkit-", tmpstring, NULL);}
2475 g_free(tmpstring);
2476
2477 tmpstring = g_strdup("column-gap: ");
2478 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dg->check[4]))) {
2479 tmpstring = g_strconcat (tmpstring, "normal", endstring, NULL);
2480 } else {
2481 tmpstring = g_strconcat(tmpstring, gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(dg->spin[2]))),
2482 gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[1])), endstring, NULL);
2483 }
2484 thestring = g_strconcat(thestring, tmpstring, NULL);
2485 if (moz) {thestring = g_strconcat(thestring, "-moz-", tmpstring, NULL);}
2486 if (webkit) {thestring = g_strconcat(thestring, "-webkit-", tmpstring, NULL);}
2487 g_free(tmpstring);
2488
2489 tmpstring = g_strdup("column-rule: ");
2490 tmpstring = g_strconcat(tmpstring, gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[2])), " ", NULL);
2491 tmpstring = g_strconcat(tmpstring, gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[3])), " ", NULL);
2492 if (strlen(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[5])))) {
2493 tmpstring = g_strconcat(tmpstring, gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[5])), endstring, NULL);
2494 } else {
2495 tmpstring = g_strconcat(tmpstring, gtk_entry_get_text(GTK_ENTRY(GTK_SPIN_BUTTON(dg->spin[3]))),
2496 gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(dg->combo[4])), endstring, NULL);
2497 }
2498 thestring = g_strconcat(thestring, tmpstring, NULL);
2499 if (moz) {thestring = g_strconcat(thestring, "-moz-", tmpstring, NULL);}
2500 if (webkit) {thestring = g_strconcat(thestring, "-webkit-", tmpstring, NULL);}
2501 g_free(tmpstring);
2502
2503 if (dg->range.end == -1) {
2504 doc_insert_two_strings(dg->doc, thestring, finalstring );
2505 } else {
2506 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
2507 }
2508 g_free(thestring);
2509 g_free(finalstring);
2510 g_free(endstring);
2511 html_diag_destroy_cb(NULL, dg);
2512 }
2513
2514 void
columns_dialog(Tbfwin * bfwin,Ttagpopup * data)2515 columns_dialog(Tbfwin * bfwin, Ttagpopup * data)
2516 {
2517 GtkWidget *color_but;
2518 GList *tmplist = list_from_arglist(FALSE,"em", "px", "ex", "ch", "rem", "px", "pc", "pt",
2519 "mm", "cm", "in", "%", NULL),
2520 *tmplist2 = list_from_arglist(FALSE, "", "none", "hidden", "dotted", "dashed", "solid",
2521 "double", "groove", "ridge", "inset", "outset", NULL),
2522 *tmplist3 = list_from_arglist(FALSE, "", "thin", "medium", "thick", NULL) ;
2523 GtkWidget *dgtable;
2524 Thtml_diag *dg;
2525 static gchar *tagitems[] = { "column-count", "column-width", "column-width-unit", "column-gap",
2526 "column-gap-unit", "column-rule-color", "column-rule-style", "column-rule-width",
2527 "column-rule-width-unit", "column-rule-width-var", "selectors", NULL };
2528 gchar *tagvalues[12];
2529 gchar *custom = NULL;
2530
2531 /*
2532 todo check buttons:
2533 column-span: all (default none)
2534 column-fill: auto (default balance)
2535 */
2536
2537 dg = html_diag_new(bfwin, _("CSS3 multi-column layout"));
2538 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
2539 dgtable = html_diag_table_in_vbox(dg, 9, 4);
2540
2541 dg->spin[0] = spinbut_with_value(tagvalues[0] ? tagvalues[0]: "2", 1, 100, 1, 5);
2542 gtk_widget_set_tooltip_text(
2543 dialog_mnemonic_label_in_table("column-c_ount:", dg->spin[0], dgtable, 0,1, 0,1),
2544 _("Auto (default) or number of columns"));
2545 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[0], 1,2, 0,1);
2546 dg->check[2] = gtk_check_button_new_with_mnemonic("_auto");
2547 g_signal_connect(dg->check[2], "toggled", G_CALLBACK(columncount_auto_toggled_lcb), dg);
2548 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[2], 3,4, 0,1);
2549
2550 dg->spin[1] = spinbut_with_value(tagvalues[1] ? tagvalues[1]: "50", 0, 10000, 0.1, 1.0);
2551 gtk_widget_set_tooltip_text(
2552 dialog_mnemonic_label_in_table("column-_width:", dg->spin[1], dgtable, 0,1, 1,2),
2553 _("Auto (default) or width"));
2554 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[1], 1,2, 1,2);
2555 dg->combo[0] = html_diag_combobox_with_popdown_sized(tagvalues[2] ? tagvalues[2]: "%", tmplist, 0, 70);
2556 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[0], 2,3, 1,2);
2557 dg->check[3] = gtk_check_button_new_with_mnemonic("a_uto");
2558 g_signal_connect(dg->check[3], "toggled", G_CALLBACK(columnwidth_auto_toggled_lcb), dg);
2559 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dg->check[3]), TRUE);
2560 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[3], 3,4, 1,2);
2561
2562 dg->spin[2] = spinbut_with_value(tagvalues[3] ? tagvalues[3]: "1", 0, 10000, 0.1, 1.0);
2563 gtk_widget_set_tooltip_text(
2564 dialog_mnemonic_label_in_table("column-_gap:", dg->spin[2], dgtable, 0,1, 2,3),
2565 _("Normal (default) or width of the gap between columns"));
2566 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[2], 1,2, 2,3);
2567 dg->combo[1] = html_diag_combobox_with_popdown_sized(tagvalues[4] ? tagvalues[4]: "em", tmplist, 0, 70);
2568 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[1], 2,3, 2,3);
2569 dg->check[4] = gtk_check_button_new_with_mnemonic("_normal");
2570 g_signal_connect(dg->check[4], "clicked", G_CALLBACK(columngap_normal_clicked_lcb), dg);
2571 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dg->check[4]), TRUE);
2572 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[4], 3,4, 2,3);
2573
2574 dg->combo[2] = html_diag_combobox_with_popdown_sized(tagvalues[5], bfwin->session->colorlist, 1, 110);
2575 color_but = color_but_new(gtk_bin_get_child(GTK_BIN(dg->combo[2])), dg->dialog);
2576 dialog_mnemonic_label_in_table("column-rule-co_lor:", dg->combo[2], dgtable, 0,1, 3,4);
2577 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[2])), 1,2, 3,4);
2578 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(color_but), 2,3, 3,4);
2579
2580 dg->combo[3] = html_diag_combobox_with_popdown_sized(tagvalues[6] ? tagvalues[6]: "solid", tmplist2, 0, 110);
2581 gtk_widget_set_tooltip_text(
2582 dialog_mnemonic_label_in_table("column-rule-_style:", dg->combo[3], dgtable, 0,1, 4,5),
2583 _("None (default) or style"));
2584 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[3])), 1,2, 4,5);
2585
2586 dg->spin[3] = spinbut_with_value(tagvalues[7] ? tagvalues[7]: "0.5", 0, 10000, 0.1, 1.0);
2587 gtk_widget_set_tooltip_text(
2588 dialog_mnemonic_label_in_table("column-rule-wi_dth:", dg->spin[3], dgtable, 0,1, 5,6),
2589 _("Medium (default) or width"));
2590 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->spin[3], 1,2, 5,6);
2591
2592 dg->combo[4] = html_diag_combobox_with_popdown_sized(tagvalues[8] ? tagvalues[8]: "em", tmplist, 0, 70);
2593 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->combo[4], 2,3, 5,6);
2594
2595 dg->combo[5] = html_diag_combobox_with_popdown_sized(tagvalues[9] ? tagvalues[9]: "medium", tmplist3, 0, 90);
2596 g_signal_connect(dg->combo[5], "changed", G_CALLBACK(columnrulewidth_changed_lcb), dg);
2597 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(GTK_BIN(dg->combo[5])), 3,4, 5,6);
2598 gtk_widget_set_sensitive(dg->spin[3], FALSE);
2599 gtk_widget_set_sensitive(dg->combo[4], FALSE);
2600
2601 gtk_table_attach_defaults(GTK_TABLE(dgtable), GTK_WIDGET(gtk_label_new(
2602 _("Use vendor-prefixed CSS property:"))), 0,2, 6,7);
2603 dg->check[3] = gtk_check_button_new_with_mnemonic("G_ecko");
2604 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[3], 2,3, 6,7);
2605 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dg->check[3]), TRUE);
2606 dg->check[4] = gtk_check_button_new_with_mnemonic("Web_kit");
2607 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->check[4], 3,4, 6,7);
2608 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dg->check[4]), TRUE);
2609
2610 dg->radio[0] = gtk_radio_button_new_with_mnemonic(NULL, _("styles_heet"));
2611 gtk_widget_set_tooltip_text(dg->radio[0],_("Add selector(s) to create a new rule"));
2612 dg->radio[1] = gtk_radio_button_new_with_mnemonic(gtk_radio_button_get_group
2613 (GTK_RADIO_BUTTON(dg->radio[0])), _("style a_ttribute"));
2614 gtk_widget_set_tooltip_text(dg->radio[1],_("Add a style attribute in tag"));
2615 dg->radio[2] = gtk_radio_button_new_with_mnemonic(gtk_radio_button_get_group
2616 (GTK_RADIO_BUTTON(dg->radio[0])), _("style _values"));
2617 gtk_widget_set_tooltip_text(dg->radio[2],_("Add values in a style attribute"));
2618 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dg->radio[0]), TRUE);
2619 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->radio[0], 0,1, 7,8);
2620 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->radio[1], 1,2, 7,8);
2621 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->radio[2], 2,4, 7,8);
2622 g_signal_connect(GTK_TOGGLE_BUTTON(dg->radio[0]), "toggled",
2623 G_CALLBACK(columnselector_toggled_lcb), dg);
2624
2625 dg->entry[0] = dialog_entry_in_table(tagvalues[10], dgtable, 1,4, 8,9);
2626 gtk_widget_set_tooltip_text(
2627 dialog_mnemonic_label_in_table(_("Selecto_rs:"), dg->entry[0], dgtable, 0,1, 8,9),
2628 _("Leave empty to insert declarations into an existing rule."));
2629
2630 g_list_free(tmplist);
2631 g_list_free(tmplist2);
2632 g_list_free(tmplist3);
2633
2634 html_diag_finish(dg, G_CALLBACK(columnsok_lcb));
2635 }
2636
2637 static void
linkdialogok_lcb(GtkWidget * widget,Thtml_diag * dg)2638 linkdialogok_lcb(GtkWidget * widget, Thtml_diag * dg)
2639 {
2640 gchar *thestring, *finalstring;
2641
2642 thestring = g_strdup(cap("<LINK"));
2643 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->attrwidget[0]), cap("HREF"), thestring, NULL);
2644 thestring = insert_string_if_entry(GTK_ENTRY(dg->attrwidget[1]), cap("HREFLANG"), thestring, NULL);
2645 thestring = insert_string_if_entry(GTK_ENTRY(dg->attrwidget[2]), cap("TITLE"), thestring, NULL);
2646 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->attrwidget[3]), cap("TYPE"), thestring, NULL);
2647 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->attrwidget[4]), cap("REL"), thestring, NULL);
2648 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->attrwidget[5]), cap("REV"), thestring, NULL);
2649 thestring = insert_string_if_combobox(GTK_COMBO_BOX(dg->attrwidget[6]), cap("MEDIA"), thestring, NULL);
2650 thestring = insert_string_if_entry(GTK_ENTRY(dg->attrwidget[7]), cap("LANG"), thestring, NULL);
2651 thestring = insert_string_if_entry(GTK_ENTRY(dg->attrwidget[8]), NULL, thestring, NULL);
2652 finalstring = g_strconcat(thestring, get_curlang_option_value(dg->bfwin, self_close_singleton_tags) ? " />" : ">", NULL);
2653 g_free(thestring);
2654
2655 if (dg->range.end == -1) {
2656 doc_insert_two_strings(dg->doc, finalstring, NULL);
2657 } else {
2658 doc_replace_text(dg->doc, finalstring, dg->range.pos, dg->range.end);
2659 }
2660 g_free(finalstring);
2661 html_diag_destroy_cb(NULL, dg);
2662 }
2663
2664 /*
2665 * This dialog can be used for almost every <link .../> tag usage. A few parts
2666 * are missing:
2667 *
2668 * - rel="fontdef" src="..." which is for downloadable font types
2669 * should grey out everything else or separate dialog?
2670 * - missing: target (bad-style?), and charset attributes are not part of
2671 * the dialog
2672 *
2673 * The mode-switch can be used to add more default values for links (see
2674 * html.h -> Tlinkdialog_mode. Maybe we can use this to handle the link-dialog
2675 * for downloadable font types. Oliver suggested to add some buttons as a way
2676 * for a fast and direct way to access several standard values (e.g. CSS) from
2677 * inside the dialog.
2678 */
2679 void
linkdialog_dialog(Tbfwin * bfwin,Ttagpopup * data,Tlinkdialog_mode mode)2680 linkdialog_dialog(Tbfwin * bfwin, Ttagpopup * data, Tlinkdialog_mode mode)
2681 {
2682 static gchar *tagitems[] = { "href", "hreflang", "title", "type", "rel", "rev", "media", "lang", NULL };
2683 gchar *tagvalues[9];
2684 gchar *custom = NULL;
2685 Thtml_diag *dg;
2686 GtkWidget *dgtable, *but;
2687
2688 dg = html_diag_new(bfwin, _("Link"));
2689 fill_dialogvalues(tagitems, tagvalues, &custom, (Ttagpopup *) data, dg);
2690 dgtable = html_diag_table_in_vbox(dg, 3, 10);
2691 {
2692 GList *rel_link_list = NULL, *tmplist;
2693 rel_link_list = list_relative_document_filenames(bfwin->current_document);
2694 tmplist = duplicate_stringlist(bfwin->session->urllist, 1);
2695 rel_link_list = g_list_concat(tmplist, rel_link_list);
2696 dg->attrwidget[0] = html_diag_combobox_with_popdown(tagvalues[0], rel_link_list, 1);
2697 free_stringlist(rel_link_list);
2698 }
2699 dialog_mnemonic_label_in_table(_("_HREF:"), dg->attrwidget[0], dgtable, 0,1, 0,1);
2700 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->attrwidget[0], 1,2, 0,1);
2701 but = file_but_new(gtk_bin_get_child(GTK_BIN(dg->attrwidget[0])), 0, bfwin);
2702 gtk_table_attach_defaults(GTK_TABLE(dgtable), but, 2,3, 0,1);
2703
2704 dg->attrwidget[1] = dialog_entry_in_table(tagvalues[1], dgtable, 1,3, 1,2);
2705 dialog_mnemonic_label_in_table(_("HREF_LANG:"), dg->attrwidget[1], dgtable, 0,1, 1,2);
2706
2707 dg->attrwidget[2] = dialog_entry_in_table(tagvalues[2], dgtable, 1,3, 2,3);
2708 dialog_mnemonic_label_in_table(_("T_itle:"), dg->attrwidget[2], dgtable, 0,1, 2,3);
2709
2710 {
2711 gchar *tmp;
2712 GList *tmplist = list_from_arglist(FALSE, "text/html", "text/css", "text/plain", "text/javascript",
2713 "application/postscript", NULL);
2714 switch (mode) {
2715 case linkdialog_mode_default:
2716 tmp = tagvalues[3];
2717 break;
2718 case linkdialog_mode_css:
2719 tmp = "text/css";
2720 break;
2721 default:
2722 tmp = tagvalues[3];
2723 break;
2724 }
2725 dg->attrwidget[3] = html_diag_combobox_with_popdown(tmp, tmplist, 1);
2726
2727 g_list_free(tmplist);
2728 }
2729 dialog_mnemonic_label_in_table(_("_Type:"), dg->attrwidget[3], dgtable, 0,1, 3,4);
2730 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->attrwidget[3], 1,3, 3,4);
2731
2732 {
2733 gchar *tmp;
2734 GList *tmplist = list_from_arglist(FALSE, "stylesheet", "alternate", "alternate stylesheet", "shortcut icon",
2735 "contents", "chapter", "section", "subsection", "index", "glossary", "appendix",
2736 "search", "author", "copyright", "next", "prev", "first", "last", "up", "top",
2737 "help", "bookmark", NULL);
2738
2739 switch (mode) {
2740 case linkdialog_mode_default:
2741 tmp = tagvalues[4];
2742 break;
2743 case linkdialog_mode_css:
2744 tmp = "stylesheet";
2745 break;
2746 default:
2747 tmp = tagvalues[4];
2748 break;
2749 }
2750 dg->attrwidget[4] = html_diag_combobox_with_popdown(tmp, tmplist, 1);
2751 dialog_mnemonic_label_in_table(_("_Forward Relation:"), dg->attrwidget[4], dgtable, 0,1, 4,5);
2752 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->attrwidget[4], 1,3, 4,5);
2753
2754 dg->attrwidget[5] = html_diag_combobox_with_popdown(tagvalues[5], tmplist, 1);
2755 dialog_mnemonic_label_in_table(_("_Reverse Relation:"), dg->attrwidget[5], dgtable, 0,1, 5,6);
2756 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->attrwidget[5], 1,3, 5,6);
2757
2758 g_list_free(tmplist);
2759 }
2760
2761 {
2762 GList *tmplist = list_from_arglist(FALSE, "screen", "tty", "tv", "projection", "handheld", "print", "braille",
2763 "aural", "all", NULL);
2764 dg->attrwidget[6] = html_diag_combobox_with_popdown(tagvalues[6], tmplist, 1);
2765 g_list_free(tmplist);
2766 }
2767 dialog_mnemonic_label_in_table(_("Media:"), dg->attrwidget[6], dgtable, 0,1, 6,7);
2768 gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->attrwidget[6], 1,3, 6,7);
2769
2770 dg->attrwidget[7] = dialog_entry_in_table(tagvalues[7], dgtable, 1,3, 7,8);
2771 dialog_mnemonic_label_in_table(_("L_ang:"), dg->attrwidget[7], dgtable, 0,1, 7,8);
2772
2773 dg->attrwidget[8] = dialog_entry_in_table(custom, dgtable, 1,3, 8,9);
2774 dialog_mnemonic_label_in_table(_("_Custom:"), dg->attrwidget[8], dgtable, 0,1, 8,9);
2775
2776 html_diag_finish(dg, G_CALLBACK(linkdialogok_lcb));
2777 if (custom)
2778 g_free(custom);
2779 }
2780