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

« back to all changes in this revision

Viewing changes to src/html_diag.c

  • Committer: Bazaar Package Importer
  • Author(s): Davide Puricelli (evo)
  • Date: 2005-04-23 17:05:18 UTC
  • mfrom: (1.2.1 upstream) (2.1.1 warty)
  • Revision ID: james.westby@ubuntu.com-20050423170518-pb8zi3vg32cm6g04
Tags: 1.0-1
* Acknowledge NMU, thanks Leo; closes: #291222.
* Updated debian/ files, thanks Daniel Leidert. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* Bluefish HTML Editor
2
2
 * html_diag.c - general functions to create HTML dialogs
3
3
 *
4
 
 * Copyright (C) 2000-2001 Olivier Sessink
 
4
 * Copyright (C) 2000-2002 Olivier Sessink
5
5
 *
6
6
 * This program is free software; you can redistribute it and/or modify
7
7
 * it under the terms of the GNU General Public License as published by
17
17
 * along with this program; if not, write to the Free Software
18
18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
19
 */
20
 
#include "default_include.h"
21
20
 
 
21
#include <gtk/gtk.h>
22
22
#include <string.h>     /* strrchr */
23
23
#include <stdlib.h> /* strtod */
24
 
 
 
24
/* #define DEBUG */
25
25
 
26
26
#include "bluefish.h"
 
27
#include "html2.h" /* style_but_new() */
27
28
#include "html_diag.h" /* myself */
28
29
#include "gtk_easy.h" /* window_full() */
29
30
#include "bf_lib.h"
30
31
#include "stringlist.h" /* add_to_stringlist */
31
32
#include "document.h" /* doc_save_selection */
 
33
#include "cap.h"
32
34
 
 
35
Trecent_attribs recent_attribs;
33
36
/*****************************************/
34
37
/********** DIALOG FUNCTIONS *************/
35
38
/*****************************************/
36
39
 
37
 
