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

Reply via email to