Change the default quality to 8. It makes shade layers render better without much...
[synfig.git] / synfig-studio / trunk / src / gtkmm / canvasview.cpp
index 89ce488..47a92d5 100644 (file)
@@ -109,7 +109,7 @@ using namespace std;
 using namespace etl;
 using namespace synfig;
 using namespace studio;
-using namespace SigC;
+using namespace sigc;
 
 /* === M A C R O S ========================================================= */
 
@@ -123,13 +123,6 @@ using namespace SigC;
 
 #define DEFAULT_TIME_WINDOW_SIZE               (10.0)
 
-/*
-#ifdef DEBUGPOINT
-#undef DEBUGPOINT
-#endif
-#define DEBUGPOINT()
-*/
-
 #ifndef SMALL_BUTTON
 #define SMALL_BUTTON(button,stockid,tooltip)   \
        button = manage(new class Gtk::Button());       \
@@ -449,7 +442,7 @@ public:
        {
 //             assert(view->layer_tree);
 
-               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return LayerList(); }
+               if(!view->layer_tree) { synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return LayerList(); }
                return view->layer_tree->get_selected_layers();
        }
 
@@ -458,7 +451,7 @@ public:
        {
 //             assert(view->layer_tree);
 
-               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return 0; }
+               if(!view->layer_tree) { synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return 0; }
                return view->layer_tree->get_selected_layer();
        }
 
@@ -467,7 +460,7 @@ public:
        {
 //             assert(view->layer_tree);
 
-               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return; }
+               if(!view->layer_tree) { synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return; }
                view->layer_tree->select_layers(layer_list);
                //view->get_smach().process_event(EVENT_REFRESH_DUCKS);
 
@@ -479,7 +472,7 @@ public:
        {
 //             assert(view->layer_tree);
 
-               if(!view->layer_tree) { DEBUGPOINT(); synfig::error("canvas_view.layer_tree not defined!?"); return; }
+               if(!view->layer_tree) { synfig::error("canvas_view.layer_tree not defined!?"); return; }
                view->layer_tree->select_layer(layer);
                //view->queue_rebuild_ducks();
        }
@@ -919,11 +912,22 @@ CanvasView::~CanvasView()
        // this was causing a crash before
        canvas_interface()->signal_dirty_preview().clear();
 
-       synfig::info("CanvasView:~CanvasView(): Destructor Finished");
+       if (getenv("SYNFIG_DEBUG_DESTRUCTORS"))
+               synfig::info("CanvasView::~CanvasView(): Deleted");
 }
 
 
 
+std::list<int>&
+CanvasView::get_pixel_sizes()
+{
+       // prime factors of 120 are 2, 2, 2, 3, 5 - see TILE_SIZE in synfig-core/trunk/src/synfig/target_tile.h
+       static int pixel_size_array[] = {2,3,4,5,6,8,10,12,15,20,24,30,40,60,120};
+       static list<int> pixel_sizes = list<int>(pixel_size_array, pixel_size_array + sizeof(pixel_size_array) / sizeof(int));
+
+       return pixel_sizes;
+}
+
 Gtk::Widget *
 CanvasView::create_time_bar()
 {
@@ -1055,107 +1059,108 @@ CanvasView::on_current_time_widget_changed()
        set_time(current_time_widget->get_value());
 }
 
