summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/mixer_strip.cc115
-rw-r--r--gtk2_ardour/mixer_strip.h5
-rw-r--r--gtk2_ardour/mixer_ui.cc6
-rw-r--r--gtk2_ardour/mixer_ui.h1
-rw-r--r--gtk2_ardour/processor_box.cc124
-rw-r--r--gtk2_ardour/processor_box.h6
-rw-r--r--gtk2_ardour/route_ui.cc24
-rw-r--r--gtk2_ardour/route_ui.h5
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 ();