prevent suggestion that MIDI tracks can be set to stacked view

This commit is contained in:
Paul Davis 2017-01-29 15:02:07 +01:00
parent 34da2896c6
commit d29f6bde5e
4 changed files with 36 additions and 9 deletions

View File

@ -242,6 +242,16 @@ MidiStreamView::update_data_note_range(uint8_t min, uint8_t max)
return dirty;
}
void
MidiStreamView::set_layer_display (LayerDisplay d)
{
if (d != Overlaid) {
return;
}
StreamView::set_layer_display (d);
}
void
MidiStreamView::redisplay_track ()
{

View File

@ -77,6 +77,8 @@ class MidiStreamView : public StreamView
void update_note_range(uint8_t note_num);
void set_layer_display (LayerDisplay);
bool can_change_layer_display() const { return false; }
void redisplay_track ();
inline double contents_height() const

View File

@ -632,21 +632,27 @@ RouteTimeAxisView::build_display_menu ()
int overlaid = 0;
int stacked = 0;
int unchangeable = 0;
TrackSelection const & s = _editor.get_selection().tracks;
for (TrackSelection::const_iterator i = s.begin(); i != s.end(); ++i) {
StreamView* v = (*i)->view ();
if (!v) {
continue;
}
switch (v->layer_display ()) {
case Overlaid:
++overlaid;
break;
case Stacked:
case Expanded:
++stacked;
break;
if (v->can_change_layer_display()) {
switch (v->layer_display ()) {
case Overlaid:
++overlaid;
break;
case Stacked:
case Expanded:
++stacked;
break;
}
} else {
unchangeable++;
}
}
@ -664,12 +670,20 @@ RouteTimeAxisView::build_display_menu ()
i->set_inconsistent (overlaid != 0 && stacked != 0);
i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &RouteTimeAxisView::set_layer_display), Overlaid, true));
if (unchangeable) {
i->set_sensitive (false);
}
layers_items.push_back (RadioMenuElem (layers_group, _("Stacked")));
i = dynamic_cast<RadioMenuItem*> (&layers_items.back ());
i->set_active (overlaid == 0 && stacked != 0);
i->set_inconsistent (overlaid != 0 && stacked != 0);
i->signal_activate().connect (sigc::bind (sigc::mem_fun (*this, &RouteTimeAxisView::set_layer_display), Stacked, true));
if (unchangeable) {
i->set_sensitive (false);
}
_ignore_set_layer_display = false;
items.push_back (MenuElem (_("Layers"), *layers_menu));

View File

@ -76,7 +76,8 @@ public:
virtual int set_samples_per_pixel (double);
gdouble get_samples_per_pixel () const { return _samples_per_pixel; }
void set_layer_display (LayerDisplay);
virtual void set_layer_display (LayerDisplay);
virtual bool can_change_layer_display() const { return true; }
LayerDisplay layer_display () const { return _layer_display; }
ArdourCanvas::Container* canvas_item() { return _canvas_group; }