-Gtk::Widget*
-CanvasView::create_children_tree()
-{
-       // Create the layer tree
-       children_tree=manage(new class ChildrenTree());
-
-       // Set up the layer tree
-       //children_tree->set_model(children_tree_store());
-       if(children_tree)children_tree->set_time_adjustment(time_adjustment());
-       if(children_tree)children_tree->show();
-
-       // Connect Signals
-       if(children_tree)children_tree->signal_edited_value().connect(sigc::mem_fun(*this, &studio::CanvasView::on_edited_value));
-       if(children_tree)children_tree->signal_user_click().connect(sigc::mem_fun(*this, &studio::CanvasView::on_children_user_click));
-       if(children_tree)children_tree->signal_waypoint_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_waypoint_clicked));
-       if(children_tree)children_tree->get_selection()->signal_changed().connect(SLOT_EVENT(EVENT_REFRESH_DUCKS));
-
-       return children_tree;
-}
-
-Gtk::Widget*
-CanvasView::create_keyframe_tree()
-{
-       keyframe_tree=manage(new KeyframeTree());
-
-       //keyframe_tree->get_selection()->set_mode(Gtk::SELECTION_MULTIPLE);
-       //keyframe_tree->show();
-       //keyframe_tree->set_model(keyframe_tree_store());
-       keyframe_tree->set_editable(true);
-       //keyframe_tree->signal_edited().connect(sigc::hide_return(sigc::mem_fun(*canvas_interface(), &synfigapp::CanvasInterface::update_keyframe)));
-
-       keyframe_tree->signal_event().connect(sigc::mem_fun(*this, &studio::CanvasView::on_keyframe_tree_event));
-
-       Gtk::ScrolledWindow *scroll_layer_tree = manage(new class Gtk::ScrolledWindow());
-       scroll_layer_tree->set_flags(Gtk::CAN_FOCUS);
-       scroll_layer_tree->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
-       scroll_layer_tree->add(*keyframe_tree);
-       scroll_layer_tree->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
-       //scroll_layer_tree->show();
-
-
-       Gtk::Table *layout_table= manage(new Gtk::Table(1, 2, false));
-       layout_table->attach(*scroll_layer_tree, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
-
-       Gtk::Image *icon;
-       Gtk::IconSize iconsize(Gtk::IconSize::from_name("synfig-small_icon"));
-
-       NEW_SMALL_BUTTON(button_add,"gtk-add",_("New Keyframe"));
-       NEW_SMALL_BUTTON(button_duplicate,"synfig-duplicate",_("Duplicate Keyframe"));
-       NEW_SMALL_BUTTON(button_delete,"gtk-delete",_("Delete Keyframe"));
-
-       Gtk::HBox *hbox(manage(new Gtk::HBox()));
-       layout_table->attach(*hbox, 0, 1, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK, 0, 0);
-
-       hbox->pack_start(*button_add,Gtk::PACK_SHRINK);
-       hbox->pack_start(*button_duplicate,Gtk::PACK_SHRINK);
-       hbox->pack_start(*button_delete,Gtk::PACK_SHRINK);
-
-       /*
-       button_raise->set_relief(Gtk::RELIEF_HALF);
-       button_lower->set_relief(Gtk::RELIEF_HALF);
-       button_duplicate->set_relief(Gtk::RELIEF_HALF);
-       button_delete->set_relief(Gtk::RELIEF_HALF);
-       */
-
-       button_add->signal_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_keyframe_add_pressed));
-       button_duplicate->signal_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_keyframe_duplicate_pressed));
-       button_delete->signal_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_keyframe_remove_pressed));
-
-       //layout_table->show_all();
-
-       keyframe_tab_child=layout_table;
-
-
-       layout_table->hide();
-
-       return layout_table;
-}
-
-Gtk::Widget*
-CanvasView::create_layer_tree()
-{
-       // Create the layer tree
-       layer_tree=manage(new class LayerTree());
-
-       // Set up the layer tree
-       //layer_tree->set_model(layer_tree_store());
-       layer_tree->set_time_adjustment(time_adjustment());
-       layer_tree->show();
-
-       // Connect Signals
-       layer_tree->signal_layer_toggle().connect(sigc::mem_fun(*this, &studio::CanvasView::on_layer_toggle));
-       layer_tree->signal_edited_value().connect(sigc::mem_fun(*this, &studio::CanvasView::on_edited_value));
-       layer_tree->signal_layer_user_click().connect(sigc::mem_fun(*this, &studio::CanvasView::on_layer_user_click));
-       layer_tree->signal_param_user_click().connect(sigc::mem_fun(*this, &studio::CanvasView::on_children_user_click));
-       layer_tree->signal_waypoint_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_waypoint_clicked));
-       layer_tree->get_selection()->signal_changed().connect(SLOT_EVENT(EVENT_REFRESH_DUCKS));
-
-       layer_tree->hide();
-       return layer_tree;
-}
+//     Gtk::Widget*
+//     CanvasView::create_children_tree()
+//     {
+//             // Create the layer tree
+//             children_tree=manage(new class ChildrenTree());
+//
+//             // Set up the layer tree
+//             //children_tree->set_model(children_tree_store());
+//             if(children_tree)children_tree->set_time_adjustment(time_adjustment());
+//             if(children_tree)children_tree->show();
+//
+//             // Connect Signals
+//             if(children_tree)children_tree->signal_edited_value().connect(sigc::mem_fun(*this, &studio::CanvasView::on_edited_value));
+//             if(children_tree)children_tree->signal_user_click().connect(sigc::mem_fun(*this, &studio::CanvasView::on_children_user_click));
+//             if(children_tree)children_tree->signal_waypoint_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_waypoint_clicked));
+//             if(children_tree)children_tree->get_selection()->signal_changed().connect(SLOT_EVENT(EVENT_REFRESH_DUCKS));
+//
+//             return children_tree;
+//     }
+
+//     Gtk::Widget*
+//     CanvasView::create_keyframe_tree()
+//     {
+//             keyframe_tree=manage(new KeyframeTree());
+//
+//             //keyframe_tree->get_selection()->set_mode(Gtk::SELECTION_MULTIPLE);
+//             //keyframe_tree->show();
+//             //keyframe_tree->set_model(keyframe_tree_store());
+//             keyframe_tree->set_editable(true);
+//             //keyframe_tree->signal_edited().connect(sigc::hide_return(sigc::mem_fun(*canvas_interface(), &synfigapp::CanvasInterface::update_keyframe)));
+//
+//             keyframe_tree->signal_event().connect(sigc::mem_fun(*this, &studio::CanvasView::on_keyframe_tree_event));
+//
+//             Gtk::ScrolledWindow *scroll_layer_tree = manage(new class Gtk::ScrolledWindow());
+//             scroll_layer_tree->set_flags(Gtk::CAN_FOCUS);
+//             scroll_layer_tree->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+//             scroll_layer_tree->add(*keyframe_tree);
+//             scroll_layer_tree->set_shadow_type(Gtk::SHADOW_ETCHED_IN);
+//             //scroll_layer_tree->show();
+//
+//
+//             Gtk::Table *layout_table= manage(new Gtk::Table(1, 2, false));
+//             layout_table->attach(*scroll_layer_tree, 0, 1, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
+//
+//             Gtk::Image *icon;
+//             Gtk::IconSize iconsize(Gtk::IconSize::from_name("synfig-small_icon"));
+//
+//             NEW_SMALL_BUTTON(button_add,"gtk-add",_("New Keyframe"));
+//             NEW_SMALL_BUTTON(button_duplicate,"synfig-duplicate",_("Duplicate Keyframe"));
+//             NEW_SMALL_BUTTON(button_delete,"gtk-delete",_("Delete Keyframe"));
+//
+//             Gtk::HBox *hbox(manage(new Gtk::HBox()));
+//             layout_table->attach(*hbox, 0, 1, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK, 0, 0);
+//
+//             hbox->pack_start(*button_add,Gtk::PACK_SHRINK);
+//             hbox->pack_start(*button_duplicate,Gtk::PACK_SHRINK);
+//             hbox->pack_start(*button_delete,Gtk::PACK_SHRINK);
+//
+//             /*
+//             button_raise->set_relief(Gtk::RELIEF_HALF);
+//             button_lower->set_relief(Gtk::RELIEF_HALF);
+//             button_duplicate->set_relief(Gtk::RELIEF_HALF);
+//             button_delete->set_relief(Gtk::RELIEF_HALF);
+//             */
+//
+//             button_add->signal_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_keyframe_add_pressed));
+//             button_duplicate->signal_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_keyframe_duplicate_pressed));
+//             button_delete->signal_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_keyframe_remove_pressed));
+//
+//             //layout_table->show_all();
+//
+//             keyframe_tab_child=layout_table;
+//
+//
+//             layout_table->hide();
+//
+//             return layout_table;
+//     }
+
+//     Gtk::Widget*
+//     CanvasView::create_layer_tree()
+//     {
+//             // Create the layer tree
+//             printf("CanvasView::create_layer_tree()\n");
+//             layer_tree=manage(new class LayerTree());
+//
+//             // Set up the layer tree
+//             //layer_tree->set_model(layer_tree_store());
+//             layer_tree->set_time_adjustment(time_adjustment());
+//             layer_tree->show();
+//
+//             // Connect Signals
+//             layer_tree->signal_layer_toggle().connect(sigc::mem_fun(*this, &studio::CanvasView::on_layer_toggle));
+//             layer_tree->signal_edited_value().connect(sigc::mem_fun(*this, &studio::CanvasView::on_edited_value));
+//             layer_tree->signal_layer_user_click().connect(sigc::mem_fun(*this, &studio::CanvasView::on_layer_user_click));
+//             layer_tree->signal_param_user_click().connect(sigc::mem_fun(*this, &studio::CanvasView::on_children_user_click));
+//             layer_tree->signal_waypoint_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_waypoint_clicked));
+//             layer_tree->get_selection()->signal_changed().connect(SLOT_EVENT(EVENT_REFRESH_DUCKS));
+//
+//             layer_tree->hide();
+//             return layer_tree;
+//     }
 
 void
 CanvasView::init_menus()