void html_diag_destroy_cb(GtkWidget * widget, GdkEvent *event,  Thtml_diag *dg) {
38
 
        dg->doc->saved_sel.saved = FALSE;
 
40
void html_diag_destroy_cb(GtkWidget * widget, Thtml_diag *dg) {
 
41
        dg->tobedestroyed = TRUE;
 
42
        DEBUG_MSG("html_diag_destroy_cb, widget=%p, dg=%p, dg->dialog=%p\n",widget,dg,dg->dialog);
 
43
        if (dg->mark_ins) {
 
44
                gtk_text_buffer_delete_mark(dg->doc->buffer,dg->mark_ins);
 
45
                gtk_text_buffer_delete_mark(dg->doc->buffer,dg->mark_sel);
 
46
        }
39
47
        window_destroy(dg->dialog);
 
48
        DEBUG_MSG("html_diag_destroy_cb, about to free dg=%p\n",dg);
40
49
        g_free(dg);
41
50
}
42
51
 
43
52
void html_diag_cancel_clicked_cb(GtkWidget *widget, gpointer data) {
44
 
        html_diag_destroy_cb(NULL, NULL, data);
 
53
        html_diag_destroy_cb(NULL, data);
45
54
}
46
55
 
47
 
Thtml_diag *html_diag_new(gchar *title) {
 
56
Thtml_diag *html_diag_new(Tbfwin *bfwin, gchar *title) {
48
57
        Thtml_diag *dg;
49
58
        
50
59
        dg = g_malloc(sizeof(Thtml_diag));
51
 
        dg->dialog = window_full(title, GTK_WIN_POS_MOUSE
52
 
                , GTK_WINDOW_DIALOG, 5,html_diag_destroy_cb , dg);
53
 
        gtk_window_set_wmclass(GTK_WINDOW(dg->dialog), "Bluefish", "html_dialog");
 
60
        dg->tobedestroyed = FALSE;
 
61
        DEBUG_MSG("html_diag_new, dg=%p\n",dg);
 
62
        dg->dialog = window_full2(title, GTK_WIN_POS_MOUSE
 
63
                , 12,G_CALLBACK(html_diag_destroy_cb), dg, TRUE,  bfwin ? bfwin->main_window : NULL);
 
64
        gtk_window_set_type_hint(GTK_WINDOW(dg->dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
 
65
        gtk_window_set_role(GTK_WINDOW(dg->dialog), "html_dialog");
54
66
        dg->vbox = gtk_vbox_new(FALSE, 1);
55
67
        gtk_container_add(GTK_CONTAINER(dg->dialog), dg->vbox);
56
 
 
 
68
#ifdef DEBUG
 
69
        {
 
70
                Tdocument *doc = bfwin->current_document;
 
71
                GtkTextIter iter1, iter2;
 
72
                GtkTextMark* mark;
 
73
                mark = gtk_text_buffer_get_mark(doc->buffer,"insert");
 
74
                gtk_text_buffer_get_iter_at_mark(doc->buffer,&iter1,mark);
 
75
                mark = gtk_text_buffer_get_mark(doc->buffer,"selection_bound");
 
76
                gtk_text_buffer_get_iter_at_mark(doc->buffer,&iter2,mark);
 
77
                g_print("html_diag_new, current marks: insert=%d, selection=%d\n",gtk_text_iter_get_offset(&iter1),gtk_text_iter_get_offset(&iter2));
 
78
        }
 
79
#endif
 
80
        {
 
81
                if (!gtk_text_buffer_get_mark(bfwin->current_document->buffer,"diag_ins")) {
 
82
                        GtkTextIter iter;
 
83
                        GtkTextMark* mark = gtk_text_buffer_get_mark(bfwin->current_document->buffer,"insert");
 
84
                        gtk_text_buffer_get_iter_at_mark(bfwin->current_document->buffer,&iter,mark);
 
85
                        dg->mark_ins = gtk_text_buffer_create_mark(bfwin->current_document->buffer,"diag_ins",&iter,TRUE);
 
86
                        mark = gtk_text_buffer_get_mark(bfwin->current_document->buffer,"selection_bound");
 
87
                        gtk_text_buffer_get_iter_at_mark(bfwin->current_document->buffer,&iter,mark);
 
88
                        dg->mark_sel = gtk_text_buffer_create_mark(bfwin->current_document->buffer,"diag_sel",&iter,TRUE);
 
89
                } else {
 
90
                        dg->mark_ins = dg->mark_sel = NULL;
 
91
                }
 
92
        }
57
93
        dg->range.pos = -1;
58
 
        dg->range.len = -1;
 
94
        dg->range.end = -1;
 
95
        if (main_v->props.transient_htdialogs) {
 
96
                /* must be set before realizing */
 
97
                DEBUG_MSG("html_diag_finish, setting dg->dialog=%p transient!\n", dg->dialog);
 
98
                gtk_window_set_transient_for(GTK_WINDOW(dg->dialog), GTK_WINDOW(bfwin->main_window));
 
99
        }
59
100
 
60
101
        gtk_widget_realize(dg->dialog);
61
 
        dg->doc = main_v->current_document;
 
102
        dg->bfwin = bfwin;
 
103
        dg->doc = bfwin->current_document;
62
104
        return dg;
63
105
}
64
106
 
65
107
GtkWidget *html_diag_table_in_vbox(Thtml_diag *dg, gint rows, gint cols) {
66
 
        GtkWidget *returnwidget = gtk_table_new(rows, cols, 0);
67
 
        gtk_table_set_row_spacings(GTK_TABLE(returnwidget), 4);
68
 
        gtk_table_set_col_spacings(GTK_TABLE(returnwidget), 4);
 
108
        GtkWidget *returnwidget = gtk_table_new(rows, cols, FALSE);
 
109
        gtk_table_set_row_spacings(GTK_TABLE(returnwidget), 12);
 
110
        gtk_table_set_col_spacings(GTK_TABLE(returnwidget), 12);
69
111
        gtk_box_pack_start(GTK_BOX(dg->vbox), returnwidget, FALSE, FALSE, 0);
70
112
        return returnwidget;
71
113
}
73
115
void html_diag_finish(Thtml_diag *dg, GtkSignalFunc ok_func) {
74
116
        GtkWidget *hbox;
75
117
 
76
 
        doc_save_selection(main_v->current_document);
77
 
 
 
118
        gtk_box_pack_start(GTK_BOX(dg->vbox), gtk_hseparator_new(), FALSE, FALSE, 12);
78
119
        hbox = gtk_hbutton_box_new();
79
120
        gtk_hbutton_box_set_layout_default(GTK_BUTTONBOX_END);
80
 
        gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbox), 1);
 
121
        gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbox), 12);
81
122
        
82
123
        dg->obut = bf_stock_ok_button(ok_func, dg);
83
 
        dg->cbut = bf_stock_cancel_button(html_diag_cancel_clicked_cb, dg);
 
124
        dg->cbut = bf_stock_cancel_button(G_CALLBACK(html_diag_cancel_clicked_cb), dg);
84
125
 
 
126
        gtk_box_pack_start(GTK_BOX(hbox),dg->cbut , FALSE, FALSE, 0);
85
127
        gtk_box_pack_start(GTK_BOX(hbox),dg->obut , FALSE, FALSE, 0);
86
128
        gtk_window_set_default(GTK_WINDOW(dg->dialog), dg->obut);
87
 
        gtk_box_pack_start(GTK_BOX(hbox),dg->cbut , FALSE, FALSE, 0);
88
129
 
89
130
        gtk_box_pack_start(GTK_BOX(dg->vbox), hbox, FALSE, FALSE, 0);
90
131
        gtk_widget_show_all(GTK_WIDGET(dg->dialog));
91
 
        if (main_v->props.transient_htdialogs) {
92
 
                DEBUG_MSG("html_diag_finish, setting transient!\n");
93
 
                gtk_window_set_transient_for(GTK_WINDOW(dg->dialog), GTK_WINDOW(main_v->main_window));
94
 
        }
95
132
}
96
133
 
