X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fmathml_editor%2Ftest%2FguiGTK.c;h=306ec67facf52439422a7797db4c85984c9153bb;hb=caab26f85122e0040555139c48a9111a0b2b9fff;hp=88b85f8b585145fc5ded90c713aa3cdd37690996;hpb=6bb809fdd7a94a55031dbb50f5510539aae13b28;p=helm.git diff --git a/helm/DEVEL/mathml_editor/test/guiGTK.c b/helm/DEVEL/mathml_editor/test/guiGTK.c index 88b85f8b5..306ec67fa 100644 --- a/helm/DEVEL/mathml_editor/test/guiGTK.c +++ b/helm/DEVEL/mathml_editor/test/guiGTK.c @@ -35,31 +35,31 @@ static GtkWidget* window; static GtkWidget* main_area; static GtkWidget* scrolled_area; -static GtkWidget* status_bar; static GtkMenuItem* anti_aliasing_item; static GtkMenuItem* transparency_item; -static GdkCursor* normal_cursor; -static GdkCursor* link_cursor; +static gpointer context = NULL; static gchar* doc_name = NULL; +static GdomeElement* first_selected = NULL; static GdomeElement* root_selected = NULL; -static guint statusbar_context; - static void create_widget_set(gpointer); static GtkWidget* get_main_menu(void); static void file_open(GtkWidget*, gpointer); static void file_re_open(GtkWidget*, gpointer); static void file_close(GtkWidget*, gpointer); +static void file_output_tex(GtkWidget*, gpointer); static void options_font_manager(GtkWidget*, FontManagerId); static void options_set_font_size(GtkWidget*, gpointer); static void options_change_font_size(GtkWidget*, gboolean); static void options_verbosity(GtkWidget*, guint); static void options_anti_aliasing(GtkWidget*, gpointer); static void options_transparency(GtkWidget*, gpointer); -static void selection_delete(GtkWidget*, gpointer); -static void selection_parent(GtkWidget*, gpointer); -static void selection_reset(GtkWidget*, gpointer); +static void edit_delete_selection(GtkWidget*, gpointer); +static void edit_select_parent(GtkWidget*, gpointer); +static void edit_reset_selection(GtkWidget*, gpointer); +static void edit_reset(GtkWidget*, gpointer); +static void edit_insert(GtkWidget*, gpointer); static void help_about(GtkWidget*, gpointer); static GtkItemFactoryEntry menu_items[] = { @@ -67,13 +67,17 @@ static GtkItemFactoryEntry menu_items[] = { { "/File/_Open...", "O", file_open, 0, NULL }, { "/File/_Reopen", NULL, file_re_open, 0, NULL }, { "/File/_Close", "W", file_close, 0, NULL }, + { "/File/Output _TeX", NULL, file_output_tex, 0, NULL }, { "/File/sep1", NULL, NULL, 0, "" }, { "/File/_Quit", "Q", gtk_main_quit, 0, NULL }, - { "/_Selection", NULL, NULL, 0, "" }, - { "/Selection/Reset", NULL, selection_reset, 0, NULL }, - { "/Selection/Delete", NULL, selection_delete, 0, NULL }, - { "/Selection/Select Parent", NULL, selection_parent, 0, NULL }, + { "/_Edit", NULL, NULL, 0, "" }, + { "/Edit/Reset Selection", NULL, edit_reset_selection, 0, NULL }, + { "/Edit/Delete Selection", NULL, edit_delete_selection, 0, NULL }, + { "/Edit/Select Parent", NULL, edit_select_parent, 0, NULL }, + { "/Edit/sep1", NULL, NULL, 0, "" }, + { "/Edit/_Reset", NULL, edit_reset, 0, NULL }, + { "/Edit/Insert...", "I", edit_insert, 0, NULL }, { "/_Options", NULL, NULL, 0, "" }, { "/Options/Default _Font Size", NULL, NULL, 0, "" }, @@ -134,7 +138,7 @@ load_error_msg(const char* name) } void -GUI_init(int* argc, char*** argv, char* title, guint width, guint height, gpointer context) +GUI_init(int* argc, char*** argv, char* title, guint width, guint height, gpointer c) { gtk_init(argc, argv); @@ -146,15 +150,30 @@ GUI_init(int* argc, char*** argv, char* title, guint width, guint height, gpoint gtk_widget_show(window); - normal_cursor = gdk_cursor_new(GDK_TOP_LEFT_ARROW); - link_cursor = gdk_cursor_new(GDK_HAND2); - + context = c; /*edit_timeout_id = gtk_timeout_add(400, edit_timeout, context);*/ } void GUI_uninit() { + GdomeException exc = 0; + + if (first_selected != NULL) + { + gdome_el_unref(first_selected, &exc); + g_assert(exc == 0); + first_selected = NULL; + } + + if (root_selected != NULL) + { + gdome_el_unref(root_selected, &exc); + g_assert(exc == 0); + root_selected = NULL; + } + + context = NULL; } int @@ -199,9 +218,6 @@ GUI_unload_document() if (doc_name != NULL) g_free(doc_name); doc_name = NULL; - - gtk_statusbar_pop(GTK_STATUSBAR(status_bar), statusbar_context); - gtk_statusbar_push(GTK_STATUSBAR(status_bar), statusbar_context, ""); } void @@ -286,6 +302,13 @@ file_open(GtkWidget* widget, gpointer data) gtk_widget_show (fs); } +static void +file_output_tex(GtkWidget* widget, gpointer data) +{ + g_assert(context != NULL); + edit_output_tex(context); +} + static void options_font_manager(GtkWidget* widget, FontManagerId id) { @@ -314,7 +337,7 @@ options_verbosity(GtkWidget* widget, guint level) } static void -selection_delete(GtkWidget* widget, gpointer data) +edit_delete_selection(GtkWidget* widget, gpointer data) { if (root_selected != NULL) { @@ -330,7 +353,7 @@ selection_delete(GtkWidget* widget, gpointer data) } static void -selection_parent(GtkWidget* widget, gpointer data) +edit_select_parent(GtkWidget* widget, gpointer data) { if (root_selected != NULL) { @@ -340,23 +363,75 @@ selection_parent(GtkWidget* widget, gpointer data) gdome_el_unref(root_selected, &exc); g_assert(exc == 0); root_selected = parent; - gtk_math_view_set_selection(GTK_MATH_VIEW(main_area), root_selected); + /* gtk_math_view_set_selection(GTK_MATH_VIEW(main_area), root_selected); */ } } static void -selection_reset(GtkWidget* widget, gpointer data) +edit_reset_selection(GtkWidget* widget, gpointer data) { if (root_selected != NULL) { GdomeException exc = 0; - gtk_math_view_reset_selection(GTK_MATH_VIEW(main_area), root_selected); + /* gtk_math_view_reset_selection(GTK_MATH_VIEW(main_area), root_selected); */ gdome_el_unref(root_selected, &exc); g_assert(exc == 0); root_selected = NULL; } } +static void +edit_reset(GtkWidget* widget, gpointer data) +{ + g_assert(context != NULL); + edit_reset_tex(context); +} + +static void +insert_tex(GtkWidget* widget, GtkEntry* entry) +{ + gchar* text; + g_return_if_fail(entry != NULL); + + text = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); + edit_push_string(context, text); + g_free(text); +} + +static void +edit_insert(GtkWidget* widget, gpointer data) +{ + GtkWidget* dialog; + GtkWidget* entry; + GtkWidget* ok; + GtkWidget* cancel; + + dialog = gtk_dialog_new(); + entry = gtk_entry_new(); + ok = gtk_button_new_with_label("OK"); + cancel = gtk_button_new_with_label("Cancel"); + + gtk_signal_connect (GTK_OBJECT (ok), "clicked", + GTK_SIGNAL_FUNC (insert_tex), (gpointer) entry); + + gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", + GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); + + gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", + GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); + + gtk_signal_connect_object (GTK_OBJECT (cancel), "clicked", + GTK_SIGNAL_FUNC (gtk_widget_destroy), (gpointer) dialog); + + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), 5); + + gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), entry); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), ok); + gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), cancel); + + gtk_widget_show_all (dialog); +} + static void help_about(GtkWidget* widget, gpointer data) { @@ -365,7 +440,7 @@ help_about(GtkWidget* widget, gpointer data) GtkWidget* ok; dialog = gtk_dialog_new(); - label = gtk_label_new("\n MathML Viewer \n Copyright (C) 2000-2003 Luca Padovani \n"); + label = gtk_label_new("\n MathML Editor \n Copyright (C) 2003 Luca Padovani \n"); ok = gtk_button_new_with_label("Close"); gtk_signal_connect_object (GTK_OBJECT (ok), "clicked", @@ -379,7 +454,7 @@ help_about(GtkWidget* widget, gpointer data) } static void -change_default_font_size(GtkSpinButton* widget, GtkSpinButton* spin) +change_default_font_size(GtkWidget* widget, GtkSpinButton* spin) { g_return_if_fail(spin != NULL); gtk_math_view_set_font_size( GTK_MATH_VIEW(main_area), gtk_spin_button_get_value_as_int(spin)); @@ -436,97 +511,75 @@ options_set_font_size(GtkWidget* widget, gpointer data) gtk_widget_show_all (dialog); } -#if 0 -#if defined(HAVE_GMETADOM) static void -element_changed(GtkMathView* math_view, GdomeElement* elem) +select_begin(GtkMathView* math_view, GdomeElement* first, gint state) { - GdomeDOMString* link = NULL; - - g_return_if_fail(math_view != NULL); - g_return_if_fail(GTK_IS_MATH_VIEW(math_view)); - -/* printf("pointer is on %p\n", elem); */ - - link = find_hyperlink(elem, XLINK_NS_URI, "href"); - if (link != NULL) - gdk_window_set_cursor(GTK_WIDGET(math_view)->window, link_cursor); - else - gdk_window_set_cursor(GTK_WIDGET(math_view)->window, normal_cursor); + GdomeException exc = 0; - if (link != NULL) - gdome_str_unref(link); -} -#endif -#endif - -static void -selection_changed(GtkMathView* math_view, GdomeElement* first, GdomeElement* last) -{ g_return_if_fail(math_view != NULL); g_return_if_fail(GTK_IS_MATH_VIEW(math_view)); g_return_if_fail(first != NULL); -/* printf("selection changed %p %p\n", first, last); */ + gtk_math_view_freeze(math_view); - if (last != NULL) + if (root_selected != NULL) { - GdomeException exc = 0; + gtk_math_view_unselect(math_view, root_selected); + gdome_el_unref(root_selected, &exc); + g_assert(exc == 0); + } - if (root_selected != NULL) - { - gdome_el_unref(root_selected, &exc); - g_assert(exc == 0); - } + root_selected = first_selected = find_element_with_ref(first); - root_selected = find_common_ancestor(first, last); -/* printf("selecting root %p\n", first, last, root_selected); */ - gtk_math_view_set_selection(math_view, root_selected); + if (root_selected != NULL) + { + gtk_math_view_select(math_view, root_selected); + gdome_el_ref(root_selected, &exc); g_assert(exc == 0); } + + gtk_math_view_thaw(math_view); } -#if 0 -#if defined(HAVE_GMETADOM) static void -clicked(GtkMathView* math_view, GdomeElement* elem) +select_over(GtkMathView* math_view, GdomeElement* elem, gint state) { - GdomeException exc; - GdomeDOMString* name; - GdomeDOMString* ns_uri; - GdomeElement* p; + GdomeElement* new_selected = NULL; + GdomeException exc = 0; g_return_if_fail(math_view != NULL); + g_return_if_fail(GTK_IS_MATH_VIEW(math_view)); + g_return_if_fail(elem != NULL); - /* printf("clicked on %p\n", elem); */ + if (first_selected == NULL || elem == NULL) + new_selected = NULL; + else + new_selected = find_common_ancestor_with_ref(first_selected, elem); - if (elem != NULL) + if (new_selected != root_selected) { - GdomeElement* action; - GdomeDOMString* href = find_hyperlink(elem, XLINK_NS_URI, "href"); - if (href != NULL) - { -/* printf("hyperlink %s\n", href->str); */ - gdome_str_unref(href); - } - - action = find_self_or_ancestor(elem, MATHML_NS_URI, "maction"); -/* printf("action? %p\n", action); */ - if (action != NULL) + gtk_math_view_freeze(math_view); + if (root_selected != NULL) { - gtk_math_view_freeze(math_view); - action_toggle(action); - gtk_math_view_thaw(math_view); - gdome_el_unref(action, &exc); + gtk_math_view_unselect(math_view, root_selected); + gdome_el_unref(root_selected, &exc); g_assert(exc == 0); } + root_selected = new_selected; + if (root_selected != NULL) + gtk_math_view_select(math_view, root_selected); + gtk_math_view_thaw(math_view); } + else if (new_selected != NULL) + { + gdome_el_unref(new_selected, &exc); + g_assert(exc == 0); + } + } -#endif -#endif static gboolean -key_press_event(gpointer context, +key_press_event(gpointer c, GdkEventKey* event, GtkWidget* widget) { @@ -536,36 +589,16 @@ key_press_event(gpointer context, if (event->type != GDK_KEY_PRESS) return FALSE; - switch (event->keyval) { - case GDK_Up: - case GDK_KP_Up: - break; - case GDK_Down: - case GDK_KP_Down: - break; - case GDK_Left: - case GDK_KP_Left: - break; - case GDK_Right: - case GDK_KP_Right: - break; - case GDK_Page_Up: - case GDK_KP_Page_Up: - break; - case GDK_Page_Down: - case GDK_KP_Page_Down: - break; - case GDK_Home: - case GDK_KP_Home: - break; - case GDK_End: - case GDK_KP_End: - break; - case GDK_BackSpace: push_char(context, event->keyval); break; - default: - if (event->keyval < 0x80) push_char(context, event->keyval); - return FALSE; - } + switch (event->keyval) + { + case GDK_BackSpace: + edit_drop(context, event->state & GDK_MOD1_MASK); + break; + default: + if ((event->state & (~GDK_SHIFT_MASK)) == 0 && event->keyval < 0x80) + edit_push_char(context, event->keyval); + return FALSE; + } return TRUE; } @@ -590,33 +623,19 @@ create_widget_set(gpointer context) //gtk_math_view_set_log_verbosity(GTK_MATH_VIEW(main_area), 3); -#if 0 - gtk_signal_connect_object (GTK_OBJECT (main_area), - "selection_changed", GTK_SIGNAL_FUNC (selection_changed), - (gpointer) main_area); - gtk_signal_connect_object (GTK_OBJECT (main_area), - "element_changed", GTK_SIGNAL_FUNC (element_changed), + "select_begin", GTK_SIGNAL_FUNC (select_begin), (gpointer) main_area); gtk_signal_connect_object (GTK_OBJECT (main_area), - "action_changed", GTK_SIGNAL_FUNC (action_changed), - (gpointer) main_area); - - gtk_signal_connect_object (GTK_OBJECT (main_area), - "clicked", GTK_SIGNAL_FUNC(clicked), + "select_over", GTK_SIGNAL_FUNC (select_over), (gpointer) main_area); -#endif gtk_signal_connect_object (GTK_OBJECT(window), "key_press_event", GTK_SIGNAL_FUNC(key_press_event), context); - gtk_widget_add_events(GTK_WIDGET(main_area), - GDK_BUTTON_PRESS_MASK - | GDK_BUTTON_RELEASE_MASK - | GDK_POINTER_MOTION_MASK - | GDK_KEY_PRESS_MASK); + gtk_widget_add_events(GTK_WIDGET(main_area), GDK_KEY_PRESS_MASK); scrolled_area = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_area), @@ -626,71 +645,11 @@ create_widget_set(gpointer context) gtk_container_add(GTK_CONTAINER(scrolled_area), main_area); gtk_box_pack_start(GTK_BOX(main_vbox), scrolled_area, TRUE, TRUE, 0); - status_bar = gtk_statusbar_new(); - gtk_widget_show(status_bar); - gtk_box_pack_start(GTK_BOX(main_vbox), status_bar, FALSE, TRUE, 0); - statusbar_context = gtk_statusbar_get_context_id(GTK_STATUSBAR(status_bar), "filename"); - - gtk_widget_show(main_vbox); - - if (gtk_math_view_get_anti_aliasing(GTK_MATH_VIEW(main_area))) - gtk_menu_item_activate(anti_aliasing_item); -} - -#if 0 -static void -create_widget_set() -{ - GtkWidget* main_vbox; - GtkWidget* menu_bar; - - main_vbox = gtk_vbox_new(FALSE, 1); - gtk_container_border_width(GTK_CONTAINER(main_vbox), 1); - gtk_container_add(GTK_CONTAINER(window), main_vbox); - gtk_widget_show(main_vbox); - - menu_bar = get_main_menu(); - gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0); - gtk_widget_show(menu_bar); - - main_area = gtk_math_view_new(NULL, NULL); - gtk_widget_show(main_area); - - gtk_signal_connect_object (GTK_OBJECT (main_area), - "selection_changed", GTK_SIGNAL_FUNC (selection_changed), - (gpointer) main_area); - - gtk_signal_connect_object (GTK_OBJECT (main_area), - "element_changed", GTK_SIGNAL_FUNC (element_changed), - (gpointer) main_area); - - gtk_signal_connect_object (GTK_OBJECT (main_area), - "clicked", GTK_SIGNAL_FUNC(clicked), - (gpointer) main_area); - - gtk_widget_add_events(GTK_WIDGET(main_area), - GDK_BUTTON_PRESS_MASK - | GDK_BUTTON_RELEASE_MASK - | GDK_POINTER_MOTION_MASK); - - scrolled_area = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_area), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_widget_show(scrolled_area); - gtk_container_add(GTK_CONTAINER(scrolled_area), main_area); - gtk_box_pack_start(GTK_BOX(main_vbox), scrolled_area, TRUE, TRUE, 0); - - status_bar = gtk_statusbar_new(); - gtk_widget_show(status_bar); - gtk_box_pack_start(GTK_BOX(main_vbox), status_bar, FALSE, TRUE, 0); - statusbar_context = gtk_statusbar_get_context_id(GTK_STATUSBAR(status_bar), "filename"); - gtk_widget_show(main_vbox); if (gtk_math_view_get_anti_aliasing(GTK_MATH_VIEW(main_area))) gtk_menu_item_activate(anti_aliasing_item); } -#endif GtkWidget* get_main_menu()