@@ -1187,6 +1192,12 @@ CanvasView::init_menus()
        action_group = Gtk::ActionGroup::create();
 
        //action_group->add( Gtk::Action::create("MenuFile", _("_File")) );
+       action_group->add( Gtk::Action::create("new", Gtk::Stock::NEW),
+               sigc::hide_return(sigc::ptr_fun(&studio::App::new_instance))
+       );
+       action_group->add( Gtk::Action::create("open", Gtk::Stock::OPEN),
+               sigc::hide_return(sigc::ptr_fun(&studio::App::dialog_open))
+       );
        action_group->add( Gtk::Action::create("save", Gtk::Stock::SAVE),
                hide_return(sigc::mem_fun(*get_instance().get(), &studio::Instance::save))
        );
@@ -1229,6 +1240,9 @@ CanvasView::init_menus()
        action_group->add( Gtk::Action::create("close-document", Gtk::StockID("gtk-close"), _("Close Document")),
                sigc::hide_return(sigc::mem_fun(*this,&studio::CanvasView::close_instance))
        );
+       action_group->add( Gtk::Action::create("quit", Gtk::StockID("gtk-quit"), _("Quit")),
+               sigc::hide_return(sigc::ptr_fun(&studio::App::quit))
+       );
 
        //action_group->add( Gtk::Action::create("undo", Gtk::StockID("gtk-undo")),
        //      SLOT_EVENT(EVENT_UNDO)
@@ -1269,8 +1283,12 @@ CanvasView::init_menus()
                );
                for(i=1;i<=10;i++)
                {
-                       Glib::RefPtr<Gtk::RadioAction> action(Gtk::RadioAction::create(quality_group,strprintf("quality-%02d",i), strprintf(_("Set Quality to %d"),i)));
-                       if(i==10)
+                       String note;
+                       if (i == 1) note = _(" (best)");
+                       if (i == 10) note = _(" (fastest)");
+                       Glib::RefPtr<Gtk::RadioAction> action(Gtk::RadioAction::create(quality_group,strprintf("quality-%02d",i),
+                                                                                                                                                  strprintf(_("Set Quality to %d"),i) + note));
+                       if (i==8)                       // default quality
                        {
                                action->set_active();
                                work_area->set_quality(i);
@@ -1284,6 +1302,37 @@ CanvasView::init_menus()
                }
        }
 
+       // Low-Res Quality Menu
+       {
+               int i;
+               for(list<int>::iterator iter = CanvasView::get_pixel_sizes().begin(); iter != CanvasView::get_pixel_sizes().end(); iter++)
+               {
+                       i = *iter;
+                       Glib::RefPtr<Gtk::RadioAction> action(Gtk::RadioAction::create(low_res_pixel_size_group,strprintf("lowres-pixel-%d",i),
+                                                                                                                                                  strprintf(_("Set Low-Res pixel size to %d"),i)));
+                       if(i==2)                        // default pixel size
+                       {
+                               action->set_active();
+                               work_area->set_low_res_pixel_size(i);
+                       }
+                       action_group->add( action,
+                               sigc::bind(
+                                       sigc::mem_fun(*work_area, &studio::WorkArea::set_low_res_pixel_size),
+                                       i
+                               )
+                       );
+               }
+
+               Glib::RefPtr<Gtk::Action> action;
+
+               action=Gtk::Action::create("decrease-low-res-pixel-size", _("Decrease Low-Res Pixel Size"));
+               action_group->add( action,sigc::mem_fun(this, &studio::CanvasView::decrease_low_res_pixel_size));
+
+               action=Gtk::Action::create("increase-low-res-pixel-size",  _("Increase Low-Res Pixel Size"));
+               action_group->add( action, sigc::mem_fun(this, &studio::CanvasView::increase_low_res_pixel_size));
+
+       }
+
        action_group->add( Gtk::Action::create("play", Gtk::Stock::MEDIA_PLAY),
                sigc::mem_fun(*this, &studio::CanvasView::play)
        );
@@ -1292,22 +1341,29 @@ CanvasView::init_menus()
                sigc::mem_fun0(*preview_dialog, &studio::Dialog_Preview::present)
        );
 
