/** -*- erwin-c -*- erwin - really simple html editor Copyright (C) 1999-2005 Adrian Reber This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA File: erwindialogs.c Description: most of the dialogs are here Changes: 01 Jul 2002: first entry 10 Jul 2002: complete rewrite of help_about_menu() 15 Jul 2002: port to gtk2 completed */ /* $Id: erwindialogs.c,v 1.20 2005/01/19 20:59:44 adrian Exp $ */ #ifndef lint static const char vcid[] = "$Id: erwindialogs.c,v 1.20 2005/01/19 20:59:44 adrian Exp $"; #endif /* lint */ #include "xpm/logo_new1.xpm" #include "erwin.h" #include "erwinfunctions.h" #include #include #include extern GtkWidget *main_window; extern gint from_beginning; struct font_options font_options; void table_wizard(GtkWidget * widget) { GtkWidget *dialog; GtkWidget *button; GtkWidget *label; GtkWidget *table; GtkWidget *spinner1; GtkWidget *spinner2; GtkAdjustment *adj; if (rendered()) return; table_values.rows = 1; table_values.cols = 1; dialog = gtk_dialog_new(); gtk_window_set_title(GTK_WINDOW(dialog), PACKAGE); gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", GTK_SIGNAL_FUNC(destroy_message), NULL); gtk_signal_connect(GTK_OBJECT(dialog), "destroy", GTK_SIGNAL_FUNC(destroy_message), NULL); table = gtk_table_new(2, 4, FALSE); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), table, TRUE, TRUE, 5); label = gtk_label_new("Rows: "); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 10, 10); adj = (GtkAdjustment *) gtk_adjustment_new(1.0, 1.0, 99.0, 1.0, 4.0, 0.0); spinner1 = gtk_spin_button_new(adj, 0, 0); gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spinner1), TRUE); gtk_signal_connect_object(GTK_OBJECT(spinner1), "changed", GTK_SIGNAL_FUNC(get_value_1), NULL); gtk_widget_show(spinner1); gtk_table_attach(GTK_TABLE(table), spinner1, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 10, 10); label = gtk_label_new("Columns: "); gtk_widget_show(label); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 10, 10); adj = (GtkAdjustment *) gtk_adjustment_new(1.0, 1.0, 99.0, 1.0, 4.0, 0.0); spinner2 = gtk_spin_button_new(adj, 0, 0); gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spinner2), TRUE); gtk_widget_show(spinner2); gtk_table_attach(GTK_TABLE(table), spinner2, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 10, 10); gtk_signal_connect_object(GTK_OBJECT(spinner2), "changed", GTK_SIGNAL_FUNC(get_value_2), NULL); gtk_widget_show(table); button = gtk_button_new_with_label("Make it so!"); gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(destroy_table_wizard), GTK_OBJECT(dialog)); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, TRUE, FALSE, 5); gtk_widget_show(button); gtk_widget_show(dialog); } void message() { display_dialog("Message ...", "Text is to short to save"); } void open_file_dlg() { GtkWidget *dialog; GtkFileFilter *filter_all = gtk_file_filter_new(); GtkFileFilter *filter_html = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter_all, "*"); gtk_file_filter_set_name(filter_all, "All Files"); gtk_file_filter_add_pattern(filter_html, "*html"); gtk_file_filter_set_name(filter_html, "HTML Files"); dialog = gtk_file_chooser_dialog_new("Open File", GTK_WINDOW(main_window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter_all); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter_html); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; char *directory; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); directory = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog)); _open_file_ok(filename); g_free(filename); } gtk_widget_destroy(dialog); } void save_file_dlg(struct document *document) { GtkWidget *dialog; if (!document) document = (g_list_nth (documents, gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook_main))))->data; dialog = gtk_file_chooser_dialog_new("Save File As...", GTK_WINDOW(main_window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; char *directory; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); directory = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog)); document->filename = g_string_assign(document->filename, filename); save_file_ok(document); g_free(filename); } gtk_widget_destroy(dialog); } void close_body_dialog(GtkWidget * widget, gpointer data) { gtk_grab_remove(GTK_WIDGET(data)); gtk_widget_destroy(GTK_WIDGET(data)); } void body_dialog() { GtkWidget *button; GtkWidget *hbox; GtkWidget *hbox_1; if (rendered()) return; body_elements.dialog = gtk_dialog_new(); gtk_signal_connect(GTK_OBJECT(body_elements.dialog), "destroy", GTK_SIGNAL_FUNC(close_body_dialog), body_elements.dialog); gtk_window_set_title(GTK_WINDOW(body_elements.dialog), "Body"); gtk_window_position(GTK_WINDOW(body_elements.dialog), GTK_WIN_POS_CENTER); gtk_container_border_width(GTK_CONTAINER(body_elements.dialog), 5); hbox = gtk_vbox_new(TRUE, TRUE); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(body_elements.dialog)->vbox), hbox, TRUE, TRUE, 0); /* TITLE */ entry_in_frame("Title", &body_elements.title); gtk_box_pack_start(GTK_BOX(hbox), body_elements.title.frame, TRUE, TRUE, 0); /* BGCOLOR */ entry_in_frame("Background Color", &body_elements.bgcolor); gtk_box_pack_start(GTK_BOX(hbox), body_elements.bgcolor.frame, TRUE, TRUE, 0); /* TEXT */ entry_in_frame("Text Color", &body_elements.text); gtk_box_pack_start(GTK_BOX(hbox), body_elements.text.frame, TRUE, TRUE, 0); /* LINK */ entry_in_frame("Link Color", &body_elements.link); gtk_box_pack_start(GTK_BOX(hbox), body_elements.link.frame, TRUE, TRUE, 0); /* VLINK */ entry_in_frame("Visited Link Color", &body_elements.vlink); gtk_box_pack_start(GTK_BOX(hbox), body_elements.vlink.frame, TRUE, TRUE, 0); /* ALINK */ entry_in_frame("Active Link Color", &body_elements.alink); gtk_box_pack_start(GTK_BOX(hbox), body_elements.alink.frame, TRUE, TRUE, 0); /*BACKGROUD IMAGE */ hbox_1 = entry_in_frame("Background Image", &body_elements.background); gtk_box_pack_start(GTK_BOX(hbox), body_elements.background.frame, TRUE, TRUE, 5); button = gtk_button_new_with_label("Browse Image"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(body_img_function), NULL); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(hbox_1), button, FALSE, FALSE, 50); gtk_widget_show(button); /* GENERATOR TAG */ body_elements.insert_generator = gtk_check_button_new_with_label ("Insert "); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(body_elements.insert_generator), FALSE, FALSE, 0); gtk_widget_show(body_elements.insert_generator); /*DOCUMENT TYPE TAG */ body_elements.content_type = gtk_check_button_new_with_label ("Insert "); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(body_elements.content_type), FALSE, FALSE, 0); gtk_widget_show(body_elements.content_type); button = gtk_button_new_with_label("Make it so!"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(ok_body_dialog), body_elements.dialog); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(body_elements.dialog)-> action_area), button, FALSE, FALSE, 0); gtk_widget_show(button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); button = gtk_button_new_with_label("Cancel"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(close_body_dialog), body_elements.dialog); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(body_elements.dialog)-> action_area), button, FALSE, FALSE, 0); gtk_widget_show(button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(hbox); gtk_widget_show(body_elements.dialog); gtk_grab_add(body_elements.dialog); } void href_dialog() { GList *list; GtkWidget *dialog; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *button; GtkTextIter start, end; GtkTextBuffer *buffer = NULL; if (rendered()) return; list = NULL; list = g_list_append(list, "none"); list = g_list_append(list, "http://"); list = g_list_append(list, "ftp://"); list = g_list_append(list, "mailto:"); dialog = gtk_dialog_new(); gtk_signal_connect_object(GTK_OBJECT(dialog), "destroy", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT(dialog)); gtk_window_set_title(GTK_WINDOW(dialog), "Insert Hyperlink"); vbox = gtk_vbox_new(TRUE, TRUE); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), vbox, TRUE, TRUE, 0); hbox = gtk_hbox_new(TRUE, TRUE); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); combo_in_frame("Protocol", &hyperlink.protocol, list); gtk_box_pack_start(GTK_BOX(hbox), hyperlink.protocol.frame, TRUE, TRUE, 0); entry_in_frame("Link Destination", &hyperlink.link); gtk_box_pack_start(GTK_BOX(hbox), hyperlink.link.frame, TRUE, TRUE, 0); entry_in_frame("Link Name", &hyperlink.name); gtk_box_pack_start(GTK_BOX(vbox), hyperlink.name.frame, TRUE, TRUE, 0); buffer = get_text_buffer(); gtk_text_buffer_get_start_iter(buffer, &start); gtk_text_buffer_get_start_iter(buffer, &end); if (gtk_text_buffer_get_selection_bounds(buffer, &start, &end)) gtk_entry_set_text(GTK_ENTRY(hyperlink.name.entry), gtk_text_buffer_get_text(buffer, &start, &end, FALSE)); button = gtk_button_new_with_label("Make it so!"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(href_function_ok), dialog); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, FALSE, FALSE, 0); gtk_widget_show(button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); button = gtk_button_new_with_label("Cancel"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(close_body_dialog), dialog); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->action_area), button, FALSE, FALSE, 0); gtk_widget_show(button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(hbox); gtk_widget_show(vbox); gtk_grab_add(dialog); gtk_widget_show(dialog); } void close_font_dialog(GtkWidget * widget, gpointer data) { GtkTextBuffer *buffer = NULL; GtkTextMark *mark = NULL; GtkTextIter iter; buffer = get_text_buffer(); mark = gtk_text_buffer_get_mark(buffer, "font_dialog"); if (mark) gtk_text_buffer_get_iter_at_mark(buffer, &iter, mark); if (data) { gtk_text_buffer_insert(buffer, &iter, (gchar *) data, -1); gtk_text_iter_set_offset(&iter, gtk_text_iter_get_offset(&iter) - strlen((gchar *) data)); gtk_text_buffer_move_mark_by_name(buffer, "insert", &iter); gtk_text_iter_set_offset(&iter, gtk_text_iter_get_offset(&iter) + strlen((gchar *) data)); gtk_text_buffer_move_mark_by_name(buffer, "selection_bound", &iter); } gtk_grab_remove(GTK_WIDGET(font_options.dialog)); gtk_widget_destroy(GTK_WIDGET(font_options.dialog)); focus_text_view(); } void font_dialog() { GtkWidget *hbox; GtkWidget *vbox; GtkAdjustment *adj; GtkWidget *button; GtkWidget *frame; gchar *selected = NULL; GtkTextIter start, end; GtkTextBuffer *buffer = NULL; if (rendered()) return; buffer = get_text_buffer(); gtk_text_buffer_get_start_iter(buffer, &start); gtk_text_buffer_get_end_iter(buffer, &end); if (gtk_text_buffer_get_selection_bounds(buffer, &start, &end)) { selected = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); gtk_text_buffer_create_mark(buffer, "font_dialog", &start, FALSE); _DEBUG_ fprintf(stderr, "%s:selected:%s\n", PACKAGE, selected); clean_selected(); } font_options.dialog = gtk_dialog_new(); gtk_signal_connect(GTK_OBJECT(font_options.dialog), "destroy", GTK_SIGNAL_FUNC(close_body_dialog), font_options.dialog); gtk_window_set_title(GTK_WINDOW(font_options.dialog), "Font Options"); gtk_window_position(GTK_WINDOW(font_options.dialog), GTK_WIN_POS_CENTER); gtk_container_border_width(GTK_CONTAINER(font_options.dialog), 5); hbox = gtk_vbox_new(TRUE, TRUE); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(font_options.dialog)->vbox), hbox, TRUE, TRUE, 0); /* FONT FACE */ entry_in_frame("Font Face", &font_options.face); gtk_box_pack_start(GTK_BOX(hbox), font_options.face.frame, TRUE, TRUE, 0); /* FONT COLOR */ entry_in_frame("Font Color", &font_options.color); gtk_box_pack_start(GTK_BOX(hbox), font_options.color.frame, TRUE, TRUE, 0); /* FONT SIZE */ frame = gtk_frame_new("Font Size"); gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0); vbox = gtk_hbox_new(TRUE, TRUE); gtk_container_add(GTK_CONTAINER(frame), vbox); adj = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 7.0, 1.0, 0.0, 0.0); font_options.size = gtk_spin_button_new(adj, 0, 0); gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(font_options.size), TRUE); //gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (font_options.size), // GTK_SHADOW_ETCHED_IN); gtk_box_pack_start(GTK_BOX(vbox), font_options.size, TRUE, TRUE, 0); gtk_widget_show(vbox); gtk_widget_show(frame); gtk_widget_show(font_options.size); gtk_widget_show(hbox); button = gtk_button_new_with_label("Make it so!"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(font_function_ok), selected); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(font_options.dialog)-> action_area), button, FALSE, FALSE, 0); gtk_widget_show(button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); button = gtk_button_new_with_label("Cancel"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(close_font_dialog), selected); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(font_options.dialog)-> action_area), button, FALSE, FALSE, 0); gtk_widget_show(button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(font_options.dialog); gtk_grab_add(font_options.dialog); } void help_about_menu(GtkWidget * widget) { GtkWidget *label; GtkWidget *button; GtkWidget *about; GtkWidget *hbox; GtkWidget *vbox; char version[256]; char endian[64]; about = gtk_dialog_new(); gtk_signal_connect(GTK_OBJECT(about), "destroy", GTK_SIGNAL_FUNC(ungrab_message), NULL); gtk_window_set_title(GTK_WINDOW(about), "About erwin"); gtk_container_border_width(GTK_CONTAINER(about), 0); button = gtk_button_new_with_label("Make it so!"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(close_message_dialog), about); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(about)->action_area), button, FALSE, FALSE, 0); gtk_widget_grab_default(button); gtk_widget_show(button); hbox = gtk_hbox_new(FALSE, 5); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(about)->vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); label = gtk_image_new_from_pixbuf(gdk_pixbuf_new_from_xpm_data((const char **) logo_new1_xpm)); gtk_misc_set_padding(GTK_MISC(label), 10, 10); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); vbox = gtk_vbox_new(TRUE, 5); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 2); gtk_widget_show(vbox); label = gtk_label_new(PACKAGE " Release " VERSION " - really simple html editor\n" "The \"" RELEASE_NAME "\" - Release\n" PACKAGE " comes with ABSOLUTELY NO WARRANTY\nfor details read the license."); gtk_misc_set_padding(GTK_MISC(label), 2, 2); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); gtk_widget_show(label); label = gtk_label_new("Copyright (C) 1999 David Vogler\n" "Copyright (C) 1999-2005 Adrian Reber"); gtk_misc_set_padding(GTK_MISC(label), 1, 1); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); gtk_widget_show(label); label = gtk_label_new("Homepage: http://lisas.de/erwin/\n" "Comments and patches to adrian@lisas.de"); gtk_misc_set_padding(GTK_MISC(label), 2, 2); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); gtk_widget_show(label); label = gtk_label_new("The name " PACKAGE " means absolutely nothing.\nNot even a recursive acronym.\n"); gtk_misc_set_padding(GTK_MISC(label), 1, 1); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); gtk_widget_show(label); vbox = gtk_vbox_new(TRUE, 5); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(about)->vbox), vbox, TRUE, TRUE, 2); gtk_widget_show(vbox); #ifdef WORDS_BIGENDIAN strcpy(endian, "on a big endian machine"); #else strcpy(endian, "on a little endian machine"); #endif /* WORDS_BIGENDIAN */ snprintf(version, 254, "This is %s-%s compiled with GTK-%d.%d.%d and LIBXML-%s\n%s", PACKAGE, VERSION, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, LIBXML_DOTTED_VERSION, endian); label = gtk_label_new(version); gtk_misc_set_padding(GTK_MISC(label), 1, 1); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); gtk_widget_show(label); gtk_widget_show(about); gtk_grab_add(about); }