Implement mode/root context menus and modification methods to MidiTimeAxisView
This commit is contained in:
parent
9f76d688fd
commit
6cdbd4174d
@ -640,6 +640,13 @@ MidiTimeAxisView::append_extra_display_menu_items ()
|
||||
cmi->set_active (midi_track ()->restore_pgm_on_load ());
|
||||
cmi->signal_activate().connect (sigc::mem_fun (*this, &MidiTimeAxisView::toggle_restore_pgm_on_load));
|
||||
|
||||
items.push_back (MenuElem (_("Mode (Scale)"), *build_musical_mode_menu ()));
|
||||
items.push_back (MenuElem (_("Root"), *build_musical_root_menu ()));
|
||||
items.push_back (CheckMenuElem (_("Enforce Key")));
|
||||
Gtk::CheckMenuItem* eki = dynamic_cast<Gtk::CheckMenuItem *> (&items.back());
|
||||
eki->set_active (midi_track ()->enforce_key ());
|
||||
// eki->signal_activate().connect (sigc::mem_fun (*this, &MidiTimeAxisView::toggle_enforce_musical_key));
|
||||
|
||||
items.push_back (MenuElem (_("Color Mode"), *build_color_mode_menu ()));
|
||||
|
||||
items.push_back (SeparatorElem ());
|
||||
@ -1117,6 +1124,317 @@ MidiTimeAxisView::build_note_mode_menu()
|
||||
return mode_menu;
|
||||
}
|
||||
|
||||
Gtk::Menu*
|
||||
MidiTimeAxisView::build_musical_root_menu ()
|
||||
{
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
Menu* root_menu = manage (new Menu);
|
||||
MenuList& items = root_menu->items();
|
||||
root_menu->set_name ("ArdourContextMenu");
|
||||
|
||||
RadioMenuItem::Group root_group;
|
||||
RadioMenuItem* last_item;
|
||||
|
||||
int r = midi_track()->key().root();
|
||||
|
||||
for (int n = 0; n < 12; ++n) {
|
||||
items.push_back (RadioMenuElem (root_group, ParameterDescriptor::midi_note_name (n, true, false), sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_root), n)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (r == n);
|
||||
}
|
||||
|
||||
return root_menu;
|
||||
}
|
||||
|
||||
void
|
||||
MidiTimeAxisView::set_musical_root (int r)
|
||||
{
|
||||
midi_track()->set_key (MusicalKey (midi_track()->key().type(), r));
|
||||
}
|
||||
|
||||
Gtk::Menu*
|
||||
MidiTimeAxisView::build_musical_mode_menu()
|
||||
{
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
Menu* mode_menu = manage (new Menu);
|
||||
MenuList& items = mode_menu->items();
|
||||
mode_menu->set_name ("ArdourContextMenu");
|
||||
|
||||
RadioMenuItem::Group mode_group;
|
||||
RadioMenuItem* last_item;
|
||||
|
||||
MusicalMode::Type t = midi_track()->key().type();
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Chromatic"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Chromatic)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Chromatic);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Ionian/Major"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::IonianMajor)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::IonianMajor);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Aeolian/Minor"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::AeolianMinor)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::AeolianMinor);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Dorian"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Dorian)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Dorian);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("HarmonicMinor"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::HarmonicMinor)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == 30);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("MelodicMinorAscending"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::MelodicMinorAscending)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::MelodicMinorAscending);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("MelodicMinorDescending"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::MelodicMinorDescending)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::MelodicMinorDescending);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Phrygian"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Phrygian)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Phrygian);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Lydian"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Lydian)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Lydian);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Mixolydian"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Mixolydian)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Mixolydian);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Locrian"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Locrian)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Locrian);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("PentatonicMajor"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::PentatonicMajor)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::PentatonicMajor);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("PentatonicMinor"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::PentatonicMinor)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::PentatonicMinor);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("BluesScale"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::BluesScale)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::BluesScale);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("NeapolitanMinor"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::NeapolitanMinor)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::NeapolitanMinor);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("NeapolitanMajor"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::NeapolitanMajor)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::NeapolitanMajor);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Oriental"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Oriental)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Oriental);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("DoubleHarmonic"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::DoubleHarmonic)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::DoubleHarmonic);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Enigmatic"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Enigmatic)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Enigmatic);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Hirajoshi"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Hirajoshi)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Hirajoshi);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("HungarianMinor"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::HungarianMinor)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::HungarianMinor);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("HungarianMajor"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::HungarianMajor)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::HungarianMajor);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Kumoi"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Kumoi)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Kumoi);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Iwato"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Iwato)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Iwato);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Hindu"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Hindu)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Hindu);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Spanish8Tone"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Spanish8Tone)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Spanish8Tone);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Pelog"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Pelog)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Pelog);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("HungarianGypsy"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::HungarianGypsy)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::HungarianGypsy);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Overtone"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Overtone)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Overtone);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("LeadingWholeTone"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::LeadingWholeTone)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::LeadingWholeTone);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Arabian"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Arabian)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Arabian);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Balinese"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Balinese)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Balinese);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Gypsy"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Gypsy)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Gypsy);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Mohammedan"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Mohammedan)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Mohammedan);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Javanese"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Javanese)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Javanese);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Persian"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Persian)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Persian);
|
||||
|
||||
items.push_back (
|
||||
RadioMenuElem (mode_group, _("Algerian"),
|
||||
sigc::bind (sigc::mem_fun (*this, &MidiTimeAxisView::set_musical_mode),
|
||||
MusicalMode::Algerian)));
|
||||
last_item = dynamic_cast<RadioMenuItem*>(&items.back());
|
||||
last_item->set_active (t == MusicalMode::Algerian);
|
||||
|
||||
return mode_menu;
|
||||
}
|
||||
|
||||
void
|
||||
MidiTimeAxisView::set_musical_mode (MusicalMode::Type mode_type)
|
||||
{
|
||||
midi_track()->set_key (MusicalKey (mode_type, midi_track()->key().root()));
|
||||
}
|
||||
|
||||
Gtk::Menu*
|
||||
MidiTimeAxisView::build_color_mode_menu()
|
||||
{
|
||||
|
@ -133,7 +133,11 @@ private:
|
||||
void build_automation_action_menu (bool);
|
||||
Gtk::Menu* build_note_mode_menu();
|
||||
Gtk::Menu* build_color_mode_menu();
|
||||
Gtk::Menu* build_musical_mode_menu ();
|
||||
Gtk::Menu* build_musical_root_menu ();
|
||||
|
||||
void set_musical_mode (MusicalMode::Type);
|
||||
void set_musical_root (int note);
|
||||
void set_note_mode (ARDOUR::NoteMode mode, bool apply_to_selection = false);
|
||||
void set_color_mode (ARDOUR::ColorMode, bool force = false, bool redisplay = true, bool apply_to_selection = false);
|
||||
void set_note_range (MidiStreamView::VisibleNoteRange range, bool apply_to_selection = false);
|
||||
@ -199,4 +203,5 @@ private:
|
||||
StepEditor* _step_editor;
|
||||
};
|
||||
|
||||
|
||||
#endif /* __ardour_midi_time_axis_h__ */
|
||||
|
Loading…
Reference in New Issue
Block a user