-       action_group->add( Gtk::Action::create("toggle-grid-show", _("Toggle Grid Show")),
-               sigc::mem_fun(*work_area, &studio::WorkArea::toggle_grid)
-       );
-       action_group->add( Gtk::Action::create("toggle-grid-snap", _("Toggle Grid Snap")),
-               sigc::mem_fun(*work_area, &studio::WorkArea::toggle_grid_snap)
-       );
-       action_group->add( Gtk::Action::create("toggle-guide-show", _("Toggle Guide Show")),
-               sigc::mem_fun(*work_area, &studio::WorkArea::toggle_guide_snap)
-       );
-       action_group->add( Gtk::Action::create("toggle-low-res", _("Toggle Low-Res")),
-               sigc::mem_fun(*work_area, &studio::WorkArea::toggle_low_resolution_flag)
-       );
-       action_group->add( Gtk::Action::create("toggle-onion-skin", _("Toggle Onion Skin")),
-               sigc::mem_fun(*work_area, &studio::WorkArea::toggle_onion_skin)
-       );
+       {
+               Glib::RefPtr<Gtk::ToggleAction> action;
 
+               action = Gtk::ToggleAction::create("toggle-grid-show", _("Show Grid"));
+               action->set_active(work_area->grid_status());
+               action_group->add(action, sigc::mem_fun(*work_area, &studio::WorkArea::toggle_grid));
+
+               action = Gtk::ToggleAction::create("toggle-grid-snap", _("Snap to Grid"));
+               action->set_active(work_area->get_grid_snap());
+               action_group->add(action, sigc::mem_fun(*work_area, &studio::WorkArea::toggle_grid_snap));
+
+               action = Gtk::ToggleAction::create("toggle-guide-show", _("Show Guides"));
+               action->set_active(work_area->get_show_guides());
+               action_group->add(action, sigc::mem_fun(*work_area, &studio::WorkArea::toggle_guide_snap));
+
+               action = Gtk::ToggleAction::create("toggle-low-res", _("Use Low-Res"));
+               action->set_active(work_area->get_low_resolution_flag());
+               action_group->add(action, sigc::mem_fun(*work_area, &studio::WorkArea::toggle_low_resolution_flag));
+
+               action = Gtk::ToggleAction::create("toggle-onion-skin", _("Show Onion Skin"));
+               action->set_active(work_area->get_onion_skin());
+               action_group->add(action, sigc::mem_fun(*work_area, &studio::WorkArea::toggle_onion_skin));
+       }
 
        action_group->add( Gtk::Action::create("canvas-zoom-fit", Gtk::StockID("gtk-zoom-fit")),
                sigc::mem_fun(*work_area, &studio::WorkArea::zoom_fit)
@@ -1316,7 +1372,6 @@ CanvasView::init_menus()
                sigc::mem_fun(*work_area, &studio::WorkArea::zoom_norm)
        );
 
