diff options
Diffstat (limited to 'src/gui/PatchCanvas.cpp')
-rw-r--r-- | src/gui/PatchCanvas.cpp | 128 |
1 files changed, 65 insertions, 63 deletions
diff --git a/src/gui/PatchCanvas.cpp b/src/gui/PatchCanvas.cpp index 6babbbe1..beb2da23 100644 --- a/src/gui/PatchCanvas.cpp +++ b/src/gui/PatchCanvas.cpp @@ -58,7 +58,6 @@ using namespace Raul; namespace Ingen { namespace GUI { - PatchCanvas::PatchCanvas(SharedPtr<PatchModel> patch, int width, int height) : Canvas(width, height) , _patch(patch) @@ -108,25 +107,36 @@ PatchCanvas::PatchCanvas(SharedPtr<PatchModel> patch, int width, int height) "event_out", "Event Out", "http://lv2plug.in/ns/ext/event#EventPort", true)); // Connect to model signals to track state - _patch->signal_new_node.connect(sigc::mem_fun(this, &PatchCanvas::add_node)); - _patch->signal_removed_node.connect(sigc::mem_fun(this, &PatchCanvas::remove_node)); - _patch->signal_new_port.connect(sigc::mem_fun(this, &PatchCanvas::add_port)); - _patch->signal_removed_port.connect(sigc::mem_fun(this, &PatchCanvas::remove_port)); - _patch->signal_new_connection.connect(sigc::mem_fun(this, &PatchCanvas::connection)); - _patch->signal_removed_connection.connect(sigc::mem_fun(this, &PatchCanvas::disconnection)); - - App::instance().store()->signal_new_plugin.connect(sigc::mem_fun(this, &PatchCanvas::add_plugin)); + _patch->signal_new_node.connect( + sigc::mem_fun(this, &PatchCanvas::add_node)); + _patch->signal_removed_node.connect( + sigc::mem_fun(this, &PatchCanvas::remove_node)); + _patch->signal_new_port.connect( + sigc::mem_fun(this, &PatchCanvas::add_port)); + _patch->signal_removed_port.connect( + sigc::mem_fun(this, &PatchCanvas::remove_port)); + _patch->signal_new_connection.connect( + sigc::mem_fun(this, &PatchCanvas::connection)); + _patch->signal_removed_connection.connect( + sigc::mem_fun(this, &PatchCanvas::disconnection)); + + App::instance().store()->signal_new_plugin.connect( + sigc::mem_fun(this, &PatchCanvas::add_plugin)); // Connect widget signals to do things - _menu_load_plugin->signal_activate().connect(sigc::mem_fun(this, &PatchCanvas::menu_load_plugin)); - _menu_load_patch->signal_activate().connect(sigc::mem_fun(this, &PatchCanvas::menu_load_patch)); - _menu_new_patch->signal_activate().connect(sigc::mem_fun(this, &PatchCanvas::menu_new_patch)); - _menu_edit->signal_activate().connect(sigc::mem_fun(this, &PatchCanvas::menu_edit_toggled)); + _menu_load_plugin->signal_activate().connect( + sigc::mem_fun(this, &PatchCanvas::menu_load_plugin)); + _menu_load_patch->signal_activate().connect( + sigc::mem_fun(this, &PatchCanvas::menu_load_patch)); + _menu_new_patch->signal_activate().connect( + sigc::mem_fun(this, &PatchCanvas::menu_new_patch)); + _menu_edit->signal_activate().connect( + sigc::mem_fun(this, &PatchCanvas::menu_edit_toggled)); - _patch->signal_editable.connect(sigc::mem_fun(this, &PatchCanvas::patch_editable_changed)); + _patch->signal_editable.connect( + sigc::mem_fun(this, &PatchCanvas::patch_editable_changed)); } - void PatchCanvas::show_menu(bool position, unsigned button, uint32_t time) { @@ -139,7 +149,6 @@ PatchCanvas::show_menu(bool position, unsigned button, uint32_t time) _menu->popup(button, time); } - void PatchCanvas::build_menus() { @@ -147,7 +156,9 @@ PatchCanvas::build_menus() if (_internal_menu) { _internal_menu->items().clear(); } else { - _menu->items().push_back(Gtk::Menu_Helpers::ImageMenuElem("I_nternal", + _menu->items().push_back( + Gtk::Menu_Helpers::ImageMenuElem( + "I_nternal", *(manage(new Gtk::Image(Gtk::Stock::EXECUTE, Gtk::ICON_SIZE_MENU))))); Gtk::MenuItem* internal_menu_item = &(_menu->items().back()); _internal_menu = Gtk::manage(new Gtk::Menu()); @@ -218,7 +229,8 @@ PatchCanvas::build_plugin_class_menu( Gtk::Menu* submenu = Gtk::manage(new Gtk::Menu()); menu_item->set_submenu(*submenu); - size_t num_child_items = build_plugin_class_menu(submenu, c, classes, children, ancestors); + size_t num_child_items = build_plugin_class_menu( + submenu, c, classes, children, ancestors); _class_menus.insert(make_pair(sub_uri_str, MenuRecord(menu_item, submenu))); if (num_child_items == 0) @@ -231,14 +243,15 @@ PatchCanvas::build_plugin_class_menu( return num_items; } - void PatchCanvas::build_plugin_menu() { if (_plugin_menu) { _plugin_menu->items().clear(); } else { - _menu->items().push_back(Gtk::Menu_Helpers::ImageMenuElem("_Plugin", + _menu->items().push_back( + Gtk::Menu_Helpers::ImageMenuElem( + "_Plugin", *(manage(new Gtk::Image(Gtk::Stock::EXECUTE, Gtk::ICON_SIZE_MENU))))); Gtk::MenuItem* plugin_menu_item = &(_menu->items().back()); _plugin_menu = Gtk::manage(new Gtk::Menu()); @@ -290,7 +303,6 @@ PatchCanvas::build() } } - void PatchCanvas::arrange(bool use_length_hints, bool center) { @@ -300,7 +312,6 @@ PatchCanvas::arrange(bool use_length_hints, bool center) (*i)->store_location(); } - void PatchCanvas::show_human_names(bool b) { @@ -316,7 +327,6 @@ PatchCanvas::show_human_names(bool b) } } - void PatchCanvas::show_port_names(bool b) { @@ -328,7 +338,6 @@ PatchCanvas::show_port_names(bool b) } } - void PatchCanvas::add_plugin(SharedPtr<PluginModel> p) { @@ -362,11 +371,14 @@ PatchCanvas::add_plugin(SharedPtr<PluginModel> p) Gtk::Menu* menu = i->second.menu; if (icon) { Gtk::Image* image = new Gtk::Image(icon); - menu->items().push_back(Gtk::Menu_Helpers::ImageMenuElem(p->human_name(), - *image, + menu->items().push_back( + Gtk::Menu_Helpers::ImageMenuElem( + p->human_name(), *image, sigc::bind(sigc::mem_fun(this, &PatchCanvas::load_plugin), p))); } else { - menu->items().push_back(Gtk::Menu_Helpers::MenuElem(p->human_name(), + menu->items().push_back( + Gtk::Menu_Helpers::MenuElem( + p->human_name(), sigc::bind(sigc::mem_fun(this, &PatchCanvas::load_plugin), p))); } if (!i->second.item->is_visible()) @@ -376,7 +388,6 @@ PatchCanvas::add_plugin(SharedPtr<PluginModel> p) } } - void PatchCanvas::add_node(SharedPtr<NodeModel> nm) { @@ -399,7 +410,6 @@ PatchCanvas::add_node(SharedPtr<NodeModel> nm) _views.insert(std::make_pair(nm, module)); } - void PatchCanvas::remove_node(SharedPtr<NodeModel> nm) { @@ -411,7 +421,6 @@ PatchCanvas::remove_node(SharedPtr<NodeModel> nm) } } - void PatchCanvas::add_port(SharedPtr<PortModel> pm) { @@ -424,7 +433,6 @@ PatchCanvas::add_port(SharedPtr<PortModel> pm) view->show(); } - void PatchCanvas::remove_port(SharedPtr<PortModel> pm) { @@ -446,7 +454,6 @@ PatchCanvas::remove_port(SharedPtr<PortModel> pm) assert(_views.find(pm) == _views.end()); } - SharedPtr<FlowCanvas::Port> PatchCanvas::get_port_view(SharedPtr<PortModel> port) { @@ -472,7 +479,6 @@ PatchCanvas::get_port_view(SharedPtr<PortModel> port) return SharedPtr<FlowCanvas::Port>(); } - void PatchCanvas::connection(SharedPtr<ConnectionModel> cm) { @@ -490,7 +496,6 @@ PatchCanvas::connection(SharedPtr<ConnectionModel> cm) } } - void PatchCanvas::disconnection(SharedPtr<ConnectionModel> cm) { @@ -504,7 +509,6 @@ PatchCanvas::disconnection(SharedPtr<ConnectionModel> cm) << cm->src_port_path() << " -> " << cm->dst_port_path() << endl; } - void PatchCanvas::connect(boost::shared_ptr<FlowCanvas::Connectable> src_port, boost::shared_ptr<FlowCanvas::Connectable> dst_port) @@ -521,7 +525,6 @@ PatchCanvas::connect(boost::shared_ptr<FlowCanvas::Connectable> src_port, App::instance().engine()->connect(src->model()->path(), dst->model()->path()); } - void PatchCanvas::disconnect(boost::shared_ptr<FlowCanvas::Connectable> src_port, boost::shared_ptr<FlowCanvas::Connectable> dst_port) @@ -536,7 +539,6 @@ PatchCanvas::disconnect(boost::shared_ptr<FlowCanvas::Connectable> src_port, dst->model()->path()); } - void PatchCanvas::auto_menu_position(int& x, int& y, bool& push_in) { @@ -559,7 +561,6 @@ PatchCanvas::auto_menu_position(int& x, int& y, bool& push_in) _auto_position_scroll_offsets = scroll_offsets; } - bool PatchCanvas::canvas_event(GdkEvent* event) { @@ -605,16 +606,21 @@ PatchCanvas::canvas_event(GdkEvent* event) return (ret ? true : Canvas::canvas_event(event)); } +#define FOREACH_ITEM(iter, coll) \ + for (list<boost::shared_ptr<Item> >::iterator (iter) = coll.begin(); \ + (iter) != coll.end(); ++(iter)) void PatchCanvas::destroy_selection() { - for (list<boost::shared_ptr<Item> >::iterator m = _selected_items.begin(); m != _selected_items.end(); ++m) { - boost::shared_ptr<NodeModule> module = boost::dynamic_pointer_cast<NodeModule>(*m); + FOREACH_ITEM(m, _selected_items) { + boost::shared_ptr<NodeModule> module( + boost::dynamic_pointer_cast<NodeModule>(*m)); if (module) { App::instance().engine()->del(module->node()->path()); } else { - boost::shared_ptr<PatchPortModule> port_module = boost::dynamic_pointer_cast<PatchPortModule>(*m); + boost::shared_ptr<PatchPortModule> port_module( + boost::dynamic_pointer_cast<PatchPortModule>(*m)); if (port_module) App::instance().engine()->del(port_module->port()->path()); } @@ -625,7 +631,7 @@ void PatchCanvas::select_all() { unselect_ports(); - for (list<boost::shared_ptr<Item> >::iterator m = _items.begin(); m != _items.end(); ++m) + FOREACH_ITEM(m, _items) if (boost::dynamic_pointer_cast<FlowCanvas::Module>(*m)) if (!(*m)->selected()) select_item(*m); @@ -638,12 +644,14 @@ PatchCanvas::copy_selection() Serialiser serialiser(*App::instance().world(), App::instance().store()); serialiser.start_to_string(_patch->path(), base_uri); - for (list<boost::shared_ptr<Item> >::iterator m = _selected_items.begin(); m != _selected_items.end(); ++m) { - boost::shared_ptr<NodeModule> module = boost::dynamic_pointer_cast<NodeModule>(*m); + FOREACH_ITEM(m, _selected_items) { + boost::shared_ptr<NodeModule> module( + boost::dynamic_pointer_cast<NodeModule>(*m)); if (module) { serialiser.serialise(module->node()); } else { - boost::shared_ptr<PatchPortModule> port_module = boost::dynamic_pointer_cast<PatchPortModule>(*m); + boost::shared_ptr<PatchPortModule> port_module( + boost::dynamic_pointer_cast<PatchPortModule>(*m)); if (port_module) serialiser.serialise(port_module->port()); } @@ -666,7 +674,6 @@ PatchCanvas::copy_selection() clipboard->set_text(result); } - void PatchCanvas::paste() { @@ -686,13 +693,14 @@ PatchCanvas::paste() ClientStore clipboard(App::instance().world()->uris()); clipboard.set_plugins(App::instance().store()->plugins()); - // mkdir -p string to_create = _patch->path().chop_scheme().substr(1); string created = "/"; Resource::Properties props; - props.insert(make_pair(uris.rdf_type, uris.ingen_Patch)); - props.insert(make_pair(uris.ingen_polyphony, Raul::Atom(int32_t(_patch->internal_poly())))); + props.insert(make_pair(uris.rdf_type, + uris.ingen_Patch)); + props.insert(make_pair(uris.ingen_polyphony, + Raul::Atom(int32_t(_patch->internal_poly())))); clipboard.put(Path(), props); size_t first_slash; while (to_create != "/" && !to_create.empty() @@ -747,7 +755,6 @@ PatchCanvas::paste() } } - void PatchCanvas::generate_port_name( const string& sym_base, string& symbol, @@ -771,7 +778,6 @@ PatchCanvas::generate_port_name( name.append(" ").append(num_buf); } - void PatchCanvas::menu_add_port(const string& sym_base, const string& name_base, const Raul::URI& type, bool is_output) @@ -783,14 +789,17 @@ PatchCanvas::menu_add_port(const string& sym_base, const string& name_base, const LV2URIMap& uris = App::instance().uris(); Resource::Properties props = get_initial_data(); - props.insert(make_pair(uris.rdf_type, type)); - props.insert(make_pair(uris.rdf_type, is_output ? uris.lv2_OutputPort : uris.lv2_InputPort)); - props.insert(make_pair(uris.lv2_index, Atom(int32_t(_patch->num_ports())))); - props.insert(make_pair(uris.lv2_name, Atom(name.c_str()))); + props.insert(make_pair(uris.rdf_type, + type)); + props.insert(make_pair(uris.rdf_type, + is_output ? uris.lv2_OutputPort : uris.lv2_InputPort)); + props.insert(make_pair(uris.lv2_index, + Atom(int32_t(_patch->num_ports())))); + props.insert(make_pair(uris.lv2_name, + Atom(name.c_str()))); App::instance().engine()->put(path, props); } - void PatchCanvas::load_plugin(WeakPtr<PluginModel> weak_plugin) { @@ -816,7 +825,6 @@ PatchCanvas::load_plugin(WeakPtr<PluginModel> weak_plugin) App::instance().engine()->put(path, props); } - /** Try to guess a suitable location for a new module. */ void @@ -829,7 +837,6 @@ PatchCanvas::get_new_module_location(double& x, double& y) y = scroll_y + 20; } - GraphObject::Properties PatchCanvas::get_initial_data() { @@ -846,28 +853,24 @@ PatchCanvas::menu_load_plugin() App::instance().window_factory()->present_load_plugin(_patch, get_initial_data()); } - void PatchCanvas::menu_load_patch() { App::instance().window_factory()->present_load_subpatch(_patch, get_initial_data()); } - void PatchCanvas::menu_new_patch() { App::instance().window_factory()->present_new_subpatch(_patch, get_initial_data()); } - void PatchCanvas::menu_edit_toggled() { _patch->set_editable(_menu_edit->get_active()); } - void PatchCanvas::patch_editable_changed(bool editable) { @@ -875,6 +878,5 @@ PatchCanvas::patch_editable_changed(bool editable) _menu_edit->set_active(editable); } - } // namespace GUI } // namespace Ingen |