~ubuntu-branches/ubuntu/lucid/synfigstudio/lucid

« back to all changes in this revision

Viewing changes to src/gtkmm/app.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Stefano Zacchiroli
  • Date: 2010-01-26 11:20:50 UTC
  • mfrom: (1.1.5 upstream) (2.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20100126112050-e43u17c5zpc5hse4
Tags: 0.62.00-1
* QA upload
* Properly orphan the package (set Maintainer to QA, empty Uploaders)
* New upstream release
* Bump build-dep on (lib)synfig to most recent version
* Bump standards-version to 3.8.3, no changes needed
* Change section of the "-dbg" package to debug, thanks lintian

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
/*!     \file app.cpp
3
3
**      \brief writeme
4
4
**
5
 
**      $Id: app.cpp 2098 2008-10-14 21:00:21Z genete $
 
5
**      $Id$
6
6
**
7
7
**      \legal
8
8
**      Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
275
275
bool studio::App::single_threaded=false;
276
276
#endif
277
277
bool studio::App::restrict_radius_ducks=false;
 
278
bool studio::App::resize_imported_images=false;
278
279
String studio::App::custom_filename_prefix(DEFAULT_FILENAME_PREFIX);
279
280
int studio::App::preferred_x_size=480;
280
281
int studio::App::preferred_y_size=270;
281
282
String studio::App::predefined_size(DEFAULT_PREDEFINED_SIZE);
 
283
String studio::App::predefined_fps(DEFAULT_PREDEFINED_FPS);
 
284
float studio::App::preferred_fps=24.0;
282
285
#ifdef USE_OPEN_FOR_URLS
283
286
String studio::App::browser_command("open"); // MacOS only
284
287
#else
321
324
{
322
325
public:
323
326
 
 
327
        virtual Response confirmation(const std::string &title,
 
328
                        const std::string &primaryText,
 
329
                        const std::string &secondaryText,
 
330
                        const std::string &confirmPhrase,
 
331
                        const std::string &cancelPhrase,
 
332
                        Response defaultResponse)
 
333
        {
 
334
                Gtk::MessageDialog dialog(
 
335
                        primaryText,            // Message
 
336
                        false,                  // Markup
 
337
                        Gtk::MESSAGE_WARNING,   // Type
 
338
                        Gtk::BUTTONS_NONE,      // Buttons
 
339
                        true                    // Modal
 
340
                );
 
341
 
 
342
                if (! title.empty())
 
343
                        dialog.set_title(title);
 
344
                if (! secondaryText.empty())
 
345
                        dialog.set_secondary_text(secondaryText);
 
346
 
 
347
                dialog.add_button(cancelPhrase, RESPONSE_CANCEL);
 
348
                dialog.add_button(confirmPhrase, RESPONSE_OK);
 
349
                dialog.set_default_response(defaultResponse);
 
350
 
 
351
                dialog.show_all();
 
352
                return (Response) dialog.run();
 
353
        }
 
354
 
324
355
        virtual Response yes_no(const std::string &title, const std::string &message,Response dflt=RESPONSE_YES)
325
356
        {
326
357
                Gtk::Dialog dialog(
511
542
                        value=strprintf("%i",(int)App::restrict_radius_ducks);
512
543
                        return true;
513
544
                }
 
545
                if(key=="resize_imported_images")
 
546
                {
 
547
                        value=strprintf("%i",(int)App::resize_imported_images);
 
548
                        return true;
 
549
                }
514
550
                if(key=="browser_command")
515
551
                {
516
552
                        value=App::browser_command;
536
572
                        value=strprintf("%s",App::predefined_size.c_str());
537
573
                        return true;
538
574
                }
539
 
                
 
575
                if(key=="preferred_fps")
 
576
                {
 
577
                        value=strprintf("%f",App::preferred_fps);
 
578
                        return true;
 
579
                }
 
580
                if(key=="predefined_fps")
 
581
                {
 
582
                        value=strprintf("%s",App::predefined_fps.c_str());
 
583
                        return true;
 
584
                }
 
585
 
540
586
                return synfigapp::Settings::get_value(key,value);
541
587
        }
542
588
 
600
646
                        App::restrict_radius_ducks=i;
601
647
                        return true;
602
648
                }
 
649
                if(key=="resize_imported_images")
 
650
                {
 
651
                        int i(atoi(value.c_str()));
 
652
                        App::resize_imported_images=i;
 
653
                        return true;
 
654
                }
603
655
                if(key=="browser_command")
604
656
                {
605
657
                        App::browser_command=value;
627
679
                        App::predefined_size=value;
628
680
                        return true;
629
681
                }
 
682
                if(key=="preferred_fps")
 
683
                {
 
684
                        float i(atof(value.c_str()));
 
685
                        App::preferred_fps=i;
 
686
                        return true;
 
687
                }
 
688
                if(key=="predefined_fps")
 
689
                {
 
690
                        App::predefined_fps=value;
 
691
                        return true;
 
692
                }
 
693
 
630
694
                return synfigapp::Settings::set_value(key,value);
631
695
        }
632
696
 
643
707
#endif
644
708
                ret.push_back("auto_recover_backup_interval");
645
709
                ret.push_back("restrict_radius_ducks");
 
710
                ret.push_back("resize_imported_images");
646
711
                ret.push_back("browser_command");
647
712
                ret.push_back("custom_filename_prefix");
648
713
                ret.push_back("preferred_x_size");
649
714
                ret.push_back("preferred_y_size");
650
 
                ret.push_back("predefined_size");               
 
715
                ret.push_back("predefined_size");
 
716
                ret.push_back("preferred_fps");
 
717
                ret.push_back("predefined_fps");
651
718
                return ret;
652
719
        }
653
720
};
661
728
 
662
729
        Glib::RefPtr<Gtk::ActionGroup> toolbox_action_group = Gtk::ActionGroup::create("toolbox");
663
730
 
664
 
        Glib::RefPtr<Gtk::ActionGroup> actions_action_group = Gtk::ActionGroup::create();
 
731
        Glib::RefPtr<Gtk::ActionGroup> actions_action_group = Gtk::ActionGroup::create("actions");
665
732
 
666
733
        menus_action_group->add( Gtk::Action::create("menu-file", _("_File")) );
667
734
        menus_action_group->add( Gtk::Action::create("menu-edit", _("_Edit")) );
674
741
        menus_action_group->add( Gtk::Action::create("menu-layer-new", _("New Layer")) );
675
742
        menus_action_group->add( Gtk::Action::create("menu-keyframe", _("Keyframe")) );
676
743
        menus_action_group->add( Gtk::Action::create("menu-group", _("Group")) );
677
 
        menus_action_group->add( Gtk::Action::create("menu-state", _("State")) );
 
744
        menus_action_group->add( Gtk::Action::create("menu-state", _("Tool")) );
678
745
        menus_action_group->add( Gtk::Action::create("menu-toolbox", _("Toolbox")) );
679
746
 
680
747
        // Add the synfigapp actions...
979
1046
        }
980
1047
 
981
1048
        // Add default keyboard accelerators
982
 
#define ACCEL(path,accel)                                               \
 
1049
#define ACCEL(accel,path)                                               \
983
1050
        {                                                                                       \
984
1051
                Gtk::AccelKey accel_key(accel,path);    \
985
1052
                Gtk::AccelMap::add_entry(accel_key.get_path(), accel_key.get_key(), accel_key.get_mod());       \
991
1058
                Gtk::AccelMap::add_entry(accel_key.get_path(), accel_key.get_key(), accel_key.get_mod());       \
992
1059
        }
993
1060
 
994
 
        ACCEL("<Actions>//select-all-ducks","<Control>a");
995
 
        ACCEL("<Actions>//unselect-all-ducks","<Control>d");
996
 
        ACCEL("<Actions>//select-all-layers","<Control><Shift>a");
997
 
        ACCEL("<Actions>//unselect-all-layers","<Control><Shift>d");
998
 
        ACCEL("<Actions>//render","F9");
999
 
        ACCEL("<Actions>//preview","F11");
1000
 
        ACCEL("<Actions>//properties","F8");
1001
 
        ACCEL("<Actions>//options","F12");
1002
 
        ACCEL("<Actions>//import","<control>i");
1003
 
        ACCEL2(Gtk::AccelKey(GDK_Escape,static_cast<Gdk::ModifierType>(0),"<Actions>//stop"));
1004
 
        ACCEL("<Actions>//toggle-grid-show","<Control>g");
1005
 
        ACCEL("<Actions>//toggle-grid-snap","<Control>l");
1006
 
        ACCEL2(Gtk::AccelKey('`',Gdk::CONTROL_MASK,"<Actions>//toggle-low-res"));
1007
 
        ACCEL("<Actions>//mask-position-ducks", "<Mod1>1");
1008
 
        ACCEL("<Actions>//mask-vertex-ducks", "<Mod1>2");
1009
 
        ACCEL("<Actions>//mask-tangent-ducks", "<Mod1>3");
1010
 
        ACCEL("<Actions>//mask-radius-ducks", "<Mod1>4");
1011
 
        ACCEL("<Actions>//mask-width-ducks", "<Mod1>5");
1012
 
        ACCEL("<Actions>//mask-angle-ducks", "<Mod1>6");
1013
 
 
1014
 
        ACCEL2(Gtk::AccelKey(GDK_Page_Up,Gdk::SHIFT_MASK,"<Actions>//action-layer_raise"));
1015
 
        ACCEL2(Gtk::AccelKey(GDK_Page_Down,Gdk::SHIFT_MASK,"<Actions>//action-layer_lower"));
1016
 
 
1017
 
        ACCEL("<Actions>//quality-01","<Control>1");
1018
 
        ACCEL("<Actions>//quality-02","<Control>2");
1019
 
        ACCEL("<Actions>//quality-03","<Control>3");
1020
 
        ACCEL("<Actions>//quality-04","<Control>4");
1021
 
        ACCEL("<Actions>//quality-05","<Control>5");
1022
 
        ACCEL("<Actions>//quality-06","<Control>6");
1023
 
        ACCEL("<Actions>//quality-07","<Control>7");
1024
 
        ACCEL("<Actions>//quality-08","<Control>8");
1025
 
        ACCEL("<Actions>//quality-09","<Control>9");
1026
 
        ACCEL("<Actions>//quality-10","<Control>0");
1027
 
        ACCEL("<Actions>//undo","<Control>z");
1028
 
        ACCEL("<Actions>//redo","<Control>r");
1029
 
        ACCEL("<Actions>//action-layer_remove","Delete");
1030
 
 
1031
 
/*      ACCEL2(Gtk::AccelKey(']',static_cast<Gdk::ModifierType>(0),"<Actions>//jump-next-keyframe"));
1032
 
        ACCEL2(Gtk::AccelKey('[',static_cast<Gdk::ModifierType>(0),"<Actions>//jump-prev-keyframe"));
1033
 
        ACCEL2(Gtk::AccelKey('=',static_cast<Gdk::ModifierType>(0),"<Actions>//canvas-zoom-in"));
1034
 
        ACCEL2(Gtk::AccelKey('-',static_cast<Gdk::ModifierType>(0),"<Actions>//canvas-zoom-out"));
1035
 
        ACCEL("<Actions>//time-zoom-in","+");
1036
 
        ACCEL("<Actions>//time-zoom-out","_");
1037
 
*/
1038
 
        ACCEL2(Gtk::AccelKey('(',Gdk::CONTROL_MASK,"<Actions>//decrease-low-res-pixel-size"));
1039
 
        ACCEL2(Gtk::AccelKey(')',Gdk::CONTROL_MASK,"<Actions>//increase-low-res-pixel-size"));
1040
 
 
1041
 
        ACCEL2(Gtk::AccelKey('(',Gdk::MOD1_MASK|Gdk::CONTROL_MASK,"<Actions>//amount-dec"));
1042
 
        ACCEL2(Gtk::AccelKey(')',Gdk::MOD1_MASK|Gdk::CONTROL_MASK,"<Actions>//amount-inc"));
1043
 
 
1044
 
        ACCEL2(Gtk::AccelKey(']',Gdk::CONTROL_MASK,"<Actions>//jump-next-keyframe"));
1045
 
        ACCEL2(Gtk::AccelKey('[',Gdk::CONTROL_MASK,"<Actions>//jump-prev-keyframe"));
1046
 
        ACCEL2(Gtk::AccelKey('=',Gdk::CONTROL_MASK,"<Actions>//canvas-zoom-in"));
1047
 
        ACCEL2(Gtk::AccelKey('-',Gdk::CONTROL_MASK,"<Actions>//canvas-zoom-out"));
1048
 
        ACCEL2(Gtk::AccelKey('+',Gdk::CONTROL_MASK,"<Actions>//time-zoom-in"));
1049
 
        ACCEL2(Gtk::AccelKey('_',Gdk::CONTROL_MASK,"<Actions>//time-zoom-out"));
1050
 
        ACCEL2(Gtk::AccelKey('.',Gdk::CONTROL_MASK,"<Actions>//seek-next-frame"));
1051
 
        ACCEL2(Gtk::AccelKey(',',Gdk::CONTROL_MASK,"<Actions>//seek-prev-frame"));
1052
 
        ACCEL2(Gtk::AccelKey('>',Gdk::CONTROL_MASK,"<Actions>//seek-next-second"));
1053
 
        ACCEL2(Gtk::AccelKey('<',Gdk::CONTROL_MASK,"<Actions>//seek-prev-second"));
1054
 
        ACCEL2(Gtk::AccelKey('o',Gdk::MOD1_MASK,"<Actions>//toggle-onion-skin"));
1055
 
        ACCEL("<Actions>//play",              "<Control>p");
1056
 
        ACCEL("<Actions>//seek-begin","Home");
1057
 
        ACCEL("<Actions>//seek-end","End");
1058
 
 
1059
 
        ACCEL("<Actions>//state-normal",      "<Mod1>a");
1060
 
        ACCEL("<Actions>//state-smooth_move", "<Mod1>v");
1061
 
        ACCEL("<Actions>//state-scale",       "<Mod1>s");
1062
 
        ACCEL("<Actions>//state-rotate",      "<Mod1>t");
1063
 
        ACCEL("<Actions>//state-mirror",      "<Mod1>m");
1064
 
 
1065
 
        ACCEL("<Actions>//state-circle",      "<Mod1>c");
1066
 
        ACCEL("<Actions>//state-rectangle",   "<Mod1>r");
1067
 
        ACCEL("<Actions>//state-star",        "<Mod1>q");
1068
 
        ACCEL("<Actions>//state-gradient",    "<Mod1>g");
1069
 
        ACCEL("<Actions>//state-polygon",     "<Mod1>p");
1070
 
 
1071
 
        ACCEL("<Actions>//state-bline",       "<Mod1>b");
1072
 
        ACCEL("<Actions>//state-text",        "<Mod1>x");
1073
 
        ACCEL("<Actions>//state-fill",        "<Mod1>f");
1074
 
        ACCEL("<Actions>//state-eyedrop",     "<Mod1>e");
1075
 
        ACCEL("<Actions>//state-zoom",        "<Mod1>z");
1076
 
 
1077
 
        ACCEL("<Actions>//state-draw",        "<Mod1>d");
1078
 
        ACCEL("<Actions>//state-sketch",      "<Mod1>k");
1079
 
        ACCEL("<Actions>//state-width",       "<Mod1>w");
1080
 
 
1081
 
        ACCEL("<Actions>//canvas-zoom-fit","<Control><Shift>z");
 
1061
        // the toolbox
 
1062
        ACCEL("<Mod1>a",                                                                                                        "<Actions>/action_group_state_manager/state-normal"                                     );
 
1063
        ACCEL("<Mod1>v",                                                                                                        "<Actions>/action_group_state_manager/state-smooth_move"                                );
 
1064
        ACCEL("<Mod1>s",                                                                                                        "<Actions>/action_group_state_manager/state-scale"                                      );
 
1065
        ACCEL("<Mod1>t",                                                                                                        "<Actions>/action_group_state_manager/state-rotate"                                     );
 
1066
        ACCEL("<Mod1>m",                                                                                                        "<Actions>/action_group_state_manager/state-mirror"                                     );
 
1067
        ACCEL("<Mod1>c",                                                                                                        "<Actions>/action_group_state_manager/state-circle"                                     );
 
1068
        ACCEL("<Mod1>r",                                                                                                        "<Actions>/action_group_state_manager/state-rectangle"                          );
 
1069
        ACCEL("<Mod1>q",                                                                                                        "<Actions>/action_group_state_manager/state-star"                                               );
 
1070
        ACCEL("<Mod1>g",                                                                                                        "<Actions>/action_group_state_manager/state-gradient"                                   );
 
1071
        ACCEL("<Mod1>p",                                                                                                        "<Actions>/action_group_state_manager/state-polygon"                                    );
 
1072
        ACCEL("<Mod1>b",                                                                                                        "<Actions>/action_group_state_manager/state-bline"                                      );
 
1073
        ACCEL("<Mod1>x",                                                                                                        "<Actions>/action_group_state_manager/state-text"                                               );
 
1074
        ACCEL("<Mod1>f",                                                                                                        "<Actions>/action_group_state_manager/state-fill"                                               );
 
1075
        ACCEL("<Mod1>e",                                                                                                        "<Actions>/action_group_state_manager/state-eyedrop"                                    );
 
1076
        ACCEL("<Mod1>z",                                                                                                        "<Actions>/action_group_state_manager/state-zoom"                                               );
 
1077
        ACCEL("<Mod1>d",                                                                                                        "<Actions>/action_group_state_manager/state-draw"                                               );
 
1078
        ACCEL("<Mod1>k",                                                                                                        "<Actions>/action_group_state_manager/state-sketch"                                     );
 
1079
        ACCEL("<Mod1>w",                                                                                                        "<Actions>/action_group_state_manager/state-width"                                      );
 
1080
 
 
1081
        // everything else
 
1082
        ACCEL("<Control>a",                                                                                                     "<Actions>/canvasview/select-all-ducks"                         );
 
1083
        ACCEL("<Control>d",                                                                                                     "<Actions>/canvasview/unselect-all-ducks"                               );
 
1084
        ACCEL("<Control><Shift>a",                                                                                      "<Actions>/canvasview/select-all-layers"                                );
 
1085
        ACCEL("<Control><Shift>d",                                                                                      "<Actions>/canvasview/unselect-all-layers"                      );
 
1086
        ACCEL("F9",                                                                                                                     "<Actions>/canvasview/render"                                                   );
 
1087
        ACCEL("F11",                                                                                                            "<Actions>/canvasview/preview"                                          );
 
1088
        ACCEL("F8",                                                                                                                     "<Actions>/canvasview/properties"                                               );
 
1089
        ACCEL("F12",                                                                                                            "<Actions>/canvasview/options"                                          );
 
1090
        ACCEL("<control>i",                                                                                                     "<Actions>/canvasview/import"                                                   );
 
1091
        ACCEL2(Gtk::AccelKey(GDK_Escape,static_cast<Gdk::ModifierType>(0),      "<Actions>/canvasview/stop"                                                     ));
 
1092
        ACCEL("<Control>g",                                                                                                     "<Actions>/canvasview/toggle-grid-show"                         );
 
1093
        ACCEL("<Control>l",                                                                                                     "<Actions>/canvasview/toggle-grid-snap"                         );
 
1094
        ACCEL2(Gtk::AccelKey('`',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/toggle-low-res"                                   ));
 
1095
        ACCEL("<Mod1>1",                                                                                                        "<Actions>/canvasview/mask-position-ducks"                      );
 
1096
        ACCEL("<Mod1>2",                                                                                                        "<Actions>/canvasview/mask-vertex-ducks"                                );
 
1097
        ACCEL("<Mod1>3",                                                                                                        "<Actions>/canvasview/mask-tangent-ducks"                               );
 
1098
        ACCEL("<Mod1>4",                                                                                                        "<Actions>/canvasview/mask-radius-ducks"                                );
 
1099
        ACCEL("<Mod1>5",                                                                                                        "<Actions>/canvasview/mask-width-ducks"                         );
 
1100
        ACCEL("<Mod1>6",                                                                                                        "<Actions>/canvasview/mask-angle-ducks"                         );
 
1101
        ACCEL2(Gtk::AccelKey(GDK_Page_Up,Gdk::SHIFT_MASK,                                       "<Actions>/action_group_layer_action_manager/action-LayerRaise"                         ));
 
1102
        ACCEL2(Gtk::AccelKey(GDK_Page_Down,Gdk::SHIFT_MASK,                                     "<Actions>/action_group_layer_action_manager/action-LayerLower"                         ));
 
1103
        ACCEL("<Control>1",                                                                                                     "<Actions>/canvasview/quality-01"                                               );
 
1104
        ACCEL("<Control>2",                                                                                                     "<Actions>/canvasview/quality-02"                                               );
 
1105
        ACCEL("<Control>3",                                                                                                     "<Actions>/canvasview/quality-03"                                               );
 
1106
        ACCEL("<Control>4",                                                                                                     "<Actions>/canvasview/quality-04"                                               );
 
1107
        ACCEL("<Control>5",                                                                                                     "<Actions>/canvasview/quality-05"                                               );
 
1108
        ACCEL("<Control>6",                                                                                                     "<Actions>/canvasview/quality-06"                                               );
 
1109
        ACCEL("<Control>7",                                                                                                     "<Actions>/canvasview/quality-07"                                               );
 
1110
        ACCEL("<Control>8",                                                                                                     "<Actions>/canvasview/quality-08"                                               );
 
1111
        ACCEL("<Control>9",                                                                                                     "<Actions>/canvasview/quality-09"                                               );
 
1112
        ACCEL("<Control>0",                                                                                                     "<Actions>/canvasview/quality-10"                                               );
 
1113
        ACCEL("<Control>z",                                                                                                     "<Actions>/action_group_dock_history/undo"                                                      );
 
1114
        ACCEL("<Control>r",                                                                                                     "<Actions>/action_group_dock_history/redo"                                                      );
 
1115
        ACCEL2(Gtk::AccelKey(GDK_Delete,Gdk::CONTROL_MASK,                                      "<Actions>/action_group_layer_action_manager/action-LayerRemove"                                ));
 
1116
        ACCEL2(Gtk::AccelKey('(',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/decrease-low-res-pixel-size"      ));
 
1117
        ACCEL2(Gtk::AccelKey(')',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/increase-low-res-pixel-size"      ));
 
1118
        ACCEL2(Gtk::AccelKey('(',Gdk::MOD1_MASK|Gdk::CONTROL_MASK,                      "<Actions>/action_group_layer_action_manager/amount-dec"                                                ));
 
1119
        ACCEL2(Gtk::AccelKey(')',Gdk::MOD1_MASK|Gdk::CONTROL_MASK,                      "<Actions>/action_group_layer_action_manager/amount-inc"                                                ));
 
1120
        ACCEL2(Gtk::AccelKey(']',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/jump-next-keyframe"                               ));
 
1121
        ACCEL2(Gtk::AccelKey('[',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/jump-prev-keyframe"                               ));
 
1122
        ACCEL2(Gtk::AccelKey('=',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/canvas-zoom-in"                                   ));
 
1123
        ACCEL2(Gtk::AccelKey('-',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/canvas-zoom-out"                          ));
 
1124
        ACCEL2(Gtk::AccelKey('+',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/time-zoom-in"                                     ));
 
1125
        ACCEL2(Gtk::AccelKey('_',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/time-zoom-out"                                    ));
 
1126
        ACCEL2(Gtk::AccelKey('.',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/seek-next-frame"                          ));
 
1127
        ACCEL2(Gtk::AccelKey(',',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/seek-prev-frame"                          ));
 
1128
        ACCEL2(Gtk::AccelKey('>',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/seek-next-second"                         ));
 
1129
        ACCEL2(Gtk::AccelKey('<',Gdk::CONTROL_MASK,                                                     "<Actions>/canvasview/seek-prev-second"                         ));
 
1130
        ACCEL("<Mod1>o",                                                                                                        "<Actions>/canvasview/toggle-onion-skin"                                );
 
1131
        ACCEL("<Control><Shift>z",                                                                                      "<Actions>/canvasview/canvas-zoom-fit"                          );
 
1132
        ACCEL("<Control>p",                                                                                                     "<Actions>/canvasview/play"                                                     );
 
1133
        ACCEL("Home",                                                                                                           "<Actions>/canvasview/seek-begin"                                               );
 
1134
        ACCEL("End",                                                                                                            "<Actions>/canvasview/seek-end"                                         );
1082
1135
 
1083
1136
#undef ACCEL
1084
1137
}
1143
1196
 
1144
1197
        // Initialize the Synfig library
1145
1198
        try { synfigapp_main=etl::smart_ptr<synfigapp::Main>(new synfigapp::Main(etl::dirname((*argv)[0]),&synfig_init_cb)); }
 
1199
        catch(std::runtime_error x)
 
1200
        {
 
1201
                get_ui_interface()->error(strprintf("%s\n\n%s", _("Failed to initialize synfig!"), x.what()));
 
1202
                throw;
 
1203
        }
1146
1204
        catch(...)
1147
1205
        {
1148
1206
                get_ui_interface()->error(_("Failed to initialize synfig!"));
1268
1326
                studio_init_cb.task(_("Init Input Dialog..."));
1269
1327
                dialog_input=new Gtk::InputDialog();
1270
1328
                dialog_input->get_close_button()->signal_clicked().connect( sigc::mem_fun( *dialog_input, &Gtk::InputDialog::hide ) );
1271
 
                dialog_input->get_save_button()->signal_clicked().connect( sigc::ptr_fun(studio::App::dialog_not_implemented) );
 
1329
                dialog_input->get_save_button()->signal_clicked().connect( sigc::mem_fun( *device_tracker, &DeviceTracker::save_preferences) );
1272
1330
 
1273
1331
                studio_init_cb.task(_("Init auto recovery..."));
1274
1332
                auto_recover=new AutoRecover();
1276
1334
                studio_init_cb.amount_complete(9250,10000);
1277
1335
                studio_init_cb.task(_("Loading Settings..."));
1278
1336
                load_settings();
 
1337
                device_tracker->load_preferences();
 
1338
 
1279
1339
                studio_init_cb.task(_("Checking auto-recover..."));
1280
1340
 
1281
1341
                studio_init_cb.amount_complete(9900,10000);
1284
1344
                if(auto_recover->recovery_needed())
1285
1345
                {
1286
1346
                        splash_screen.hide();
1287
 
                        if (get_ui_interface()->yes_no(_("Auto Recovery"),
1288
 
                                                                                   _("Synfig Studio seems to have crashed\n"
1289
 
                                                                                         "before you could save all your files.\n"
1290
 
                                                                                         "Would you like to re-open those files\n"
1291
 
                                                                                         "and recover your unsaved changes?")) ==
1292
 
                                synfigapp::UIInterface::RESPONSE_YES)
 
1347
                        if (get_ui_interface()->confirmation("Crash Recovery",
 
1348
                                        _("Auto recovery file found"),
 
1349
                                        _("Synfig Studio seems to have crashed\n"
 
1350
                                          "before you could save all your files.\n"
 
1351
                                          "Recover unsaved changes?"),
 
1352
                                        _("Recover"), _("Ignore"))
 
1353
                                == synfigapp::UIInterface::RESPONSE_OK)
1293
1354
                        {
1294
1355
                                int number_recovered;
1295
1356
                                if(!auto_recover->recover(number_recovered))
1364
1425
        delete auto_recover;
1365
1426
 
1366
1427
        delete about;
1367
 
        
 
1428
 
1368
1429
        toolbox->hide();
1369
1430
 
1370
1431
//      studio::App::iteration(false);
1432
1493
                // find the canvas
1433
1494
                synfig::Canvas::Handle canvas;
1434
1495
                try {
1435
 
                        canvas = instance->get_canvas()->find_canvas(String(canvas_window_size, current, separator-current));
 
1496
                        String warnings;
 
1497
                        canvas = instance->get_canvas()->find_canvas(String(canvas_window_size, current, separator-current), warnings);
1436
1498
                }
1437
1499
                catch(Exception::IDNotFound) {
1438
1500
                        // can't find the canvas; skip to the next canvas or return
1727
1789
        synfigapp::Main::settings().set_value("pref.single_threaded","0");
1728
1790
#endif
1729
1791
        synfigapp::Main::settings().set_value("pref.restrict_radius_ducks","0");
 
1792
        synfigapp::Main::settings().set_value("pref.resize_imported_images","0");
1730
1793
        synfigapp::Main::settings().set_value("pref.custom_filename_prefix",DEFAULT_FILENAME_PREFIX);
1731
1794
        synfigapp::Main::settings().set_value("pref.preferred_x_size","480");
1732
1795
        synfigapp::Main::settings().set_value("pref.preferred_y_size","270");
1733
1796
        synfigapp::Main::settings().set_value("pref.predefined_size",DEFAULT_PREDEFINED_SIZE);
 
1797
        synfigapp::Main::settings().set_value("pref.preferred_fps","24.0");
 
1798
        synfigapp::Main::settings().set_value("pref.predefined_fps",DEFAULT_PREDEFINED_FPS);
1734
1799
        synfigapp::Main::settings().set_value("window.toolbox.pos","4 4");
1735
1800
}
1736
1801
 
2215
2280
                        try { Glib::spawn_async(".", command_line, Glib::SPAWN_SEARCH_PATH); }
2216
2281
                        // Failed, move on to the next one
2217
2282
                        catch(Glib::SpawnError& exception){ continue; }
2218
 
                        return true; // No exception means we succeeded!                        
 
2283
                        return true; // No exception means we succeeded!
2219
2284
                }
2220
2285
        }
2221
2286
 
2339
2404
        try
2340
2405
        {
2341
2406
                OneMoment one_moment;
 
2407
                String errors, warnings;
2342
2408
 
2343
 
                etl::handle<synfig::Canvas> canvas(open_canvas_as(filename,as));
 
2409
                etl::handle<synfig::Canvas> canvas(open_canvas_as(filename,as,errors,warnings));
2344
2410
                if(canvas && get_instance(canvas))
2345
2411
                {
2346
2412
                        get_instance(canvas)->find_canvas_view(canvas)->present();
2350
2416
                else
2351
2417
                {
2352
2418
                        if(!canvas)
2353
 
                                throw (String)strprintf(_("Unable to open file \"%s\""),filename.c_str());
 
2419
                                throw (String)strprintf(_("Unable to load \"%s\":\n\n"),filename.c_str()) + errors;
 
2420
 
 
2421
                        if (warnings != "")
 
2422
                                dialog_warning_blocking(_("Warnings"), strprintf("%s:\n\n%s", _("Warnings"), warnings.c_str()));
2354
2423
 
2355
2424
                        if (as.find(custom_filename_prefix.c_str()) != 0)
2356
2425
                                add_recent_file(as);
2373
2442
                dialog_error_blocking(_("Error"), x);
2374
2443
                return false;
2375
2444
        }
 
2445
        catch(runtime_error x)
 
2446
        {
 
2447
                dialog_error_blocking(_("Error"), x.what());
 
2448
                return false;
 
2449
        }
2376
2450
        catch(...)
2377
2451
        {
2378
2452
                dialog_error_blocking(_("Error"), _("Uncaught error on file open (BUG)"));
2392
2466
        canvas->set_name(file_name);
2393
2467
        file_name += ".sifz";
2394
2468
 
2395
 
        canvas->rend_desc().set_frame_rate(24.0);
 
2469
        canvas->rend_desc().set_frame_rate(preferred_fps);
2396
2470
        canvas->rend_desc().set_time_start(0.0);
2397
2471
        canvas->rend_desc().set_time_end(5.0);
2398
2472
        canvas->rend_desc().set_x_res(DPI2DPM(72.0f));