redesign cue editor layout to use ArdourButton and GtkBoxen
This commit is contained in:
parent
a1dd7ae4c3
commit
0622f26b2a
@ -74,10 +74,9 @@ MidiCueEditor::MidiCueEditor()
|
|||||||
build_grid_type_menu ();
|
build_grid_type_menu ();
|
||||||
build_draw_midi_menus();
|
build_draw_midi_menus();
|
||||||
|
|
||||||
|
build_upper_toolbar ();
|
||||||
build_canvas ();
|
build_canvas ();
|
||||||
setup_toolbar ();
|
build_lower_toolbar ();
|
||||||
|
|
||||||
_toolbox.pack_start (viewport(), true, true);
|
|
||||||
|
|
||||||
set_mouse_mode (Editing::MouseContent, true);
|
set_mouse_mode (Editing::MouseContent, true);
|
||||||
}
|
}
|
||||||
@ -126,7 +125,33 @@ MidiCueEditor::canvas_pre_event (GdkEvent* ev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MidiCueEditor::setup_toolbar ()
|
MidiCueEditor::build_lower_toolbar ()
|
||||||
|
{
|
||||||
|
velocity_button = new ArdourButton (_("Velocity"), ArdourButton::Text, true);
|
||||||
|
bender_button = new ArdourButton (_("Bender"), ArdourButton::Text, true);
|
||||||
|
pressure_button = new ArdourButton (_("Pressure"), ArdourButton::Text, true);
|
||||||
|
expression_button = new ArdourButton (_("Expression"), ArdourButton::Text, true);
|
||||||
|
modulation_button = new ArdourButton (_("Modulation"), ArdourButton::Text, true);
|
||||||
|
|
||||||
|
// button_bar.set_homogeneous (true);
|
||||||
|
button_bar.set_spacing (6);
|
||||||
|
button_bar.set_border_width (6);
|
||||||
|
button_bar.pack_start (*velocity_button, false, false);
|
||||||
|
button_bar.pack_start (*bender_button, false, false);
|
||||||
|
button_bar.pack_start (*pressure_button, false, false);
|
||||||
|
button_bar.pack_start (*modulation_button, false, false);
|
||||||
|
|
||||||
|
velocity_button->signal_button_press_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiVelocityAutomation, 0), false);
|
||||||
|
pressure_button->signal_button_press_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiChannelPressureAutomation, 0), false);
|
||||||
|
bender_button->signal_button_press_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiPitchBenderAutomation, 0), false);
|
||||||
|
modulation_button->signal_button_press_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_MODWHEEL), false);
|
||||||
|
expression_button->signal_button_press_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_EXPRESSION), false);
|
||||||
|
|
||||||
|
_toolbox.pack_start (button_bar, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiCueEditor::build_upper_toolbar ()
|
||||||
{
|
{
|
||||||
Gtk::HBox* mode_box = manage(new Gtk::HBox);
|
Gtk::HBox* mode_box = manage(new Gtk::HBox);
|
||||||
mode_box->set_border_width (2);
|
mode_box->set_border_width (2);
|
||||||
@ -299,6 +324,8 @@ MidiCueEditor::build_canvas ()
|
|||||||
_canvas->add_events (Gdk::POINTER_MOTION_HINT_MASK | Gdk::SCROLL_MASK | Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
|
_canvas->add_events (Gdk::POINTER_MOTION_HINT_MASK | Gdk::SCROLL_MASK | Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
|
||||||
_canvas->set_can_focus ();
|
_canvas->set_can_focus ();
|
||||||
|
|
||||||
|
_toolbox.pack_start (*_canvas_viewport, true, true);
|
||||||
|
|
||||||
bindings_changed ();
|
bindings_changed ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1775,3 +1802,29 @@ MidiCueEditor::set_region (std::shared_ptr<ARDOUR::MidiRegion> r)
|
|||||||
reset_zoom (spp);
|
reset_zoom (spp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
MidiCueEditor::automation_button_event (GdkEventButton* ev, Evoral::ParameterType type, int id)
|
||||||
|
{
|
||||||
|
SelectionOperation op = ArdourKeyboard::selection_type (ev->state);
|
||||||
|
|
||||||
|
switch (ev->type) {
|
||||||
|
case GDK_BUTTON_RELEASE:
|
||||||
|
automation_button_click (type, id, op);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiCueEditor::automation_button_click (Evoral::ParameterType type, int id, SelectionOperation op)
|
||||||
|
{
|
||||||
|
#warning paul allow channel selection (2nd param)
|
||||||
|
if (view) {
|
||||||
|
view->update_automation_display (Evoral::Parameter (type, 0, id), op);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -171,11 +171,20 @@ class MidiCueEditor : public CueEditor
|
|||||||
|
|
||||||
Gtk::VBox _toolbox;
|
Gtk::VBox _toolbox;
|
||||||
|
|
||||||
|
Gtk::HBox button_bar;
|
||||||
|
ArdourWidgets::ArdourButton* velocity_button;
|
||||||
|
ArdourWidgets::ArdourButton* bender_button;
|
||||||
|
ArdourWidgets::ArdourButton* pressure_button;
|
||||||
|
ArdourWidgets::ArdourButton* expression_button;
|
||||||
|
ArdourWidgets::ArdourButton* modulation_button;
|
||||||
|
|
||||||
CueMidiBackground* bg;
|
CueMidiBackground* bg;
|
||||||
MidiCueView* view;
|
MidiCueView* view;
|
||||||
|
|
||||||
void build_canvas ();
|
void build_canvas ();
|
||||||
void canvas_allocate (Gtk::Allocation);
|
void canvas_allocate (Gtk::Allocation);
|
||||||
|
void build_upper_toolbar ();
|
||||||
|
void build_lower_toolbar ();
|
||||||
|
|
||||||
RegionSelection region_selection();
|
RegionSelection region_selection();
|
||||||
|
|
||||||
@ -199,7 +208,6 @@ class MidiCueEditor : public CueEditor
|
|||||||
BBTMetric bbt_metric;
|
BBTMetric bbt_metric;
|
||||||
|
|
||||||
bool canvas_pre_event (GdkEvent*);
|
bool canvas_pre_event (GdkEvent*);
|
||||||
void setup_toolbar ();
|
|
||||||
|
|
||||||
/* autoscrolling */
|
/* autoscrolling */
|
||||||
|
|
||||||
@ -222,6 +230,9 @@ class MidiCueEditor : public CueEditor
|
|||||||
std::atomic<int> idle_update_queued;
|
std::atomic<int> idle_update_queued;
|
||||||
PBD::ScopedConnectionList capture_connections;
|
PBD::ScopedConnectionList capture_connections;
|
||||||
samplecnt_t data_capture_duration;
|
samplecnt_t data_capture_duration;
|
||||||
|
|
||||||
|
bool automation_button_event (GdkEventButton*, Evoral::ParameterType type, int id);
|
||||||
|
void automation_button_click (Evoral::ParameterType type, int id, ARDOUR::SelectionOperation);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,40 +78,6 @@ MidiCueView::MidiCueView (std::shared_ptr<ARDOUR::MidiTrack> mt,
|
|||||||
automation_group->set_fill_color (UIConfiguration::instance().color ("midi automation track fill"));
|
automation_group->set_fill_color (UIConfiguration::instance().color ("midi automation track fill"));
|
||||||
automation_group->set_data ("linemerger", this);
|
automation_group->set_data ("linemerger", this);
|
||||||
|
|
||||||
button_bar = new ArdourCanvas::Box (&noscroll_parent, ArdourCanvas::Box::Horizontal);
|
|
||||||
CANVAS_DEBUG_NAME (button_bar, "button bar");
|
|
||||||
button_bar->set_spacing (12.);
|
|
||||||
/* Right-side padding only */
|
|
||||||
button_bar->set_padding (0., 0., 0., 24.);
|
|
||||||
button_bar->set_margin (5., 5., 5., 5.);
|
|
||||||
|
|
||||||
Pango::FontDescription button_font = UIConfiguration::instance().get_NormalFont();
|
|
||||||
|
|
||||||
velocity_button = new ArdourCanvas::Button (button_bar, _("Velocity"), button_font);
|
|
||||||
velocity_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
|
||||||
CANVAS_DEBUG_NAME (velocity_button, "velocity button");
|
|
||||||
|
|
||||||
bender_button = new ArdourCanvas::Button (button_bar, _("Bender"), button_font);
|
|
||||||
bender_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
|
||||||
CANVAS_DEBUG_NAME (bender_button, "bender button");
|
|
||||||
|
|
||||||
pressure_button = new ArdourCanvas::Button (button_bar, _("Pressure"), button_font);
|
|
||||||
pressure_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
|
||||||
CANVAS_DEBUG_NAME (pressure_button, "pressure button");
|
|
||||||
|
|
||||||
expression_button = new ArdourCanvas::Button (button_bar, _("Expression"), button_font);
|
|
||||||
expression_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
|
||||||
CANVAS_DEBUG_NAME (expression_button, "expression button");
|
|
||||||
|
|
||||||
modulation_button = new ArdourCanvas::Button (button_bar, _("Modulation"), button_font);
|
|
||||||
modulation_button->text()->set_color (UIConfiguration::instance().color ("neutral:foreground"));
|
|
||||||
CANVAS_DEBUG_NAME (modulation_button, "modulation button");
|
|
||||||
|
|
||||||
velocity_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiVelocityAutomation, 0));
|
|
||||||
pressure_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiChannelPressureAutomation, 0));
|
|
||||||
bender_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiPitchBenderAutomation, 0));
|
|
||||||
modulation_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_MODWHEEL));
|
|
||||||
expression_button->Event.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueView::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_EXPRESSION));
|
|
||||||
|
|
||||||
set_extensible (true);
|
set_extensible (true);
|
||||||
|
|
||||||
@ -128,11 +94,8 @@ MidiCueView::~MidiCueView ()
|
|||||||
void
|
void
|
||||||
MidiCueView::set_height (double h)
|
MidiCueView::set_height (double h)
|
||||||
{
|
{
|
||||||
double bbw, bbh;
|
double note_area_height = ceil (h / 2.);
|
||||||
button_bar->size_request (bbw, bbh);
|
double automation_height = ceil (h - note_area_height);
|
||||||
|
|
||||||
double note_area_height = ceil ((h - bbh) / 2.);
|
|
||||||
double automation_height = ceil (h - bbh - note_area_height);
|
|
||||||
|
|
||||||
event_rect->set (ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, note_area_height));
|
event_rect->set (ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, note_area_height));
|
||||||
midi_context().set_size (midi_context().width(), note_area_height);
|
midi_context().set_size (midi_context().width(), note_area_height);
|
||||||
@ -140,8 +103,6 @@ MidiCueView::set_height (double h)
|
|||||||
automation_group->set_position (ArdourCanvas::Duple (0., note_area_height));
|
automation_group->set_position (ArdourCanvas::Duple (0., note_area_height));
|
||||||
automation_group->set (ArdourCanvas::Rect (0., 0., ArdourCanvas::COORD_MAX, automation_height));
|
automation_group->set (ArdourCanvas::Rect (0., 0., ArdourCanvas::COORD_MAX, automation_height));
|
||||||
|
|
||||||
button_bar->size_allocate (ArdourCanvas::Rect (0., note_area_height + automation_height, ArdourCanvas::COORD_MAX, note_area_height + automation_height + bbh));
|
|
||||||
|
|
||||||
for (auto & ads : automation_map) {
|
for (auto & ads : automation_map) {
|
||||||
ads.second.set_height (automation_height);
|
ads.second.set_height (automation_height);
|
||||||
}
|
}
|
||||||
@ -274,29 +235,6 @@ MidiCueView::update_hit (Hit* h)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
MidiCueView::automation_button_event (GdkEvent* ev, Evoral::ParameterType type, int id)
|
|
||||||
{
|
|
||||||
SelectionOperation op = ArdourKeyboard::selection_type (ev->button.state);
|
|
||||||
|
|
||||||
switch (ev->type) {
|
|
||||||
case GDK_BUTTON_RELEASE:
|
|
||||||
automation_button_click (type, id, op);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
MidiCueView::automation_button_click (Evoral::ParameterType type, int id, SelectionOperation op)
|
|
||||||
{
|
|
||||||
#warning paul allow channel selection (2nd param)
|
|
||||||
update_automation_display (Evoral::Parameter (type, 0, id), op);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MidiCueView::update_automation_display (Evoral::Parameter const & param, SelectionOperation op)
|
MidiCueView::update_automation_display (Evoral::Parameter const & param, SelectionOperation op)
|
||||||
{
|
{
|
||||||
|
@ -35,7 +35,6 @@ class MidiCueAutomationLine;
|
|||||||
|
|
||||||
namespace ArdourCanvas {
|
namespace ArdourCanvas {
|
||||||
class Box;
|
class Box;
|
||||||
class Button;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class MidiCueView : public MidiView
|
class MidiCueView : public MidiView
|
||||||
@ -110,20 +109,10 @@ class MidiCueView : public MidiView
|
|||||||
|
|
||||||
VelocityDisplay* velocity_display;
|
VelocityDisplay* velocity_display;
|
||||||
|
|
||||||
ArdourCanvas::Box* button_bar;
|
|
||||||
ArdourCanvas::Button* velocity_button;
|
|
||||||
ArdourCanvas::Button* bender_button;
|
|
||||||
ArdourCanvas::Button* pressure_button;
|
|
||||||
ArdourCanvas::Button* expression_button;
|
|
||||||
ArdourCanvas::Button* modulation_button;
|
|
||||||
|
|
||||||
std::shared_ptr<Temporal::TempoMap const> tempo_map;
|
std::shared_ptr<Temporal::TempoMap const> tempo_map;
|
||||||
ArdourCanvas::Rectangle* event_rect;
|
ArdourCanvas::Rectangle* event_rect;
|
||||||
uint32_t _slot_index;
|
uint32_t _slot_index;
|
||||||
|
|
||||||
void update_sustained (Note *);
|
void update_sustained (Note *);
|
||||||
void update_hit (Hit *);
|
void update_hit (Hit *);
|
||||||
|
|
||||||
bool automation_button_event (GdkEvent*, Evoral::ParameterType type, int id);
|
|
||||||
void automation_button_click (Evoral::ParameterType type, int id, ARDOUR::SelectionOperation);
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user