97
134
/*************************************************/
135
172
}
136
173
 
137
174
void fill_dialogvalues(gchar *dialogitems[], gchar *dialogvalues[]
138
 
                , gchar **custom, Ttagpopup *data, GtkWidget *sending_widget
139
 
                , Thtml_diag *diag) {
 
175
                , gchar **custom, Ttagpopup *data, Thtml_diag *diag) {
140
176
 
141
177
        gint count=0;
142
178
        
149
185
         * is called by the right-click-opup, so data will contain info about
150
186
         * the position of the tag */
151
187
 
152
 
        if (data && !sending_widget) {
 
188
        if (data) {
153
189
                parse_html_for_dialogvalues(dialogitems, dialogvalues, custom, data);
154
190
                diag->range.pos = data->pos;
155
 
                diag->range.len = data->len;
 
191
                diag->range.end = data->end;
156
192
        } else {
157
193
                DEBUG_MSG("fill_dialogvalues, no data, or a sending widget\n");
158
194
                diag->range.pos = -1;
159
 
                diag->range.len = -1;
 
195
                diag->range.end = -1;
160
196
        }
161
197
}
162
198
 
271
307
        return string2add2;
272
308
}
273
309
 
274
 
gchar *insert_integer_if_spin(GtkWidget * spin, gchar * itemname, gchar * string2add2, GtkWidget * percentage)
275
 
