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
20
#include "default_include.h"
22
22
#include <string.h> /* strrchr */
23
23
#include <stdlib.h> /* strtod */
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 */
35
Trecent_attribs recent_attribs;
33
36
/*****************************************/
34
37
/********** DIALOG FUNCTIONS *************/
35
38
/*****************************************/
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);
44
gtk_text_buffer_delete_mark(dg->doc->buffer,dg->mark_ins);
45
gtk_text_buffer_delete_mark(dg->doc->buffer,dg->mark_sel);
39
47
window_destroy(dg->dialog);
48
DEBUG_MSG("html_diag_destroy_cb, about to free dg=%p\n",dg);
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);
47
Thtml_diag *html_diag_new(gchar *title) {
56
Thtml_diag *html_diag_new(Tbfwin *bfwin, gchar *title) {
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);
70
Tdocument *doc = bfwin->current_document;
71
GtkTextIter iter1, iter2;
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));
81
if (!gtk_text_buffer_get_mark(bfwin->current_document->buffer,"diag_ins")) {
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);
90
dg->mark_ins = dg->mark_sel = NULL;
57
93
dg->range.pos = -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));
60
101
gtk_widget_realize(dg->dialog);
61
dg->doc = main_v->current_document;
103
dg->doc = bfwin->current_document;
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;
73
115
void html_diag_finish(Thtml_diag *dg, GtkSignalFunc ok_func) {
76
doc_save_selection(main_v->current_document);
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);
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);
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);
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));
97
134
/*************************************************/
271
307
return string2add2;
274
gchar *insert_integer_if_spin(GtkWidget * spin, gchar * itemname, gchar * string2add2, GtkWidget * percentage)
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) {
315
tempstring = g_strdup_printf("%s %s=\"%d%%\"", string2add2, itemname, val);
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);
285
319
g_free(string2add2);
286
320
string2add2 = tempstring;
321
355
return which_list;
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);
368
void generic_class_id_style_section(Thtml_diag *dg, gint firstattrwidget, GtkWidget *dgtable, gint firstrowintable, gchar **tagvalues, gint firsttagvalue) {
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);
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);
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);