1
/* Bluefish HTML Editor
2
* preferences.c the preferences code
4
* Copyright (C) 2002-2003 Olivier Sessink
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23
#include <string.h> /* strcmp() */
26
#include "stringlist.h" /* duplicate_arraylist*/
27
#include "bf_lib.h" /* list_switch_order() */
31
#include "highlight.h"
32
#include "filebrowser.h"
42
filebrowser_two_pane_view,
43
filebrowser_unknown_icon,
45
editor_font_string, /* editor font */
46
editor_tab_width, /* editor tabwidth */
47
editor_indent_wspaces,
48
tab_font_string, /* notebook tabs font */
49
highlight_num_lines_count, /* number of lines to highlight in continous highlighting */
50
defaulthighlight, /* highlight documents by default */
51
transient_htdialogs, /* set html dialogs transient ro the main window */
55
main_window_h, /* main window height */
56
main_window_w, /* main window width */
57
max_recent_files, /* length of Open Recent list */
58
max_dir_history, /* length of directory history */
59
backup_file, /* wheather to use a backup file */
60
backup_filestring, /* the string to append to the backup file */
61
backup_abort_action, /* if the backup fails, continue 'save', 'abort' save, or 'ask' user */
62
backup_cleanuponclose, /* remove the backupfile after close ? */
63
image_thumbnailstring, /* string to append to thumbnail filenames */
64
image_thumbnailtype, /* fileformat to use for thumbnails, "jpeg" or "png" can be handled by gdkpixbuf*/
65
image_thumbnailsizing_type, /* scaling ratio=0, fixed width=1, height=2, width+height (discard aspect ratio)=3 */
66
image_thumbnailsizing_val1, /* the width, height or ratio, depending on the value above */
67
image_thumbnailsizing_val2, /* height if the type=3 */
68
image_thumnailformatstring, /* like <a href="%r"><img src="%t"></a> or more advanced */
69
allow_multi_instances, /* allow multiple instances of the same file */
70
modified_check_type, /* 0=no check, 1=by mtime and size, 2=by mtime, 3=by size, 4,5,...not implemented (md5sum?) */
71
num_undo_levels, /* number of undo levels per document */
72
clear_undo_on_save, /* clear all undo information on file save */
73
newfile_default_encoding,/* if you open a new file, what encoding will it use */
74
auto_set_encoding_meta,/* auto set metatag for the encoding */
76
ext_browsers_in_submenu,
77
ext_commands_in_submenu,
78
ext_outputbox_in_submenu,
79
bookmarks_default_store,
80
bookmarks_filename_mode,
82
leftpanel_tabposition,
85
image_editor_cline, /* image editor commandline */
86
full_p, /* use </p> */
87
full_li, /* use </li> */
88
allow_css, /* CSS allowed */
89
allow_dep, /* allow <FONT>... */
90
format_by_context, /* use <strong> instead of <b>, <emphasis instead of <i> etc. (W3C reccomendation) */
91
xhtml, /* write <br /> */
92
allow_ruby, /* allow <ruby> */
93
allow_h4, /* allow <Q>... */
94
allow_frames, /* allow <FRAME> */
95
force_dtd, /* write <!DOCTYPE...> */
96
dtd_url, /* URL in DTD */
97
xml_start, /* <?XML...> */
98
lowercase_tags, /* use lowercase tags */
99
word_wrap, /* use wordwrap */
100
autoindent, /* autoindent code */
101
drop_at_drop_pos, /* drop at drop position instead of cursor position */
102
link_management, /* perform link management */
104
cust_menu, /* entries in the custom menu */
106
/* spell checker options */
107
cfg_spc_cline , /* spell checker command line */
108
cfg_spc_lang , /* language */
109
spc_accept_compound , /* accept compound words ? */
110
spc_use_esc_chars , /* specify aditional characters that
111
may be part of a word ? */
112
spc_esc_chars , /* which ones ? */
113
spc_use_pers_dict , /* use a personal dictionary */
114
spc_pers_dict , /* which one ? */
115
spc_use_input_encoding , /* use input encoding */
116
spc_input_encoding , /* wich one ? */
117
spc_output_html_chars , /* output html chars ? (like á,)*/
120
conv_ctrl_enter, /* convert control-enter key press */
121
ctrl_enter_text, /* inserted text */
122
conv_shift_enter, /* convert shift-enter key press */
123
shift_enter_text, /* inserted text */
124
conv_special_char, /* convert ctrl-'<','>','&' */
125
#ifdef WITH_MSG_QUEUE
126
open_in_running_bluefish, /* open commandline documents in already running session*/
127
#endif /* WITH_MSG_QUEUE */
128
#ifdef HAVE_GNOME_VFS
130
#endif /* HAVE_GNOME_VFS */
145
GtkListStore *lstore;
152
GtkListStore *lstore;
159
const gchar *selected_filetype;
160
} Thighlightpatterndialog;
163
GtkWidget *prefs[property_num_max];
164
GList *lists[lists_num_max];
169
Thighlightpatterndialog hpd;
182
/* type 0/1=text, 2=toggle */
183
static void pref_create_column(GtkTreeView *treeview, gint type, GCallback func, gpointer data, const gchar *title, gint num) {
184
GtkTreeViewColumn *column;
185
GtkCellRenderer *renderer;
186
if (type == 1 || type == 0) {
187
renderer = gtk_cell_renderer_text_new();
188
g_object_set(G_OBJECT(renderer), "editable", TRUE, NULL);
189
g_signal_connect(G_OBJECT(renderer), "edited", func, data);
191
renderer = gtk_cell_renderer_toggle_new();
192
g_object_set(G_OBJECT(renderer), "activatable", TRUE, NULL);
193
g_signal_connect(G_OBJECT(renderer), "toggled", func, data);
195
column = gtk_tree_view_column_new_with_attributes(title, renderer,(type ==1) ? "text" : "active" ,num,NULL);
196
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
198
/* 3 entries must have len 3, but in reality it will be 4, because there is a NULL pointer appended */
199
static gchar **pref_create_empty_strarr(gint len) {
200
gchar **strarr = g_malloc0((len+1)*sizeof(gchar *));
202
strarr[0] = g_strdup(_("Untitled"));
203
for (i=1;i<len;i++) {
204
strarr[i] = g_strdup("");
209
/* type 0=escapedtext, 1=text, 2=toggle */
210
static void pref_apply_change(GtkListStore *lstore, gint pointerindex, gint type, gchar *path, gchar *newval, gint index) {
213
GtkTreePath* tpath = gtk_tree_path_new_from_string(path);
214
if (tpath && gtk_tree_model_get_iter(GTK_TREE_MODEL(lstore),&iter,tpath)) {
215
gtk_tree_model_get(GTK_TREE_MODEL(lstore), &iter, pointerindex, &strarr, -1);
216
DEBUG_MSG("pref_apply_change, lstore=%p, index=%d, type=%d, got strarr=%p\n",lstore,index,type,strarr);
218
gtk_list_store_set(GTK_LIST_STORE(lstore),&iter,index,newval,-1);
220
gtk_list_store_set(GTK_LIST_STORE(lstore),&iter,index,(newval[0] == '1'),-1);
223
DEBUG_MSG("pref_apply_change, old value for strarr[%d] was %s\n",index,strarr[index]);
224
g_free(strarr[index]);
227
strarr[index] = unescape_string(newval, FALSE);
229
strarr[index] = g_strdup(newval);
231
DEBUG_MSG("pref_apply_change, strarr[%d] now is %s\n",index,strarr[index]);
233
DEBUG_MSG("ERROR: path %s was not converted to tpath(%p) or iter (lstore=%p)\n",path,tpath,lstore);
235
gtk_tree_path_free(tpath);
237
static void pref_delete_strarr(Tprefdialog *pd, Tlistpref *lp, gint pointercolumn) {
239
GtkTreeSelection *select;
241
select = gtk_tree_view_get_selection(GTK_TREE_VIEW(lp->lview));
242
if (gtk_tree_selection_get_selected (select,NULL,&iter)) {
244
gtk_tree_model_get(GTK_TREE_MODEL(lp->lstore), &iter, pointercolumn, &strarr, -1);
245
gtk_list_store_remove(GTK_LIST_STORE(lp->lstore),&iter);
246
*lp->thelist = g_list_remove(*lp->thelist, strarr);
251
static void listpref_row_inserted(GtkTreeModel *treemodel,GtkTreePath *arg1,GtkTreeIter *arg2,Tlistpref *lp) {
252
gint *indices = gtk_tree_path_get_indices(arg1);
254
lp->insertloc = indices[0];
255
DEBUG_MSG("reorderable_row_inserted, insertloc=%d\n",lp->insertloc);
258
static void listpref_row_deleted(GtkTreeModel *treemodel,GtkTreePath *arg1,Tlistpref *lp) {
259
if (lp->insertloc > -1) {
260
gint *indices = gtk_tree_path_get_indices(arg1);
262
GList *lprepend, *ldelete;
263
gint deleteloc = indices[0];
264
if (deleteloc > lp->insertloc) deleteloc--;
265
DEBUG_MSG("reorderable_row_deleted, deleteloc=%d, insertloc=%d, listlen=%d\n",deleteloc,lp->insertloc,g_list_length(*lp->thelist));
266
*lp->thelist = g_list_first(*lp->thelist);
267
lprepend = g_list_nth(*lp->thelist,lp->insertloc);
268
ldelete = g_list_nth(*lp->thelist,deleteloc);
269
if (ldelete && (ldelete != lprepend)) {
270
gpointer data = ldelete->data;
271
*lp->thelist = g_list_remove(*lp->thelist, data);
272
if (lprepend == NULL) {
273
DEBUG_MSG("lprepend=NULL, appending %s to the list\n",((gchar **)data)[0]);
274
*lp->thelist = g_list_append(g_list_last(*lp->thelist), data);
276
DEBUG_MSG("lprepend %s, ldelete %s\n",((gchar **)lprepend->data)[0], ((gchar **)data)[0]);
277
*lp->thelist = g_list_prepend(lprepend, data);
279
*lp->thelist = g_list_first(*lp->thelist);
281
DEBUG_MSG("listpref_row_deleted, ERROR: ldelete %p, lprepend %p\n", ldelete, lprepend);
288
static void font_dialog_response_lcb(GtkDialog *fsd,gint response,GtkWidget *entry) {
289
DEBUG_MSG("font_dialog_response_lcb, response=%d\n", response);
290
if (response == GTK_RESPONSE_OK) {
292
fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fsd));
293
gtk_entry_set_text(GTK_ENTRY(entry), fontname);
296
gtk_widget_destroy(GTK_WIDGET(fsd));
299
static void font_button_lcb(GtkWidget *wid, GtkWidget *entry) {
301
const gchar *fontname;
302
fsd = gtk_font_selection_dialog_new(_("Select font"));
303
fontname = gtk_entry_get_text(GTK_ENTRY(entry)); /* do NOT free, this is an internal pointer */
304
if (strlen(fontname)) {
305
gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fsd), fontname);
307
g_signal_connect(GTK_OBJECT(fsd),"response",G_CALLBACK(font_dialog_response_lcb),entry);
308
gtk_window_set_transient_for(GTK_WINDOW(GTK_DIALOG(fsd)), GTK_WINDOW(gtk_widget_get_toplevel(entry)));
309
gtk_window_set_modal(GTK_WINDOW(GTK_DIALOG(fsd)), TRUE);
310
gtk_window_set_destroy_with_parent(GTK_WINDOW(GTK_DIALOG(fsd)), TRUE);
311
gtk_widget_show(fsd);
314
static GtkWidget *prefs_string(const gchar *title, const gchar *curval, GtkWidget *box, Tprefdialog *pd, Tprefstringtype prefstringtype) {
315
GtkWidget *hbox, *return_widget;
317
hbox = gtk_hbox_new(FALSE,3);
318
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 3);
319
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(title), FALSE, FALSE, 3);
320
return_widget = boxed_entry_with_text(curval, 1023, hbox);
321
if (prefstringtype == file) {
322
gtk_box_pack_start(GTK_BOX(hbox), file_but_new(return_widget, 1, NULL), FALSE, FALSE, 3);
323
} else if (prefstringtype == font) {
324
GtkWidget *but = bf_gtkstock_button(GTK_STOCK_SELECT_FONT, G_CALLBACK(font_button_lcb), return_widget);
325
gtk_box_pack_start(GTK_BOX(hbox), but, FALSE, FALSE, 3);
327
return return_widget;
330
static GtkWidget *prefs_combo(const gchar *title, const gchar *curval, GtkWidget *box, Tprefdialog *pd, GList *poplist, gboolean editable) {
331
GtkWidget *return_widget;
334
hbox = gtk_hbox_new(FALSE,3);
335
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 3);
336
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(title), FALSE, FALSE, 3);
337
return_widget = boxed_combo_with_popdown(curval, poplist, editable, hbox);
338
return return_widget;
341
static GtkWidget *prefs_integer(const gchar *title, const gint curval, GtkWidget *box, Tprefdialog *pd, gfloat lower, gfloat upper) {
342
GtkWidget *return_widget;
345
gfloat step_increment, page_increment;
347
step_increment = (upper - lower)/1000;
348
if (step_increment < 1) {
351
page_increment = (upper - lower)/20;
352
if (page_increment < 10) {
355
hbox = gtk_hbox_new(FALSE,3);
356
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 3);
357
adjust = gtk_adjustment_new((1.0 * curval), lower, upper, step_increment ,page_increment , 0);
358
return_widget = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 0.1, 0);
359
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(title), FALSE, FALSE, 3);
360
gtk_box_pack_start(GTK_BOX(hbox), return_widget, TRUE, TRUE, 3);
361
return return_widget;
365
/*************************/
366
/* GENERAL FUNCTIONS */
367
/*************************/
368
/* static GList *general_poplist(GList *arraylist, gint required_items, gint poplist_label_index) {
369
GList *tmplist, *poplist=NULL;
371
tmplist = g_list_first(arraylist);
373
gchar **strarr =(gchar **)tmplist->data;
374
if (count_array(strarr) >= required_items) poplist = g_list_append(poplist, strarr[poplist_label_index]);
375
tmplist = g_list_next(tmplist);
380
static void generic_selection_changed_cb(GtkTreeSelection *selection
381
, GtkWidget **entry, void (*apply_func)(), Tprefdialog *pd,gint whichlist, gint numentries, gchar ***newcurstrarr){
384
DEBUG_MSG("generic_selection_changed_cb, started\n");
385
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
387
GList *tmplist = g_list_first(pd->lists[whichlist]);
388
gtk_tree_model_get(model, &iter, 0, &value, -1);
391
gchar **strarr =(gchar **)tmplist->data;
392
if (strcmp(strarr[0],value)==0) {
394
for (i=0;i<numentries;i++) {
395
gtk_entry_set_text(GTK_ENTRY(entry[i]), strarr[i]);
397
DEBUG_MSG("generic_selection_changed_cb, newcurstrarr(%p) is now %p\n", newcurstrarr, *newcurstrarr);
398
*newcurstrarr = strarr;
399
DEBUG_MSG("generic_selection_changed_cb, newcurstrarr(%p) set to %p (check %p)\n", newcurstrarr, strarr, *newcurstrarr);
402
tmplist = g_list_next(tmplist);
405
DEBUG_MSG("generic_selection_changed_cb, no selection ?!?!\n");
409
static gchar **generic_create_strarr(gint numitems, GtkWidget **entries, gboolean force_firstitem_strlen) {
411
gchar **strarr = g_malloc((numitems+1)*sizeof(gchar *));
412
for (i=0;i<numitems;i++) {
413
strarr[i] = gtk_editable_get_chars(GTK_EDITABLE(entries[i]), 0, -1);
415
strarr[numitems] = NULL;
416
if (strlen(strarr[0])) {
424
/**********************************************************/
425
/* FILETYPE, FILTERS AND HIGHLIGHT PATTERNS FUNCTIONS */
426
/**********************************************************/
428
/* static void add_new_general_lcb(Tprefdialog *pd, GtkWidget *entry, gint numentries, gint whichlist, GtkListStore *lstore) {
429
gchar *newtype = gtk_editable_get_chars(GTK_EDITABLE(entry),0,-1);
430
DEBUG_MSG("add_new_general_lcb, newtype=%s\n", newtype);
431
if (strlen(newtype)) {
433
gchar **strarr = g_malloc((numentries+1)*sizeof(gchar *));
435
for (i=1;i<numentries;i++) {
436
strarr[i] = g_strdup("");
439
pd->lists[whichlist] = g_list_append(pd->lists[whichlist], strarr);
442
gtk_list_store_append(GTK_LIST_STORE(lstore), &iter);
443
for (i=0;i<numentries;i++) {
444
gtk_list_store_set(GTK_LIST_STORE(lstore),&iter,i,strarr[i],-1);
452
static gchar **filetype_create_strarr(Tprefdialog *pd) {
454
gchar *escaped, *tmp;
455
tmp = gtk_editable_get_chars(GTK_EDITABLE(pd->ftd.entry[0]),0,-1);
457
strarr = g_malloc(8*sizeof(gchar *));
459
strarr[1] = gtk_editable_get_chars(GTK_EDITABLE(pd->ftd.entry[1]),0,-1);
460
escaped = gtk_editable_get_chars(GTK_EDITABLE(pd->ftd.entry[2]),0,-1);
461
strarr[2] = unescape_string(escaped, FALSE);
463
strarr[3] = gtk_editable_get_chars(GTK_EDITABLE(pd->ftd.entry[3]),0,-1);
464
strarr[4] = g_strdup(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pd->ftd.entry[4])) ? "1" : "0");
465
strarr[5] = gtk_editable_get_chars(GTK_EDITABLE(pd->ftd.entry[5]),0,-1);
466
strarr[6] = g_strdup("1");
468
DEBUG_MSG("filetype_create_strarr, created at %p\n", strarr);
476
static void set_filetype_strarr_in_list(GtkTreeIter *iter, gchar **strarr, Tprefdialog *pd) {
478
arrcount = count_array(strarr);
481
DEBUG_MSG("set_filetype_strarr_in_list, escaping %s\n",strarr[2]);
482
escaped = escape_string(strarr[2],FALSE);
483
DEBUG_MSG("set_filetype_strarr_in_list, 4=%d, string was %s\n",(strarr[4][0] != '0'), strarr[4]);
484
gtk_list_store_set(GTK_LIST_STORE(pd->ftd.lstore), iter
489
,4,(strarr[4][0] != '0')
498
static void filetype_apply_changes(Tprefdialog *pd) {
499
DEBUG_MSG("filetype_apply_changes, started\n");
500
if (pd->ftd.curstrarr) {
504
tmplist = g_list_first(pd->lists[filetypes]);
506
if (tmplist->data == pd->ftd.curstrarr) {
507
g_strfreev(pd->ftd.curstrarr);
508
tmplist->data = filetype_create_strarr(pd);
509
pd->ftd.curstrarr = tmplist->data;
510
DEBUG_MSG("filetype_apply_changes, applied changes to pd->lists new curstrarr=%p\n", pd->ftd.curstrarr);
513
tmplist = g_list_next(tmplist);
516
retval = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(pd->ftd.lstore),&iter);
517
DEBUG_MSG("filetype_apply_changes, searching for '%s' in liststore\n",pd->ftd.curstrarr[0]);
520
gtk_tree_model_get(GTK_TREE_MODEL(pd->ftd.lstore),&iter,0,&curval,-1);
521
if (strcmp(curval,pd->ftd.curstrarr[0])==0) {
522
DEBUG_MSG("filetype_apply_changes, found it, set listore 0=%s,1=%s,...\n", pd->ftd.curstrarr[0], pd->ftd.curstrarr[1]);
523
set_filetype_strarr_in_list(&iter,pd->ftd.curstrarr,pd);
526
retval = gtk_tree_model_iter_next(GTK_TREE_MODEL(pd->ftd.lstore),&iter);
529
DEBUG_MSG("filetype_apply_changes, no curstrarr, nothing to apply\n");
533
static void filetype_selection_changed_cb(GtkTreeSelection *selection, Tprefdialog *pd) {
536
DEBUG_MSG("filetype_selection_changed_cb, started\n");
537
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
539
GList *tmplist = g_list_first(pd->lists[filetypes]);
540
gtk_tree_model_get(model, &iter, 0, &filetype, -1);
541
filetype_apply_changes(pd);
543
gchar **strarr =(gchar **)tmplist->data;
544
DEBUG_MSG("filetype_selection_changed_cb, searching for '%s'\n",filetype);
545
if (strcmp(strarr[0],filetype)==0) {
546
gchar *escaped = escape_string(strarr[2],FALSE);
547
gtk_entry_set_text(GTK_ENTRY(pd->ftd.entry[0]), strarr[0]);
548
gtk_entry_set_text(GTK_ENTRY(pd->ftd.entry[1]), strarr[1]);
549
gtk_entry_set_text(GTK_ENTRY(pd->ftd.entry[2]), escaped);
550
gtk_entry_set_text(GTK_ENTRY(pd->ftd.entry[3]), strarr[3]);
551
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->ftd.entry[4]), (strarr[4][0] != '0'));
552
gtk_entry_set_text(GTK_ENTRY(pd->ftd.entry[5]), strarr[5]);
553
pd->ftd.curstrarr = strarr;
557
tmplist = g_list_next(tmplist);
559
DEBUG_MSG("filetype_selection_changed_cb, NOTHING FOUND ?!?!?\n");
561
DEBUG_MSG("filetype_selection_changed_cb, no selection ?!?!\n");
565
static void set_filetype_strarr_in_list(GtkTreeIter *iter, gchar **strarr, Tprefdialog *pd) {
567
arrcount = count_array(strarr);
570
escaped = escape_string(strarr[2],FALSE);
571
gtk_list_store_set(GTK_LIST_STORE(pd->ftd.lstore), iter
572
,0,strarr[0],1,strarr[1],2,escaped,3,strarr[3]
573
,4,(strarr[4][0] != '0'),5,strarr[5],6,strarr[6]
578
static void filetype_apply_change(Tprefdialog *pd, gint type, gchar *path, gchar *newval, gint index) {
579
pref_apply_change(pd->ftd.lstore,7,type,path,newval,index);
581
static void filetype_0_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
582
filetype_apply_change(pd, 1, path, newtext, 0);
584
static void filetype_1_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
585
filetype_apply_change(pd, 1, path, newtext, 1);
587
static void filetype_2_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
588
filetype_apply_change(pd, 1, path, newtext, 2);
590
static void filetype_3_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
591
filetype_apply_change(pd, 1, path, newtext, 3);
593
static void filetype_4_toggled_lcb(GtkCellRendererToggle *cellrenderertoggle,gchar *path,Tprefdialog *pd) {
594
gchar *val = g_strdup(cellrenderertoggle->active ? "0" : "1");
595
filetype_apply_change(pd, 2, path, val, 4);
598
static void filetype_5_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
599
filetype_apply_change(pd, 1, path, newtext, 5);
601
static void filetype_6_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
602
if (strlen(newtext)==1 && newtext[0] >= '0' && newtext[0] <= '2') {
603
filetype_apply_change(pd, 1, path, newtext, 6);
607
static void add_new_filetype_lcb(GtkWidget *wid, Tprefdialog *pd) {
610
strarr = pref_create_empty_strarr(7);
611
gtk_list_store_append(GTK_LIST_STORE(pd->ftd.lstore), &iter);
612
set_filetype_strarr_in_list(&iter, strarr,pd);
613
pd->lists[filetypes] = g_list_append(pd->lists[filetypes], strarr);
614
pd->ftd.insertloc = -1;
616
static void delete_filetype_lcb(GtkWidget *wid, Tprefdialog *pd) {
617
pref_delete_strarr(pd, &pd->ftd, 7);
620
static void create_filetype_gui(Tprefdialog *pd, GtkWidget *vbox1) {
621
GtkWidget *hbox, *but, *scrolwin;
622
pd->lists[filetypes] = duplicate_arraylist(main_v->props.filetypes);
623
pd->ftd.lstore = gtk_list_store_new (8,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_POINTER);
624
pd->ftd.lview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pd->ftd.lstore));
625
pref_create_column(GTK_TREE_VIEW(pd->ftd.lview), 1, G_CALLBACK(filetype_0_edited_lcb), pd, _("Label"), 0);
626
pref_create_column(GTK_TREE_VIEW(pd->ftd.lview), 1, G_CALLBACK(filetype_1_edited_lcb), pd, _("Extensions"), 1);
627
pref_create_column(GTK_TREE_VIEW(pd->ftd.lview), 1, G_CALLBACK(filetype_2_edited_lcb), pd, _("Update chars"), 2);
628
pref_create_column(GTK_TREE_VIEW(pd->ftd.lview), 1, G_CALLBACK(filetype_3_edited_lcb), pd, _("Icon"), 3);
629
pref_create_column(GTK_TREE_VIEW(pd->ftd.lview), 2, G_CALLBACK(filetype_4_toggled_lcb), pd, _("Editable"), 4);
630
pref_create_column(GTK_TREE_VIEW(pd->ftd.lview), 1, G_CALLBACK(filetype_5_edited_lcb), pd, _("Content regex"), 5);
631
pref_create_column(GTK_TREE_VIEW(pd->ftd.lview), 1, G_CALLBACK(filetype_6_edited_lcb), pd, _("Auto close tags mode"), 6);
633
scrolwin = gtk_scrolled_window_new(NULL, NULL);
634
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolwin),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
635
gtk_container_add(GTK_CONTAINER(scrolwin), pd->ftd.lview);
636
gtk_widget_set_size_request(scrolwin, 150, 190);
637
gtk_box_pack_start(GTK_BOX(vbox1), scrolwin, TRUE, TRUE, 2);
639
/* select = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->ftd.lview));
640
gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
641
g_signal_connect(G_OBJECT(select), "changed",G_CALLBACK(filetype_selection_changed_cb),pd);*/
643
GList *tmplist = g_list_first(pd->lists[filetypes]);
646
gchar **strarr = (gchar **)tmplist->data;
647
arrcount = count_array(strarr);
650
gtk_list_store_append(GTK_LIST_STORE(pd->ftd.lstore), &iter);
651
set_filetype_strarr_in_list(&iter, strarr,pd);
653
tmplist = g_list_next(tmplist);
656
gtk_tree_view_set_reorderable(GTK_TREE_VIEW(pd->ftd.lview), TRUE);
657
pd->ftd.thelist = &pd->lists[filetypes];
658
pd->ftd.insertloc = -1;
659
g_signal_connect(G_OBJECT(pd->ftd.lstore), "row-inserted", G_CALLBACK(listpref_row_inserted), &pd->ftd);
660
g_signal_connect(G_OBJECT(pd->ftd.lstore), "row-deleted", G_CALLBACK(listpref_row_deleted), &pd->ftd);
662
hbox = gtk_hbox_new(FALSE, 0);
663
gtk_box_pack_start(GTK_BOX(vbox1),hbox, TRUE, TRUE, 2);
664
but = bf_gtkstock_button(GTK_STOCK_ADD, G_CALLBACK(add_new_filetype_lcb), pd);
665
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
666
but = bf_gtkstock_button(GTK_STOCK_DELETE, G_CALLBACK(delete_filetype_lcb), pd);
667
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
670
static gchar **filefilter_create_strarr(Tprefdialog *pd) {
671
gchar **strarr = g_malloc(4*sizeof(gchar *));
672
strarr[0] = gtk_editable_get_chars(GTK_EDITABLE(pd->ffd.entry[0]), 0, -1);
673
if (GTK_TOGGLE_BUTTON(pd->ffd.check)->active){
674
strarr[1] = g_strdup("0");
676
strarr[1] = g_strdup("1");
678
strarr[2] = gtk_editable_get_chars(GTK_EDITABLE(pd->ffd.entry[1]), 0, -1);
683
static void filefilter_apply_changes(Tprefdialog *pd) {
684
DEBUG_MSG("filefilters_apply_changes, started\n");
685
if (pd->ffd.curstrarr) {
687
strarr = filefilter_create_strarr(pd);
691
gboolean retval = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(pd->ffd.lstore),&iter);
694
gtk_tree_model_get(GTK_TREE_MODEL(pd->ffd.lstore),&iter,0,&curval,-1);
695
if (strcmp(curval,pd->ffd.curstrarr[0])==0) {
696
gtk_list_store_set(GTK_LIST_STORE(pd->ffd.lstore), &iter
698
,1,(strarr[1][0] == '0')
701
DEBUG_MSG("filefilters_apply_changes, changed in tree model\n");
704
retval = gtk_tree_model_iter_next(GTK_TREE_MODEL(pd->ffd.lstore),&iter);
707
tmplist = g_list_first(pd->lists[filefilters]);
709
if (tmplist->data == pd->ffd.curstrarr) {
710
g_strfreev(pd->ffd.curstrarr);
711
tmplist->data = strarr;
712
pd->ffd.curstrarr = strarr;
713
DEBUG_MSG("filefilters_apply_changes, changed custrarr\n");
716
tmplist = g_list_next(tmplist);
719
DEBUG_MSG("filefilters_apply_changes, NO strarr!!\n");
722
DEBUG_MSG("filefilters_apply_changes, NO curstrarr!!\n");
726
static void add_new_filefilter_lcb(GtkWidget *wid, Tprefdialog *pd) {
728
strarr = filefilter_create_strarr(pd);
731
pd->lists[filefilters] = g_list_append(pd->lists[filefilters], strarr);
732
gtk_list_store_append(GTK_LIST_STORE(pd->ffd.lstore), &iter);
733
gtk_list_store_set(GTK_LIST_STORE(pd->ffd.lstore), &iter
735
,1,(strarr[1][0]=='0')
740
static void filefilter_selection_changed_cb(GtkTreeSelection *selection, Tprefdialog *pd) {
743
DEBUG_MSG("filefilter_selection_changed_cb, curstrarr=%p, &curstrarr=%p\n", pd->ftd.curstrarr, &pd->ffd.curstrarr);
744
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
746
GList *tmplist = g_list_first(pd->lists[filefilters]);
747
gtk_tree_model_get(model, &iter, 0, &filefilter, -1);
748
filefilter_apply_changes(pd);
750
gchar **strarr =(gchar **)tmplist->data;
751
if (strcmp(strarr[0],filefilter)==0) {
752
gtk_entry_set_text(GTK_ENTRY(pd->ffd.entry[0]), strarr[0]);
753
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->ffd.check), (strarr[1][0] == '0'));
754
gtk_entry_set_text(GTK_ENTRY(pd->ffd.entry[1]), strarr[2]);
755
pd->ffd.curstrarr = strarr;
756
DEBUG_MSG("filefilter_selection_changed_cb, found %s, curstrarr=%p\n", filefilter, strarr);
759
tmplist = g_list_next(tmplist);
761
DEBUG_MSG("filefilter_selection_changed_cb, could not find the selected text %s\n", filefilter);
763
DEBUG_MSG("filefilter_selection_changed_cb, no selection ?!?!\n");
766
static void set_filefilter_strarr_in_list(GtkTreeIter *iter, gchar **strarr, Tprefdialog *pd) {
768
arrcount = count_array(strarr);
770
gtk_list_store_set(GTK_LIST_STORE(pd->ffd.lstore), iter
771
,0,strarr[0],1,(strarr[1][0] != '0'),2,strarr[2],3,strarr,-1);
773
DEBUG_MSG("ERROR: set_filefilter_strarr_in_list, arraycount != 3 !!!!!!\n");
776
static void filefilter_apply_change(Tprefdialog *pd, gint type, gchar *path, gchar *newval, gint index) {
777
DEBUG_MSG("filefilter_apply_change,lstore=%p,path=%s,newval=%s,index=%d\n",pd->ffd.lstore,path,newval,index);
778
pref_apply_change(pd->ffd.lstore,3,type,path,newval,index);
780
static void filefilter_0_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
781
filefilter_apply_change(pd, 1, path, newtext, 0);
783
static void filefilter_1_toggled_lcb(GtkCellRendererToggle *cellrenderertoggle,gchar *path,Tprefdialog *pd) {
784
gchar *val = g_strdup(cellrenderertoggle->active ? "0" : "1");
785
filefilter_apply_change(pd, 2, path, val, 1);
788
static void filefilter_2_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
789
filefilter_apply_change(pd, 1, path, newtext, 2);
791
static void add_new_filefilter_lcb(GtkWidget *wid, Tprefdialog *pd) {
794
strarr = pref_create_empty_strarr(3);
795
gtk_list_store_append(GTK_LIST_STORE(pd->ffd.lstore), &iter);
796
set_filefilter_strarr_in_list(&iter, strarr,pd);
797
pd->lists[filefilters] = g_list_append(pd->lists[filefilters], strarr);
798
pd->ffd.insertloc = -1;
801
static void delete_filefilter_lcb(GtkWidget *wid, Tprefdialog *pd) {
802
pref_delete_strarr(pd, &pd->ffd, 3);
804
static void create_filefilter_gui(Tprefdialog *pd, GtkWidget *vbox1) {
805
GtkWidget *hbox, *but, *scrolwin;
806
pd->lists[filefilters] = duplicate_arraylist(main_v->props.filefilters);
807
pd->ffd.lstore = gtk_list_store_new (4,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING,G_TYPE_POINTER);
808
pd->ffd.lview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pd->ffd.lstore));
809
pref_create_column(GTK_TREE_VIEW(pd->ffd.lview), 1, G_CALLBACK(filefilter_0_edited_lcb), pd, _("Label"), 0);
810
pref_create_column(GTK_TREE_VIEW(pd->ffd.lview), 2, G_CALLBACK(filefilter_1_toggled_lcb), pd, _("Inverse filter"), 1);
811
pref_create_column(GTK_TREE_VIEW(pd->ffd.lview), 1, G_CALLBACK(filefilter_2_edited_lcb), pd, _("Filetypes in filter"), 2);
812
scrolwin = gtk_scrolled_window_new(NULL, NULL);
813
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolwin),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
814
gtk_container_add(GTK_CONTAINER(scrolwin), pd->ffd.lview);
815
gtk_widget_set_size_request(scrolwin, 150, 190);
816
gtk_box_pack_start(GTK_BOX(vbox1), scrolwin, TRUE, TRUE, 2);
818
GList *tmplist = g_list_first(pd->lists[filefilters]);
820
gchar **strarr = (gchar **)tmplist->data;
821
if (count_array(strarr)==3) {
823
gtk_list_store_append(GTK_LIST_STORE(pd->ffd.lstore), &iter);
824
set_filefilter_strarr_in_list(&iter, strarr,pd);
826
tmplist = g_list_next(tmplist);
829
gtk_tree_view_set_reorderable(GTK_TREE_VIEW(pd->ffd.lview), TRUE);
830
pd->ffd.thelist = &pd->lists[filefilters];
831
pd->ffd.insertloc = -1;
832
g_signal_connect(G_OBJECT(pd->ffd.lstore), "row-inserted", G_CALLBACK(listpref_row_inserted), &pd->ffd);
833
g_signal_connect(G_OBJECT(pd->ffd.lstore), "row-deleted", G_CALLBACK(listpref_row_deleted), &pd->ffd);
835
hbox = gtk_hbox_new(FALSE, 0);
836
gtk_box_pack_start(GTK_BOX(vbox1),hbox, TRUE, TRUE, 2);
837
but = bf_gtkstock_button(GTK_STOCK_ADD, G_CALLBACK(add_new_filefilter_lcb), pd);
838
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
839
but = bf_gtkstock_button(GTK_STOCK_DELETE, G_CALLBACK(delete_filefilter_lcb), pd);
840
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
843
static gchar **highlightpattern_create_strarr(Tprefdialog *pd) {
845
strarr = g_malloc(12*sizeof(gchar *));
846
strarr[0] = g_strdup(pd->hpd.selected_filetype);
847
strarr[1] = gtk_editable_get_chars(GTK_EDITABLE(pd->hpd.entry[0]),0,-1);
848
DEBUG_MSG("highlightpattern_create_strarr for %s-%s at %p\n",strarr[0],strarr[1],strarr);
849
if (GTK_TOGGLE_BUTTON(pd->hpd.check)->active){
850
strarr[2] = g_strdup("0");
852
strarr[2] = g_strdup("1");
854
strarr[3] = gtk_editable_get_chars(GTK_EDITABLE(pd->hpd.entry[1]),0,-1);
855
strarr[4] = gtk_editable_get_chars(GTK_EDITABLE(pd->hpd.entry[2]),0,-1);
856
if (GTK_TOGGLE_BUTTON(pd->hpd.radio[0])->active){
857
strarr[5] = g_strdup("1");
858
} else if (GTK_TOGGLE_BUTTON(pd->hpd.radio[1])->active) {
859
strarr[5] = g_strdup("2");
861
strarr[5] = g_strdup("3");
863
strarr[6] = gtk_editable_get_chars(GTK_EDITABLE(pd->hpd.entry[3]),0,-1);
864
strarr[7] = gtk_editable_get_chars(GTK_EDITABLE(pd->hpd.entry[4]),0,-1);
865
strarr[8] = gtk_editable_get_chars(GTK_EDITABLE(pd->hpd.entry[5]),0,-1);
866
if (GTK_TOGGLE_BUTTON(pd->hpd.radio[3])->active){
867
strarr[9] = g_strdup("0");
868
} else if (GTK_TOGGLE_BUTTON(pd->hpd.radio[4])->active) {
869
strarr[9] = g_strdup("1");
871
strarr[9] = g_strdup("2");
873
if (GTK_TOGGLE_BUTTON(pd->hpd.radio[6])->active){
874
strarr[10] = g_strdup("0");
875
} else if (GTK_TOGGLE_BUTTON(pd->hpd.radio[7])->active) {
876
strarr[10] = g_strdup("1");
878
strarr[10] = g_strdup("2");
881
DEBUG_MSG("highlightpattern_create_strarr, strarr at %p with count %d\n", strarr, count_array(strarr));
885
static void highlightpattern_apply_changes(Tprefdialog *pd) {
886
DEBUG_MSG("highlightpattern_apply_changes, started\n");
887
if (pd->hpd.curstrarr) {
889
tmplist = g_list_first(pd->lists[highlight_patterns]);
891
if (tmplist->data == pd->hpd.curstrarr) {
892
DEBUG_MSG("highlightpattern_apply_changes, curstrarr==tmplist->data==%p\n", tmplist->data);
893
g_strfreev(tmplist->data);
894
tmplist->data = highlightpattern_create_strarr(pd);
895
pd->hpd.curstrarr = tmplist->data;
896
DEBUG_MSG("highlightpattern_apply_changes, new strarr for %s-%s\n",pd->hpd.curstrarr[0],pd->hpd.curstrarr[1]);
899
tmplist = g_list_next(tmplist);
901
DEBUG_MSG("highlightpattern_apply_changes, nothing found for curstrarr %p?!?\n", pd->hpd.curstrarr);
903
DEBUG_MSG("highlightpattern_apply_changes, no curstrarr, nothing to apply\n");
906
static void highlightpattern_fill_from_selected_filetype(Tprefdialog *pd) {
907
DEBUG_MSG("highlightpattern_popmenu_activate, applied changes, about to clear liststore\n");
908
gtk_list_store_clear(GTK_LIST_STORE(pd->hpd.lstore));
909
if (pd->hpd.selected_filetype) {
911
tmplist = g_list_first(pd->lists[highlight_patterns]);
912
DEBUG_MSG("highlightpattern_popmenu_activate, about to fill for filetype %s (tmplist=%p)\n",pd->hpd.selected_filetype,tmplist);
913
/* fill list model here */
915
gchar **strarr =(gchar **)tmplist->data;
916
if (count_array(strarr) ==11 && strarr[0]) {
917
DEBUG_MSG("found entry with filetype %s\n",strarr[0]);
918
if (strcmp(strarr[0], pd->hpd.selected_filetype)==0) {
920
DEBUG_MSG("highlightpattern_popmenu_activate, appending pattern %s with filetype %s\n",strarr[1],strarr[0]);
921
gtk_list_store_append(GTK_LIST_STORE(pd->hpd.lstore), &iter);
922
gtk_list_store_set(GTK_LIST_STORE(pd->hpd.lstore), &iter, 0, strarr[1], -1);
925
tmplist = g_list_next(tmplist);
928
pd->hpd.curstrarr = NULL;
929
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[0]), "");
930
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[1]), "");
931
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[2]), "");
932
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[3]), "");
933
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[4]), "");
934
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[5]), "");
935
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.check), FALSE);
936
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[0]),TRUE);
937
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[3]),TRUE);
938
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[6]),TRUE);
941
static void highlightpattern_popmenu_activate(GtkMenuItem *menuitem,Tprefdialog *pd) {
942
DEBUG_MSG("highlightpattern_popmenu_activate, pd=%p, menuitem=%p\n", pd, menuitem);
943
highlightpattern_apply_changes(pd);
944
pd->hpd.curstrarr = NULL;
946
pd->hpd.selected_filetype = gtk_label_get_text(GTK_LABEL(GTK_BIN(menuitem)->child));
948
highlightpattern_fill_from_selected_filetype(pd);
951
static void add_new_highlightpattern_lcb(GtkWidget *wid, Tprefdialog *pd) {
952
gchar *pattern = gtk_editable_get_chars(GTK_EDITABLE(pd->hpd.entry[0]),0,-1);
953
if (pattern && pd->hpd.selected_filetype && strlen(pattern) && strlen(pd->hpd.selected_filetype)) {
954
gchar **strarr = highlightpattern_create_strarr(pd);
955
DEBUG_MSG("add_new_highlightpattern_lcb, appending strarr %p to list\n", strarr);
956
pd->lists[highlight_patterns] = g_list_append(pd->lists[highlight_patterns], strarr);
957
pd->hpd.curstrarr = NULL;
960
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->hpd.lview));
961
DEBUG_MSG("add_new_highlightpattern_lcb, appending to lview\n");
962
gtk_list_store_append(GTK_LIST_STORE(pd->hpd.lstore), &iter);
963
gtk_list_store_set(GTK_LIST_STORE(pd->hpd.lstore), &iter, 0, strarr[1], -1);
964
gtk_tree_selection_select_iter(selection,&iter);
966
/* gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[0]), "");*/
972
static void highlightpattern_selection_changed_cb(GtkTreeSelection *selection, Tprefdialog *pd) {
975
DEBUG_MSG("highlightpattern_selection_changed_cb, started\n");
976
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
978
GList *tmplist = g_list_first(pd->lists[highlight_patterns]);
979
/* GtkWidget *menuitem = gtk_menu_get_active(GTK_MENU( gtk_option_menu_get_menu(GTK_OPTION_MENU(pd->hpd.popmenu)) ));*/
980
gtk_tree_model_get(model, &iter, 0, &pattern, -1);
981
DEBUG_MSG("highlightpattern_selection_changed_cb, selected=%s\n",pattern);
982
highlightpattern_apply_changes(pd);
983
pd->hpd.curstrarr = NULL;
984
DEBUG_MSG("changed applied, searching for the data of the new selection\n");
986
gchar **strarr =(gchar **)tmplist->data;
989
DEBUG_MSG("strarr== NULL !!!!!!!!!!!!!!!\n");
992
if (strcmp(strarr[1], pattern)==0 && strcmp(strarr[0], pd->hpd.selected_filetype)==0) {
993
DEBUG_MSG("highlightpattern_selection_changed_cb, found strarr=%p\n", strarr);
994
DEBUG_MSG("0=%s, 1=%s, 2=%s, 3=%s, 4=%s\n",strarr[0],strarr[1],strarr[2],strarr[3],strarr[4]);
995
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.check), (strarr[2][0] == '0'));
996
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[0]), strarr[1]);
997
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[1]), strarr[3]);
998
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[2]), strarr[4]);
999
if (strarr[5][0] == '3') {
1000
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[2]),TRUE);
1001
} else if (strarr[5][0] == '2') {
1002
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[1]),TRUE);
1004
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[0]),TRUE);
1006
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[3]), strarr[6]);
1007
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[4]), strarr[7]);
1008
gtk_entry_set_text(GTK_ENTRY(pd->hpd.entry[5]), strarr[8]);
1009
if (strarr[9][0] == '2') {
1010
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[5]),TRUE);
1011
} else if (strarr[9][0] == '1') {
1012
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[4]),TRUE);
1014
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[3]),TRUE);
1016
DEBUG_MSG("strarr[10]=%s, \n",strarr[10]);
1017
if (strarr[10][0] == '2') {
1018
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[8]),TRUE);
1019
} else if (strarr[10][0] == '1') {
1020
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[7]),TRUE);
1022
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->hpd.radio[6]),TRUE);
1024
pd->hpd.curstrarr = strarr;
1027
tmplist = g_list_next(tmplist);
1031
DEBUG_MSG("no selection, returning..\n");
1034
static void highlightpattern_type_toggled(GtkToggleButton *togglebutton,Tprefdialog *pd){
1035
DEBUG_MSG("highlightpattern_type_toggled, started\n");
1036
if (GTK_TOGGLE_BUTTON(pd->hpd.radio[0])->active) {
1037
gtk_widget_set_sensitive(pd->hpd.entry[2], TRUE);
1039
gtk_widget_set_sensitive(pd->hpd.entry[2], FALSE);
1041
DEBUG_MSG("highlightpattern_type_toggled, done\n");
1043
static void highlightpattern_up_clicked_lcb(GtkWidget *wid, Tprefdialog *pd) {
1045
GtkTreeModel *model;
1048
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->hpd.lview));
1049
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
1050
GList *previous=NULL, *tmplist = g_list_first(pd->lists[highlight_patterns]);
1051
gtk_tree_model_get(model, &iter, 0, &pattern, -1);
1052
DEBUG_MSG("highlightpattern_up_clicked_lcb, selected=%s\n",pattern);
1054
gchar **strarr =(gchar **)tmplist->data;
1055
if (strcmp(strarr[0], pd->hpd.selected_filetype)==0) {
1056
DEBUG_MSG("highlightpattern_up_clicked_lcb, comparing %s+%s for filetype %s\n",strarr[1], pattern,pd->hpd.selected_filetype);
1057
if (strcmp(strarr[1], pattern)==0) {
1058
DEBUG_MSG("highlightpattern_up_clicked_lcb, found %s, previous=%p, tmplist=%p\n",strarr[1],previous,tmplist);
1060
DEBUG_MSG("highlightpattern_up_clicked_lcb, switch list order %s <-> %s\n",((gchar **)tmplist->data)[1], ((gchar **)previous->data)[1]);
1061
list_switch_order(tmplist, previous);
1062
highlightpattern_popmenu_activate(NULL, pd);
1068
tmplist = g_list_next(tmplist);
1072
static void highlightpattern_down_clicked_lcb(GtkWidget *wid, Tprefdialog *pd) {
1074
GtkTreeModel *model;
1076
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->hpd.lview));
1077
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
1078
GList *tmplist = g_list_first(pd->lists[highlight_patterns]);
1079
gtk_tree_model_get(model, &iter, 0, &pattern, -1);
1081
gchar **strarr =(gchar **)tmplist->data;
1082
if (strcmp(strarr[1], pattern)==0 && strcmp(strarr[0], pd->hpd.selected_filetype)==0) {
1083
if (tmplist->next) {
1084
list_switch_order(tmplist, tmplist->next);
1085
highlightpattern_popmenu_activate(NULL, pd);
1089
tmplist = g_list_next(tmplist);
1093
static void highlightpattern_delete_clicked_lcb(GtkWidget *wid, Tprefdialog *pd) {
1095
GtkTreeModel *model;
1097
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->hpd.lview));
1098
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
1099
GList *tmplist = g_list_first(pd->lists[highlight_patterns]);
1100
gtk_tree_model_get(model, &iter, 0, &pattern, -1);
1102
gchar **strarr =(gchar **)tmplist->data;
1103
if (strcmp(strarr[1], pattern)==0 && strcmp(strarr[0], pd->hpd.selected_filetype)==0) {
1104
pd->hpd.curstrarr = NULL;
1105
pd->lists[highlight_patterns] = g_list_remove(pd->lists[highlight_patterns], strarr);
1107
highlightpattern_popmenu_activate(NULL, pd);
1110
tmplist = g_list_next(tmplist);
1115
static void highlightpattern_gui_rebuild_filetype_popup(Tprefdialog *pd) {
1117
GtkWidget *menu, *menuitem;
1118
gtk_option_menu_remove_menu(GTK_OPTION_MENU(pd->hpd.popmenu));
1119
menu = gtk_menu_new();
1120
gtk_option_menu_set_menu(GTK_OPTION_MENU(pd->hpd.popmenu), menu);
1121
gtk_widget_show(menu);
1122
tmplist = g_list_first(pd->lists[filetypes]);
1124
gchar **arr = (gchar **)tmplist->data;
1125
if (count_array(arr)>=3) {
1126
menuitem = gtk_menu_item_new_with_label(arr[0]);
1127
DEBUG_MSG("highlightpattern_gui_rebuild_filetype_popup, menuitem=%p for %s\n", menuitem, arr[0]);
1128
g_signal_connect(GTK_OBJECT(menuitem), "activate",G_CALLBACK(highlightpattern_popmenu_activate),pd);
1129
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
1130
gtk_widget_show(menuitem);
1132
tmplist = g_list_next(tmplist);
1136
static void highlightpattern_reset_clicked_lcb(GtkWidget *button, Tprefdialog *pd) {
1137
gchar *defaultfile = return_first_existing_filename(PKGDATADIR"highlighting.default",
1138
"data/highlighting.default",
1139
"../data/highlighting.default",NULL);
1141
/* get current selected filetype && create array to compare to*/
1142
gchar **compare = array_from_arglist(pd->hpd.selected_filetype, NULL);
1143
DEBUG_MSG("highlightpattern_reset_clicked_lcb, defaultfile=%s\n",defaultfile);
1144
/* delete filetype from arraylist */
1145
pd->lists[highlight_patterns] = arraylist_delete_identical(pd->lists[highlight_patterns], compare, 1, TRUE);
1146
/* load filetype from default file */
1147
pd->lists[highlight_patterns] = arraylist_append_identical_from_file(pd->lists[highlight_patterns], defaultfile, compare, 1, TRUE);
1148
g_strfreev(compare);
1149
/* re-load selected filetype in preferences gui */
1150
DEBUG_MSG("highlightpattern_reset_clicked_lcb, about to rebuild gui\n");
1151
highlightpattern_fill_from_selected_filetype(pd);
1152
g_free (defaultfile);
1156
static void create_highlightpattern_gui(Tprefdialog *pd, GtkWidget *vbox1) {
1157
GtkWidget *hbox, *but, *vbox3;
1158
pd->lists[highlight_patterns] = duplicate_arraylist(main_v->props.highlight_patterns);
1160
DEBUG_MSG("create_highlightpattern_gui, pd=%p, pd->lists[highlight_patterns]=%p\n", pd, pd->lists[highlight_patterns]);
1161
hbox = gtk_hbox_new(FALSE, 0);
1162
gtk_box_pack_start(GTK_BOX(vbox1), hbox, FALSE, FALSE, 3);
1164
gtk_box_pack_start(GTK_BOX(hbox),gtk_label_new(_("filetype")),FALSE, FALSE, 3);
1165
pd->hpd.popmenu = gtk_option_menu_new();
1166
gtk_option_menu_set_menu(GTK_OPTION_MENU(pd->hpd.popmenu), gtk_menu_new());
1167
highlightpattern_gui_rebuild_filetype_popup(pd);
1168
gtk_box_pack_start(GTK_BOX(hbox),pd->hpd.popmenu,TRUE, TRUE, 3);
1169
but = gtk_button_new_with_label(_("Reset"));
1170
g_signal_connect(G_OBJECT(but), "clicked", G_CALLBACK(highlightpattern_reset_clicked_lcb), pd);
1171
gtk_box_pack_start(GTK_BOX(hbox),but,FALSE, FALSE, 3);
1173
hbox = gtk_hbox_new(FALSE, 0);
1174
gtk_box_pack_start(GTK_BOX(vbox1), hbox, TRUE, TRUE, 3);
1175
pd->hpd.entry[0] = boxed_full_entry(_("Pattern name"), NULL, 500, hbox);
1177
but = bf_gtkstock_button(GTK_STOCK_ADD, G_CALLBACK(add_new_highlightpattern_lcb), pd);
1178
gtk_box_pack_start(GTK_BOX(hbox), but, FALSE, TRUE, 3);
1179
but = bf_gtkstock_button(GTK_STOCK_DELETE, G_CALLBACK(highlightpattern_delete_clicked_lcb), pd);
1180
gtk_box_pack_start(GTK_BOX(hbox), but, FALSE, FALSE, 1);
1182
hbox = gtk_hbox_new(FALSE, 0);
1183
gtk_box_pack_start(GTK_BOX(vbox1), hbox, TRUE, TRUE, 0);
1185
pd->hpd.lstore = gtk_list_store_new (1, G_TYPE_STRING);
1186
pd->hpd.lview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pd->hpd.lstore));
1188
GtkTreeViewColumn *column;
1189
GtkWidget *scrolwin;
1190
GtkTreeSelection *select;
1191
GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
1193
column = gtk_tree_view_column_new_with_attributes (_("Pattern"), renderer,"text", 0,NULL);
1194
gtk_tree_view_append_column (GTK_TREE_VIEW(pd->hpd.lview), column);
1195
scrolwin = gtk_scrolled_window_new(NULL, NULL);
1196
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolwin), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1197
gtk_container_add(GTK_CONTAINER(scrolwin), pd->hpd.lview);
1198
gtk_box_pack_start(GTK_BOX(hbox), scrolwin, FALSE, TRUE, 2);
1200
select = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->hpd.lview));
1201
g_signal_connect(G_OBJECT(select), "changed",G_CALLBACK(highlightpattern_selection_changed_cb),pd);
1204
vbox3 = gtk_vbox_new(FALSE, 2);
1205
gtk_box_pack_start(GTK_BOX(hbox), vbox3, FALSE, FALSE, 2);
1206
/* pack up and down buttons here */
1208
but = bf_gtkstock_button(GTK_STOCK_GO_UP, G_CALLBACK(highlightpattern_up_clicked_lcb), pd);
1209
gtk_box_pack_start(GTK_BOX(vbox3), but, FALSE, FALSE, 1);
1210
but = bf_gtkstock_button(GTK_STOCK_GO_DOWN, G_CALLBACK(highlightpattern_down_clicked_lcb), pd);
1211
gtk_box_pack_start(GTK_BOX(vbox3), but, FALSE, FALSE, 1);
1213
vbox3 = gtk_vbox_new(FALSE, 0);
1214
gtk_box_pack_start(GTK_BOX(hbox), vbox3, TRUE, TRUE, 2);
1216
pd->hpd.radio[0] = gtk_radio_button_new_with_label(NULL, _("Start pattern and end pattern"));
1217
gtk_box_pack_start(GTK_BOX(vbox3),pd->hpd.radio[0], TRUE, TRUE, 0);
1218
pd->hpd.radio[1] = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(pd->hpd.radio[0]), _("Only start pattern"));
1219
gtk_box_pack_start(GTK_BOX(vbox3),pd->hpd.radio[1], TRUE, TRUE, 0);
1220
pd->hpd.radio[2] = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(pd->hpd.radio[0]), _("Subpattern from parent"));
1221
gtk_box_pack_start(GTK_BOX(vbox3),pd->hpd.radio[2], TRUE, TRUE, 0);
1222
g_signal_connect(G_OBJECT(pd->hpd.radio[0]), "toggled", G_CALLBACK(highlightpattern_type_toggled), pd);
1223
g_signal_connect(G_OBJECT(pd->hpd.radio[1]), "toggled", G_CALLBACK(highlightpattern_type_toggled), pd);
1224
g_signal_connect(G_OBJECT(pd->hpd.radio[2]), "toggled", G_CALLBACK(highlightpattern_type_toggled), pd);
1226
pd->hpd.entry[1] = boxed_full_entry(_("Start pattern"), NULL, 4000, vbox3);
1227
pd->hpd.entry[2] = boxed_full_entry(_("End pattern"), NULL, 4000, vbox3);
1228
pd->hpd.check = boxed_checkbut_with_value(_("Case sensitive matching"), FALSE, vbox3);
1229
pd->hpd.entry[3] = boxed_full_entry(_("Parentmatch"), NULL, 300, vbox3);
1230
pd->hpd.entry[4] = prefs_string(_("Foreground color"), "", vbox3, pd, string_color);
1231
pd->hpd.entry[5] = prefs_string(_("Background color"), "", vbox3, pd, string_color);
1233
hbox = gtk_hbox_new(FALSE, 0);
1234
gtk_box_pack_start(GTK_BOX(vbox1), hbox, TRUE, TRUE, 0);
1236
vbox3 = gtk_vbox_new(FALSE, 0);
1237
gtk_box_pack_start(GTK_BOX(hbox), vbox3, TRUE, TRUE, 0);
1239
pd->hpd.radio[3] = gtk_radio_button_new_with_label(NULL, _("don't change weight"));
1240
gtk_box_pack_start(GTK_BOX(vbox3),pd->hpd.radio[3], TRUE, TRUE, 0);
1241
pd->hpd.radio[4] = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(pd->hpd.radio[3]), _("force non-bold weight"));
1242
gtk_box_pack_start(GTK_BOX(vbox3),pd->hpd.radio[4], TRUE, TRUE, 0);
1243
pd->hpd.radio[5] = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(pd->hpd.radio[3]), _("force bold weight"));
1244
gtk_box_pack_start(GTK_BOX(vbox3),pd->hpd.radio[5], TRUE, TRUE, 0);
1246
vbox3 = gtk_vbox_new(FALSE, 0);
1247
gtk_box_pack_start(GTK_BOX(hbox), vbox3, TRUE, TRUE, 0);
1249
pd->hpd.radio[6] = gtk_radio_button_new_with_label(NULL, _("don't change style"));
1250
gtk_box_pack_start(GTK_BOX(vbox3),pd->hpd.radio[6], TRUE, TRUE, 0);
1251
pd->hpd.radio[7] = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(pd->hpd.radio[6]), _("force non-italic style"));
1252
gtk_box_pack_start(GTK_BOX(vbox3),pd->hpd.radio[7], TRUE, TRUE, 0);
1253
pd->hpd.radio[8] = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(pd->hpd.radio[6]), _("force italic style"));
1254
gtk_box_pack_start(GTK_BOX(vbox3),pd->hpd.radio[8], TRUE, TRUE, 0);
1257
static gchar **browser_create_strarr(Tprefdialog *pd) {
1258
return generic_create_strarr(2, pd->bd.entry, TRUE);
1261
static void browsers_apply_changes(Tprefdialog *pd) {
1262
DEBUG_MSG("browsers_apply_changes, started\n");
1263
if (pd->bd.curstrarr) {
1265
strarr = browser_create_strarr(pd);
1269
gboolean retval = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(pd->bd.lstore),&iter);
1272
gtk_tree_model_get(GTK_TREE_MODEL(pd->bd.lstore),&iter,0,&curval,-1);
1273
if (strcmp(curval,pd->bd.curstrarr[0])==0) {
1274
gtk_list_store_set(GTK_LIST_STORE(pd->bd.lstore), &iter
1278
DEBUG_MSG("browsers_apply_changes, changed in tree model\n");
1281
retval = gtk_tree_model_iter_next(GTK_TREE_MODEL(pd->bd.lstore),&iter);
1284
tmplist = g_list_first(pd->lists[browsers]);
1286
if (tmplist->data == pd->bd.curstrarr) {
1287
g_strfreev(pd->bd.curstrarr);
1288
tmplist->data = strarr;
1289
pd->bd.curstrarr = strarr;
1290
DEBUG_MSG("browsers_apply_changes, changed custrarr\n");
1293
tmplist = g_list_next(tmplist);
1296
DEBUG_MSG("browsers_apply_changes, strarr=NULL!!\n");
1299
DEBUG_MSG("browsers_apply_changes, NO curstrarr!!\n");
1303
static void add_new_browser_lcb(GtkWidget *wid, Tprefdialog *pd) {
1305
strarr = browser_create_strarr(pd);
1308
pd->lists[browsers] = g_list_append(pd->lists[browsers], strarr);
1309
gtk_list_store_append(GTK_LIST_STORE(pd->bd.lstore), &iter);
1310
gtk_list_store_set(GTK_LIST_STORE(pd->bd.lstore), &iter
1317
static void delete_browser_lcb(GtkWidget *wid, Tprefdialog *pd) {
1318
if (pd->bd.curstrarr) {
1320
gboolean retval= gtk_tree_model_get_iter_first(GTK_TREE_MODEL(pd->bd.lstore),&iter);
1323
gtk_tree_model_get(GTK_TREE_MODEL(pd->bd.lstore),&iter,0,&curval,-1);
1324
if (strcmp(curval,pd->bd.curstrarr[0])==0) {
1325
gtk_list_store_remove(GTK_LIST_STORE(pd->bd.lstore),&iter);
1328
retval = gtk_tree_model_iter_next(GTK_TREE_MODEL(pd->bd.lstore),&iter);
1330
pd->lists[browsers] = g_list_remove(pd->lists[browsers],pd->bd.curstrarr);
1334
static void set_default_browser_lcb(GtkWidget *wid, Tprefdialog *pd) {
1335
if (pd->bd.curstrarr) {
1337
gboolean retval=gtk_tree_model_get_iter_first(GTK_TREE_MODEL(pd->bd.lstore),&iter);
1340
gtk_tree_model_get(GTK_TREE_MODEL(pd->bd.lstore),&iter,0,&curval,-1);
1341
if (strcmp((char *)curval,pd->bd.curstrarr[0])==0) {
1342
gtk_list_store_remove((pd->bd.lstore),&iter);
1345
retval = gtk_tree_model_iter_next(GTK_TREE_MODEL(pd->bd.lstore),&iter);
1347
gtk_list_store_insert((pd->bd.lstore),&iter,0);
1348
gtk_list_store_set(GTK_LIST_STORE(pd->bd.lstore), &iter
1349
,0,pd->bd.curstrarr[0]
1350
,1,pd->bd.curstrarr[1]
1352
pd->lists[browsers] = g_list_remove(pd->lists[browsers],pd->bd.curstrarr);
1353
pd->lists[browsers] = g_list_insert(pd->lists[browsers],pd->bd.curstrarr,0);
1356
static void browser_selection_changed_cb(GtkTreeSelection *selection, Tprefdialog *pd) {
1357
DEBUG_MSG("browser_selection_changed_cb, curstrarr=%p, &curstrarr=%p\n", pd->ftd.curstrarr, &pd->bd.curstrarr);
1358
generic_selection_changed_cb(selection,pd->bd.entry,browsers_apply_changes,pd,browsers,2,&pd->bd.curstrarr);
1359
DEBUG_MSG("browser_selection_changed_cb, curstrarr=%p, &curstrarr=%p\n", pd->ftd.curstrarr, &pd->bd.curstrarr);
1361
static void set_browser_strarr_in_list(GtkTreeIter *iter, gchar **strarr, Tprefdialog *pd) {
1362
gint arrcount = count_array(strarr);
1364
gtk_list_store_set(GTK_LIST_STORE(pd->bd.lstore), iter
1365
,0,strarr[0],1,strarr[1],2,strarr,-1);
1367
DEBUG_MSG("ERROR: set_browser_strarr_in_list, arraycount != 2 !!!!!!\n");
1370
static void browser_apply_change(Tprefdialog *pd, gint type, gchar *path, gchar *newval, gint index) {
1371
pref_apply_change(pd->bd.lstore,2,type,path,newval,index);
1373
static void browser_0_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1374
browser_apply_change(pd, 1, path, newtext, 0);
1376
static void browser_1_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1377
browser_apply_change(pd, 1, path, newtext, 1);
1379
static void add_new_browser_lcb(GtkWidget *wid, Tprefdialog *pd) {
1382
strarr = pref_create_empty_strarr(2);
1383
gtk_list_store_append(GTK_LIST_STORE(pd->bd.lstore), &iter);
1384
set_browser_strarr_in_list(&iter, strarr,pd);
1385
pd->lists[browsers] = g_list_append(pd->lists[browsers], strarr);
1386
pd->bd.insertloc = -1;
1388
static void delete_browser_lcb(GtkWidget *wid, Tprefdialog *pd) {
1389
pref_delete_strarr(pd, &pd->bd, 2);
1391
static void create_browsers_gui(Tprefdialog *pd, GtkWidget *vbox1) {
1392
GtkWidget *hbox, *but, *scrolwin;
1393
pd->lists[browsers] = duplicate_arraylist(main_v->props.browsers);
1394
pd->bd.lstore = gtk_list_store_new (3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_POINTER);
1395
pd->bd.lview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pd->bd.lstore));
1396
pref_create_column(GTK_TREE_VIEW(pd->bd.lview), 1, G_CALLBACK(browser_0_edited_lcb), pd, _("Label"), 0);
1397
pref_create_column(GTK_TREE_VIEW(pd->bd.lview), 1, G_CALLBACK(browser_1_edited_lcb), pd, _("Command"), 1);
1398
scrolwin = gtk_scrolled_window_new(NULL, NULL);
1399
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolwin),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
1400
gtk_container_add(GTK_CONTAINER(scrolwin), pd->bd.lview);
1401
gtk_widget_set_size_request(scrolwin, 150, 190);
1402
gtk_box_pack_start(GTK_BOX(vbox1), scrolwin, TRUE, TRUE, 2);
1404
GList *tmplist = g_list_first(pd->lists[browsers]);
1406
gchar **strarr = (gchar **)tmplist->data;
1408
gtk_list_store_append(GTK_LIST_STORE(pd->bd.lstore), &iter);
1409
set_browser_strarr_in_list(&iter, strarr,pd);
1410
tmplist = g_list_next(tmplist);
1413
gtk_tree_view_set_reorderable(GTK_TREE_VIEW(pd->bd.lview), TRUE);
1414
pd->bd.thelist = &pd->lists[browsers];
1415
pd->bd.insertloc = -1;
1416
g_signal_connect(G_OBJECT(pd->bd.lstore), "row-inserted", G_CALLBACK(listpref_row_inserted), &pd->bd);
1417
g_signal_connect(G_OBJECT(pd->bd.lstore), "row-deleted", G_CALLBACK(listpref_row_deleted), &pd->bd);
1419
hbox = gtk_hbox_new(FALSE, 0);
1420
gtk_box_pack_start(GTK_BOX(vbox1),hbox, TRUE, TRUE, 2);
1421
but = bf_gtkstock_button(GTK_STOCK_ADD, G_CALLBACK(add_new_browser_lcb), pd);
1422
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
1423
but = bf_gtkstock_button(GTK_STOCK_DELETE, G_CALLBACK(delete_browser_lcb), pd);
1424
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
1427
static gchar **external_create_strarr(Tprefdialog *pd) {
1428
return generic_create_strarr(2, pd->ed.entry, TRUE);
1431
static void externals_apply_changes(Tprefdialog *pd) {
1432
DEBUG_MSG("externals_apply_changes, started\n");
1433
if (pd->ed.curstrarr) {
1435
strarr = external_create_strarr(pd);
1439
gboolean retval = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(pd->ed.lstore),&iter);
1442
gtk_tree_model_get(GTK_TREE_MODEL(pd->ed.lstore),&iter,0,&curval,-1);
1443
if (strcmp(curval,pd->ed.curstrarr[0])==0) {
1444
gtk_list_store_set(GTK_LIST_STORE(pd->ed.lstore), &iter
1448
DEBUG_MSG("externals_apply_changes, changed in tree model\n");
1451
retval = gtk_tree_model_iter_next(GTK_TREE_MODEL(pd->ed.lstore),&iter);
1454
tmplist = g_list_first(pd->lists[external_commands]);
1456
if (tmplist->data == pd->ed.curstrarr) {
1457
g_strfreev(pd->ed.curstrarr);
1458
tmplist->data = strarr;
1459
pd->ed.curstrarr = strarr;
1460
DEBUG_MSG("externals_apply_changes, changed custrarr\n");
1463
tmplist = g_list_next(tmplist);
1466
DEBUG_MSG("externals_apply_changes, NO strarr!!\n");
1469
DEBUG_MSG("externals_apply_changes, NO curstrarr!!\n");
1473
static void external_selection_changed_cb(GtkTreeSelection *selection, Tprefdialog *pd) {
1474
DEBUG_MSG("external_selection_changed_cb, started\n");
1475
generic_selection_changed_cb(selection,pd->ed.entry,externals_apply_changes,pd,external_commands,2,&pd->ed.curstrarr);
1478
static void add_new_external_lcb(GtkWidget *wid, Tprefdialog *pd) {
1480
strarr = external_create_strarr(pd);
1483
pd->lists[external_commands] = g_list_append(pd->lists[external_commands], strarr);
1484
gtk_list_store_append(GTK_LIST_STORE(pd->ed.lstore), &iter);
1485
gtk_list_store_set(GTK_LIST_STORE(pd->ed.lstore), &iter
1492
static void delete_external_commands_lcb(GtkWidget *wid, Tprefdialog *pd) {
1493
GtkTreeSelection *select;
1497
select = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->ed.lview));
1498
retval = gtk_tree_selection_get_selected (select,NULL,&iter);
1504
gtk_tree_model_get(GTK_TREE_MODEL(pd->ed.lstore),&iter,0,&curval,-1);
1505
gtk_list_store_remove(pd->ed.lstore,&iter);
1506
work = pd->lists[external_commands];
1508
curstrarr = work->data;
1509
if (strcmp(curval,curstrarr[0])==0) {
1510
pd->lists[external_commands] = g_list_remove(pd->lists[external_commands],curstrarr);
1513
work = g_list_next(work);
1519
static void set_external_commands_strarr_in_list(GtkTreeIter *iter, gchar **strarr, Tprefdialog *pd) {
1520
gint arrcount = count_array(strarr);
1522
gtk_list_store_set(GTK_LIST_STORE(pd->ed.lstore), iter
1523
,0,strarr[0],1,strarr[1],2,strarr,-1);
1525
DEBUG_MSG("ERROR: set_external_command_strarr_in_list, arraycount != 2 !!!!!!\n");
1528
static void external_commands_apply_change(Tprefdialog *pd, gint type, gchar *path, gchar *newval, gint index) {
1529
pref_apply_change(pd->ed.lstore,2,type,path,newval,index);
1531
static void external_commands_0_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1532
external_commands_apply_change(pd, 1, path, newtext, 0);
1534
static void external_commands_1_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1535
external_commands_apply_change(pd, 1, path, newtext, 1);
1537
static void add_new_external_commands_lcb(GtkWidget *wid, Tprefdialog *pd) {
1540
strarr = pref_create_empty_strarr(2);
1541
gtk_list_store_append(GTK_LIST_STORE(pd->ed.lstore), &iter);
1542
set_external_commands_strarr_in_list(&iter, strarr,pd);
1543
pd->lists[external_commands] = g_list_append(pd->lists[external_commands], strarr);
1544
pd->ed.insertloc = -1;
1546
static void delete_external_commands_lcb(GtkWidget *wid, Tprefdialog *pd) {
1547
pref_delete_strarr(pd, &pd->ed, 2);
1549
static void create_externals_gui(Tprefdialog *pd, GtkWidget *vbox1) {
1550
GtkWidget *hbox, *but, *scrolwin;
1551
pd->lists[external_commands] = duplicate_arraylist(main_v->props.external_commands);
1552
pd->ed.lstore = gtk_list_store_new (3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_POINTER);
1553
pd->ed.lview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pd->ed.lstore));
1554
pref_create_column(GTK_TREE_VIEW(pd->ed.lview), 1, G_CALLBACK(external_commands_0_edited_lcb), pd, _("Label"), 0);
1555
pref_create_column(GTK_TREE_VIEW(pd->ed.lview), 1, G_CALLBACK(external_commands_1_edited_lcb), pd, _("Command"), 1);
1556
scrolwin = gtk_scrolled_window_new(NULL, NULL);
1557
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolwin),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
1558
gtk_container_add(GTK_CONTAINER(scrolwin), pd->ed.lview);
1559
gtk_widget_set_size_request(scrolwin, 120, 190);
1560
gtk_box_pack_start(GTK_BOX(vbox1), scrolwin, TRUE, TRUE, 2);
1562
GList *tmplist = g_list_first(pd->lists[external_commands]);
1564
gchar **strarr = (gchar **)tmplist->data;
1566
gtk_list_store_append(GTK_LIST_STORE(pd->ed.lstore), &iter);
1567
set_external_commands_strarr_in_list(&iter, strarr,pd);
1568
tmplist = g_list_next(tmplist);
1571
gtk_tree_view_set_reorderable(GTK_TREE_VIEW(pd->ed.lview), TRUE);
1572
pd->ed.thelist = &pd->lists[external_commands];
1573
pd->ed.insertloc = -1;
1574
g_signal_connect(G_OBJECT(pd->ed.lstore), "row-inserted", G_CALLBACK(listpref_row_inserted), &pd->ed);
1575
g_signal_connect(G_OBJECT(pd->ed.lstore), "row-deleted", G_CALLBACK(listpref_row_deleted), &pd->ed);
1576
gtk_box_pack_start(GTK_BOX(vbox1),gtk_label_new(_("%s for current filename (any command)\n%i for input and %f for output filename (filters)")), TRUE, TRUE, 2);
1577
hbox = gtk_hbox_new(FALSE, 0);
1578
gtk_box_pack_start(GTK_BOX(vbox1),hbox, TRUE, TRUE, 2);
1579
but = bf_gtkstock_button(GTK_STOCK_ADD, G_CALLBACK(add_new_external_commands_lcb), pd);
1580
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
1581
but = bf_gtkstock_button(GTK_STOCK_DELETE, G_CALLBACK(delete_external_commands_lcb), pd);
1582
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
1585
static gchar **outputbox_create_strarr(Tprefdialog *pd) {
1586
gchar **strarr = g_malloc(8*sizeof(gchar *));
1587
strarr[0] = gtk_editable_get_chars(GTK_EDITABLE(pd->od.entry[0]), 0, -1);
1588
strarr[1] = gtk_editable_get_chars(GTK_EDITABLE(pd->od.entry[1]), 0, -1);
1589
strarr[2] = gtk_editable_get_chars(GTK_EDITABLE(pd->od.entry[2]), 0, -1);
1590
strarr[3] = gtk_editable_get_chars(GTK_EDITABLE(pd->od.entry[3]), 0, -1);
1591
strarr[4] = gtk_editable_get_chars(GTK_EDITABLE(pd->od.entry[4]), 0, -1);
1592
strarr[5] = gtk_editable_get_chars(GTK_EDITABLE(pd->od.entry[5]), 0, -1);
1593
strarr[6] = g_strdup((GTK_TOGGLE_BUTTON(pd->od.check)->active) ? "1" : "0");
1597
static void outputbox_apply_changes(Tprefdialog *pd) {
1598
if (pd->od.curstrarr) {
1600
strarr = outputbox_create_strarr(pd);
1604
gboolean retval = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(pd->od.lstore),&iter);
1607
gtk_tree_model_get(GTK_TREE_MODEL(pd->od.lstore),&iter,0,&curval,-1);
1608
if (strcmp(curval,pd->od.curstrarr[0])==0) {
1609
gtk_list_store_set(GTK_LIST_STORE(pd->od.lstore), &iter
1620
retval = gtk_tree_model_iter_next(GTK_TREE_MODEL(pd->od.lstore),&iter);
1623
tmplist = g_list_first(pd->lists[outputbox]);
1625
if (tmplist->data == pd->od.curstrarr) {
1626
g_strfreev(pd->od.curstrarr);
1627
tmplist->data = strarr;
1628
pd->od.curstrarr = strarr;
1631
tmplist = g_list_next(tmplist);
1634
DEBUG_MSG("outputbox_apply_changes, NO strarr!!\n");
1637
DEBUG_MSG("outputbox_apply_changes, NO curstrarr!!\n");
1640
static void add_new_outputbox_lcb(GtkWidget *wid, Tprefdialog *pd) {
1642
strarr = outputbox_create_strarr(pd);
1645
pd->lists[outputbox] = g_list_append(pd->lists[outputbox], strarr);
1646
gtk_list_store_append(GTK_LIST_STORE(pd->od.lstore), &iter);
1647
gtk_list_store_set(GTK_LIST_STORE(pd->od.lstore), &iter
1659
static void outputbox_selection_changed_cb(GtkTreeSelection *selection, Tprefdialog *pd) {
1661
GtkTreeModel *model;
1662
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
1664
GList *tmplist = g_list_first(pd->lists[outputbox]);
1665
gtk_tree_model_get(model, &iter, 0, &name, -1);
1666
outputbox_apply_changes(pd);
1668
gchar **strarr =(gchar **)tmplist->data;
1669
if (strcmp(strarr[0],name)==0) {
1670
gtk_entry_set_text(GTK_ENTRY(pd->od.entry[0]), strarr[0]);
1671
gtk_entry_set_text(GTK_ENTRY(pd->od.entry[1]), strarr[1]);
1672
gtk_entry_set_text(GTK_ENTRY(pd->od.entry[2]), strarr[2]);
1673
gtk_entry_set_text(GTK_ENTRY(pd->od.entry[3]), strarr[3]);
1674
gtk_entry_set_text(GTK_ENTRY(pd->od.entry[4]), strarr[4]);
1675
gtk_entry_set_text(GTK_ENTRY(pd->od.entry[5]), strarr[5]);
1676
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pd->od.check), (strarr[6][0] == '1'));
1677
pd->od.curstrarr = strarr;
1680
tmplist = g_list_next(tmplist);
1683
DEBUG_MSG("outputbox_selection_changed_cb, no selection ?!?!\n");
1687
static void set_outputbox_strarr_in_list(GtkTreeIter *iter, gchar **strarr, Tprefdialog *pd) {
1689
arrcount = count_array(strarr);
1691
gtk_list_store_set(GTK_LIST_STORE(pd->od.lstore), iter
1692
,0,strarr[0],1,strarr[1],2,strarr[2],3,strarr[3]
1693
,4,strarr[4],5,strarr[5],6,(strarr[6][0] != '0')
1697
static void outputbox_apply_change(Tprefdialog *pd, gint type, gchar *path, gchar *newval, gint index) {
1698
pref_apply_change(pd->od.lstore,7,type,path,newval,index);
1700
static void outputbox_0_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1701
outputbox_apply_change(pd, 1, path, newtext, 0);
1703
static void outputbox_1_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1704
outputbox_apply_change(pd, 1, path, newtext, 1);
1706
static void outputbox_2_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1707
outputbox_apply_change(pd, 1, path, newtext, 2);
1709
static void outputbox_3_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1710
outputbox_apply_change(pd, 1, path, newtext, 3);
1712
static void outputbox_4_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1713
outputbox_apply_change(pd, 1, path, newtext, 4);
1715
static void outputbox_5_edited_lcb(GtkCellRendererText *cellrenderertext,gchar *path,gchar *newtext,Tprefdialog *pd) {
1716
outputbox_apply_change(pd, 1, path, newtext, 5);
1718
static void outputbox_6_toggled_lcb(GtkCellRendererToggle *cellrenderertoggle,gchar *path,Tprefdialog *pd) {
1719
gchar *val = g_strdup(cellrenderertoggle->active ? "0" : "1");
1720
outputbox_apply_change(pd, 2, path, val, 6);
1723
static void add_new_outputbox_lcb(GtkWidget *wid, Tprefdialog *pd) {
1726
strarr = pref_create_empty_strarr(7);
1727
gtk_list_store_append(GTK_LIST_STORE(pd->od.lstore), &iter);
1728
set_outputbox_strarr_in_list(&iter, strarr,pd);
1729
pd->lists[outputbox] = g_list_append(pd->lists[outputbox], strarr);
1730
pd->od.insertloc = -1;
1732
static void delete_outputbox_lcb(GtkWidget *wid, Tprefdialog *pd) {
1733
pref_delete_strarr(pd, &pd->od, 7);
1736
static void create_outputbox_gui(Tprefdialog *pd, GtkWidget *vbox1) {
1737
GtkWidget *hbox, *but, *scrolwin;
1738
pd->lists[outputbox] = duplicate_arraylist(main_v->props.outputbox);
1739
pd->od.lstore = gtk_list_store_new (8,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_POINTER);
1740
pd->od.lview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(pd->od.lstore));
1741
pref_create_column(GTK_TREE_VIEW(pd->od.lview), 1, G_CALLBACK(outputbox_0_edited_lcb), pd, _("Name"), 0);
1742
pref_create_column(GTK_TREE_VIEW(pd->od.lview), 1, G_CALLBACK(outputbox_1_edited_lcb), pd, _("Pattern"), 1);
1743
pref_create_column(GTK_TREE_VIEW(pd->od.lview), 1, G_CALLBACK(outputbox_2_edited_lcb), pd, _("File #"), 2);
1744
pref_create_column(GTK_TREE_VIEW(pd->od.lview), 1, G_CALLBACK(outputbox_3_edited_lcb), pd, _("Line #"), 3);
1745
pref_create_column(GTK_TREE_VIEW(pd->od.lview), 1, G_CALLBACK(outputbox_4_edited_lcb), pd, _("Output #"), 4);
1746
pref_create_column(GTK_TREE_VIEW(pd->od.lview), 1, G_CALLBACK(outputbox_5_edited_lcb), pd, _("Command"), 5);
1747
pref_create_column(GTK_TREE_VIEW(pd->od.lview), 2, G_CALLBACK(outputbox_6_toggled_lcb), pd, _("Show all output"), 6);
1748
scrolwin = gtk_scrolled_window_new(NULL, NULL);
1749
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolwin),GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
1750
gtk_container_add(GTK_CONTAINER(scrolwin), pd->od.lview);
1751
gtk_widget_set_size_request(scrolwin, 150, 190);
1752
gtk_box_pack_start(GTK_BOX(vbox1), scrolwin, TRUE, TRUE, 2);
1754
GList *tmplist = g_list_first(pd->lists[outputbox]);
1757
gchar **strarr = (gchar **)tmplist->data;
1758
arrcount = count_array(strarr);
1761
gtk_list_store_append(GTK_LIST_STORE(pd->od.lstore), &iter);
1762
set_outputbox_strarr_in_list(&iter, strarr,pd);
1764
tmplist = g_list_next(tmplist);
1767
gtk_tree_view_set_reorderable(GTK_TREE_VIEW(pd->od.lview), TRUE);
1768
pd->od.thelist = &pd->lists[outputbox];
1769
pd->od.insertloc = -1;
1770
g_signal_connect(G_OBJECT(pd->od.lstore), "row-inserted", G_CALLBACK(listpref_row_inserted), &pd->od);
1771
g_signal_connect(G_OBJECT(pd->od.lstore), "row-deleted", G_CALLBACK(listpref_row_deleted), &pd->od);
1773
hbox = gtk_hbox_new(FALSE, 0);
1774
gtk_box_pack_start(GTK_BOX(vbox1),hbox, TRUE, TRUE, 2);
1775
but = bf_gtkstock_button(GTK_STOCK_ADD, G_CALLBACK(add_new_outputbox_lcb), pd);
1776
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
1777
but = bf_gtkstock_button(GTK_STOCK_DELETE, G_CALLBACK(delete_outputbox_lcb), pd);
1778
gtk_box_pack_start(GTK_BOX(hbox),but, FALSE, FALSE, 2);
1781
/**************************************/
1782
/* MAIN DIALOG FUNCTIONS */
1783
/**************************************/
1785
static void preferences_destroy_lcb(GtkWidget * widget, Tprefdialog *pd) {
1786
GtkTreeSelection *select;
1787
DEBUG_MSG("preferences_destroy_lcb, started\n");
1789
free_arraylist(pd->lists[filetypes]);
1790
free_arraylist(pd->lists[filefilters]);
1791
free_arraylist(pd->lists[highlight_patterns]);
1792
free_arraylist(pd->lists[browsers]);
1793
free_arraylist(pd->lists[external_commands]);
1794
pd->lists[filetypes] = NULL;
1795
pd->lists[filefilters] = NULL;
1796
pd->lists[highlight_patterns] = NULL;
1797
pd->lists[browsers] = NULL;
1798
pd->lists[external_commands] = NULL;
1800
/* select = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->ftd.lview));
1801
g_signal_handlers_destroy(G_OBJECT(select));*/
1802
DEBUG_MSG("preferences_destroy_lcb, destroying handlers for lstore %p\n",pd->ftd.lstore);
1803
g_signal_handlers_destroy(G_OBJECT(pd->ftd.lstore));
1805
select = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->ffd.lview));
1806
g_signal_handlers_destroy(G_OBJECT(select));
1808
g_signal_handlers_destroy(G_OBJECT(pd->hpd.popmenu));
1809
/* g_signal_handlers_destroy(G_OBJECT(GTK_COMBO(pd->bd.combo)->list));*/
1810
select = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->bd.lview));
1811
g_signal_handlers_destroy(G_OBJECT(select));
1812
/* g_signal_handlers_destroy(G_OBJECT(GTK_COMBO(pd->ed.combo)->list));*/
1813
select = gtk_tree_view_get_selection(GTK_TREE_VIEW(pd->ed.lview));
1814
g_signal_handlers_destroy(G_OBJECT(select));
1815
DEBUG_MSG("preferences_destroy_lcb, about to destroy the window\n");
1816
window_destroy(pd->win);
1819
static void preferences_apply(Tprefdialog *pd) {
1820
string_apply(&main_v->props.editor_font_string, pd->prefs[editor_font_string]);
1821
integer_apply(&main_v->props.editor_tab_width, pd->prefs[editor_tab_width], FALSE);
1822
integer_apply(&main_v->props.editor_indent_wspaces, pd->prefs[editor_indent_wspaces], TRUE);
1823
integer_apply(&main_v->props.word_wrap, pd->prefs[word_wrap], TRUE);
1824
integer_apply(&main_v->props.view_line_numbers, pd->prefs[view_line_numbers], TRUE);
1825
integer_apply(&main_v->props.defaulthighlight, pd->prefs[defaulthighlight], TRUE);
1826
integer_apply(&main_v->props.highlight_num_lines_count, pd->prefs[highlight_num_lines_count], FALSE);
1828
integer_apply(&main_v->props.bookmarks_default_store, pd->prefs[bookmarks_default_store], TRUE);
1829
main_v->props.bookmarks_filename_mode = gtk_option_menu_get_history(GTK_OPTION_MENU(pd->prefs[bookmarks_filename_mode]));
1831
integer_apply(&main_v->props.xhtml, pd->prefs[xhtml], TRUE);
1832
if (main_v->props.xhtml) {
1833
main_v->props.lowercase_tags = 1;
1834
main_v->props.allow_dep = 0;
1836
integer_apply(&main_v->props.lowercase_tags, pd->prefs[lowercase_tags], TRUE);
1837
integer_apply(&main_v->props.allow_dep, pd->prefs[allow_dep], TRUE);
1839
integer_apply(&main_v->props.auto_update_meta, pd->prefs[auto_update_meta], TRUE);
1841
string_apply(&main_v->props.newfile_default_encoding, GTK_COMBO(pd->prefs[newfile_default_encoding])->entry);
1842
integer_apply(&main_v->props.auto_set_encoding_meta, pd->prefs[auto_set_encoding_meta], TRUE);
1843
integer_apply(&main_v->props.backup_file, pd->prefs[backup_file], TRUE);
1844
string_apply(&main_v->props.backup_filestring, pd->prefs[backup_filestring]);
1845
main_v->props.backup_abort_action = gtk_option_menu_get_history(GTK_OPTION_MENU(pd->prefs[backup_abort_action]));
1846
integer_apply(&main_v->props.backup_cleanuponclose, pd->prefs[backup_cleanuponclose], TRUE);
1847
integer_apply(&main_v->props.num_undo_levels, pd->prefs[num_undo_levels], FALSE);
1848
integer_apply(&main_v->props.clear_undo_on_save, pd->prefs[clear_undo_on_save], TRUE);
1849
integer_apply(&main_v->props.allow_multi_instances, pd->prefs[allow_multi_instances], TRUE);
1850
#ifdef WITH_MSG_QUEUE
1851
integer_apply(&main_v->props.open_in_running_bluefish, pd->prefs[open_in_running_bluefish], TRUE);
1853
main_v->props.modified_check_type = gtk_option_menu_get_history(GTK_OPTION_MENU(pd->prefs[modified_check_type]));
1854
integer_apply(&main_v->props.max_recent_files, pd->prefs[max_recent_files], FALSE);
1856
integer_apply(&main_v->props.restore_dimensions, pd->prefs[restore_dimensions], TRUE);
1857
if (!main_v->props.restore_dimensions) {
1858
integer_apply(&main_v->props.left_panel_width, pd->prefs[left_panel_width], FALSE);
1859
integer_apply(&main_v->globses.main_window_h, pd->prefs[main_window_h], FALSE);
1860
integer_apply(&main_v->globses.main_window_w, pd->prefs[main_window_w], FALSE);
1862
string_apply(&main_v->props.tab_font_string, pd->prefs[tab_font_string]);
1863
main_v->props.document_tabposition = gtk_option_menu_get_history(GTK_OPTION_MENU(pd->prefs[document_tabposition]));
1864
main_v->props.leftpanel_tabposition = gtk_option_menu_get_history(GTK_OPTION_MENU(pd->prefs[leftpanel_tabposition]));
1865
main_v->props.left_panel_left = gtk_option_menu_get_history(GTK_OPTION_MENU(pd->prefs[left_panel_left]));
1867
integer_apply(&main_v->props.view_main_toolbar, pd->prefs[view_main_toolbar], TRUE);
1868
integer_apply(&main_v->props.view_left_panel, pd->prefs[view_left_panel], TRUE);
1869
integer_apply(&main_v->props.view_custom_menu, pd->prefs[view_custom_menu], TRUE);
1870
integer_apply(&main_v->props.view_html_toolbar, pd->prefs[view_html_toolbar], TRUE);
1871
integer_apply(&main_v->props.transient_htdialogs, pd->prefs[transient_htdialogs], TRUE);
1873
integer_apply(&main_v->props.ext_browsers_in_submenu, pd->prefs[ext_browsers_in_submenu], TRUE);
1874
integer_apply(&main_v->props.ext_commands_in_submenu, pd->prefs[ext_commands_in_submenu], TRUE);
1875
integer_apply(&main_v->props.ext_outputbox_in_submenu, pd->prefs[ext_outputbox_in_submenu], TRUE);
1877
string_apply(&main_v->props.default_basedir, pd->prefs[default_basedir]);
1878
integer_apply(&main_v->props.filebrowser_two_pane_view, pd->prefs[filebrowser_two_pane_view], TRUE);
1879
string_apply(&main_v->props.filebrowser_unknown_icon, pd->prefs[filebrowser_unknown_icon]);
1880
string_apply(&main_v->props.filebrowser_dir_icon, pd->prefs[filebrowser_dir_icon]);
1882
string_apply(&main_v->props.image_thumbnailstring, pd->prefs[image_thumbnailstring]);
1883
string_apply(&main_v->props.image_thumbnailtype, GTK_COMBO(pd->prefs[image_thumbnailtype])->entry);
1885
#ifdef HAVE_GNOME_VFS
1886
integer_apply(&main_v->props.server_zope_compat, pd->prefs[server_zope_compat], TRUE);
1889
/*filetype_apply_changes(pd);*/
1890
/*filefilter_apply_changes(pd);*/
1891
highlightpattern_apply_changes(pd);
1892
/*browsers_apply_changes(pd);*/
1893
/*externals_apply_changes(pd);*/
1894
/*outputbox_apply_changes(pd);*/
1896
free_arraylist(main_v->props.filetypes);
1897
main_v->props.filetypes = duplicate_arraylist(pd->lists[filetypes]);
1899
free_arraylist(main_v->props.filefilters);
1900
main_v->props.filefilters = duplicate_arraylist(pd->lists[filefilters]);
1902
free_arraylist(main_v->props.highlight_patterns);
1903
main_v->props.highlight_patterns = duplicate_arraylist(pd->lists[highlight_patterns]);
1905
free_arraylist(main_v->props.browsers);
1906
main_v->props.browsers = duplicate_arraylist(pd->lists[browsers]);
1908
free_arraylist(main_v->props.external_commands);
1909
main_v->props.external_commands = duplicate_arraylist(pd->lists[external_commands]);
1911
free_arraylist(main_v->props.outputbox);
1912
main_v->props.outputbox = duplicate_arraylist(pd->lists[outputbox]);
1914
/* apply the changes to highlighting patterns and filetypes to the running program */
1915
filetype_highlighting_rebuild(TRUE);
1916
filebrowser_filters_rebuild();
1918
all_documents_apply_settings();
1920
GList *tmplist = g_list_first(main_v->bfwinlist);
1922
Tbfwin *bfwin = BFWIN(tmplist->data);
1923
DEBUG_MSG("preferences_ok_clicked_lcb, calling encoding_menu_rebuild\n");
1924
encoding_menu_rebuild(bfwin);
1925
external_menu_rebuild(bfwin); /* browsers is also rebuild here! */
1926
filetype_menu_rebuild(bfwin,NULL);
1927
DEBUG_MSG("preferences_ok_clicked_lcb, calling gui_apply_settings\n");
1928
gui_apply_settings(bfwin);
1929
left_panel_rebuild(bfwin);
1930
DEBUG_MSG("preferences_ok_clicked_lcb, calling doc_force_activate\n");
1931
doc_force_activate(bfwin->current_document);
1932
tmplist = g_list_next(tmplist);
1937
static void preferences_cancel_clicked_lcb(GtkWidget *wid, Tprefdialog *pd) {
1938
preferences_destroy_lcb(NULL, pd);
1940
static void preferences_apply_clicked_lcb(GtkWidget *wid, Tprefdialog *pd) {
1941
preferences_apply(pd);
1943
static void preferences_ok_clicked_lcb(GtkWidget *wid, Tprefdialog *pd) {
1944
preferences_apply(pd);
1945
preferences_destroy_lcb(NULL, pd);
1948
static void restore_dimensions_toggled_lcb(GtkToggleButton *togglebutton,Tprefdialog *pd) {
1949
gtk_widget_set_sensitive(pd->prefs[left_panel_width], !togglebutton->active);
1950
gtk_widget_set_sensitive(pd->prefs[main_window_h], !togglebutton->active);
1951
gtk_widget_set_sensitive(pd->prefs[main_window_w], !togglebutton->active);
1953
static void create_backup_toggled_lcb(GtkToggleButton *togglebutton,Tprefdialog *pd) {
1954
gtk_widget_set_sensitive(pd->prefs[backup_filestring], togglebutton->active);
1955
gtk_widget_set_sensitive(pd->prefs[backup_abort_action], togglebutton->active);
1958
static void preferences_dialog() {
1960
GtkWidget *dvbox, *frame, *vbox1, *vbox2;
1961
gchar *notebooktabpositions[] = {N_("left"), N_("right"), N_("top"), N_("bottom"), NULL};
1962
gchar *panellocations[] = {N_("right"), N_("left"), NULL};
1963
gchar *modified_check_types[] = {N_("no check"), N_("check mtime and size"), N_("check mtime"), N_("check size"), NULL};
1965
pd = g_new0(Tprefdialog,1);
1966
pd->win = window_full(_("Edit preferences"), GTK_WIN_POS_NONE, 0, G_CALLBACK(preferences_destroy_lcb), pd, TRUE);
1968
dvbox = gtk_vbox_new(FALSE, 5);
1969
gtk_container_add(GTK_CONTAINER(pd->win), dvbox);
1970
pd->noteb = gtk_notebook_new();
1971
gtk_notebook_set_homogeneous_tabs(GTK_NOTEBOOK(pd->noteb), TRUE);
1972
gtk_notebook_set_tab_pos(GTK_NOTEBOOK(pd->noteb), GTK_POS_LEFT);
1974
gtk_box_pack_start(GTK_BOX(dvbox), pd->noteb, TRUE, TRUE, 0);
1976
vbox1 = gtk_vbox_new(FALSE, 5);
1977
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("Editor"),150,TRUE));
1979
frame = gtk_frame_new(_("Editor options"));
1980
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
1981
vbox2 = gtk_vbox_new(FALSE, 0);
1982
gtk_container_add(GTK_CONTAINER(frame), vbox2);
1984
pd->prefs[editor_font_string] = prefs_string(_("Font"), main_v->props.editor_font_string, vbox2, pd, string_font);
1985
pd->prefs[editor_tab_width] = prefs_integer(_("Tab width"), main_v->props.editor_tab_width, vbox2, pd, 1, 50);
1986
pd->prefs[editor_indent_wspaces] = boxed_checkbut_with_value(_("Use spaces to indent, not tabs"), main_v->props.editor_indent_wspaces, vbox2);
1987
pd->prefs[word_wrap] = boxed_checkbut_with_value(_("Word wrap default"), main_v->props.word_wrap, vbox2);
1988
pd->prefs[view_line_numbers] = boxed_checkbut_with_value(_("Line numbers by default"), main_v->props.view_line_numbers, vbox2);
1989
pd->prefs[defaulthighlight] = boxed_checkbut_with_value(_("Highlight syntax by default"), main_v->props.defaulthighlight, vbox2);
1990
pd->prefs[highlight_num_lines_count] = prefs_integer(_("Highlight # lines"), main_v->props.highlight_num_lines_count, vbox2, pd, 1, 8);
1992
frame = gtk_frame_new(_("Undo"));
1993
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
1994
vbox2 = gtk_vbox_new(FALSE, 0);
1995
gtk_container_add(GTK_CONTAINER(frame), vbox2);
1997
pd->prefs[num_undo_levels] = prefs_integer(_("Undo history size"), main_v->props.num_undo_levels, vbox2, pd, 50, 10000);
1998
pd->prefs[clear_undo_on_save] = boxed_checkbut_with_value(_("Clear undo history on save"), main_v->props.clear_undo_on_save, vbox2);
2000
frame = gtk_frame_new(_("Bookmark options"));
2001
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2002
vbox2 = gtk_vbox_new(FALSE, 0);
2003
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2005
pd->prefs[bookmarks_default_store] = boxed_checkbut_with_value(_("Make permanent by default"), main_v->props.bookmarks_default_store, vbox2);
2007
gchar *actions[] = {N_("full path"), N_("path from basedir"), N_("filename"), NULL};
2008
pd->prefs[bookmarks_filename_mode] = boxed_optionmenu_with_value(_("Bookmarks filename display"), main_v->props.bookmarks_filename_mode, vbox2, actions);
2011
vbox1 = gtk_vbox_new(FALSE, 5);
2012
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("HTML"),154,TRUE));
2014
frame = gtk_frame_new(_("HTML options"));
2015
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2016
vbox2 = gtk_vbox_new(FALSE, 0);
2017
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2019
pd->prefs[lowercase_tags] = boxed_checkbut_with_value(_("Lowercase HTML tags"), main_v->props.lowercase_tags, vbox2);
2020
pd->prefs[allow_dep] = boxed_checkbut_with_value(_("Use deprecated tags (e.g. <font> and <nobr>)"), main_v->props.allow_dep, vbox2);
2021
pd->prefs[xhtml] = boxed_checkbut_with_value(_("Use XHTML style tags (<br />)"), main_v->props.xhtml, vbox2);
2022
pd->prefs[auto_update_meta] = boxed_checkbut_with_value(_("Automatic update author meta"), main_v->props.auto_update_meta, vbox2);
2024
vbox1 = gtk_vbox_new(FALSE, 5);
2025
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("Files"),152,TRUE));
2027
frame = gtk_frame_new(_("Encoding"));
2028
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2029
vbox2 = gtk_vbox_new(FALSE, 0);
2030
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2032
GList *tmplist, *poplist = g_list_append(NULL, "");
2033
tmplist = g_list_first(main_v->props.encodings);
2035
gchar **strarr = (gchar **)tmplist->data;
2036
poplist = g_list_append(poplist, strarr[1]);
2037
tmplist = g_list_next(tmplist);
2039
pd->prefs[newfile_default_encoding] = prefs_combo(_("Default character set"),main_v->props.newfile_default_encoding, vbox2, pd, poplist, TRUE);
2040
g_list_free(poplist);
2042
pd->prefs[auto_set_encoding_meta] = boxed_checkbut_with_value(_("Auto set <meta> encoding tag on change"), main_v->props.auto_set_encoding_meta, vbox2);
2044
frame = gtk_frame_new(_("Backup"));
2045
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2046
vbox2 = gtk_vbox_new(FALSE, 0);
2047
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2048
pd->prefs[backup_file] = boxed_checkbut_with_value(_("Create backup on save"), main_v->props.backup_file, vbox2);
2049
pd->prefs[backup_filestring] = prefs_string(_("Backup file suffix"), main_v->props.backup_filestring, vbox2, pd, string_none);
2051
gchar *failureactions[] = {N_("save"), N_("abort"), N_("ask"), NULL};
2052
pd->prefs[backup_abort_action] = boxed_optionmenu_with_value(_("Action on backup failure"), main_v->props.backup_abort_action, vbox2, failureactions);
2054
pd->prefs[backup_cleanuponclose] = boxed_checkbut_with_value(_("Remove backupfile on close"), main_v->props.backup_cleanuponclose, vbox2);
2055
create_backup_toggled_lcb(GTK_TOGGLE_BUTTON(pd->prefs[backup_file]), pd);
2056
g_signal_connect(G_OBJECT(pd->prefs[backup_file]), "toggled", G_CALLBACK(create_backup_toggled_lcb), pd);
2058
frame = gtk_frame_new(_("Misc"));
2059
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2060
vbox2 = gtk_vbox_new(FALSE, 0);
2061
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2063
pd->prefs[allow_multi_instances] = boxed_checkbut_with_value(_("Allow multi instances of a file"), main_v->props.allow_multi_instances, vbox2);
2064
#ifdef WITH_MSG_QUEUE
2065
pd->prefs[open_in_running_bluefish] = boxed_checkbut_with_value(_("Open files in already running bluefish window"),main_v->props.open_in_running_bluefish, vbox2);
2066
#endif /* WITH_MSG_QUEUE */
2067
pd->prefs[modified_check_type] = boxed_optionmenu_with_value(_("File modified on disk check "), main_v->props.modified_check_type, vbox2, modified_check_types);
2068
pd->prefs[max_recent_files] = prefs_integer(_("Number of files in 'Open recent'"), main_v->props.max_recent_files, vbox2, pd, 3, 100);
2070
frame = gtk_frame_new(_("File browser"));
2071
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2072
vbox2 = gtk_vbox_new(FALSE, 0);
2073
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2074
pd->prefs[default_basedir] = prefs_string(_("Default basedir"), main_v->props.default_basedir, vbox2, pd, string_none);
2075
pd->prefs[filebrowser_two_pane_view] = boxed_checkbut_with_value(_("Use separate file and directory view"), main_v->props.filebrowser_two_pane_view, vbox2);
2076
pd->prefs[filebrowser_unknown_icon] = prefs_string(_("Unknown icon"), main_v->props.filebrowser_unknown_icon, vbox2, pd, string_file);
2077
pd->prefs[filebrowser_dir_icon] = prefs_string(_("Directory icon"), main_v->props.filebrowser_dir_icon, vbox2, pd, string_file);
2079
vbox1 = gtk_vbox_new(FALSE, 5);
2080
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("User interface"), 156,TRUE));
2082
frame = gtk_frame_new(_("Dimensions"));
2083
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2084
vbox2 = gtk_vbox_new(FALSE, 0);
2085
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2086
pd->prefs[restore_dimensions] = boxed_checkbut_with_value(_("Restore last used dimensions"), main_v->props.restore_dimensions, vbox2);
2087
pd->prefs[left_panel_width] = prefs_integer(_("Initial sidebar width"), main_v->props.left_panel_width, vbox2, pd, 1, 4000);
2088
pd->prefs[main_window_h] = prefs_integer(_("Initial window height"), main_v->globses.main_window_h, vbox2, pd, 1, 4000);
2089
pd->prefs[main_window_w] = prefs_integer(_("Initial window width"), main_v->globses.main_window_w, vbox2, pd, 1, 4000);
2090
restore_dimensions_toggled_lcb(GTK_TOGGLE_BUTTON(pd->prefs[restore_dimensions]), pd);
2091
g_signal_connect(G_OBJECT(pd->prefs[restore_dimensions]), "toggled", G_CALLBACK(restore_dimensions_toggled_lcb), pd);
2093
frame = gtk_frame_new(_("General"));
2094
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2095
vbox2 = gtk_vbox_new(FALSE, 0);
2096
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2098
pd->prefs[view_main_toolbar] = boxed_checkbut_with_value(_("Show main toolbar by default"), main_v->props.view_main_toolbar, vbox2);
2099
pd->prefs[view_left_panel] = boxed_checkbut_with_value(_("Show sidebar by default"), main_v->props.view_left_panel, vbox2);
2100
pd->prefs[view_custom_menu] = boxed_checkbut_with_value(_("Show custom menu by default"), main_v->props.view_custom_menu, vbox2);
2101
pd->prefs[view_html_toolbar] = boxed_checkbut_with_value(_("Show HTML toolbar by default"), main_v->props.view_html_toolbar, vbox2);
2102
pd->prefs[transient_htdialogs] = boxed_checkbut_with_value(_("Make HTML dialogs transient"), main_v->props.transient_htdialogs, vbox2);
2104
pd->prefs[ext_browsers_in_submenu] = boxed_checkbut_with_value(_("External browsers in submenu"), main_v->props.ext_browsers_in_submenu, vbox2);
2105
pd->prefs[ext_commands_in_submenu] = boxed_checkbut_with_value(_("External commands in submenu"), main_v->props.ext_commands_in_submenu, vbox2);
2106
pd->prefs[ext_outputbox_in_submenu] = boxed_checkbut_with_value(_("External outputbox in submenu"), main_v->props.ext_outputbox_in_submenu, vbox2);
2108
pd->prefs[tab_font_string] = prefs_string(_("Notebook tab font (leave empty for gtk default)"), main_v->props.tab_font_string, vbox2, pd, string_font);
2110
pd->prefs[document_tabposition] = boxed_optionmenu_with_value(_("Document notebook tab position"), main_v->props.document_tabposition, vbox2, notebooktabpositions);
2111
pd->prefs[leftpanel_tabposition] = boxed_optionmenu_with_value(_("Sidebar notebook tab position"), main_v->props.leftpanel_tabposition, vbox2, notebooktabpositions);
2112
pd->prefs[left_panel_left] = boxed_optionmenu_with_value(_("Sidebar location"), main_v->props.left_panel_left, vbox2, panellocations);
2114
vbox1 = gtk_vbox_new(FALSE, 5);
2115
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("Images"), 155,TRUE));
2117
frame = gtk_frame_new(_("Thumbnails"));
2118
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2119
vbox2 = gtk_vbox_new(FALSE, 0);
2120
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2121
pd->prefs[image_thumbnailstring] = prefs_string(_("Thumbnail suffix"), main_v->props.image_thumbnailstring, vbox2, pd, string_none);
2123
GList *poplist = g_list_append(NULL, "png");
2124
poplist = g_list_append(poplist, "jpeg");
2125
pd->prefs[image_thumbnailtype] = prefs_combo(_("Thumbnail filetype"),main_v->props.image_thumbnailtype, vbox2, pd, poplist, FALSE);
2126
g_list_free(poplist);
2129
vbox1 = gtk_vbox_new(FALSE, 5);
2130
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("Filetypes"), 153,TRUE));
2132
frame = gtk_frame_new(_("Filetypes"));
2133
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2134
vbox2 = gtk_vbox_new(FALSE, 0);
2135
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2137
create_filetype_gui(pd, vbox2);
2139
frame = gtk_frame_new(_("Filefilters"));
2140
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2141
vbox2 = gtk_vbox_new(FALSE, 0);
2142
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2144
create_filefilter_gui(pd, vbox2);
2146
vbox1 = gtk_vbox_new(FALSE, 5);
2147
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("Syntax highlighting"), 158,TRUE));
2149
frame = gtk_frame_new(_("Patterns"));
2150
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2151
vbox2 = gtk_vbox_new(FALSE, 0);
2152
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2154
create_highlightpattern_gui(pd, vbox2);
2156
vbox1 = gtk_vbox_new(FALSE, 5);
2157
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("External programs"), 151,TRUE));
2159
frame = gtk_frame_new(_("Browsers"));
2160
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2161
vbox2 = gtk_vbox_new(FALSE, 0);
2162
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2164
create_browsers_gui(pd, vbox2);
2166
frame = gtk_frame_new(_("Utilities and filters"));
2167
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2168
vbox2 = gtk_vbox_new(FALSE, 0);
2169
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2171
create_externals_gui(pd, vbox2);
2173
vbox1 = gtk_vbox_new(FALSE, 5);
2174
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("Output parsers"), 157,TRUE));
2176
frame = gtk_frame_new(_("Outputbox"));
2177
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2178
vbox2 = gtk_vbox_new(FALSE, 0);
2179
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2181
create_outputbox_gui(pd, vbox2);
2183
#ifdef HAVE_GNOME_VFS
2184
vbox1 = gtk_vbox_new(FALSE, 5);
2185
gtk_notebook_append_page(GTK_NOTEBOOK(pd->noteb), vbox1, hbox_with_pix_and_text(_("Servers"), 0,TRUE));
2187
frame = gtk_frame_new(_("Remote servers"));
2188
gtk_box_pack_start(GTK_BOX(vbox1), frame, FALSE, FALSE, 5);
2189
vbox2 = gtk_vbox_new(FALSE, 0);
2190
gtk_container_add(GTK_CONTAINER(frame), vbox2);
2192
pd->prefs[server_zope_compat] = boxed_checkbut_with_value(_("Zope compatibility mode"), main_v->props.server_zope_compat, vbox2);
2195
/* end, create buttons for dialog now */
2197
GtkWidget *ahbox, *but;
2198
ahbox = gtk_hbutton_box_new();
2199
gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_END);
2200
gtk_button_box_set_spacing(GTK_BUTTON_BOX(ahbox), 12);
2202
gtk_box_pack_start(GTK_BOX(dvbox), ahbox, FALSE, FALSE, 0);
2203
but = bf_gtkstock_button(GTK_STOCK_APPLY, G_CALLBACK(preferences_apply_clicked_lcb), pd);
2204
gtk_box_pack_start(GTK_BOX(ahbox), but, TRUE, TRUE, 0);
2206
but = bf_stock_cancel_button(G_CALLBACK(preferences_cancel_clicked_lcb), pd);
2207
gtk_box_pack_start(GTK_BOX(ahbox), but, TRUE, TRUE, 0);
2209
but = bf_stock_ok_button(G_CALLBACK(preferences_ok_clicked_lcb), pd);
2210
gtk_box_pack_start(GTK_BOX(ahbox), but, TRUE, TRUE, 0);
2211
gtk_window_set_default(GTK_WINDOW(pd->win), but);
2213
gtk_widget_show_all(pd->win);
2216
void open_preferences_cb(GtkWidget *wid, gpointer data) {
2217
preferences_dialog();
2220
void open_preferences_menu_cb(gpointer callback_data,guint action,GtkWidget *widget) {
2221
preferences_dialog();