mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-09 00:04:56 +01:00
get standalone MidiView to display notes
This also removes an unused TriggerBoxWidget from each regular MixerStrip.
This commit is contained in:
parent
a8895e50c7
commit
182a24751b
18 changed files with 91 additions and 87 deletions
|
|
@ -146,6 +146,8 @@ public:
|
||||||
|
|
||||||
virtual void set_selected_midi_region_view (MidiRegionView&);
|
virtual void set_selected_midi_region_view (MidiRegionView&);
|
||||||
|
|
||||||
|
samplecnt_t get_current_zoom () const { return samples_per_pixel; }
|
||||||
|
|
||||||
/* NOTE: these functions assume that the "pixel" coordinate is
|
/* NOTE: these functions assume that the "pixel" coordinate is
|
||||||
in canvas coordinates. These coordinates already take into
|
in canvas coordinates. These coordinates already take into
|
||||||
account any scrolling offsets.
|
account any scrolling offsets.
|
||||||
|
|
@ -244,7 +246,6 @@ public:
|
||||||
|
|
||||||
virtual void set_zoom_focus (Editing::ZoomFocus) = 0;
|
virtual void set_zoom_focus (Editing::ZoomFocus) = 0;
|
||||||
virtual Editing::ZoomFocus get_zoom_focus () const = 0;
|
virtual Editing::ZoomFocus get_zoom_focus () const = 0;
|
||||||
virtual samplecnt_t get_current_zoom () const = 0;
|
|
||||||
virtual void reset_zoom (samplecnt_t) = 0;
|
virtual void reset_zoom (samplecnt_t) = 0;
|
||||||
virtual void reposition_and_zoom (samplepos_t, double) = 0;
|
virtual void reposition_and_zoom (samplepos_t, double) = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -281,7 +281,6 @@ public:
|
||||||
|
|
||||||
void set_zoom_focus (Editing::ZoomFocus);
|
void set_zoom_focus (Editing::ZoomFocus);
|
||||||
Editing::ZoomFocus get_zoom_focus () const { return zoom_focus; }
|
Editing::ZoomFocus get_zoom_focus () const { return zoom_focus; }
|
||||||
samplecnt_t get_current_zoom () const { return samples_per_pixel; }
|
|
||||||
void cycle_zoom_focus ();
|
void cycle_zoom_focus ();
|
||||||
void temporal_zoom_step (bool zoom_out);
|
void temporal_zoom_step (bool zoom_out);
|
||||||
void temporal_zoom_step_scale (bool zoom_out, double scale);
|
void temporal_zoom_step_scale (bool zoom_out, double scale);
|
||||||
|
|
|
||||||
|
|
@ -452,8 +452,8 @@ MidiGhostRegion::model_changed ()
|
||||||
|
|
||||||
std::shared_ptr<NoteType> note = i->first;
|
std::shared_ptr<NoteType> note = i->first;
|
||||||
GhostEvent* cne = i->second;
|
GhostEvent* cne = i->second;
|
||||||
const bool visible = (note->note() >= parent_mrv._current_range_min) &&
|
const bool visible = (note->note() >= parent_mrv.midi_context().lowest_note()) &&
|
||||||
(note->note() <= parent_mrv._current_range_max);
|
(note->note() <= parent_mrv.midi_context().highest_note());
|
||||||
|
|
||||||
if (visible) {
|
if (visible) {
|
||||||
if (cne->is_hit) {
|
if (cne->is_hit) {
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,12 @@ CueMidiBackground::contents_height() const
|
||||||
return _height;
|
return _height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double
|
||||||
|
CueMidiBackground::height() const
|
||||||
|
{
|
||||||
|
return _height;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t
|
uint8_t
|
||||||
CueMidiBackground::get_preferred_midi_channel () const
|
CueMidiBackground::get_preferred_midi_channel () const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ class CueMidiBackground : public MidiViewBackground
|
||||||
CueMidiBackground (ArdourCanvas::Item* parent);
|
CueMidiBackground (ArdourCanvas::Item* parent);
|
||||||
~CueMidiBackground ();
|
~CueMidiBackground ();
|
||||||
|
|
||||||
|
double height() const;
|
||||||
double contents_height() const;
|
double contents_height() const;
|
||||||
|
|
||||||
uint8_t get_preferred_midi_channel () const;
|
uint8_t get_preferred_midi_channel () const;
|
||||||
|
|
|
||||||
|
|
@ -96,13 +96,7 @@ MidiCueEditor::build_canvas ()
|
||||||
rubberband_rect = new ArdourCanvas::Rectangle (hv_scroll_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, 0.0));
|
rubberband_rect = new ArdourCanvas::Rectangle (hv_scroll_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, 0.0));
|
||||||
rubberband_rect->hide();
|
rubberband_rect->hide();
|
||||||
|
|
||||||
ArdourCanvas::Text* hw = new ArdourCanvas::Text (hv_scroll_group);
|
|
||||||
hw->set ("hello, world");
|
|
||||||
hw->set_fill_color (Gtkmm2ext::Color (0xff0000ff));
|
|
||||||
|
|
||||||
std::cerr << "New CMB\n";
|
|
||||||
bg = new CueMidiBackground (hv_scroll_group);
|
bg = new CueMidiBackground (hv_scroll_group);
|
||||||
|
|
||||||
_canvas_viewport->signal_size_allocate().connect (sigc::mem_fun(*this, &MidiCueEditor::canvas_allocate));
|
_canvas_viewport->signal_size_allocate().connect (sigc::mem_fun(*this, &MidiCueEditor::canvas_allocate));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -119,7 +113,6 @@ MidiCueEditor::snap_to_grid (timepos_t const & presnap, Temporal::RoundMode dire
|
||||||
return snap_to_bbt (presnap, direction, gpref);
|
return snap_to_bbt (presnap, direction, gpref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MidiCueEditor::snap_to_internal (timepos_t& start, Temporal::RoundMode direction, SnapPref pref, bool ensure_snap) const
|
MidiCueEditor::snap_to_internal (timepos_t& start, Temporal::RoundMode direction, SnapPref pref, bool ensure_snap) const
|
||||||
{
|
{
|
||||||
|
|
@ -198,7 +191,7 @@ MidiCueEditor::viewport()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MidiCueEditor::set_region (std::shared_ptr<ARDOUR::MidiTrack> t, std::shared_ptr<ARDOUR::Region> r)
|
MidiCueEditor::set_region (std::shared_ptr<ARDOUR::MidiTrack> t, std::shared_ptr<ARDOUR::MidiRegion> r)
|
||||||
{
|
{
|
||||||
// delete view;
|
// delete view;
|
||||||
// view = nullptr;
|
// view = nullptr;
|
||||||
|
|
@ -207,5 +200,6 @@ MidiCueEditor::set_region (std::shared_ptr<ARDOUR::MidiTrack> t, std::shared_ptr
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// view = new MidiView (t, hv_scroll_group, *this, *bg, 0xff0000ff);
|
view = new MidiView (t, *hv_scroll_group, *this, *bg, 0xff0000ff);
|
||||||
|
view->set_region (r);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ class MidiCueEditor : public CueEditor
|
||||||
void apply_midi_note_edit_op (ARDOUR::MidiOperator& op, const RegionSelection& rs);
|
void apply_midi_note_edit_op (ARDOUR::MidiOperator& op, const RegionSelection& rs);
|
||||||
PBD::Command* apply_midi_note_edit_op_to_region (ARDOUR::MidiOperator& op, MidiRegionView& mrv);
|
PBD::Command* apply_midi_note_edit_op_to_region (ARDOUR::MidiOperator& op, MidiRegionView& mrv);
|
||||||
|
|
||||||
void set_region (std::shared_ptr<ARDOUR::MidiTrack>, std::shared_ptr<ARDOUR::Region>);
|
void set_region (std::shared_ptr<ARDOUR::MidiTrack>, std::shared_ptr<ARDOUR::MidiRegion>);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Temporal::timepos_t snap_to_grid (Temporal::timepos_t const & start,
|
Temporal::timepos_t snap_to_grid (Temporal::timepos_t const & start,
|
||||||
|
|
|
||||||
|
|
@ -207,7 +207,6 @@ MidiStreamView::display_track (std::shared_ptr<Track> tr)
|
||||||
{
|
{
|
||||||
StreamView::display_track (tr);
|
StreamView::display_track (tr);
|
||||||
|
|
||||||
std::cerr << "MSV @ " << this << " dnl\n";
|
|
||||||
draw_note_lines();
|
draw_note_lines();
|
||||||
|
|
||||||
NoteRangeChanged(); /* EMIT SIGNAL*/
|
NoteRangeChanged(); /* EMIT SIGNAL*/
|
||||||
|
|
|
||||||
|
|
@ -120,8 +120,6 @@ MidiView::MidiView (std::shared_ptr<MidiTrack> mt,
|
||||||
, _step_edit_cursor (0)
|
, _step_edit_cursor (0)
|
||||||
, _step_edit_cursor_width (1, 0)
|
, _step_edit_cursor_width (1, 0)
|
||||||
, _channel_selection_scoped_note (0)
|
, _channel_selection_scoped_note (0)
|
||||||
, _current_range_min(0)
|
|
||||||
, _current_range_max(0)
|
|
||||||
, _mouse_state(None)
|
, _mouse_state(None)
|
||||||
, _pressed_button(0)
|
, _pressed_button(0)
|
||||||
, _optimization_iterator (_events.end())
|
, _optimization_iterator (_events.end())
|
||||||
|
|
@ -153,8 +151,6 @@ MidiView::MidiView (MidiView const & other)
|
||||||
, _step_edit_cursor (0)
|
, _step_edit_cursor (0)
|
||||||
, _step_edit_cursor_width (1, 0)
|
, _step_edit_cursor_width (1, 0)
|
||||||
, _channel_selection_scoped_note (0)
|
, _channel_selection_scoped_note (0)
|
||||||
, _current_range_min(0)
|
|
||||||
, _current_range_max(0)
|
|
||||||
, _mouse_state(None)
|
, _mouse_state(None)
|
||||||
, _pressed_button(0)
|
, _pressed_button(0)
|
||||||
, _optimization_iterator (_events.end())
|
, _optimization_iterator (_events.end())
|
||||||
|
|
@ -233,6 +229,8 @@ MidiView::set_model (std::shared_ptr<MidiModel> m)
|
||||||
_editing_context.MouseModeChanged.connect (connections_requiring_model, invalidator (*this),
|
_editing_context.MouseModeChanged.connect (connections_requiring_model, invalidator (*this),
|
||||||
boost::bind (&MidiView::mouse_mode_changed, this),
|
boost::bind (&MidiView::mouse_mode_changed, this),
|
||||||
gui_context ());
|
gui_context ());
|
||||||
|
|
||||||
|
model_changed ();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
@ -1005,6 +1003,8 @@ MidiView::redisplay (bool view_only)
|
||||||
void
|
void
|
||||||
MidiView::model_changed()
|
MidiView::model_changed()
|
||||||
{
|
{
|
||||||
|
std::cerr << "MC!\n";
|
||||||
|
|
||||||
if (!display_is_enabled()) {
|
if (!display_is_enabled()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -1045,6 +1045,22 @@ MidiView::model_changed()
|
||||||
|
|
||||||
NoteBase* cne;
|
NoteBase* cne;
|
||||||
|
|
||||||
|
std::cerr << "drawing " << notes.size() << " notes\n";
|
||||||
|
|
||||||
|
uint8_t low_note = std::numeric_limits<uint8_t>::max();
|
||||||
|
uint8_t hi_note = std::numeric_limits<uint8_t>::min();
|
||||||
|
|
||||||
|
for (MidiModel::Notes::iterator n = notes.begin(); n != notes.end(); ++n) {
|
||||||
|
if ((*n)->note() < low_note) {
|
||||||
|
low_note = (*n)->note();
|
||||||
|
}
|
||||||
|
if ((*n)->note() > hi_note) {
|
||||||
|
hi_note = (*n)->note();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_midi_context.apply_note_range (low_note, hi_note, true);
|
||||||
|
|
||||||
for (MidiModel::Notes::iterator n = notes.begin(); n != notes.end(); ++n) {
|
for (MidiModel::Notes::iterator n = notes.begin(); n != notes.end(); ++n) {
|
||||||
|
|
||||||
std::shared_ptr<NoteType> note (*n);
|
std::shared_ptr<NoteType> note (*n);
|
||||||
|
|
@ -1445,13 +1461,10 @@ MidiView::set_height (double ht)
|
||||||
void
|
void
|
||||||
MidiView::apply_note_range (uint8_t min, uint8_t max, bool force)
|
MidiView::apply_note_range (uint8_t min, uint8_t max, bool force)
|
||||||
{
|
{
|
||||||
if (!force && _current_range_min == min && _current_range_max == max) {
|
if (!force && _midi_context.lowest_note() == min && _midi_context.highest_note() == max) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_current_range_min = min;
|
|
||||||
_current_range_max = max;
|
|
||||||
|
|
||||||
view_changed ();
|
view_changed ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1548,7 +1561,7 @@ MidiView::note_in_region_range (const std::shared_ptr<NoteType> note, bool& visi
|
||||||
|
|
||||||
const bool outside = !note_in_region_time_range (note);
|
const bool outside = !note_in_region_time_range (note);
|
||||||
|
|
||||||
visible = (note->note() >= _current_range_min) && (note->note() <= _current_range_max);
|
visible = (note->note() >= _midi_context.lowest_note()) && (note->note() <= _midi_context.highest_note());
|
||||||
|
|
||||||
return !outside;
|
return !outside;
|
||||||
}
|
}
|
||||||
|
|
@ -1600,6 +1613,11 @@ MidiView::update_sustained (Note* ev, bool update_ghost_regions)
|
||||||
const double y0 = 1 + floor(note_to_y(note->note()));
|
const double y0 = 1 + floor(note_to_y(note->note()));
|
||||||
double y1;
|
double y1;
|
||||||
|
|
||||||
|
std::cerr << "Note: " << *note << std::endl;
|
||||||
|
std::cerr << "SSS " << session_source_start << std::endl;
|
||||||
|
std::cerr << "nh " << note_height() << std::endl;
|
||||||
|
std::cerr << "vs. " << (int) _midi_context.lowest_note() << " .. " << (int) _midi_context.highest_note() << std::endl;
|
||||||
|
|
||||||
if (note->length() == Temporal::Beats()) {
|
if (note->length() == Temporal::Beats()) {
|
||||||
|
|
||||||
/* special case actual zero-length notes */
|
/* special case actual zero-length notes */
|
||||||
|
|
@ -1618,6 +1636,8 @@ MidiView::update_sustained (Note* ev, bool update_ghost_regions)
|
||||||
|
|
||||||
const samplepos_t note_end_samples = _midi_region->position().distance ((session_source_start + note_end)).samples();
|
const samplepos_t note_end_samples = _midi_region->position().distance ((session_source_start + note_end)).samples();
|
||||||
|
|
||||||
|
std::cerr << "nes: " << note_end_samples << " Z " << _editing_context.get_current_zoom() << std::endl;
|
||||||
|
|
||||||
x1 = std::max(1., _editing_context.sample_to_pixel (note_end_samples));
|
x1 = std::max(1., _editing_context.sample_to_pixel (note_end_samples));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1629,6 +1649,7 @@ MidiView::update_sustained (Note* ev, bool update_ghost_regions)
|
||||||
|
|
||||||
y1 = y0 + std::max(1., floor(note_height()) - 1);
|
y1 = y0 + std::max(1., floor(note_height()) - 1);
|
||||||
|
|
||||||
|
std::cerr << "note rect " << ArdourCanvas::Rect (x0, y0, x1, y1) << std::endl;
|
||||||
|
|
||||||
ev->set (ArdourCanvas::Rect (x0, y0, x1, y1));
|
ev->set (ArdourCanvas::Rect (x0, y0, x1, y1));
|
||||||
ev->set_velocity (note->velocity()/127.0);
|
ev->set_velocity (note->velocity()/127.0);
|
||||||
|
|
@ -4174,10 +4195,10 @@ MidiView::data_recorded (std::weak_ptr<MidiSource> w)
|
||||||
nb->item()->set_outline_color (UIConfiguration::instance().color ("recording note"));
|
nb->item()->set_outline_color (UIConfiguration::instance().color ("recording note"));
|
||||||
|
|
||||||
/* fix up our note range */
|
/* fix up our note range */
|
||||||
if (ev.note() < _current_range_min) {
|
if (ev.note() < _midi_context.lowest_note()) {
|
||||||
apply_note_range (ev.note(), _current_range_max, true);
|
apply_note_range (ev.note(), _midi_context.highest_note(), true);
|
||||||
} else if (ev.note() > _current_range_max) {
|
} else if (ev.note() > _midi_context.highest_note()) {
|
||||||
apply_note_range (_current_range_min, ev.note(), true);
|
apply_note_range (_midi_context.lowest_note(), ev.note(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (ev.type() == MIDI_CMD_NOTE_OFF) {
|
} else if (ev.type() == MIDI_CMD_NOTE_OFF) {
|
||||||
|
|
@ -4415,28 +4436,6 @@ MidiView::get_draw_length_beats (timepos_t const & pos) const
|
||||||
return beats;
|
return beats;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t
|
|
||||||
MidiView::y_to_note (double y) const
|
|
||||||
{
|
|
||||||
int const n = ((contents_height() - y) / contents_height() * (double)(_current_range_max - _current_range_min + 1))
|
|
||||||
+ _current_range_min;
|
|
||||||
|
|
||||||
if (n < 0) {
|
|
||||||
return 0;
|
|
||||||
} else if (n > 127) {
|
|
||||||
return 127;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* min due to rounding and/or off-by-one errors */
|
|
||||||
return min ((uint8_t) n, _current_range_max);
|
|
||||||
}
|
|
||||||
|
|
||||||
double
|
|
||||||
MidiView::note_to_y(uint8_t note) const
|
|
||||||
{
|
|
||||||
return contents_height() - (note + 1 - _current_range_min) * note_height() + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MidiView::quantize_selected_notes ()
|
MidiView::quantize_selected_notes ()
|
||||||
{
|
{
|
||||||
|
|
@ -4677,3 +4676,9 @@ MidiView::drag_group () const
|
||||||
{
|
{
|
||||||
return _note_group->parent();
|
return _note_group->parent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double
|
||||||
|
MidiView::height() const
|
||||||
|
{
|
||||||
|
return _midi_context.height();
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -483,9 +483,6 @@ class MidiView : public virtual sigc::trackable
|
||||||
Temporal::Beats _step_edit_cursor_position;
|
Temporal::Beats _step_edit_cursor_position;
|
||||||
NoteBase* _channel_selection_scoped_note;
|
NoteBase* _channel_selection_scoped_note;
|
||||||
|
|
||||||
uint8_t _current_range_min;
|
|
||||||
uint8_t _current_range_max;
|
|
||||||
|
|
||||||
MouseState _mouse_state;
|
MouseState _mouse_state;
|
||||||
int _pressed_button;
|
int _pressed_button;
|
||||||
|
|
||||||
|
|
@ -577,14 +574,13 @@ class MidiView : public virtual sigc::trackable
|
||||||
ARDOUR::ChannelMode get_channel_mode() const;
|
ARDOUR::ChannelMode get_channel_mode() const;
|
||||||
uint16_t get_selected_channels () const;
|
uint16_t get_selected_channels () const;
|
||||||
|
|
||||||
virtual double height() const = 0;
|
virtual double height() const;
|
||||||
|
|
||||||
virtual double contents_height() const { return height() - 2; }
|
virtual double contents_height() const { return height() - 2; }
|
||||||
inline double contents_note_range () const { return (double)(_current_range_max - _current_range_min + 1); }
|
inline double note_height() const { return contents_height() / _midi_context.contents_note_range(); }
|
||||||
inline double note_height() const { return contents_height() / contents_note_range(); }
|
|
||||||
|
|
||||||
double note_to_y (uint8_t note) const;
|
double note_to_y (uint8_t note) const { return _midi_context.note_to_y (note); }
|
||||||
uint8_t y_to_note (double y) const;
|
uint8_t y_to_note (double y) const { return _midi_context.y_to_note (y); }
|
||||||
|
|
||||||
void update_patch_changes ();
|
void update_patch_changes ();
|
||||||
void update_sysexes ();
|
void update_sysexes ();
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,6 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, bool in_mixer)
|
||||||
, processor_box (sess, boost::bind (&MixerStrip::plugin_selector, this), mx.selection(), this, in_mixer)
|
, processor_box (sess, boost::bind (&MixerStrip::plugin_selector, this), mx.selection(), this, in_mixer)
|
||||||
, gpm (sess, 250)
|
, gpm (sess, 250)
|
||||||
, panners (sess)
|
, panners (sess)
|
||||||
, trigger_display (-1., TriggerBox::default_triggers_per_box*16.)
|
|
||||||
, button_size_group (Gtk::SizeGroup::create (Gtk::SIZE_GROUP_HORIZONTAL))
|
, button_size_group (Gtk::SizeGroup::create (Gtk::SIZE_GROUP_HORIZONTAL))
|
||||||
, rec_mon_table (2, 2)
|
, rec_mon_table (2, 2)
|
||||||
, solo_iso_table (1, 2)
|
, solo_iso_table (1, 2)
|
||||||
|
|
@ -153,7 +152,6 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session* sess, std::shared_ptr<Route> rt,
|
||||||
, processor_box (sess, boost::bind (&MixerStrip::plugin_selector, this), mx.selection(), this, in_mixer)
|
, processor_box (sess, boost::bind (&MixerStrip::plugin_selector, this), mx.selection(), this, in_mixer)
|
||||||
, gpm (sess, 250)
|
, gpm (sess, 250)
|
||||||
, panners (sess)
|
, panners (sess)
|
||||||
, trigger_display (-1., 8*16.)
|
|
||||||
, button_size_group (Gtk::SizeGroup::create (Gtk::SIZE_GROUP_HORIZONTAL))
|
, button_size_group (Gtk::SizeGroup::create (Gtk::SIZE_GROUP_HORIZONTAL))
|
||||||
, rec_mon_table (2, 2)
|
, rec_mon_table (2, 2)
|
||||||
, solo_iso_table (1, 2)
|
, solo_iso_table (1, 2)
|
||||||
|
|
@ -335,7 +333,6 @@ MixerStrip::init ()
|
||||||
global_vpacker.pack_start (name_button, Gtk::PACK_SHRINK);
|
global_vpacker.pack_start (name_button, Gtk::PACK_SHRINK);
|
||||||
global_vpacker.pack_start (input_button_box, Gtk::PACK_SHRINK);
|
global_vpacker.pack_start (input_button_box, Gtk::PACK_SHRINK);
|
||||||
global_vpacker.pack_start (invert_button_box, Gtk::PACK_SHRINK);
|
global_vpacker.pack_start (invert_button_box, Gtk::PACK_SHRINK);
|
||||||
global_vpacker.pack_start (trigger_display, Gtk::PACK_SHRINK);
|
|
||||||
global_vpacker.pack_start (_tmaster_widget, Gtk::PACK_SHRINK);
|
global_vpacker.pack_start (_tmaster_widget, Gtk::PACK_SHRINK);
|
||||||
global_vpacker.pack_start (processor_box, true, true);
|
global_vpacker.pack_start (processor_box, true, true);
|
||||||
global_vpacker.pack_start (panners, Gtk::PACK_SHRINK);
|
global_vpacker.pack_start (panners, Gtk::PACK_SHRINK);
|
||||||
|
|
@ -425,7 +422,6 @@ MixerStrip::init ()
|
||||||
_visibility.add (&output_button, X_("Output"), _("Output"), false);
|
_visibility.add (&output_button, X_("Output"), _("Output"), false);
|
||||||
_visibility.add (&_comment_button, X_("Comments"), _("Comments"), false);
|
_visibility.add (&_comment_button, X_("Comments"), _("Comments"), false);
|
||||||
_visibility.add (&control_slave_ui, X_("VCA"), _("VCA Assigns"), false);
|
_visibility.add (&control_slave_ui, X_("VCA"), _("VCA Assigns"), false);
|
||||||
_visibility.add (&trigger_display, X_("TriggerGrid"), _("Trigger Grid"), false);
|
|
||||||
_visibility.add (&_tmaster_widget, X_("TriggerMaster"), _("Trigger Master"), false);
|
_visibility.add (&_tmaster_widget, X_("TriggerMaster"), _("Trigger Master"), false);
|
||||||
|
|
||||||
parameter_changed (X_("mixer-element-visibility"));
|
parameter_changed (X_("mixer-element-visibility"));
|
||||||
|
|
@ -542,8 +538,6 @@ MixerStrip::set_route (std::shared_ptr<Route> rt)
|
||||||
|
|
||||||
RouteUI::set_route (rt);
|
RouteUI::set_route (rt);
|
||||||
|
|
||||||
set_trigger_display (rt->triggerbox());
|
|
||||||
|
|
||||||
control_slave_ui.set_stripable (std::dynamic_pointer_cast<Stripable> (rt));
|
control_slave_ui.set_stripable (std::dynamic_pointer_cast<Stripable> (rt));
|
||||||
|
|
||||||
/* ProcessorBox needs access to _route so that it can read
|
/* ProcessorBox needs access to _route so that it can read
|
||||||
|
|
@ -1683,8 +1677,6 @@ MixerStrip::revert_to_default_display ()
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_strip_style ();
|
reset_strip_style ();
|
||||||
|
|
||||||
set_trigger_display (_route->triggerbox());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -2140,9 +2132,3 @@ MixerStrip::hide_master_spacer (bool yn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
MixerStrip::set_trigger_display (std::shared_ptr<TriggerBox> tb)
|
|
||||||
{
|
|
||||||
_tmaster->set_triggerbox (tb);
|
|
||||||
trigger_display.set_triggerbox (tb.get());
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,6 @@ private:
|
||||||
ProcessorBox processor_box;
|
ProcessorBox processor_box;
|
||||||
GainMeter gpm;
|
GainMeter gpm;
|
||||||
PannerUI panners;
|
PannerUI panners;
|
||||||
TriggerBoxWidget trigger_display;
|
|
||||||
|
|
||||||
Glib::RefPtr<Gtk::SizeGroup> button_size_group;
|
Glib::RefPtr<Gtk::SizeGroup> button_size_group;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -756,7 +756,6 @@ SlotPropertyWindow::SlotPropertyWindow (TriggerReference tref)
|
||||||
_trig_box->set_trigger (tref);
|
_trig_box->set_trigger (tref);
|
||||||
|
|
||||||
_midi_editor = new MidiCueEditor;
|
_midi_editor = new MidiCueEditor;
|
||||||
_midi_editor->set_region (std::shared_ptr<MidiTrack>(), trigger->region());
|
|
||||||
|
|
||||||
table->attach(*_trig_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++;
|
table->attach(*_trig_box, col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++;
|
||||||
table->attach(_midi_editor->viewport(), col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++;
|
table->attach(_midi_editor->viewport(), col, col+1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); col++;
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@
|
||||||
#include "ardour/region_factory.h"
|
#include "ardour/region_factory.h"
|
||||||
#include "ardour/profile.h"
|
#include "ardour/profile.h"
|
||||||
#include "ardour/smf_source.h"
|
#include "ardour/smf_source.h"
|
||||||
|
#include "ardour/stripable.h"
|
||||||
|
|
||||||
#include "actions.h"
|
#include "actions.h"
|
||||||
#include "ardour_ui.h"
|
#include "ardour_ui.h"
|
||||||
|
|
@ -410,8 +411,12 @@ TriggerPage::selection_changed ()
|
||||||
_midi_trig_box.set_trigger (ref);
|
_midi_trig_box.set_trigger (ref);
|
||||||
_midi_trig_box.show ();
|
_midi_trig_box.show ();
|
||||||
|
|
||||||
// _midi_trim_box.set_trigger (ref);
|
std::shared_ptr<MidiRegion> mr = std::dynamic_pointer_cast<MidiRegion> (trigger->region());
|
||||||
_midi_editor->viewport().show ();
|
if (mr) {
|
||||||
|
std::shared_ptr<MidiTrack> mt = std::dynamic_pointer_cast<MidiTrack> (entry->strip().stripable());
|
||||||
|
_midi_editor->set_region (mt, mr);
|
||||||
|
_midi_editor->viewport().show ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_parameter_box.show ();
|
_parameter_box.show ();
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ TriggerStrip::TriggerStrip (Session* s, std::shared_ptr<ARDOUR::Route> rt)
|
||||||
, _pb_selection ()
|
, _pb_selection ()
|
||||||
, _tmaster_widget (-1, 16)
|
, _tmaster_widget (-1, 16)
|
||||||
, _processor_box (s, boost::bind (&TriggerStrip::plugin_selector, this), _pb_selection, 0)
|
, _processor_box (s, boost::bind (&TriggerStrip::plugin_selector, this), _pb_selection, 0)
|
||||||
, _trigger_display (-1., TriggerBox::default_triggers_per_box * 16.)
|
, _trigger_display (*this, -1., TriggerBox::default_triggers_per_box * 16.)
|
||||||
, _panners (s)
|
, _panners (s)
|
||||||
, _level_meter (s)
|
, _level_meter (s)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -65,8 +65,9 @@ using namespace ArdourCanvas;
|
||||||
using namespace Gtkmm2ext;
|
using namespace Gtkmm2ext;
|
||||||
using namespace PBD;
|
using namespace PBD;
|
||||||
|
|
||||||
TriggerEntry::TriggerEntry (Item* item, TriggerReference tr)
|
TriggerEntry::TriggerEntry (Item* item, TriggerStrip& s, TriggerReference tr)
|
||||||
: ArdourCanvas::Rectangle (item)
|
: ArdourCanvas::Rectangle (item)
|
||||||
|
, _strip (s)
|
||||||
, _grabbed (false)
|
, _grabbed (false)
|
||||||
, _drag_active (false)
|
, _drag_active (false)
|
||||||
{
|
{
|
||||||
|
|
@ -826,9 +827,10 @@ TriggerEntry::drag_data_get (Glib::RefPtr<Gdk::DragContext> const&, Gtk::Selecti
|
||||||
|
|
||||||
Glib::RefPtr<Gtk::TargetList> TriggerBoxUI::_dnd_src;
|
Glib::RefPtr<Gtk::TargetList> TriggerBoxUI::_dnd_src;
|
||||||
|
|
||||||
TriggerBoxUI::TriggerBoxUI (ArdourCanvas::Item* parent, TriggerBox& tb)
|
TriggerBoxUI::TriggerBoxUI (ArdourCanvas::Item* parent, TriggerStrip& s, TriggerBox& tb)
|
||||||
: Rectangle (parent)
|
: Rectangle (parent)
|
||||||
, _triggerbox (tb)
|
, _triggerbox (tb)
|
||||||
|
, _strip (s)
|
||||||
{
|
{
|
||||||
set_layout_sensitive (true); // why???
|
set_layout_sensitive (true); // why???
|
||||||
|
|
||||||
|
|
@ -894,7 +896,7 @@ TriggerBoxUI::build ()
|
||||||
if (!t) {
|
if (!t) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
TriggerEntry* te = new TriggerEntry (this, TriggerReference (_triggerbox, n));
|
TriggerEntry* te = new TriggerEntry (this, _strip, TriggerReference (_triggerbox, n));
|
||||||
|
|
||||||
_slots.push_back (te);
|
_slots.push_back (te);
|
||||||
|
|
||||||
|
|
@ -1031,9 +1033,10 @@ TriggerBoxUI::drag_data_received (Glib::RefPtr<Gdk::DragContext> const& context,
|
||||||
|
|
||||||
/* ********************************************** */
|
/* ********************************************** */
|
||||||
|
|
||||||
TriggerBoxWidget::TriggerBoxWidget (float w, float h)
|
TriggerBoxWidget::TriggerBoxWidget (TriggerStrip& s, float w, float h)
|
||||||
: FittedCanvasWidget (w, h)
|
: FittedCanvasWidget (w, h)
|
||||||
, ui (0)
|
, ui (nullptr)
|
||||||
|
, _strip (s)
|
||||||
{
|
{
|
||||||
set_background_color (UIConfiguration::instance ().color (X_("theme:bg")));
|
set_background_color (UIConfiguration::instance ().color (X_("theme:bg")));
|
||||||
}
|
}
|
||||||
|
|
@ -1044,13 +1047,13 @@ TriggerBoxWidget::set_triggerbox (TriggerBox* tb)
|
||||||
if (ui) {
|
if (ui) {
|
||||||
root ()->remove (ui);
|
root ()->remove (ui);
|
||||||
delete ui;
|
delete ui;
|
||||||
ui = 0;
|
ui = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tb) {
|
if (!tb) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ui = new TriggerBoxUI (root (), *tb);
|
ui = new TriggerBoxUI (root (), _strip, *tb);
|
||||||
repeat_size_allocation ();
|
repeat_size_allocation ();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,10 +43,12 @@ namespace ArdourCanvas
|
||||||
class Polygon;
|
class Polygon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TriggerStrip;
|
||||||
|
|
||||||
class TriggerEntry : public ArdourCanvas::Rectangle, public TriggerUI
|
class TriggerEntry : public ArdourCanvas::Rectangle, public TriggerUI
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriggerEntry (ArdourCanvas::Item* item, ARDOUR::TriggerReference rf);
|
TriggerEntry (ArdourCanvas::Item* item, TriggerStrip&, ARDOUR::TriggerReference rf);
|
||||||
~TriggerEntry ();
|
~TriggerEntry ();
|
||||||
|
|
||||||
ArdourCanvas::Rectangle* play_button;
|
ArdourCanvas::Rectangle* play_button;
|
||||||
|
|
@ -76,7 +78,10 @@ public:
|
||||||
|
|
||||||
bool name_button_event (GdkEvent*);
|
bool name_button_event (GdkEvent*);
|
||||||
|
|
||||||
|
TriggerStrip& strip() const { return _strip; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
TriggerStrip& _strip;
|
||||||
bool _grabbed;
|
bool _grabbed;
|
||||||
double _poly_size;
|
double _poly_size;
|
||||||
double _poly_margin;
|
double _poly_margin;
|
||||||
|
|
@ -104,11 +109,13 @@ private:
|
||||||
class TriggerBoxUI : public ArdourCanvas::Rectangle
|
class TriggerBoxUI : public ArdourCanvas::Rectangle
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriggerBoxUI (ArdourCanvas::Item* parent, ARDOUR::TriggerBox&);
|
TriggerBoxUI (ArdourCanvas::Item* parent, TriggerStrip&, ARDOUR::TriggerBox&);
|
||||||
~TriggerBoxUI ();
|
~TriggerBoxUI ();
|
||||||
|
|
||||||
void _size_allocate (ArdourCanvas::Rect const&);
|
void _size_allocate (ArdourCanvas::Rect const&);
|
||||||
|
|
||||||
|
TriggerStrip& strip() const { return _strip; }
|
||||||
|
|
||||||
static Glib::RefPtr<Gtk::TargetList> dnd_src ()
|
static Glib::RefPtr<Gtk::TargetList> dnd_src ()
|
||||||
{
|
{
|
||||||
return _dnd_src;
|
return _dnd_src;
|
||||||
|
|
@ -119,6 +126,7 @@ private:
|
||||||
|
|
||||||
ARDOUR::TriggerBox& _triggerbox;
|
ARDOUR::TriggerBox& _triggerbox;
|
||||||
Slots _slots;
|
Slots _slots;
|
||||||
|
TriggerStrip& _strip;
|
||||||
|
|
||||||
static Glib::RefPtr<Gtk::TargetList> _dnd_src;
|
static Glib::RefPtr<Gtk::TargetList> _dnd_src;
|
||||||
|
|
||||||
|
|
@ -140,12 +148,14 @@ private:
|
||||||
class TriggerBoxWidget : public FittedCanvasWidget
|
class TriggerBoxWidget : public FittedCanvasWidget
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriggerBoxWidget (float w, float h);
|
TriggerBoxWidget (TriggerStrip&, float w, float h);
|
||||||
|
|
||||||
void set_triggerbox (ARDOUR::TriggerBox* tb);
|
void set_triggerbox (ARDOUR::TriggerBox* tb);
|
||||||
|
TriggerStrip& strip() const { return _strip; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TriggerBoxUI* ui;
|
TriggerBoxUI* ui;
|
||||||
|
TriggerStrip& _strip;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ class ViewBackground
|
||||||
ViewBackground ();
|
ViewBackground ();
|
||||||
virtual ~ViewBackground ();
|
virtual ~ViewBackground ();
|
||||||
|
|
||||||
|
virtual double height() const { return 0.; }
|
||||||
virtual double contents_height() const { return 0.; }
|
virtual double contents_height() const { return 0.; }
|
||||||
|
|
||||||
/** @return y position, or -1 if hidden */
|
/** @return y position, or -1 if hidden */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue