diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-07-13 23:09:16 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-07-13 23:09:16 +0000 |
commit | 17bfb7cad584bf985222d3d380e5e5e06c27aff2 (patch) | |
tree | a141f8bf5abca65c08b9fef3aeee9c6e72adcb19 /gtk2_ardour/processor_box.cc | |
parent | 385635c445490f27c2243924e2c53a3fe1dfa56e (diff) |
traverso-style mixer window bindings. note: messes up some bindings when mouse is not in the processor box (fix to follow); notes: m=mute, s=solo, g=gain_up ctrl-g=gain_down r=rec-enable e=show-sends KP_0=toggle processor active status (selected or pointed-at)
git-svn-id: svn://localhost/ardour2/branches/3.0@5356 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/processor_box.cc')
-rw-r--r-- | gtk2_ardour/processor_box.cc | 124 |
1 files changed, 97 insertions, 27 deletions
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index ffa73ff2b8..f2f3543762 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -135,6 +135,7 @@ ProcessorBox::ProcessorBox (Session& sess, PluginSelector &plugsel, processor_display.get_column(0)->set_sizing(TREE_VIEW_COLUMN_FIXED); processor_display.get_column(0)->set_fixed_width(48); processor_display.add_object_drag (columns.processor.index(), "processors"); + processor_display.set_enable_search (false); processor_display.signal_drop.connect (mem_fun (*this, &ProcessorBox::object_drop)); TreeViewColumn* name_col = processor_display.get_column(0); @@ -153,14 +154,16 @@ ProcessorBox::ProcessorBox (Session& sess, PluginSelector &plugsel, pack_start (processor_eventbox, true, true); - processor_eventbox.signal_enter_notify_event().connect (bind ( - sigc::ptr_fun (ProcessorBox::enter_box), - this)); + processor_display.signal_enter_notify_event().connect (mem_fun(*this, &ProcessorBox::enter_notify), false); + processor_display.signal_leave_notify_event().connect (mem_fun(*this, &ProcessorBox::leave_notify), false); + + processor_display.signal_key_press_event().connect (mem_fun(*this, &ProcessorBox::processor_key_press_event)); + processor_display.signal_key_release_event().connect (mem_fun(*this, &ProcessorBox::processor_key_release_event)); processor_display.signal_button_press_event().connect ( - mem_fun(*this, &ProcessorBox::processor_button_press_event), false); + mem_fun(*this, &ProcessorBox::processor_button_press_event), false); processor_display.signal_button_release_event().connect ( - mem_fun(*this, &ProcessorBox::processor_button_release_event)); + mem_fun(*this, &ProcessorBox::processor_button_release_event)); } ProcessorBox::~ProcessorBox () @@ -314,6 +317,91 @@ ProcessorBox::processor_drag_end (GdkDragContext *context) } bool +ProcessorBox::enter_notify (GdkEventCrossing* ev) +{ + _current_processor_box = this; + Keyboard::magic_widget_grab_focus (); + processor_display.grab_focus (); + + return false; +} + +bool +ProcessorBox::leave_notify (GdkEventCrossing* ev) +{ + switch (ev->detail) { + case GDK_NOTIFY_INFERIOR: + break; + default: + Keyboard::magic_widget_drop_focus (); + } + + return false; +} + +bool +ProcessorBox::processor_key_press_event (GdkEventKey *ev) +{ + /* do real stuff on key release */ + return false; +} + +bool +ProcessorBox::processor_key_release_event (GdkEventKey *ev) +{ + bool ret = false; + ProcSelection targets; + + get_selected_processors (targets); + + if (targets.empty()) { + + int x, y; + TreeIter iter; + TreeModel::Path path; + TreeViewColumn* column; + int cellx; + int celly; + + processor_display.get_pointer (x, y); + + if (processor_display.get_path_at_pos (x, y, path, column, cellx, celly)) { + if ((iter = model->get_iter (path))) { + targets.push_back ((*iter)[columns.processor]); + } + } + } + + if (targets.empty()) { + return ret; + } + + switch (ev->keyval) { + case GDK_Delete: + case GDK_BackSpace: + delete_processors (); + ret = true; + break; + + case GDK_KP_0: + for (ProcSelection::iterator i = targets.begin(); i != targets.end(); ++i) { + if ((*i)->active()) { + (*i)->deactivate (); + } else { + (*i)->activate (); + } + } + ret = true; + break; + + default: + break; + } + + return ret; +} + +bool ProcessorBox::processor_button_press_event (GdkEventButton *ev) { TreeIter iter; @@ -392,10 +480,8 @@ ProcessorBox::processor_button_release_event (GdkEventButton *ev) } else { _placement = PostFader; } - cerr << "had processor " << processor->name() << " placement = " << _placement << endl; } else { _placement = PostFader; - cerr << "no processor, postfader\n"; } show_processor_menu (ev->time); @@ -727,7 +813,7 @@ ProcessorBox::processor_name (boost::weak_ptr<Processor> weak_processor) string::size_type lbracket, rbracket; lbracket = send->name().find ('['); rbracket = send->name().find (']'); - + switch (_width) { case Wide: name_display += send->name().substr (lbracket+1, lbracket-rbracket-1); @@ -741,10 +827,10 @@ ProcessorBox::processor_name (boost::weak_ptr<Processor> weak_processor) switch (_width) { case Wide: - name_display += processor->name(); + name_display += processor->display_name(); break; case Narrow: - name_display += PBD::short_version (processor->name(), 5); + name_display += PBD::short_version (processor->display_name(), 5); break; } @@ -826,6 +912,7 @@ ProcessorBox::compute_processor_sort_keys () Route::ProcessorList our_processors; for (Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) { + boost::shared_ptr<Processor> p = (*iter)[columns.processor]; our_processors.push_back ((*iter)[columns.processor]); } @@ -1319,23 +1406,6 @@ ProcessorBox::edit_processor (boost::shared_ptr<Processor> processor) } } -bool -ProcessorBox::enter_box (GdkEventCrossing *ev, ProcessorBox* rb) -{ - switch (ev->detail) { - case GDK_NOTIFY_INFERIOR: - break; - - case GDK_NOTIFY_VIRTUAL: - /* fallthru */ - - default: - _current_processor_box = rb; - } - - return false; -} - void ProcessorBox::register_actions () { |