-
        {
                Glib::RefPtr<Gtk::Action> action;
 
@@ -1434,247 +1489,247 @@ CanvasView::init_menus()
 
 
 #if 0
-
-       //Test some key stuff
-
-       filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-save"),
-               hide_return(sigc::mem_fun(*get_instance().get(), &studio::Instance::save))));
-       filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-save-as"),sigc::hide_return(sigc::mem_fun(*get_instance(), &studio::Instance::dialog_save_as))));
-       filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-revert-to-saved"),hide_return(sigc::mem_fun(*get_instance().get(), &studio::Instance::safe_revert))));
-       filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-
-       filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("synfig-cvs_add"),sigc::hide_return(sigc::mem_fun(*get_instance(), &studio::Instance::dialog_cvs_add))));
-       filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("synfig-cvs_update"),sigc::hide_return(sigc::mem_fun(*get_instance(), &studio::Instance::dialog_cvs_update))));
-       filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("synfig-cvs_commit"),sigc::hide_return(sigc::mem_fun(*get_instance(), &studio::Instance::dialog_cvs_commit))));
-
-       filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-       filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Import..."),Gtk::AccelKey('I',Gdk::CONTROL_MASK),sigc::hide_return(sigc::mem_fun(*this, &studio::CanvasView::image_import))));
-       filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-       filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Render"),Gtk::AccelKey("F9"),
-               sigc::mem_fun(render_settings,&studio::RenderSettings::present)
-       ));
-       filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Preview"),Gtk::AccelKey("F11"),
-               sigc::mem_fun(*this,&CanvasView::on_preview_option)
-       ));
-       filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Sound File"),
-               sigc::mem_fun(*this,&CanvasView::on_audio_option)
-       ));
-
-       filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-       filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Options"),Gtk::AccelKey("F12"),
-               sigc::mem_fun(canvas_options,&studio::CanvasOptions::present)
-       ));
-       filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-       filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Close View"),
-               sigc::hide_return(sigc::mem_fun(*this,&studio::CanvasView::close_view))
-       ));
-       filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Close Document"),
-               sigc::hide_return(sigc::mem_fun(*this,&studio::CanvasView::close_document))
-       ));
-
-       editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-undo"),Gtk::AccelKey('Z',Gdk::CONTROL_MASK),SLOT_EVENT(EVENT_UNDO)));
-       editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-redo"),Gtk::AccelKey('R',Gdk::CONTROL_MASK),SLOT_EVENT(EVENT_REDO)));
-       editmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-       editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-cut"),NOT_IMPLEMENTED_SLOT));
-       editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-copy"),NOT_IMPLEMENTED_SLOT));
-       editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-paste"),NOT_IMPLEMENTED_SLOT));
-       editmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-       editmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Select All Ducks"),Gtk::AccelKey('E',Gdk::CONTROL_MASK),sigc::mem_fun(*work_area,&studio::WorkArea::select_all_ducks)));
-       editmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Unselect All Layers"),Gtk::AccelKey('D',Gdk::CONTROL_MASK),sigc::mem_fun(*this,&CanvasView::on_unselect_layers)));
-       editmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-
-       //editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-stop"),Gtk::AccelKey(GDK_Escape,static_cast<Gdk::ModifierType>(0)),sigc::hide_return(sigc::mem_fun(*this, &studio::CanvasView::stop))));
-       //editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-refresh"),Gtk::AccelKey('k',Gdk::CONTROL_MASK),sigc::hide_return(sigc::mem_fun(*this, &studio::CanvasView::on_refresh_pressed))));
-       editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-stop"),Gtk::AccelKey(GDK_Escape,static_cast<Gdk::ModifierType>(0)),SLOT_EVENT(EVENT_STOP)));
-       editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-refresh"),Gtk::AccelKey('k',Gdk::CONTROL_MASK),SLOT_EVENT(EVENT_REFRESH)));
-       editmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-       editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-properties"),Gtk::AccelKey("F8"),
-               sigc::mem_fun(canvas_properties,&studio::CanvasProperties::present)
-       ));
-
-       build_new_layer_menu(newlayermenu);
-       layermenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("New"),newlayermenu));
-
-
-       {
-               synfigapp::Action::ParamList param_list;
-               param_list.add("canvas",Canvas::Handle(get_canvas()));
-               param_list.add("canvas_interface",canvas_interface());
-               add_actions_to_menu(&canvasmenu, param_list,synfigapp::Action::CATEGORY_CANVAS);
-       }
-
-
-       //canvasmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Keyframe Dialog"),sigc::mem_fun(keyframe_dialog,&studio::Dialog_Keyframe::present)));
-
-       // Duck Mask Menu
-       if(1)
-               {
-               duckmaskmenu.items().push_back(Gtk::Menu_Helpers::TearoffMenuElem());
-
-               duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Position Ducks"),Gtk::AccelKey('1',Gdk::MOD1_MASK)));
-               duck_mask_position=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
-               duck_mask_position->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_POSITION));
-               duck_mask_position->signal_toggled().connect(
-                       sigc::bind(
-                               sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
-                               Duck::TYPE_POSITION
-                       )
-               );
-
-               duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Vertex Ducks"),Gtk::AccelKey('2',Gdk::MOD1_MASK)));
-               duck_mask_vertex=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
-               duck_mask_vertex->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_VERTEX));
-               duck_mask_vertex->signal_toggled().connect(
-                       sigc::bind(
-                               sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
-                               Duck::TYPE_VERTEX
-                       )
-               );
-
-               duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Tangent Ducks"),Gtk::AccelKey('3',Gdk::MOD1_MASK)));
-               duck_mask_tangent=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
-               duck_mask_tangent->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_TANGENT));
-               duck_mask_tangent->signal_toggled().connect(
-                       sigc::bind(
-                               sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
-                               Duck::TYPE_TANGENT
-                       )
-               );
-
-               duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Radius Ducks"),Gtk::AccelKey('4',Gdk::MOD1_MASK)));
-               duck_mask_radius=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
-               duck_mask_radius->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_RADIUS));
-               duck_mask_radius->signal_toggled().connect(
-                       sigc::bind(
-                               sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
-                               Duck::TYPE_RADIUS
-                       )
-               );
-
-               duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Width Ducks"),Gtk::AccelKey('5',Gdk::MOD1_MASK)));
-               duck_mask_width=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
-               duck_mask_width->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_WIDTH));
-               duck_mask_width->signal_toggled().connect(
-                       sigc::bind(
-                               sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
-                               Duck::TYPE_WIDTH
-                       )
-               );
-
-               duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Angle Ducks"),Gtk::AccelKey('6',Gdk::MOD1_MASK)));
-               duck_mask_angle=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
-               duck_mask_angle->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_ANGLE));
-               duck_mask_angle->signal_toggled().connect(
-                       sigc::bind(
-                               sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
-                               Duck::TYPE_ANGLE
-                       )
-               );
-
-               viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Mask Ducks"),duckmaskmenu));
-       }
-
-       // Preview Quality Menu
-       if(1)
-       {
-               qualitymenu.items().push_back(Gtk::Menu_Helpers::TearoffMenuElem());
-               int i;
-               qualitymenu.items().push_back(Gtk::Menu_Helpers::MenuElem(strprintf(_("Use Parametric Renderer"),0),
-                       sigc::bind(
-                               sigc::mem_fun(*work_area, &studio::WorkArea::set_quality),
-                               0
-                       )
-               ));
-               for(i=1;i<=10;i++)
-               {
-                       qualitymenu.items().push_back(Gtk::Menu_Helpers::MenuElem(strprintf(_("Set Quality to %d"),i),Gtk::AccelKey('0'+(i%10),Gdk::CONTROL_MASK),
-                               sigc::bind(
-                                       sigc::mem_fun(*work_area, &studio::WorkArea::set_quality),
-                                       i
-                               )
-                       ));
-               }
-               viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Preview Quality"),qualitymenu));
-       }
-
-       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::Stock::MEDIA_PLAY,
-               sigc::mem_fun(*this, &studio::CanvasView::play)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("Flipbook Dialog"),
-               sigc::mem_fun(*preview_dialog, &studio::Dialog_Preview::present)));
-
-       viewmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-
-       viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Toggle Grid Show"),Gtk::AccelKey('g',Gdk::CONTROL_MASK),
-               sigc::mem_fun(*work_area, &studio::WorkArea::toggle_grid)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Toggle Grid Snap"),Gtk::AccelKey('l',Gdk::CONTROL_MASK),
-               sigc::mem_fun(*work_area, &studio::WorkArea::toggle_grid_snap)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Toggle Guide Snap"),Gtk::AccelKey('k',Gdk::CONTROL_MASK),
-               sigc::mem_fun(*work_area, &studio::WorkArea::toggle_guide_snap)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Toggle Low-Res"),Gtk::AccelKey('`',Gdk::CONTROL_MASK),
-               sigc::mem_fun(*work_area, &studio::WorkArea::toggle_low_resolution_flag)));
-
-       viewmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-
-       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-in"),Gtk::AccelKey('=',static_cast<Gdk::ModifierType>(0)),
-               sigc::mem_fun(*work_area, &studio::WorkArea::zoom_in)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-out"),Gtk::AccelKey('-',static_cast<Gdk::ModifierType>(0)),
-               sigc::mem_fun(*work_area, &studio::WorkArea::zoom_out)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-fit"),
-               sigc::mem_fun(*work_area, &studio::WorkArea::zoom_fit)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-100"),Gtk::AccelKey('`',static_cast<Gdk::ModifierType>(0)),
-               sigc::mem_fun(*work_area, &studio::WorkArea::zoom_norm)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-
-       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-in"),Gtk::AccelKey('+',static_cast<Gdk::ModifierType>(0)),
-               sigc::mem_fun(*this, &studio::CanvasView::time_zoom_in)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-out"),Gtk::AccelKey('_',static_cast<Gdk::ModifierType>(0)),
-               sigc::mem_fun(*this, &studio::CanvasView::time_zoom_out)));
-
-       viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Jump to Next Keyframe"),Gtk::AccelKey(']',static_cast<Gdk::ModifierType>(0)),
-               sigc::mem_fun(*canvas_interface().get(), &synfigapp::CanvasInterface::jump_to_next_keyframe)));
-       viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Jump to Prev Keyframe"),Gtk::AccelKey('[',static_cast<Gdk::ModifierType>(0)),
-               sigc::mem_fun(*canvas_interface().get(), &synfigapp::CanvasInterface::jump_to_prev_keyframe)));
-
-       mainmenu.items().push_back(Gtk::Menu_Helpers::TearoffMenuElem());
-       mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_File"),filemenu));
-       mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Edit"),editmenu));
-       mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_View"),viewmenu));
-       mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Canvas"),canvasmenu));
-       mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Layer"),layermenu));
-
-       mainmenu.accelerate(*this);
-
-/*
-       {
-
-               trackmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("New Waypoint"),NOT_IMPLEMENTED_SLOT));
-               trackmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Delete Waypoint"),NOT_IMPLEMENTED_SLOT));
-               trackmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Export"),NOT_IMPLEMENTED_SLOT));
-               trackmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
-               trackmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Properties"),NOT_IMPLEMENTED_SLOT));
-       }
-*/
-       mainmenu.show();
-       filemenu.show();
-       editmenu.show();
-       canvasmenu.show();
-       layermenu.show();
-
-       keyframemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-properties"),
-               sigc::mem_fun(*this,&studio::CanvasView::show_keyframe_dialog)
-       ));
-
-
-       get_accel_group()->unlock();
-
-       //Set the accelerator paths for all the menus
-       filemenu.set_accel_path("<synfig>/File");
-       editmenu.set_accel_path("<synfig>/Edit");
-       layermenu.set_accel_path("<synfig>/Layer");
-       //mainmenu.set_accel_path("<synfig-main>");
-       canvasmenu.set_accel_path("<synfig>/Canvas");
-       viewmenu.set_accel_path("<synfig>/View");
-       duckmaskmenu.set_accel_path("<synfig>/DuckMask");
+//
+//     //Test some key stuff
+//
+//     filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-save"),
+//             hide_return(sigc::mem_fun(*get_instance().get(), &studio::Instance::save))));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-save-as"),sigc::hide_return(sigc::mem_fun(*get_instance(), &studio::Instance::dialog_save_as))));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-revert-to-saved"),hide_return(sigc::mem_fun(*get_instance().get(), &studio::Instance::safe_revert))));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//
+//     filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("synfig-cvs_add"),sigc::hide_return(sigc::mem_fun(*get_instance(), &studio::Instance::dialog_cvs_add))));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("synfig-cvs_update"),sigc::hide_return(sigc::mem_fun(*get_instance(), &studio::Instance::dialog_cvs_update))));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("synfig-cvs_commit"),sigc::hide_return(sigc::mem_fun(*get_instance(), &studio::Instance::dialog_cvs_commit))));
+//
+//     filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//     filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Import..."),Gtk::AccelKey('I',Gdk::CONTROL_MASK),sigc::hide_return(sigc::mem_fun(*this, &studio::CanvasView::image_import))));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//     filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Render"),Gtk::AccelKey("F9"),
+//             sigc::mem_fun(render_settings,&studio::RenderSettings::present)
+//     ));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Preview"),Gtk::AccelKey("F11"),
+//             sigc::mem_fun(*this,&CanvasView::on_preview_option)
+//     ));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Sound File"),
+//             sigc::mem_fun(*this,&CanvasView::on_audio_option)
+//     ));
+//
+//     filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//     filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Options"),Gtk::AccelKey("F12"),
+//             sigc::mem_fun(canvas_options,&studio::CanvasOptions::present)
+//     ));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//     filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Close View"),
+//             sigc::hide_return(sigc::mem_fun(*this,&studio::CanvasView::close_view))
+//     ));
+//     filemenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Close Document"),
+//             sigc::hide_return(sigc::mem_fun(*this,&studio::CanvasView::close_document))
+//     ));
+//
+//     editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-undo"),Gtk::AccelKey('Z',Gdk::CONTROL_MASK),SLOT_EVENT(EVENT_UNDO)));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-redo"),Gtk::AccelKey('R',Gdk::CONTROL_MASK),SLOT_EVENT(EVENT_REDO)));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//     editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-cut"),NOT_IMPLEMENTED_SLOT));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-copy"),NOT_IMPLEMENTED_SLOT));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-paste"),NOT_IMPLEMENTED_SLOT));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//     editmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Select All Ducks"),Gtk::AccelKey('E',Gdk::CONTROL_MASK),sigc::mem_fun(*work_area,&studio::WorkArea::select_all_ducks)));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Unselect All Layers"),Gtk::AccelKey('D',Gdk::CONTROL_MASK),sigc::mem_fun(*this,&CanvasView::on_unselect_layers)));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//
+//     //editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-stop"),Gtk::AccelKey(GDK_Escape,static_cast<Gdk::ModifierType>(0)),sigc::hide_return(sigc::mem_fun(*this, &studio::CanvasView::stop))));
+//     //editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-refresh"),Gtk::AccelKey('k',Gdk::CONTROL_MASK),sigc::hide_return(sigc::mem_fun(*this, &studio::CanvasView::on_refresh_pressed))));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-stop"),Gtk::AccelKey(GDK_Escape,static_cast<Gdk::ModifierType>(0)),SLOT_EVENT(EVENT_STOP)));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-refresh"),Gtk::AccelKey('k',Gdk::CONTROL_MASK),SLOT_EVENT(EVENT_REFRESH)));
+//     editmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//     editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-properties"),Gtk::AccelKey("F8"),
+//             sigc::mem_fun(canvas_properties,&studio::CanvasProperties::present)
+//     ));
+//
+//     build_new_layer_menu(newlayermenu);
+//     layermenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("New"),newlayermenu));
+//
+//
+//     {
+//             synfigapp::Action::ParamList param_list;
+//             param_list.add("canvas",Canvas::Handle(get_canvas()));
+//             param_list.add("canvas_interface",canvas_interface());
+//             add_actions_to_menu(&canvasmenu, param_list,synfigapp::Action::CATEGORY_CANVAS);
+//     }
+//
+//
+//     //canvasmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Keyframe Dialog"),sigc::mem_fun(keyframe_dialog,&studio::Dialog_Keyframe::present)));
+//
+//     // Duck Mask Menu
+//     if(1)
+//             {
+//             duckmaskmenu.items().push_back(Gtk::Menu_Helpers::TearoffMenuElem());
+//
+//             duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Position Ducks"),Gtk::AccelKey('1',Gdk::MOD1_MASK)));
+//             duck_mask_position=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
+//             duck_mask_position->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_POSITION));
+//             duck_mask_position->signal_toggled().connect(
+//                     sigc::bind(
+//                             sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
+//                             Duck::TYPE_POSITION
+//                     )
+//             );
+//
+//             duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Vertex Ducks"),Gtk::AccelKey('2',Gdk::MOD1_MASK)));
+//             duck_mask_vertex=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
+//             duck_mask_vertex->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_VERTEX));
+//             duck_mask_vertex->signal_toggled().connect(
+//                     sigc::bind(
+//                             sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
+//                             Duck::TYPE_VERTEX
+//                     )
+//             );
+//
+//             duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Tangent Ducks"),Gtk::AccelKey('3',Gdk::MOD1_MASK)));
+//             duck_mask_tangent=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
+//             duck_mask_tangent->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_TANGENT));
+//             duck_mask_tangent->signal_toggled().connect(
+//                     sigc::bind(
+//                             sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
+//                             Duck::TYPE_TANGENT
+//                     )
+//             );
+//
+//             duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Radius Ducks"),Gtk::AccelKey('4',Gdk::MOD1_MASK)));
+//             duck_mask_radius=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
+//             duck_mask_radius->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_RADIUS));
+//             duck_mask_radius->signal_toggled().connect(
+//                     sigc::bind(
+//                             sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
+//                             Duck::TYPE_RADIUS
+//                     )
+//             );
+//
+//             duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Width Ducks"),Gtk::AccelKey('5',Gdk::MOD1_MASK)));
+//             duck_mask_width=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
+//             duck_mask_width->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_WIDTH));
+//             duck_mask_width->signal_toggled().connect(
+//                     sigc::bind(
+//                             sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
+//                             Duck::TYPE_WIDTH
+//                     )
+//             );
+//
+//             duckmaskmenu.items().push_back(Gtk::Menu_Helpers::CheckMenuElem(_("Angle Ducks"),Gtk::AccelKey('6',Gdk::MOD1_MASK)));
+//             duck_mask_angle=static_cast<Gtk::CheckMenuItem*>(&duckmaskmenu.items().back());
+//             duck_mask_angle->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_ANGLE));
+//             duck_mask_angle->signal_toggled().connect(
+//                     sigc::bind(
+//                             sigc::mem_fun(*this, &studio::CanvasView::toggle_duck_mask),
+//                             Duck::TYPE_ANGLE
+//                     )
+//             );
+//
+//             viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Mask Ducks"),duckmaskmenu));
+//     }
+//
+//     // Preview Quality Menu
+//     if(1)
+//     {
+//             qualitymenu.items().push_back(Gtk::Menu_Helpers::TearoffMenuElem());
+//             int i;
+//             qualitymenu.items().push_back(Gtk::Menu_Helpers::MenuElem(strprintf(_("Use Parametric Renderer"),0),
+//                     sigc::bind(
+//                             sigc::mem_fun(*work_area, &studio::WorkArea::set_quality),
+//                             0
+//                     )
+//             ));
+//             for(i=1;i<=10;i++)
+//             {
+//                     qualitymenu.items().push_back(Gtk::Menu_Helpers::MenuElem(strprintf(_("Set Quality to %d"),i),Gtk::AccelKey('0'+(i%10),Gdk::CONTROL_MASK),
+//                             sigc::bind(
+//                                     sigc::mem_fun(*work_area, &studio::WorkArea::set_quality),
+//                                     i
+//                             )
+//                     ));
+//             }
+//             viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Preview Quality"),qualitymenu));
+//     }
+//
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::Stock::MEDIA_PLAY,
+//             sigc::mem_fun(*this, &studio::CanvasView::play)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("Flipbook Dialog"),
+//             sigc::mem_fun(*preview_dialog, &studio::Dialog_Preview::present)));
+//
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Toggle Grid Show"),Gtk::AccelKey('g',Gdk::CONTROL_MASK),
+//             sigc::mem_fun(*work_area, &studio::WorkArea::toggle_grid)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Toggle Grid Snap"),Gtk::AccelKey('l',Gdk::CONTROL_MASK),
+//             sigc::mem_fun(*work_area, &studio::WorkArea::toggle_grid_snap)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Toggle Guide Snap"),Gtk::AccelKey('k',Gdk::CONTROL_MASK),
+//             sigc::mem_fun(*work_area, &studio::WorkArea::toggle_guide_snap)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Toggle Low-Res"),Gtk::AccelKey('`',Gdk::CONTROL_MASK),
+//             sigc::mem_fun(*work_area, &studio::WorkArea::toggle_low_resolution_flag)));
+//
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-in"),Gtk::AccelKey('=',static_cast<Gdk::ModifierType>(0)),
+//             sigc::mem_fun(*work_area, &studio::WorkArea::zoom_in)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-out"),Gtk::AccelKey('-',static_cast<Gdk::ModifierType>(0)),
+//             sigc::mem_fun(*work_area, &studio::WorkArea::zoom_out)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-fit"),
+//             sigc::mem_fun(*work_area, &studio::WorkArea::zoom_fit)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-100"),Gtk::AccelKey('`',static_cast<Gdk::ModifierType>(0)),
+//             sigc::mem_fun(*work_area, &studio::WorkArea::zoom_norm)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-in"),Gtk::AccelKey('+',static_cast<Gdk::ModifierType>(0)),
+//             sigc::mem_fun(*this, &studio::CanvasView::time_zoom_in)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-zoom-out"),Gtk::AccelKey('_',static_cast<Gdk::ModifierType>(0)),
+//             sigc::mem_fun(*this, &studio::CanvasView::time_zoom_out)));
+//
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Jump to Next Keyframe"),Gtk::AccelKey(']',static_cast<Gdk::ModifierType>(0)),
+//             sigc::mem_fun(*canvas_interface().get(), &synfigapp::CanvasInterface::jump_to_next_keyframe)));
+//     viewmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Jump to Prev Keyframe"),Gtk::AccelKey('[',static_cast<Gdk::ModifierType>(0)),
+//             sigc::mem_fun(*canvas_interface().get(), &synfigapp::CanvasInterface::jump_to_prev_keyframe)));
+//
+//     mainmenu.items().push_back(Gtk::Menu_Helpers::TearoffMenuElem());
+//     mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_File"),filemenu));
+//     mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Edit"),editmenu));
+//     mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_View"),viewmenu));
+//     mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Canvas"),canvasmenu));
+//     mainmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("_Layer"),layermenu));
+//
+//     mainmenu.accelerate(*this);
+//
+///*
+//     {
+//
+//             trackmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("New Waypoint"),NOT_IMPLEMENTED_SLOT));
+//             trackmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Delete Waypoint"),NOT_IMPLEMENTED_SLOT));
+//             trackmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Export"),NOT_IMPLEMENTED_SLOT));
+//             trackmenu.items().push_back(Gtk::Menu_Helpers::SeparatorElem());
+//             trackmenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Properties"),NOT_IMPLEMENTED_SLOT));
+//     }
+//*/
+//     mainmenu.show();
+//     filemenu.show();
+//     editmenu.show();
+//     canvasmenu.show();
+//     layermenu.show();
+//
+//     keyframemenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-properties"),
+//             sigc::mem_fun(*this,&studio::CanvasView::show_keyframe_dialog)
+//     ));
+//
+//
+//     get_accel_group()->unlock();
+//
+//     //Set the accelerator paths for all the menus
+//     filemenu.set_accel_path("<synfig>/File");
+//     editmenu.set_accel_path("<synfig>/Edit");
+//     layermenu.set_accel_path("<synfig>/Layer");
+//     //mainmenu.set_accel_path("<synfig-main>");
+//     canvasmenu.set_accel_path("<synfig>/Canvas");
+//     viewmenu.set_accel_path("<synfig>/View");
+//     duckmaskmenu.set_accel_path("<synfig>/DuckMask");
 #endif
 }
 
