**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
#include <synfigapp/main.h>
#include <synfigapp/inputdevice.h>
+#include "general.h"
+
#endif
/* === U S I N G =========================================================== */
using namespace etl;
using namespace synfig;
using namespace studio;
-using namespace SigC;
+using namespace sigc;
/* === M A C R O S ========================================================= */
view(view)
{
- view->statusbar->push("Idle");
+ view->statusbar->push(_("Idle"));
}
~CanvasViewUIInterface()
virtual bool
error(const std::string &err)
{
- view->statusbar->push("ERROR");
+ view->statusbar->push(_("ERROR"));
// If we are in the process of canceling,
// then just go ahead and return false --
void
not_implemented()
{
- error("Feature not yet implemented");
+ error(_("Feature not yet implemented"));
}
};
{
// assert(view->layer_tree);
- if(!view->layer_tree) { DEBUGPOINT(); synfig::error("canvas_view.layer_tree not defined!?"); return LayerList(); }
+ if(!view->layer_tree) { DEBUGPOINT(); synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return LayerList(); }
return view->layer_tree->get_selected_layers();
}
{
// assert(view->layer_tree);
- if(!view->layer_tree) { DEBUGPOINT(); synfig::error("canvas_view.layer_tree not defined!?"); return 0; }
+ if(!view->layer_tree) { DEBUGPOINT(); synfig::error("%s:%d canvas_view.layer_tree not defined!?", __FILE__, __LINE__); return 0; }
return view->layer_tree->get_selected_layer();
}
{
// assert(view->layer_tree);
- if(!view->layer_tree) { DEBUGPOINT(); synfig::error("canvas_view.layer_tree not defined!?"); return; }
+ if(!view->layer_tree) { DEBUGPOINT(); 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);
}
//! Sets which value_nodes should be selected
- virtual void set_selected_children(const ChildrenList &children_list)
+ virtual void set_selected_children(const ChildrenList &/*children_list*/)
{
return;
}
//! Sets which value_node should be selected. Empty handle if none.
- virtual void set_selected_child(const ChildrenList::value_type &child)
+ virtual void set_selected_child(const ChildrenList::value_type &/*child*/)
{
return;
}
return get_selected_layer_parameters().front();
}
- void set_selected_layer_parameters(const LayerParamList &layer_param_list)
+ void set_selected_layer_parameters(const LayerParamList &/*layer_param_list*/)
{
return;
}
- void set_selected_layer_param(const LayerParam &layer_param)
+ void set_selected_layer_param(const LayerParam &/*layer_param*/)
{
return;
}
//notebook->show();
- //notebook->append_page(*create_layer_tree(),"Layers");
- //notebook->append_page(*create_children_tree(),"Children");
- //notebook->append_page(*create_keyframe_tree(),"Keyframes");
+ //notebook->append_page(*create_layer_tree(),_("Layers"));
+ //notebook->append_page(*create_children_tree(),_("Children"));
+ //notebook->append_page(*create_keyframe_tree(),_("Keyframes"));
//synfig::info("Canvasview: Before big chunk of allocation and tabling stuff");
//create all allocated stuff for this canvas
refresh_time_window();
/*! \todo We shouldn't need to do this at construction --
- ** This should be preformed at the first time the window
+ ** This should be performed at the first time the window
** becomes visible.
*/
work_area->queue_render_preview();
// If the canvas is really big, zoom out so that we can fit it all in the window
/*! \todo In other words, this is a zoom-to-fit, and should be
- ** in it's own function.
+ ** in its own function.
*/
int w=get_canvas()->rend_desc().get_w()+70;
int h=get_canvas()->rend_desc().get_h()+70;
while(w>700 || h>600)
{
+ // Minor hack:
+ // zoom_out() =>
+ // WorkArea::async_update_preview() =>
+ // WorkArea::set_zoom(float) =>
+ // WorkArea::async_update_preview() =>
+ // desc.set_time(cur_time), where cur_time isn't initialized
+ work_area->set_time(0);
work_area->zoom_out();
w=round_to_int(get_canvas()->rend_desc().get_w()*work_area->get_zoom()+70);
h=round_to_int(get_canvas()->rend_desc().get_h()*work_area->get_zoom()+70);
hide();
+ // don't be calling on_dirty_preview once this object has been deleted;
+ // this was causing a crash before
+ canvas_interface()->signal_dirty_preview().clear();
+
synfig::info("CanvasView:~CanvasView(): Destructor Finished");
}
//time_scroll->signal_value_changed().connect(sigc::mem_fun(*work_area, &studio::WorkArea::render_preview_hook));
//time_scroll->set_update_policy(Gtk::UPDATE_DISCONTINUOUS);
- NORMAL_BUTTON(animatebutton,"gtk-yes","Animate");
+ NORMAL_BUTTON(animatebutton,"gtk-yes",_("Animate"));
animatebutton->signal_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_animate_button_pressed));
animatebutton->show();
- NORMAL_BUTTON(keyframebutton,"synfig-keyframe_lock_all","All Keyframes Locked");
+ NORMAL_BUTTON(keyframebutton,"synfig-keyframe_lock_all",_("All Keyframes Locked"));
keyframebutton->signal_clicked().connect(sigc::mem_fun(*this, &studio::CanvasView::on_keyframe_button_pressed));
keyframebutton->show();
Gtk::Table *table= manage(new class Gtk::Table(2, 3, false));
//setup the audio display
- disp_audio->set_size_request(-1,32); //disp_audio.show();
+ disp_audio->set_size_request(-1,32); //disp_audio->show();
disp_audio->set_time_adjustment(&time_adjustment());
disp_audio->signal_start_scrubbing().connect(
sigc::mem_fun(*audio,&AudioContainer::start_scrubbing)
Gtk::Table *statusbartable= manage(new class Gtk::Table(7, 1, false));
// statusbar = manage(new class Gtk::Statusbar()); // This is already done at construction
progressbar =manage(new class Gtk::ProgressBar());
- SMALL_BUTTON(stopbutton,"gtk-stop","Stop");
- SMALL_BUTTON(refreshbutton,"gtk-refresh","Refresh");
- //SMALL_BUTTON(treetogglebutton,"gtk-go-down","Toggle Layer Tree");
-// NEW_SMALL_BUTTON(raisebutton,"gtk-go-up","Raise Layer");
-// NEW_SMALL_BUTTON(lowerbutton,"gtk-go-down","Lower Layer");
+ SMALL_BUTTON(stopbutton,"gtk-stop",_("Stop"));
+ SMALL_BUTTON(refreshbutton,"gtk-refresh",_("Refresh"));
+ //SMALL_BUTTON(treetogglebutton,"gtk-go-down",_("Toggle Layer Tree"));
+// NEW_SMALL_BUTTON(raisebutton,"gtk-go-up",_("Raise Layer"));
+// NEW_SMALL_BUTTON(lowerbutton,"gtk-go-down",_("Lower Layer"));
//statusbartable->attach(*treetogglebutton, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
// statusbartable->attach(*lowerbutton, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
// statusbartable->attach(*raisebutton, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 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");
+ 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);
*/
action_group = Gtk::ActionGroup::create();
- //action_group->add( Gtk::Action::create("MenuFile", "_File") );
+ //action_group->add( Gtk::Action::create("MenuFile", _("_File")) );
action_group->add( Gtk::Action::create("save", Gtk::Stock::SAVE),
hide_return(sigc::mem_fun(*get_instance().get(), &studio::Instance::save))
);
action_group->add( Gtk::Action::create("options", _("Options")),
sigc::mem_fun0(canvas_options,&studio::CanvasOptions::present)
);
- action_group->add( Gtk::Action::create("close", Gtk::StockID("gtk-close")),
- sigc::hide_return(sigc::mem_fun(*this,&studio::CanvasView::close))
+ action_group->add( Gtk::Action::create("close", Gtk::StockID("gtk-close"), _("Close Window")),
+ sigc::hide_return(sigc::mem_fun(*this,&studio::CanvasView::close_view))
+ );
+ 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("undo", Gtk::StockID("gtk-undo")),
);
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)
- action->property_value()=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==9) // default quality
+ {
+ action->set_active();
+ work_area->set_quality(i);
+ }
action_group->add( action,
sigc::bind(
sigc::mem_fun(*work_area, &studio::WorkArea::set_quality),
}
}
- action_group->add( Gtk::Action::create("play", Gtk::StockID("synfig-play")),
+ action_group->add( Gtk::Action::create("play", Gtk::Stock::MEDIA_PLAY),
sigc::mem_fun(*this, &studio::CanvasView::play)
);
action=Gtk::Action::create("seek-prev-frame", Gtk::Stock::GO_BACK,_("Prev Frame"),_("Prev Frame"));
action_group->add( action, sigc::bind(sigc::mem_fun(*canvas_interface().get(), &synfigapp::CanvasInterface::seek_frame),-1));
- action=Gtk::Action::create("seek-next-second", Gtk::Stock::GO_FORWARD,_("Seek Foward"),_("Seek Foward"));
+ action=Gtk::Action::create("seek-next-second", Gtk::Stock::GO_FORWARD,_("Seek Forward"),_("Seek Forward"));
action_group->add(action,sigc::bind(sigc::mem_fun(*canvas_interface().get(), &synfigapp::CanvasInterface::seek_time),Time(1)));
action=Gtk::Action::create("seek-prev-second", Gtk::Stock::GO_BACK,_("Seek Backward"),_("Seek Backward"));
action_group->add( action, sigc::bind(sigc::mem_fun(*canvas_interface().get(), &synfigapp::CanvasInterface::seek_time),Time(-1)));
- // Broken...!?
- /*
action=Gtk::Action::create("seek-end", Gtk::Stock::GOTO_LAST,_("Seek to End"),_("Seek to End"));
action_group->add(action,sigc::bind(sigc::mem_fun(*canvas_interface().get(), &synfigapp::CanvasInterface::seek_time),Time::end()));
- */
+
action=Gtk::Action::create("seek-begin", Gtk::Stock::GOTO_FIRST,_("Seek to Begin"),_("Seek to Begin"));
action_group->add( action, sigc::bind(sigc::mem_fun(*canvas_interface().get(), &synfigapp::CanvasInterface::seek_time),Time::begin()));
}
-#define DUCK_MASK(lower,upper) \
- duck_mask_##lower=Gtk::ToggleAction::create("mask-" #lower "-ducks", _("Show "#lower" ducks")); \
+#define DUCK_MASK(lower,upper,string) \
+ duck_mask_##lower=Gtk::ToggleAction::create("mask-" #lower "-ducks", string); \
duck_mask_##lower->set_active((bool)(work_area->get_type_mask()&Duck::TYPE_##upper)); \
action_group->add( duck_mask_##lower, \
sigc::bind( \
Duck::TYPE_##upper \
) \
)
- DUCK_MASK(position,POSITION);
- DUCK_MASK(tangent,TANGENT);
- DUCK_MASK(vertex,VERTEX);
- DUCK_MASK(radius,RADIUS);
- DUCK_MASK(width,WIDTH);
- DUCK_MASK(angle,ANGLE);
+ DUCK_MASK(position,POSITION,_("Show Position Ducks"));
+ DUCK_MASK(tangent,TANGENT,_("Show Tangent Ducks"));
+ DUCK_MASK(vertex,VERTEX,_("Show Vertex Ducks"));
+ DUCK_MASK(radius,RADIUS,_("Show Radius Ducks"));
+ DUCK_MASK(width,WIDTH,_("Show Width Ducks"));
+ DUCK_MASK(angle,ANGLE,_("Show Angle Ducks"));
#undef DUCK_MASK
add_accel_group(App::ui_manager()->get_accel_group());
#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::StockMenuElem(Gtk::StockID("gtk-close"),sigc::hide_return(sigc::mem_fun(*this,&studio::CanvasView::close))));
-
- 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("synfig-rotoscope_bline"),
- sigc::mem_fun(*this, &studio::CanvasView::do_rotoscope_bline)));
- editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("synfig-rotoscope_polygon"),
- sigc::mem_fun(*this, &studio::CanvasView::do_rotoscope_poly)));
- editmenu.items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("synfig-eyedrop"),
- sigc::mem_fun(*this, &studio::CanvasView::do_eyedrop)));
- 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::StockID("synfig-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
}
}
void
-CanvasView::register_layer_type(synfig::Layer::Book::value_type &lyr,std::map<synfig::String,Gtk::Menu*>* category_map)
+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)
}
void
-CanvasView::build_new_layer_menu(Gtk::Menu &menu)
+CanvasView::build_new_layer_menu(Gtk::Menu &/*menu*/)
{
/*
std::map<synfig::String,Gtk::Menu*> category_map;
bool
-CanvasView::close()
+CanvasView::close_view()
+{
+ if(get_instance()->get_visible_canvases()==1)
+ close_instance();
+ else
+ hide();
+ return false;
+}
+
+static bool _close_instance(etl::handle<Instance> instance)
+{
+ etl::handle<Instance> argh(instance);
+ instance->safe_close();
+ synfig::info("closed");
+ return false;
+}
+
+bool
+CanvasView::close_instance()
{
- get_instance()->safe_close();
+ if (get_work_area()->get_updating())
+ {
+ get_work_area()->stop_updating(true); // stop and mark as cancelled
+
+ // give the workarea chances to stop updating
+ Glib::signal_timeout().connect(
+ sigc::mem_fun(*this, &CanvasView::close_instance),
+ 250);
+ }
+ else
+ Glib::signal_timeout().connect(
+ sigc::bind(sigc::ptr_fun(_close_instance),
+ (etl::handle<Instance>)get_instance()),
+ 250);
return false;
}
handle<CanvasView>
-CanvasView::create(loose_handle<Instance> instance,handle<Canvas> canvas)
+CanvasView::create(etl::loose_handle<Instance> instance, etl::handle<synfig::Canvas> canvas)
{
etl::handle<studio::CanvasView> view(new CanvasView(instance,instance->synfigapp::Instance::find_canvas_interface(canvas)));
instance->canvas_view_list().push_front(view);
{
string title;
+ if(get_instance()->synfigapp::Instance::get_action_count())
+ title="*";
title+=etl::basename(get_instance()->get_file_name())
+" : ";
if(get_canvas()->get_name().empty())
else
title+='"'+get_canvas()->get_name()+'"';
- if(get_instance()->synfigapp::Instance::get_action_count())
- title+=_(" (Unsaved)");
-
if(get_instance()->synfigapp::Instance::in_repository())
{
title+=" (CVS";
}
bool
-CanvasView::on_layer_user_click(int button, Gtk::TreeRow row, LayerTree::ColumnID column_id)
+CanvasView::on_layer_user_click(int button, Gtk::TreeRow /*row*/, LayerTree::ColumnID /*column_id*/)
{
switch(button)
{
parammenu.items().clear();
Gtk::Menu *newlayers(manage(new Gtk::Menu()));
+ // do we need this? the code is all #ifdef'ed out anyway
+ // newlayers->signal_hide().connect(sigc::bind(sigc::ptr_fun(&delete_widget), newlayers));
build_new_layer_menu(*newlayers);
- parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem("New Layer",*newlayers));
+ parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("New Layer"),*newlayers));
if(!multiple_selected && layer->get_name()=="PasteCanvas")
{
parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Select All Children"),
#warning update me!
#if 0
parammenu.items().clear();
- parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem("Connect",
+ parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Connect"),
hide_return(sigc::mem_fun(*canvas_interface().get(),&synfigapp::CanvasInterface::connect_selected_layer_params))
));
- parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem("Disconnect",
+ parammenu.items().push_back(Gtk::Menu_Helpers::MenuElem(_("Disconnect"),
hide_return(sigc::mem_fun(*canvas_interface().get(),&synfigapp::CanvasInterface::disconnect_selected_layer_params))
));
parammenu.popup(0,0);
if(!(bool)row[children_tree_model.is_canvas])
{
synfigapp::ValueDesc value_desc=row[children_tree_model.value_desc];
+ if (!value_desc)
+ {
+ //! \todo fix properly -- what is the child dialog for?
+ synfig::info("preventing child dialog right-click crash");
+ return true;
+ }
assert(value_desc);
popup_param_menu(value_desc);
return true;
void
CanvasView::on_mode_changed(synfigapp::CanvasInterface::Mode mode)
{
- // If the aninimate flag was set in mode...
+ // If the animate flag was set in mode...
if(mode&synfigapp::MODE_ANIMATE)
{
Gtk::Image *icon;
}
bool
-CanvasView::duck_change_param(const Point &value,synfig::Layer::Handle layer, synfig::String param_name)
+CanvasView::duck_change_param(const synfig::Point &value,synfig::Layer::Handle layer, synfig::String param_name)
{
return canvas_interface()->change_value(synfigapp::ValueDesc(layer,param_name),value);
}
return true;
}
+bool
+CanvasView::on_duck_angle_changed(const synfig::Angle &rotation,const synfigapp::ValueDesc& value_desc)
+{
+ // \todo will this really always be the case?
+ assert(value_desc.get_value_type() == ValueBase::TYPE_ANGLE);
+ return canvas_interface()->change_value(value_desc, value_desc.get_value(get_time()).get(Angle()) + rotation);
+}
+
void
-CanvasView::selected_layer_color_set(Color color)
+CanvasView::selected_layer_color_set(synfig::Color color)
{
synfigapp::SelectionManager::LayerList selected_list(get_selection_manager()->get_selected_layers());
synfigapp::SelectionManager::LayerList::iterator iter;
}
void
-CanvasView::rebuild_ducks_layer_(synfig::TransformStack& transform_stack, Canvas::Handle canvas, std::set<synfig::Layer::Handle>& selected_list)
+CanvasView::rebuild_ducks_layer_(synfig::TransformStack& transform_stack, synfig::Canvas::Handle canvas, std::set<synfig::Layer::Handle>& selected_list)
{
int transforms(0);
String layer_name;
// do the bounding box thing
bbox|=transform_stack.perform(layer->get_bounding_rect());
- // Grab the layer's list pf parameters
+ // Grab the layer's list of parameters
Layer::ParamList paramlist(layer->get_param_list());
// Grab the layer vocabulary
if(!work_area->sync_render_preview())
break;
- studio::App::iteration(false);
+ // wait for the workarea to refresh itself
+ while (studio::App::events_pending())
+ studio::App::iteration(false);
if(get_cancel_status())
+ {
+ is_playing_=false;
return;
+ }
}
is_playing_=false;
}
void
-CanvasView::do_rotoscope_bline()
-{
- smach_.enter(&state_bline);
-}
-
-void
-CanvasView::do_rotoscope()
-{
- smach_.enter(&state_draw);
-}
-
-void
-CanvasView::do_rotoscope_poly()
-{
- smach_.enter(&state_polygon);
-}
-
-void
-CanvasView::do_eyedrop()
-{
- smach_.enter(&state_eyedrop);
-}
-
-void
CanvasView::show_timebar()
{
timebar->show();
}
void
-CanvasView::timebar_set_sensitive(bool sensitive)
+CanvasView::set_sensitive_timebar(bool sensitive)
{
timebar->set_sensitive(sensitive);
current_time_widget->set_sensitive(sensitive);
case 2:
{
Gtk::Menu* waypoint_menu(manage(new Gtk::Menu()));
+ waypoint_menu->signal_hide().connect(sigc::bind(sigc::ptr_fun(&delete_widget), waypoint_menu));
waypoint_menu->items().push_back(Gtk::Menu_Helpers::StockMenuElem(Gtk::StockID("gtk-jump-to"),
sigc::bind(
)
));
- 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
}
void
-CanvasView::on_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& selection_data_, guint info, guint time)
+CanvasView::on_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int /*x*/, int /*y*/, const Gtk::SelectionData& selection_data_, guint /*info*/, guint time)
{
// We will make this true once we have a solid drop
bool success(false);
- //synfig::info("Droped data of type \"%s\"",selection_data.get_data_type());
- //synfig::info("Droped data of target \"%s\"",gdk_atom_name(selection_data->target));
+ //synfig::info("Dropped data of type \"%s\"",selection_data.get_data_type());
+ //synfig::info("Dropped data of target \"%s\"",gdk_atom_name(selection_data->target));
//synfig::info("selection=\"%s\"",gdk_atom_name(selection_data->selection));
if ((selection_data_.get_length() >= 0) && (selection_data_.get_format() == 8))
if(!get_instance()->perform_action(action))
break;
- // Ok, we have successfuly imported at least one item.
+ // Ok, we have successfully imported at least one item.
success=true;
} while(0); // END of "STRING"
{
synfig::String selection_data((gchar *)(selection_data_.get_data()));
- // For some reason, GTK hands us a list of URL's seperated
- // by not only Carrage-Returns, but also Line-Feeds.
+ // For some reason, GTK hands us a list of URLs separated
+ // by not only Carriage-Returns, but also Line-Feeds.
// Line-Feeds will mess us up. Remove all the line-feeds.
while(selection_data.find_first_of('\r')!=synfig::String::npos)
selection_data.erase(selection_data.begin()+selection_data.find_first_of('\r'));
// Strip the "file://" part from the filename
filename=synfig::String(filename.begin()+sizeof("file://")-1,filename.end());
- String ext;
- try{ext=(String(filename.begin()+filename.find_last_of('.')+1,filename.end()));}catch(...){continue;}
+ String ext(filename_extension(filename));
+ if (ext.size()) ext = ext.substr(1); // skip initial '.'
// If this is a SIF file, then we need to do things slightly differently
if(ext=="sketch")
Dialog_Preview *pd = preview_dialog.get();
assert(pd);
+ pd->set_default_size(700,510);
pd->set_preview(prev.get());
pd->present();
}
}
void
-CanvasView::on_audio_offset_change(const Time &t)
+CanvasView::on_audio_offset_change(const synfig::Time &t)
{
canvas_interface()->set_meta_data("audiooffset",t.get_string());
}
sound_dialog->set_offset(t);
disp_audio->queue_draw();
- synfig::info("CanvasView::on_audio_offset_notify(): offset time set to %s",t.get_string(get_canvas()->rend_desc().get_frame_rate()).c_str());
+ // synfig::info("CanvasView::on_audio_offset_notify(): offset time set to %s",t.get_string(get_canvas()->rend_desc().get_frame_rate()).c_str());
}
void
keyframe_tree=dynamic_cast<KeyframeTree*>(y);
}
-static bool _close_instance(etl::handle<Instance> instance)
-{
- etl::handle<Instance> argh(instance);
- instance->safe_close();
- synfig::info("closed");
- return false;
-}
-
bool
CanvasView::on_delete_event(GdkEventAny* event)
{
- if(get_instance()->get_visible_canvases()==1)
- {
- // Schedule a close to occur in a few moments
- Glib::signal_timeout().connect(
- sigc::bind(
- sigc::ptr_fun(_close_instance),
- (etl::handle<Instance>)get_instance()
- )
- ,250
- );
- }
- if(event)
- return Gtk::Window::on_delete_event(event);
+ close_view();
+
+ //! \todo This causes the window to be deleted straight away - but what if we prompt 'save?' and the user cancels?
+ // Is there ever any need to pass on the delete event to the window here?
+ // if(event) return Gtk::Window::on_delete_event(event);
return true;
}