{
276
 
 
277
 
        gchar *tempstring;
278
 
 
279
 
        if (strlen(gtk_entry_get_text(GTK_ENTRY(spin)))) {
280
 
                if ((percentage) && (GTK_TOGGLE_BUTTON(percentage)->active)) {
281
 
                        tempstring = g_strdup_printf("%s %s=\"%d%%\"", string2add2, itemname, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)));
 
310
gchar *insert_integer_if_spin(GtkWidget * spin, gchar * itemname, gchar * string2add2, gboolean ispercentage, gint dontinsertonvalue) {
 
311
        gint val = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin));
 
312
        if (val != dontinsertonvalue) {
 
313
                gchar *tempstring;
 
314
                if (ispercentage) {
 
315
                        tempstring = g_strdup_printf("%s %s=\"%d%%\"", string2add2, itemname, val);
282
316
                } else {
283
 
                        tempstring = g_strdup_printf("%s %s=\"%d\"", string2add2, itemname, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spin)));
 
317
                        tempstring = g_strdup_printf("%s %s=\"%d\"", string2add2, itemname, val);
284
318
                }
285
319
                g_free(string2add2);
286
320
                string2add2 = tempstring;
321
355
        return which_list;
322
356
}
323
357
 
 
358
GtkWidget *generic_table_inside_notebookframe(GtkWidget *notebook, const gchar *title, gint rows, gint cols) {
 
359
        GtkWidget *dgtable, *frame = bf_generic_frame_new(NULL, GTK_SHADOW_NONE, 12);
 
360
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frame, gtk_label_new(title));
 
361
        dgtable = gtk_table_new(rows, cols, FALSE);
 
362
        gtk_table_set_row_spacings(GTK_TABLE(dgtable), 6);
 
363
        gtk_table_set_col_spacings(GTK_TABLE(dgtable), 12);
 
364
        gtk_container_add(GTK_CONTAINER(frame), dgtable);
 
365
        return dgtable;
 
366
}
 
367
 
 
368
void generic_class_id_style_section(Thtml_diag *dg, gint firstattrwidget, GtkWidget *dgtable, gint firstrowintable, gchar **tagvalues, gint firsttagvalue) {
 
369
        GtkWidget *but;
 
370
 
 
371
        dg->attrwidget[firstattrwidget] = combo_with_popdown(tagvalues[firsttagvalue], dg->bfwin->session->classlist, 1);
 
372
        bf_mnemonic_label_tad_with_alignment(_("Cl_ass:"), dg->attrwidget[firstattrwidget], 0, 0.5, dgtable, 0, 1, firstrowintable+0, firstrowintable+1);
 
373
        gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->attrwidget[firstattrwidget], 1, 3, firstrowintable+0, firstrowintable+1);
 
374
 
 
375
        dg->attrwidget[firstattrwidget+1] = entry_with_text(tagvalues[firsttagvalue+1], 256);
 
376
        bf_mnemonic_label_tad_with_alignment(_("_ID:"), dg->attrwidget[firstattrwidget+1], 0, 0.5, dgtable, 0, 1, firstrowintable+1, firstrowintable+2);
 
377
        gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->attrwidget[firstattrwidget+1], 1, 3, firstrowintable+1, firstrowintable+2);
 
378
 
 
379
        dg->attrwidget[firstattrwidget+2] = entry_with_text(tagvalues[firsttagvalue+2], 256);
 
380
        bf_mnemonic_label_tad_with_alignment(_("St_yle:"), dg->attrwidget[firstattrwidget+2], 0, 0.5, dgtable, 0, 1, firstrowintable+2, firstrowintable+3);
 
381
        gtk_table_attach_defaults(GTK_TABLE(dgtable), dg->attrwidget[firstattrwidget+2], 1, 2, firstrowintable+2, firstrowintable+3);
 
382
        but = style_but_new(dg->attrwidget[firstattrwidget+2], dg->dialog);
 
383
        gtk_table_attach(GTK_TABLE(dgtable), but, 2, 3, firstrowintable+2, firstrowintable+3, GTK_SHRINK, GTK_SHRINK, 0, 0);
 
384
}