From 36e9ae723b3caebaa7e58f58438913b174d57573 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 29 Oct 2018 08:45:10 +0100 Subject: Switch to "fancy" save window --- data/colloquium.gresource.xml | 1 + data/savepresentation.ui | 140 ++++++++++++++++++++++++++++++++++++++++++ src/narrative_window.c | 41 ++++++++----- 3 files changed, 167 insertions(+), 15 deletions(-) create mode 100644 data/savepresentation.ui diff --git a/data/colloquium.gresource.xml b/data/colloquium.gresource.xml index 819a966..307a437 100644 --- a/data/colloquium.gresource.xml +++ b/data/colloquium.gresource.xml @@ -4,6 +4,7 @@ sky.png menus.ui stylesheeteditor.ui + savepresentation.ui demo.sc demo.ss default.ss diff --git a/data/savepresentation.ui b/data/savepresentation.ui new file mode 100644 index 0000000..5597377 --- /dev/null +++ b/data/savepresentation.ui @@ -0,0 +1,140 @@ + + + + + + False + True + dialog + + + + False + vertical + 2 + + + False + end + + + gtk-cancel + True + True + True + True + + + True + True + 0 + + + + + gtk-save + True + True + True + True + + + True + True + 1 + + + + + False + False + 0 + + + + + True + False + vertical + 8 + + + True + False + save + True + False + False + False + + + False + True + 0 + + + + + Create/update private stylesheet for this presentation + True + True + False + True + True + + + False + True + 1 + + + + + Create/update default stylesheet for presentations in folder + True + True + False + True + True + radiobutton1 + + + False + True + 2 + + + + + Don't save stylesheet at all + True + True + False + True + True + radiobutton1 + + + False + True + 3 + + + + + False + True + 1 + + + + + + button2 + button1 + + + + + + diff --git a/src/narrative_window.c b/src/narrative_window.c index b287f61..123535d 100644 --- a/src/narrative_window.c +++ b/src/narrative_window.c @@ -99,15 +99,22 @@ static void update_toolbar(NarrativeWindow *nw) } +struct saveas_info +{ + NarrativeWindow *nw; + GtkWidget *filechooser; +}; + + static gint saveas_response_sig(GtkWidget *d, gint response, - NarrativeWindow *nw) + struct saveas_info *si) { - if ( response == GTK_RESPONSE_ACCEPT ) { + if ( response == 1 ) { /* hard-coded number in Glade file */ - GFile *file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(d)); + GFile *file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(si->filechooser)); - if ( save_presentation(nw->p, file) ) { - show_error(nw, _("Failed to save presentation")); + if ( save_presentation(si->nw->p, file) ) { + show_error(si->nw, _("Failed to save presentation")); } g_object_unref(file); @@ -115,6 +122,7 @@ static gint saveas_response_sig(GtkWidget *d, gint response, } gtk_widget_destroy(d); + free(si); return 0; } @@ -123,19 +131,22 @@ static gint saveas_response_sig(GtkWidget *d, gint response, static void saveas_sig(GSimpleAction *action, GVariant *parameter, gpointer vp) { GtkWidget *d; + GtkBuilder *builder; NarrativeWindow *nw = vp; + struct saveas_info *si; - d = gtk_file_chooser_dialog_new(_("Save Presentation"), - GTK_WINDOW(nw->window), - GTK_FILE_CHOOSER_ACTION_SAVE, - _("_Cancel"), GTK_RESPONSE_CANCEL, - _("_Save"), GTK_RESPONSE_ACCEPT, - NULL); - gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(d), - TRUE); + si = malloc(sizeof(struct saveas_info)); + if ( si == NULL ) return; - g_signal_connect(G_OBJECT(d), "response", - G_CALLBACK(saveas_response_sig), nw); + si->nw = nw; + + builder = gtk_builder_new_from_resource("/uk/me/bitwiz/Colloquium/savepresentation.ui"); + gtk_builder_add_callback_symbol(builder, "saveas_response_sig", + G_CALLBACK(saveas_response_sig)); + gtk_builder_connect_signals(builder, si); + d = GTK_WIDGET(gtk_builder_get_object(builder, "savepresentation")); + si->filechooser = GTK_WIDGET(gtk_builder_get_object(builder, "filechooser")); + gtk_window_set_transient_for(GTK_WINDOW(d), GTK_WINDOW(nw->window)); gtk_widget_show_all(d); } -- cgit v1.2.3