Don't forget to distribute the other general.h too
[synfig.git] / synfig-studio / trunk / src / gtkmm / app.cpp
index 6380a9c..ba154c2 100644 (file)
@@ -55,6 +55,7 @@
 
 #include "app.h"
 #include "about.h"
+#include "splash.h"
 #include "instance.h"
 #include "canvasview.h"
 #include "dialog_setup.h"
@@ -222,6 +223,8 @@ const etl::handle<synfigapp::UIInterface>& App::get_ui_interface() { return ui_i
 etl::handle<Instance> App::selected_instance;
 etl::handle<CanvasView> App::selected_canvas_view;
 
+studio::About *studio::App::about=NULL;
+
 studio::Toolbox *studio::App::toolbox=NULL;
 
 studio::AutoRecover *studio::App::auto_recover=NULL;
@@ -648,6 +651,8 @@ init_ui_manager()
        DEFINE_ACTION("toggle-grid-snap", _("Toggle Grid Snap"));
        DEFINE_ACTION("toggle-guide-show", _("Toggle Guide Show"));
        DEFINE_ACTION("toggle-low-res", _("Toggle Low-Res"));
+       DEFINE_ACTION("decrease-low-res-pixel-size", _("Decrease Low-Res Pixel Size"));
+       DEFINE_ACTION("increase-low-res-pixel-size", _("Increase Low-Res Pixel Size"));
        DEFINE_ACTION("toggle-onion-skin", _("Toggle Onion Skin"));
        DEFINE_ACTION("canvas-zoom-in", Gtk::StockID("gtk-zoom-in"));
        DEFINE_ACTION("canvas-zoom-out", Gtk::StockID("gtk-zoom-out"));
@@ -772,7 +777,11 @@ init_ui_manager()
 "                      <menuitem action='quality-09' />"
 "                      <menuitem action='quality-10' />"
 "              </menu>"
-"              <menu action='menu-lowres-pixel'>";
+"              <menu action='menu-lowres-pixel'>"
+"              <menuitem action='decrease-low-res-pixel-size'/>"
+"              <menuitem action='increase-low-res-pixel-size'/>"
+"              <separator name='pixel-size-separator'/>"
+;
 
        for(list<int>::iterator iter = CanvasView::get_pixel_sizes().begin(); iter != CanvasView::get_pixel_sizes().end(); iter++)
                ui_info += strprintf("                  <menuitem action='lowres-pixel-%d' />", *iter);
@@ -922,6 +931,9 @@ init_ui_manager()
        ACCEL("<Actions>//time-zoom-in","+");
        ACCEL("<Actions>//time-zoom-out","_");
 */
+       ACCEL2(Gtk::AccelKey('(',Gdk::CONTROL_MASK,"<Actions>//decrease-low-res-pixel-size"));
+       ACCEL2(Gtk::AccelKey(')',Gdk::CONTROL_MASK,"<Actions>//increase-low-res-pixel-size"));
+
        ACCEL2(Gtk::AccelKey('(',Gdk::MOD1_MASK|Gdk::CONTROL_MASK,"<Actions>//amount-dec"));
        ACCEL2(Gtk::AccelKey(')',Gdk::MOD1_MASK|Gdk::CONTROL_MASK,"<Actions>//amount-inc"));
 
@@ -1016,13 +1028,13 @@ App::App(int *argc, char ***argv):
        }
        Glib::set_application_name(_("Synfig Studio"));
 
-       About about_window;
-       about_window.set_can_self_destruct(false);
-       about_window.show();
+       Splash splash_screen;
+       splash_screen.set_can_self_destruct(false);
+       splash_screen.show();
 
        shutdown_in_progress=false;
-       SuperCallback synfig_init_cb(about_window.get_callback(),0,9000,10000);
-       SuperCallback studio_init_cb(about_window.get_callback(),9000,10000,10000);
+       SuperCallback synfig_init_cb(splash_screen.get_callback(),0,9000,10000);
+       SuperCallback studio_init_cb(splash_screen.get_callback(),9000,10000,10000);
 
        // Initialize the Synfig library
        try { synfigapp_main=etl::smart_ptr<synfigapp::Main>(new synfigapp::Main(etl::dirname((*argv)[0]),&synfig_init_cb)); }
@@ -1050,6 +1062,9 @@ App::App(int *argc, char ***argv):
                studio_init_cb.task(_("Init Toolbox..."));
                toolbox=new studio::Toolbox();
 
