From 9678996bb97e562fde723bc327e600af7d52e0ef Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 15 Dec 2010 06:11:04 +0000 Subject: Don't show `split' menu item for modules with only inputs or outputs (ticket #128). git-svn-id: http://svn.drobilla.net/lad/trunk/patchage@2702 a436a847-0d15-0410-975c-d299462d15a1 --- src/PatchageModule.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/PatchageModule.hpp | 5 +++++ 2 files changed, 44 insertions(+) diff --git a/src/PatchageModule.cpp b/src/PatchageModule.cpp index 416c2b6..d129e2e 100644 --- a/src/PatchageModule.cpp +++ b/src/PatchageModule.cpp @@ -34,6 +34,30 @@ PatchageModule::~PatchageModule() _menu = NULL; } +void +PatchageModule::update_menu() +{ + if (!_menu) + return; + + if (_type == InputOutput) { + bool has_in = false; + bool has_out = false; + for (PortVector::iterator p = _ports.begin(); p != _ports.end(); ++p) { + if ((*p)->is_input()) { + has_in = true; + } else { + has_out = true; + } + if (has_in && has_out) { + _menu->items()[0].show(); // Show "Split" menu item + return; + } + } + _menu->items()[0].hide(); // Hide "Split" menu item + } +} + void PatchageModule::create_menu() { @@ -42,6 +66,7 @@ PatchageModule::create_menu() if (_type == InputOutput) { items.push_back( Gtk::Menu_Helpers::MenuElem("_Split", sigc::mem_fun(this, &PatchageModule::split))); + update_menu(); } else { items.push_back( Gtk::Menu_Helpers::MenuElem("_Join", sigc::mem_fun(this, &PatchageModule::join))); @@ -90,6 +115,20 @@ PatchageModule::join() _app->refresh(); } +void +PatchageModule::add_port(boost::shared_ptr port) +{ + FlowCanvas::Module::add_port(port); + update_menu(); +} + +void +PatchageModule::remove_port(boost::shared_ptr port) +{ + FlowCanvas::Module::remove_port(port); + update_menu(); +} + void PatchageModule::menu_disconnect_all() { diff --git a/src/PatchageModule.hpp b/src/PatchageModule.hpp index fcab207..a2b67ee 100644 --- a/src/PatchageModule.hpp +++ b/src/PatchageModule.hpp @@ -32,10 +32,15 @@ public: PatchageModule(Patchage* app, const std::string& name, ModuleType type, double x=0, double y=0); ~PatchageModule(); + void add_port(boost::shared_ptr port); + void remove_port(boost::shared_ptr port); + void split(); void join(); void create_menu(); + void update_menu(); + void load_location(); void menu_disconnect_all(); void show_dialog() {} -- cgit v1.2.1