Module: synfig Branch: genete_master Commit: 1e706e54c01cd6baae01b1199c8997c48345ed8c URL: http://synfig.git.sourceforge.net/git/gitweb.cgi?p=synfig;a=commit;h=1e706e54c01cd6baae01b1199c8997c48345ed8c
Author: gballintijn <gballint...@1f10aa63-cdf2-0310-b900-c93c546f37ac> Date: Sat Jun 20 11:59:12 2009 +0000 #2602803: "Patch: Improve UI on crash recovery dialog." Simplified version of the patch that Bombe added to SourceForge.net on 2009-02-15. Based on suggestions by Pabs, I cleaned up and shortened the code a bit, making it more consistent with surrounding code. git-svn-id: https://synfig.svn.sourceforge.net/svnroot/syn...@2383 1f10aa63-cdf2-0310-b900-c93c546f37ac --- synfig-studio/trunk/src/gtkmm/app.cpp | 41 +++++++++++++++++++--- synfig-studio/trunk/src/gtkmm/canvasview.cpp | 31 +++++++++++++++++ synfig-studio/trunk/src/synfigapp/uimanager.cpp | 27 +++++++++++++++ synfig-studio/trunk/src/synfigapp/uimanager.h | 14 ++++++++ 4 files changed, 107 insertions(+), 6 deletions(-) diff --git a/synfig-studio/trunk/src/gtkmm/app.cpp b/synfig-studio/trunk/src/gtkmm/app.cpp index ffca6fd..3099c44 100644 --- a/synfig-studio/trunk/src/gtkmm/app.cpp +++ b/synfig-studio/trunk/src/gtkmm/app.cpp @@ -322,6 +322,34 @@ class GlobalUIInterface : public synfigapp::UIInterface { public: + virtual Response confirmation(const std::string &title, + const std::string &primaryText, + const std::string &secondaryText, + const std::string &confirmPhrase, + const std::string &cancelPhrase, + Response defaultResponse) + { + Gtk::MessageDialog dialog( + primaryText, // Message + false, // Markup + Gtk::MESSAGE_WARNING, // Type + Gtk::BUTTONS_NONE, // Buttons + true // Modal + ); + + if (! title.empty()) + dialog.set_title(title); + if (! secondaryText.empty()) + dialog.set_secondary_text(secondaryText); + + dialog.add_button(cancelPhrase, RESPONSE_CANCEL); + dialog.add_button(confirmPhrase, RESPONSE_OK); + dialog.set_default_response(defaultResponse); + + dialog.show_all(); + return (Response) dialog.run(); + } + virtual Response yes_no(const std::string &title, const std::string &message,Response dflt=RESPONSE_YES) { Gtk::Dialog dialog( @@ -1290,12 +1318,13 @@ App::App(int *argc, char ***argv): if(auto_recover->recovery_needed()) { splash_screen.hide(); - if (get_ui_interface()->yes_no(_("Auto Recovery"), - _("Synfig Studio seems to have crashed\n" - "before you could save all your files.\n" - "Would you like to re-open those files\n" - "and recover your unsaved changes?")) == - synfigapp::UIInterface::RESPONSE_YES) + if (get_ui_interface()->confirmation("Crash Recovery", + _("Auto recovery file found"), + _("Synfig Studio seems to have crashed\n" + "before you could save all your files.\n" + "Recover unsaved changes?"), + _("Recover"), _("Ignore")) + == synfigapp::UIInterface::RESPONSE_OK) { int number_recovered; if(!auto_recover->recover(number_recovered)) diff --git a/synfig-studio/trunk/src/gtkmm/canvasview.cpp b/synfig-studio/trunk/src/gtkmm/canvasview.cpp index 72a3ed6..44c8340 100644 --- a/synfig-studio/trunk/src/gtkmm/canvasview.cpp +++ b/synfig-studio/trunk/src/gtkmm/canvasview.cpp @@ -248,6 +248,37 @@ public: //view->progressbar->set_fraction(0); } + virtual Response confirmation(const std::string &title, + const std::string &primaryText, + const std::string &secondaryText, + const std::string &confirmPhrase, + const std::string &cancelPhrase, + Response defaultResponse=RESPONSE_OK) + { + view->present(); + //while(studio::App::events_pending())studio::App::iteration(false); + Gtk::MessageDialog dialog( + *view, // Parent + primaryText, // Message + false, // Markup + Gtk::MESSAGE_WARNING, // Type + Gtk::BUTTONS_NONE, // Buttons + true // Modal + ); + + if (! title.empty()) + dialog.set_title(title); + if (! secondaryText.empty()) + dialog.set_secondary_text(secondaryText); + + dialog.add_button(cancelPhrase, RESPONSE_CANCEL); + dialog.add_button(confirmPhrase, RESPONSE_OK); + dialog.set_default_response(defaultResponse); + + dialog.show_all(); + return (Response) dialog.run(); + } + virtual Response yes_no(const std::string &title, const std::string &message,Response dflt=RESPONSE_YES) { view->present(); diff --git a/synfig-studio/trunk/src/synfigapp/uimanager.cpp b/synfig-studio/trunk/src/synfigapp/uimanager.cpp index 68a39a1..4259e70 100644 --- a/synfig-studio/trunk/src/synfigapp/uimanager.cpp +++ b/synfig-studio/trunk/src/synfigapp/uimanager.cpp @@ -49,6 +49,33 @@ using namespace synfigapp; /* === M E T H O D S ======================================================= */ UIInterface::Response +ConsoleUIInterface::confirmation(const std::string &title, const std::string &primaryText, + const std::string &secondaryText, const std::string &confirmPhrase, + const std::string &cancelPhrase, Response dflt) +{ + cout << title << ": " << primaryText << endl; + cout << secondaryText; + + if (dflt == RESPONSE_OK) + cout << "(" << confirmPhrase << "/" << cancelPhrase << ")" << endl; + else + cout << "(" << cancelPhrase << "/" << confirmPhrase << ")" << endl; + + string resp; + cin >> resp; + + if (dflt == RESPONSE_OK) + { + if (resp == cancelPhrase) + return RESPONSE_CANCEL; + return RESPONSE_OK; + } + if (resp == confirmPhrase) + return RESPONSE_OK; + return RESPONSE_CANCEL; +} + +UIInterface::Response ConsoleUIInterface::yes_no(const std::string &title, const std::string &message,Response dflt) { cout<<title<<": "<<message<<' '; diff --git a/synfig-studio/trunk/src/synfigapp/uimanager.h b/synfig-studio/trunk/src/synfigapp/uimanager.h index d5cfbb8..4162569 100644 --- a/synfig-studio/trunk/src/synfigapp/uimanager.h +++ b/synfig-studio/trunk/src/synfigapp/uimanager.h @@ -51,6 +51,9 @@ public: RESPONSE_OK=2 }; virtual ~UIInterface() { } + virtual Response confirmation(const std::string &title, const std::string &primaryText, + const std::string &secondaryText, const std::string &confirmPhrase, + const std::string &cancelPhrase, Response dflt=RESPONSE_OK)=0; virtual Response yes_no(const std::string &title, const std::string &message,Response dflt=RESPONSE_YES)=0; virtual Response yes_no_cancel(const std::string &title, const std::string &message,Response dflt=RESPONSE_YES)=0; virtual Response ok_cancel(const std::string &title, const std::string &message,Response dflt=RESPONSE_OK)=0; @@ -59,6 +62,10 @@ public: class DefaultUIInterface : public UIInterface { public: + Response confirmation(const std::string &/*title*/, const std::string &/*primaryText*/, + const std::string &/*secondaryText*/, const std::string &/*confirmPhrase*/, + const std::string &/*cancelPhrase*/, Response dflt) + { return dflt; } Response yes_no(const std::string &/*title*/, const std::string &/*message*/,Response dflt) { return dflt; } Response yes_no_cancel(const std::string &/*title*/, const std::string &/*message*/,Response dflt) @@ -79,6 +86,10 @@ public: class ConfidentUIInterface : public UIInterface { public: + Response confirmation(const std::string &/*title*/, const std::string &/*primaryText*/, + const std::string &/*secondaryText*/, const std::string &/*confirmPhrase*/, + const std::string &/*cancelPhrase*/, Response /*dflt*/) + { return RESPONSE_OK; } Response yes_no(const std::string &/*title*/, const std::string &/*message*/,Response /*dflt*/) { return RESPONSE_YES; } Response yes_no_cancel(const std::string &/*title*/, const std::string &/*message*/,Response /*dflt*/) @@ -99,6 +110,9 @@ public: class ConsoleUIInterface : public UIInterface { public: + Response confirmation(const std::string &title, const std::string &primaryText, + const std::string &secondaryText, const std::string &confirmPhrase, + const std::string &cancelPhrase, Response dflt); Response yes_no(const std::string &title, const std::string &message,Response dflt); Response yes_no_cancel(const std::string &title, const std::string &message,Response dflt); Response ok_cancel(const std::string &title, const std::string &message,Response dflt); ------------------------------------------------------------------------------ Are you an open source citizen? Join us for the Open Source Bridge conference! Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250. Need another reason to go? 24-hour hacker lounge. Register today! http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org _______________________________________________ Synfig-devl mailing list Synfig-devl@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/synfig-devl