+               studio_init_cb.task(_("Init About Dialog..."));
+               about=new studio::About();
+
                studio_init_cb.task(_("Init Tool Options..."));
                dialog_tool_options=new studio::Dialog_ToolOptions();
                dock_manager->register_dockable(*dialog_tool_options);
@@ -1113,30 +1128,27 @@ App::App(int *argc, char ***argv):
                device_tracker=new studio::DeviceTracker();
 
                studio_init_cb.task(_("Init Tools..."));
+
+               /* row 1 */
                state_manager->add_state(&state_normal);
                state_manager->add_state(&state_smooth_move);
                state_manager->add_state(&state_scale);
                state_manager->add_state(&state_rotate);
+               studio_init_cb.task(_("Init ModMirror...")); module_list_.push_back(new ModMirror()); module_list_.back()->start();
 
+               /* row 2 */
                state_manager->add_state(&state_bline);
-
-
                state_manager->add_state(&state_circle);
                state_manager->add_state(&state_rectangle);
-
                state_manager->add_state(&state_gradient);
-               state_manager->add_state(&state_eyedrop);
-               state_manager->add_state(&state_fill);
-
-               state_manager->add_state(&state_zoom);
+               if(!getenv("SYNFIG_DISABLE_POLYGON")) state_manager->add_state(&state_polygon); // Enabled - for working without ducks
 
-               // Enabled - it's useful to be able to work with polygons without tangent ducks getting in the way.
-               // I know we can switch tangent ducks off, but why not allow this kind of layer as well?
-               if(!getenv("SYNFIG_DISABLE_POLYGON")) state_manager->add_state(&state_polygon);
-
-               // Enabled for now.  Let's see whether they're good enough yet.
-               if(!getenv("SYNFIG_DISABLE_DRAW"   )) state_manager->add_state(&state_draw);
+               /* row 3 */
+               if(!getenv("SYNFIG_DISABLE_DRAW"   )) state_manager->add_state(&state_draw); // Enabled for now.  Let's see whether they're good enough yet.
                if(!getenv("SYNFIG_DISABLE_SKETCH" )) state_manager->add_state(&state_sketch);
+               state_manager->add_state(&state_fill);
+               state_manager->add_state(&state_eyedrop);
+               state_manager->add_state(&state_zoom);
 
                // Disabled by default - it doesn't work properly?
                if(getenv("SYNFIG_ENABLE_WIDTH"    )) state_manager->add_state(&state_width);
@@ -1144,10 +1156,6 @@ App::App(int *argc, char ***argv):
                studio_init_cb.task(_("Init ModPalette..."));
                module_list_.push_back(new ModPalette()); module_list_.back()->start();
 
-               studio_init_cb.task(_("Init ModMirror..."));
-               module_list_.push_back(new ModMirror()); module_list_.back()->start();
-
-
                studio_init_cb.task(_("Init Setup Dialog..."));
                dialog_setup=new studio::Dialog_Setup();
 
@@ -1168,7 +1176,7 @@ App::App(int *argc, char ***argv):
 
                if(auto_recover->recovery_needed())
                {
-                       about_window.hide();
+                       splash_screen.hide();
                        if(
                                get_ui_interface()->yes_no(
                                        _("Auto Recovery"),
@@ -1191,7 +1199,7 @@ App::App(int *argc, char ***argv):
                                        "idea to review them and save them now.")
                                );
                        }
-                       about_window.show();
+                       splash_screen.show();
                }
 
                // Look for any files given on the command line,
@@ -1201,10 +1209,10 @@ App::App(int *argc, char ***argv):
                        if((*argv)[*argc] && (*argv)[*argc][0]!='-')
                        {
                                studio_init_cb.task(_("Loading files..."));
-                               about_window.hide();
+                               splash_screen.hide();
                                open((*argv)[*argc]);
                                opened_any = true;
-                               about_window.show();
+                               splash_screen.show();
                        }
 
                // if no file was specified to be opened, create a new document to help new users get started more easily
@@ -1248,6 +1256,8 @@ App::~App()
 
        delete auto_recover;
 
+       delete about;
+       
        toolbox->hide();
 
 //     studio::App::iteration(false);
@@ -2040,7 +2050,8 @@ App::get_instance(etl::handle<synfig::Canvas> canvas)
 void
 App::dialog_about()
 {
-       (new class About())->show();
+       if(about)
+               about->show();
 }
 
 void