X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-syntax-window.c;h=86d87bb92b22a4f7a5086215b8ba7e26eb8e4745;hb=d112adc6bdbab5593d533fdc8853e80a2cb358e7;hp=7de62913482258153618bf7be23c41597958f594;hpb=4a5214467725248b62062664ce6d7fab26e8517b;p=pspp-builds.git diff --git a/src/ui/gui/psppire-syntax-window.c b/src/ui/gui/psppire-syntax-window.c index 7de62913..86d87bb9 100644 --- a/src/ui/gui/psppire-syntax-window.c +++ b/src/ui/gui/psppire-syntax-window.c @@ -23,10 +23,12 @@ #include #include +#include "psppire.h" #include "psppire-syntax-window.h" #include "psppire-data-window.h" #include "psppire-window-register.h" +#include "psppire.h" #include "about.h" #include "psppire-syntax-window.h" #include "syntax-editor-source.h" @@ -41,6 +43,10 @@ static void psppire_syntax_window_base_init (PsppireSyntaxWindowClass *class static void psppire_syntax_window_class_init (PsppireSyntaxWindowClass *class); static void psppire_syntax_window_init (PsppireSyntaxWindow *syntax_editor); + +static void psppire_syntax_window_iface_init (PsppireWindowIface *iface); + + GType psppire_syntax_window_get_type (void) { @@ -61,9 +67,20 @@ psppire_syntax_window_get_type (void) (GInstanceInitFunc) psppire_syntax_window_init, }; + static const GInterfaceInfo window_interface_info = + { + (GInterfaceInitFunc) psppire_syntax_window_iface_init, + NULL, + NULL + }; + psppire_syntax_window_type = - g_type_register_static (PSPPIRE_WINDOW_TYPE, "PsppireSyntaxWindow", + g_type_register_static (PSPPIRE_TYPE_WINDOW, "PsppireSyntaxWindow", &psppire_syntax_window_info, 0); + + g_type_add_interface_static (psppire_syntax_window_type, + PSPPIRE_TYPE_WINDOW_MODEL, + &window_interface_info); } return psppire_syntax_window_type; @@ -248,7 +265,6 @@ save_editor_to_file (PsppireSyntaxWindow *se, { gchar *msg = g_strdup_printf (_("Saved file \"%s\""), filename); gtk_statusbar_push (GTK_STATUSBAR (se->sb), se->text_context, msg); - psppire_window_set_filename (PSPPIRE_WINDOW (se), filename); gtk_text_buffer_set_modified (buffer, FALSE); g_free (msg); } @@ -256,72 +272,14 @@ save_editor_to_file (PsppireSyntaxWindow *se, return result; } -/* If the buffer's modified flag is set, then save it, and close the window. - Otherwise just close the window. -*/ -static void -save_if_modified (PsppireSyntaxWindow *se) -{ - if ( TRUE == gtk_text_buffer_get_modified (se->buffer)) - { - gint response; - GtkWidget *dialog; - - const gchar *filename = psppire_window_get_filename (PSPPIRE_WINDOW (se)); - - g_return_if_fail (filename != NULL); - - dialog = - gtk_message_dialog_new (GTK_WINDOW (se), - GTK_DIALOG_MODAL, - GTK_MESSAGE_QUESTION, - GTK_BUTTONS_NONE, - _("Save contents of syntax editor to %s?"), - filename); - - gtk_dialog_add_button (GTK_DIALOG (dialog), - GTK_STOCK_YES, - GTK_RESPONSE_ACCEPT); - - gtk_dialog_add_button (GTK_DIALOG (dialog), - GTK_STOCK_NO, - GTK_RESPONSE_REJECT); - - gtk_dialog_add_button (GTK_DIALOG (dialog), - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL); - - response = gtk_dialog_run (GTK_DIALOG (dialog)); - - gtk_widget_destroy (dialog); - - if ( response == GTK_RESPONSE_ACCEPT ) - { - GError *err = NULL; - - if ( ! save_editor_to_file (se, filename, &err) ) - { - msg (ME, err->message); - g_error_free (err); - } - } - - if ( response == GTK_RESPONSE_CANCEL ) - return ; - } - - gtk_widget_destroy (GTK_WIDGET (se)); -} /* Callback for the File->SaveAs menuitem */ static void -on_syntax_save_as (GtkMenuItem *menuitem, gpointer user_data) +syntax_save_as (PsppireWindow *se) { GtkFileFilter *filter; gint response; - PsppireSyntaxWindow *se = PSPPIRE_SYNTAX_WINDOW (user_data); - GtkWidget *dialog = gtk_file_chooser_dialog_new (_("Save Syntax"), GTK_WINDOW (se), @@ -351,7 +309,7 @@ on_syntax_save_as (GtkMenuItem *menuitem, gpointer user_data) char *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog) ); - if ( ! save_editor_to_file (se, filename, &err) ) + if ( ! save_editor_to_file (PSPPIRE_SYNTAX_WINDOW (se), filename, &err) ) { msg ( ME, err->message ); g_error_free (err); @@ -366,18 +324,16 @@ on_syntax_save_as (GtkMenuItem *menuitem, gpointer user_data) /* Callback for the File->Save menuitem */ static void -on_syntax_save (GtkMenuItem *menuitem, gpointer user_data) +syntax_save (PsppireWindow *se) { - PsppireSyntaxWindow *se = PSPPIRE_SYNTAX_WINDOW (user_data); - const gchar *filename = psppire_window_get_filename (PSPPIRE_WINDOW (se)); - + const gchar *filename = psppire_window_get_filename (se); if ( filename == NULL ) - on_syntax_save_as (menuitem, se); + syntax_save_as (se); else { GError *err = NULL; - save_editor_to_file (se, filename, &err); + save_editor_to_file (PSPPIRE_SYNTAX_WINDOW (se), filename, &err); if ( err ) { msg (ME, err->message); @@ -391,21 +347,9 @@ on_syntax_save (GtkMenuItem *menuitem, gpointer user_data) static gboolean on_quit (GtkMenuItem *menuitem, gpointer user_data) { - PsppireSyntaxWindow *se = PSPPIRE_SYNTAX_WINDOW (user_data); - save_if_modified (se); - return FALSE; -} - - -/* Callback for the "delete" action (clicking the x on the top right - hand corner of the window) */ -static gboolean -on_delete (GtkWidget *w, GdkEvent *event, gpointer user_data) -{ - PsppireSyntaxWindow *se = PSPPIRE_SYNTAX_WINDOW (user_data); + psppire_quit (); - save_if_modified (se); - return TRUE; + return FALSE; } @@ -451,22 +395,10 @@ open_syntax_window (GtkMenuItem *menuitem, gpointer parent) GtkWidget *se = psppire_syntax_window_new (); - if ( psppire_syntax_window_load_from_file (PSPPIRE_SYNTAX_WINDOW (se), file_name, NULL) ) -#if RECENT_LISTS_AVAILABLE - { - GtkRecentManager *manager = gtk_recent_manager_get_default(); - gchar *uri = g_filename_to_uri (file_name, NULL, NULL); - - gtk_recent_manager_remove_item (manager, uri, NULL); - if ( ! gtk_recent_manager_add_item (manager, uri)) - g_warning ("Could not add item %s to recent list\n",uri); - - g_free (uri); - } -#else - ; -#endif - gtk_widget_show (se); + if ( psppire_window_load (PSPPIRE_WINDOW (se), file_name) ) + gtk_widget_show (se); + else + gtk_widget_destroy (se); } gtk_widget_destroy (dialog); @@ -479,6 +411,13 @@ on_text_changed (GtkTextBuffer *buffer, PsppireSyntaxWindow *window) gtk_statusbar_pop (GTK_STATUSBAR (window->sb), window->text_context); } +static void +on_modified_changed (GtkTextBuffer *buffer, PsppireWindow *window) +{ + psppire_window_set_unsaved (window, gtk_text_buffer_get_modified (buffer)); +} + + extern struct source_stream *the_source_stream ; static void @@ -500,7 +439,10 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window) g_signal_connect (window->buffer, "changed", G_CALLBACK (on_text_changed), window); - // connect_help (xml); + g_signal_connect (window->buffer, "modified-changed", + G_CALLBACK (on_modified_changed), window); + + connect_help (xml); gtk_container_add (GTK_CONTAINER (window), box); @@ -517,83 +459,87 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window) gtk_widget_show_all (box); - g_signal_connect (get_object_assert (xml,"file_new_syntax"), + g_signal_connect (get_action_assert (xml,"file_new_syntax"), "activate", G_CALLBACK (create_syntax_window), NULL); - g_signal_connect (get_object_assert (xml,"file_open_syntax"), + g_signal_connect (get_action_assert (xml,"file_open_syntax"), "activate", G_CALLBACK (open_syntax_window), window); #if 0 - g_signal_connect (get_object_assert (xml,"file_new_data"), + g_signal_connect (get_action_assert (xml,"file_new_data"), "activate", G_CALLBACK (create_data_window), window); #endif - g_signal_connect (get_object_assert (xml,"help_about"), - "activate", - G_CALLBACK (about_new), - window); + { + GtkAction *abt = get_action_assert (xml, "help_about"); + g_object_set (abt, "stock-id", "gtk-about", NULL); + + g_signal_connect (abt, + "activate", + G_CALLBACK (about_new), + window); + } - g_signal_connect (get_object_assert (xml,"help_reference"), + g_signal_connect (get_action_assert (xml,"help_reference"), "activate", G_CALLBACK (reference_manual), NULL); - g_signal_connect (get_object_assert (xml, "file_save"), + g_signal_connect_swapped (get_action_assert (xml, "file_save"), "activate", - G_CALLBACK (on_syntax_save), + G_CALLBACK (syntax_save), window); - g_signal_connect (get_object_assert (xml, "file_save_as"), + g_signal_connect_swapped (get_action_assert (xml, "file_save_as"), "activate", - G_CALLBACK (on_syntax_save_as), + G_CALLBACK (syntax_save_as), window); - g_signal_connect (get_object_assert (xml,"file_quit"), + g_signal_connect (get_action_assert (xml,"file_quit"), "activate", G_CALLBACK (on_quit), window); - g_signal_connect (get_object_assert (xml,"run_all"), + g_signal_connect (get_action_assert (xml,"run_all"), "activate", G_CALLBACK (on_run_all), window); - g_signal_connect (get_object_assert (xml,"run_selection"), + g_signal_connect (get_action_assert (xml,"run_selection"), "activate", G_CALLBACK (on_run_selection), window); - g_signal_connect (get_object_assert (xml,"run_current_line"), + g_signal_connect (get_action_assert (xml,"run_current_line"), "activate", G_CALLBACK (on_run_current_line), window); - g_signal_connect (get_object_assert (xml,"run_to_end"), + g_signal_connect (get_action_assert (xml,"run_to_end"), "activate", G_CALLBACK (on_run_to_end), window); - g_signal_connect (get_object_assert (xml,"windows_minimise_all"), + g_signal_connect (get_action_assert (xml,"windows_minimise_all"), "activate", G_CALLBACK (psppire_window_minimise_all), NULL); - GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (xml, "uimanager1")); + + { + GtkUIManager *uim = GTK_UI_MANAGER (get_object_assert (xml, "uimanager1", GTK_TYPE_UI_MANAGER)); PSPPIRE_WINDOW (window)->menu = GTK_MENU_SHELL (gtk_ui_manager_get_widget (uim,"/ui/menubar2/windows/windows_minimise_all")->parent); - + } g_object_unref (xml); - - g_signal_connect (window, "delete-event", - G_CALLBACK (on_delete), window); } @@ -601,7 +547,8 @@ GtkWidget* psppire_syntax_window_new (void) { return GTK_WIDGET (g_object_new (psppire_syntax_window_get_type (), - "usage", PSPPIRE_WINDOW_USAGE_SYNTAX, + "filename", "Syntax", + "description", _("Syntax Editor"), NULL)); } @@ -609,35 +556,43 @@ psppire_syntax_window_new (void) /* Loads the buffer from the file called FILENAME */ -gboolean -psppire_syntax_window_load_from_file (PsppireSyntaxWindow *se, - const gchar *filename, - GError **err) +static gboolean +syntax_load (PsppireWindow *window, const gchar *filename) { gchar *text; GtkTextIter iter; + PsppireSyntaxWindow *sw = PSPPIRE_SYNTAX_WINDOW (window); - gchar *glibfilename = g_filename_from_utf8 (filename, -1, 0, 0, err); + gchar *glibfilename = g_filename_from_utf8 (filename, -1, 0, 0, NULL); if ( ! glibfilename ) return FALSE; /* FIXME: What if it's a very big file ? */ - if ( ! g_file_get_contents (glibfilename, &text, NULL, err) ) + if ( ! g_file_get_contents (glibfilename, &text, NULL, NULL) ) { g_free (glibfilename); return FALSE; } + g_free (glibfilename); - gtk_text_buffer_get_iter_at_line (se->buffer, &iter, 0); + gtk_text_buffer_get_iter_at_line (sw->buffer, &iter, 0); - gtk_text_buffer_insert (se->buffer, &iter, text, -1); + gtk_text_buffer_insert (sw->buffer, &iter, text, -1); - psppire_window_set_filename (PSPPIRE_WINDOW (se), filename); + psppire_window_set_filename (window, filename); - gtk_text_buffer_set_modified (se->buffer, FALSE); + gtk_text_buffer_set_modified (sw->buffer, FALSE); return TRUE; } + + +static void +psppire_syntax_window_iface_init (PsppireWindowIface *iface) +{ + iface->save = syntax_save; + iface->load = syntax_load; +}