From d5a514148bec58cd7e97d032259362b2e19c0e95 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 29 Jan 2010 01:43:54 +0000 Subject: Magic MIDI binding via special ingen_control port. Always set lv2:minimum and lv2:maximum properties for control ports so they show up in properties dialog (and can be used for MIDI binding). git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2391 a436a847-0d15-0410-975c-d299462d15a1 --- src/gui/NodeMenu.cpp | 10 ---------- src/gui/NodeMenu.hpp | 3 --- src/gui/ObjectMenu.cpp | 13 +++++++++++++ src/gui/ObjectMenu.hpp | 2 ++ src/gui/Port.cpp | 6 ++++-- src/gui/PortMenu.cpp | 3 +++ src/gui/ingen_gui.glade | 18 ++++++++---------- 7 files changed, 30 insertions(+), 25 deletions(-) (limited to 'src/gui') diff --git a/src/gui/NodeMenu.cpp b/src/gui/NodeMenu.cpp index d667181a..f676ed79 100644 --- a/src/gui/NodeMenu.cpp +++ b/src/gui/NodeMenu.cpp @@ -37,13 +37,11 @@ NodeMenu::NodeMenu(BaseObjectType* cobject, const Glib::RefPtrget_widget("node_menu", node_menu); - xml->get_widget("node_learn_menuitem", _learn_menuitem); xml->get_widget("node_controls_menuitem", _controls_menuitem); xml->get_widget("node_popup_gui_menuitem", _popup_gui_menuitem); xml->get_widget("node_embed_gui_menuitem", _embed_gui_menuitem); xml->get_widget("node_randomize_menuitem", _randomize_menuitem); - node_menu->remove(*_learn_menuitem); node_menu->remove(*_controls_menuitem); node_menu->remove(*_popup_gui_menuitem); node_menu->remove(*_embed_gui_menuitem); @@ -54,7 +52,6 @@ NodeMenu::NodeMenu(BaseObjectType* cobject, const Glib::RefPtrmidi_learn(_object->path()); -} - - void NodeMenu::on_menu_disconnect() { diff --git a/src/gui/NodeMenu.hpp b/src/gui/NodeMenu.hpp index 29abc603..dc9c2cfe 100644 --- a/src/gui/NodeMenu.hpp +++ b/src/gui/NodeMenu.hpp @@ -47,17 +47,14 @@ public: sigc::signal signal_embed_gui; protected: - virtual void enable_controls_menuitem(); virtual void disable_controls_menuitem(); void on_menu_disconnect(); - void on_menu_learn(); void on_menu_embed_gui(); void on_menu_randomize(); void on_preset_activated(const std::string uri); - Gtk::MenuItem* _learn_menuitem; Gtk::MenuItem* _controls_menuitem; Gtk::MenuItem* _popup_gui_menuitem; Gtk::CheckMenuItem* _embed_gui_menuitem; diff --git a/src/gui/ObjectMenu.cpp b/src/gui/ObjectMenu.cpp index 261cbd44..781c4359 100644 --- a/src/gui/ObjectMenu.cpp +++ b/src/gui/ObjectMenu.cpp @@ -37,6 +37,7 @@ ObjectMenu::ObjectMenu(BaseObjectType* cobject, const Glib::RefPtrget_widget("object_learn_menuitem", _learn_menuitem); xml->get_widget("object_polyphonic_menuitem", _polyphonic_menuitem); xml->get_widget("object_disconnect_menuitem", _disconnect_menuitem); xml->get_widget("object_rename_menuitem", _rename_menuitem); @@ -57,6 +58,9 @@ ObjectMenu::init(SharedPtr object) _polyphonic_menuitem->set_active(object->polyphonic()); + _learn_menuitem->signal_activate().connect( + sigc::mem_fun(this, &ObjectMenu::on_menu_learn)); + _disconnect_menuitem->signal_activate().connect( sigc::mem_fun(this, &ObjectMenu::on_menu_disconnect)); @@ -72,10 +76,19 @@ ObjectMenu::init(SharedPtr object) object->signal_property.connect(sigc::mem_fun(this, &ObjectMenu::property_changed)); + _learn_menuitem->hide(); + _enable_signal = true; } +void +ObjectMenu::on_menu_learn() +{ + App::instance().engine()->learn(_object->path()); +} + + void ObjectMenu::on_menu_polyphonic() { diff --git a/src/gui/ObjectMenu.hpp b/src/gui/ObjectMenu.hpp index 1a722581..a619c5e4 100644 --- a/src/gui/ObjectMenu.hpp +++ b/src/gui/ObjectMenu.hpp @@ -44,6 +44,7 @@ public: void init(SharedPtr object); protected: + void on_menu_learn(); virtual void on_menu_disconnect() = 0; void on_menu_polyphonic(); void on_menu_destroy(); @@ -53,6 +54,7 @@ protected: bool _enable_signal; SharedPtr _object; + Gtk::MenuItem* _learn_menuitem; Gtk::CheckMenuItem* _polyphonic_menuitem; Gtk::MenuItem* _disconnect_menuitem; Gtk::MenuItem* _rename_menuitem; diff --git a/src/gui/Port.cpp b/src/gui/Port.cpp index bbde8100..fafac68d 100644 --- a/src/gui/Port.cpp +++ b/src/gui/Port.cpp @@ -139,10 +139,12 @@ Port::on_event(GdkEvent* ev) { switch (ev->type) { case GDK_BUTTON_PRESS: - _pressed = true; + if (ev->button.button == 1) + _pressed = true; break; case GDK_BUTTON_RELEASE: - _pressed = false; + if (ev->button.button == 1) + _pressed = false; default: break; } diff --git a/src/gui/PortMenu.cpp b/src/gui/PortMenu.cpp index a32eb662..3cb8c071 100644 --- a/src/gui/PortMenu.cpp +++ b/src/gui/PortMenu.cpp @@ -50,6 +50,9 @@ PortMenu::init(SharedPtr port, bool patch_port) if (port->type() == PortType::EVENTS) _polyphonic_menuitem->hide(); + if (port->type() == PortType::CONTROL) + _learn_menuitem->show(); + _enable_signal = true; } diff --git a/src/gui/ingen_gui.glade b/src/gui/ingen_gui.glade index f294678b..ad84483f 100644 --- a/src/gui/ingen_gui.glade +++ b/src/gui/ingen_gui.glade @@ -2924,6 +2924,7 @@ Thank you for contributing. gtk-properties True + True True @@ -3063,6 +3064,13 @@ Thank you for contributing. True + + + True + _Learn + True + + Dis_connect @@ -3112,16 +3120,6 @@ Thank you for contributing. True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - _Learn - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Learn from the next received event - True - False - - Con_trols... -- cgit v1.2.1