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
This commit is contained in:
parent
385635c445
commit
17bfb7cad5
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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*);
|
||||
|
||||
|
@ -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 ()
|
||||
@ -313,6 +316,91 @@ ProcessorBox::processor_drag_end (GdkDragContext *context)
|
||||
processor_drag_in_progress = false;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@ -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 ()
|
||||
{
|
||||
|
@ -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 ();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 ();
|
||||
|
Loading…
Reference in New Issue
Block a user