diff options
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 115 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.h | 5 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.cc | 124 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.h | 6 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.h | 5 |
8 files changed, 256 insertions, 30 deletions
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 625b2d4faa..a0e3f2e25b 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -295,8 +295,14 @@ MixerStrip::init () else set_name ("AudioTrackStripBase"); - add_events (Gdk::BUTTON_RELEASE_MASK); + add_events (Gdk::BUTTON_RELEASE_MASK| + Gdk::ENTER_NOTIFY_MASK| + Gdk::LEAVE_NOTIFY_MASK| + Gdk::KEY_PRESS_MASK| + Gdk::KEY_RELEASE_MASK); + set_flags (get_flags() | Gtk::CAN_FOCUS); + SwitchIO.connect (mem_fun (*this, &MixerStrip::switch_io)); } @@ -1486,3 +1492,110 @@ MixerStrip::set_button_names () } } + +bool +MixerStrip::on_key_press_event (GdkEventKey* ev) +{ + GdkEventButton fake; + fake.type = GDK_BUTTON_PRESS; + fake.button = 1; + fake.state = ev->state; + + switch (ev->keyval) { + case GDK_m: + mute_press (&fake); + return true; + break; + + case GDK_s: + solo_press (&fake); + return true; + break; + + case GDK_r: + rec_enable_press (&fake); + return true; + break; + + case GDK_e: + show_sends_press (&fake); + return true; + break; + + case GDK_g: + if (ev->state & Keyboard::PrimaryModifier) { + step_gain_down (); + } else { + step_gain_up (); + } + return true; + break; + + default: + break; + } + + return false; +} + + +bool +MixerStrip::on_key_release_event (GdkEventKey* ev) +{ + GdkEventButton fake; + fake.type = GDK_BUTTON_RELEASE; + fake.button = 1; + fake.state = ev->state; + + switch (ev->keyval) { + case GDK_m: + mute_release (&fake); + return true; + break; + + case GDK_s: + solo_release (&fake); + return true; + break; + + case GDK_r: + rec_enable_release (&fake); + return true; + break; + + case GDK_e: + show_sends_release (&fake); + return true; + break; + + case GDK_g: + return true; + break; + + default: + break; + } + + return false; +} + +bool +MixerStrip::on_enter_notify_event (GdkEventCrossing* ev) +{ + Keyboard::magic_widget_grab_focus (); + grab_focus (); + return false; +} + +bool +MixerStrip::on_leave_notify_event (GdkEventCrossing* ev) +{ + switch (ev->detail) { + case GDK_NOTIFY_INFERIOR: + break; + default: + Keyboard::magic_widget_drop_focus (); + } + + return false; +} diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h index f46858b2ca..9bd811a2f7 100644 --- a/gtk2_ardour/mixer_strip.h +++ b/gtk2_ardour/mixer_strip.h @@ -109,6 +109,11 @@ class MixerStrip : public RouteUI, public Gtk::EventBox void set_selected(bool yn); void set_stuff_from_route (); + bool on_leave_notify_event (GdkEventCrossing* ev); + bool on_enter_notify_event (GdkEventCrossing* ev); + bool on_key_press_event (GdkEventKey* ev); + bool on_key_release_event (GdkEventKey* ev); + private: Mixer_UI& _mixer; diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 3010f0b0a1..c3904b7e26 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -1475,6 +1475,12 @@ Mixer_UI::on_key_press_event (GdkEventKey* ev) return key_press_focus_accelerator_handler (*this, ev); } +bool +Mixer_UI::on_key_release_event (GdkEventKey* ev) +{ + return key_press_focus_accelerator_handler (*this, ev); +} + void Mixer_UI::parameter_changed (string const & p) { diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index 894b9b364f..cd95e1143a 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -115,6 +115,7 @@ class Mixer_UI : public Gtk::Window void get_window_pos_and_size (); bool on_key_press_event (GdkEventKey*); + bool on_key_release_event (GdkEventKey*); void pane_allocation_handler (Gtk::Allocation&, Gtk::Paned*); 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 () { diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 32a36c9077..76fabe8d39 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -158,6 +158,10 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject bool no_processor_redisplay; bool ignore_delete; + bool enter_notify (GdkEventCrossing *ev); + bool leave_notify (GdkEventCrossing *ev); + bool processor_key_press_event (GdkEventKey *); + bool processor_key_release_event (GdkEventKey *); bool processor_button_press_event (GdkEventButton *); bool processor_button_release_event (GdkEventButton *); void redisplay_processors (); @@ -208,8 +212,6 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject void weird_plugin_dialog (ARDOUR::Plugin& p, ARDOUR::Route::ProcessorStreams streams); static ProcessorBox* _current_processor_box; - static bool enter_box (GdkEventCrossing*, ProcessorBox*); - static bool leave_box (GdkEventCrossing*, ProcessorBox*); static void rb_choose_plugin (); static void rb_choose_insert (); diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index c32929e35b..c7f835d2df 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -26,6 +26,7 @@ #include <gtkmm2ext/gtk_ui.h> #include "ardour/route_group.h" +#include "ardour/dB.h" #include "pbd/memento_command.h" #include "pbd/stacktrace.h" #include "pbd/shiva.h" @@ -1420,3 +1421,26 @@ RouteUI::parameter_changed (string const & p) } } +void +RouteUI::step_gain_up () +{ + _route->set_gain (dB_to_coefficient (coefficient_to_dB (_route->gain_control()->get_value()) + 0.1), this); +} + +void +RouteUI::page_gain_up () +{ + _route->set_gain (dB_to_coefficient (coefficient_to_dB (_route->gain_control()->get_value()) + 0.5), this); +} + +void +RouteUI::step_gain_down () +{ + _route->set_gain (dB_to_coefficient (coefficient_to_dB (_route->gain_control()->get_value()) - 0.1), this); +} + +void +RouteUI::page_gain_down () +{ + _route->set_gain (dB_to_coefficient (coefficient_to_dB (_route->gain_control()->get_value()) - 0.5), this); +} diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index 3e9d55e62b..2bfbc4452d 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -114,6 +114,11 @@ class RouteUI : public virtual AxisView bool show_sends_press(GdkEventButton*); bool show_sends_release(GdkEventButton*); + void step_gain_up (); + void step_gain_down (); + void page_gain_up (); + void page_gain_down (); + void build_sends_menu (); void set_sends_gain_from_track (); void set_sends_gain_to_zero (); |