@@ -1766,7 +1821,7 @@ CanvasView::popup_layer_menu(synfig::Layer::Handle layer)
 void
 CanvasView::register_layer_type(synfig::Layer::Book::value_type &/*lyr*/,std::map<synfig::String,Gtk::Menu*>* /*category_map*/)
 {
-/*     if(lyr.second.category==_("Do Not Use"))
+/*     if(lyr.second.category==CATEGORY_DO_NOT_USE)
                return;
 
        if(category_map->count(lyr.second.category)==0)
@@ -2517,22 +2572,18 @@ CanvasView::on_keyframe_button_pressed()
 {
        synfigapp::CanvasInterface::Mode mode(get_mode());
 
+       //   future && past   -->             past
        if((mode&synfigapp::MODE_ANIMATE_FUTURE) && (mode&synfigapp::MODE_ANIMATE_PAST))
-       {
                set_mode(get_mode()-synfigapp::MODE_ANIMATE_FUTURE);
-       }
+       //             past   -->   future
        else if(!(mode&synfigapp::MODE_ANIMATE_FUTURE) && (mode&synfigapp::MODE_ANIMATE_PAST))
-       {
-               set_mode(get_mode()-synfigapp::MODE_ANIMATE_PAST|synfigapp::MODE_ANIMATE_FUTURE);
-       }
+               set_mode((get_mode()-synfigapp::MODE_ANIMATE_PAST)|synfigapp::MODE_ANIMATE_FUTURE);
+       //   future           -->       (nothing)
        else if((mode&synfigapp::MODE_ANIMATE_FUTURE) && !(mode&synfigapp::MODE_ANIMATE_PAST))
-       {
                set_mode(get_mode()-synfigapp::MODE_ANIMATE_FUTURE);
-       }
+       //      (nothing)     -->   future && past
        else if(!(mode&synfigapp::MODE_ANIMATE_FUTURE) && !(mode&synfigapp::MODE_ANIMATE_PAST))
-       {
                set_mode(get_mode()|synfigapp::MODE_ANIMATE_FUTURE|synfigapp::MODE_ANIMATE_PAST);
-       }
 }
 
 bool
@@ -2818,6 +2869,55 @@ CanvasView::rebuild_ducks()
 }
 
 void
+CanvasView::decrease_low_res_pixel_size()
+{
+       list<int> sizes = CanvasView::get_pixel_sizes();
+       int pixel_size = work_area->get_low_res_pixel_size();
+
+       for (list<int>::iterator iter = sizes.begin(); iter != sizes.end(); iter++)
+               if (*iter == pixel_size)
+               {
+                       if (iter == sizes.begin())
+                               // we already have the smallest low-res pixels possible - turn off low-res instead
+                               work_area->set_low_resolution_flag(false);
+                       else
+                       {
+                               iter--;
+                               Glib::RefPtr<Gtk::Action> action = action_group->get_action(strprintf("lowres-pixel-%d", *iter));
+                               action->activate(); // to make sure the radiobutton in the menu is updated too
+                               work_area->set_low_resolution_flag(true);
+                       }
+                       break;
+               }
+}
+
+void
+CanvasView::increase_low_res_pixel_size()
+{
+       list<int> sizes = CanvasView::get_pixel_sizes();
+       int pixel_size = work_area->get_low_res_pixel_size();
+
+       if (!work_area->get_low_resolution_flag())
+       {
+               work_area->set_low_resolution_flag(true);
+               return;
+       }
+
+       for (list<int>::iterator iter = sizes.begin(); iter != sizes.end(); iter++)
+               if (*iter == pixel_size)
+               {
+                       iter++;
+                       if (iter != sizes.end())
+                       {
+                               Glib::RefPtr<Gtk::Action> action = action_group->get_action(strprintf("lowres-pixel-%d", *iter));
+                               action->activate(); // to make sure the radiobutton in the menu is updated too
+                               work_area->set_low_resolution_flag(true);
+                       }
+                       break;
+               }
+}
+
+void
 CanvasView::on_dirty_preview()
 {
        if(!is_playing_)
@@ -3016,7 +3116,7 @@ CanvasView::on_waypoint_clicked(synfigapp::ValueDesc value_desc,synfig::Waypoint
                                )
                        ));
 
-                       waypoint_menu->items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("Edit Waypoint"),
+                       waypoint_menu->items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID(_("Edit Waypoint")),
                                sigc::mem_fun(
                                        waypoint_dialog,
                                        &Gtk::Widget::show
@@ -3311,8 +3411,9 @@ CanvasView::toggle_duck_mask(Duckmatic::Type type)
 void
 CanvasView::image_import()
 {
-       String filename(dirname(get_canvas()->get_file_name()));
-       if(App::dialog_open_file(_("Import Image"), filename))
+       // String filename(dirname(get_canvas()->get_file_name()));
+       String filename("*.*");
+       if(App::dialog_open_file(_("Import Image"), filename, IMAGE_DIR_PREFERENCE))
                canvas_interface()->import(filename);
 }
 
@@ -3571,7 +3672,7 @@ CanvasView::set_ext_widget(const synfig::String& x, Gtk::Widget* y)
 }
 
 bool
-CanvasView::on_delete_event(GdkEventAny* event)
+CanvasView::on_delete_event(GdkEventAny* event __attribute__ ((unused)))
 {
        close_view();