tempo mapping: tempo group and mapping group are now only ever visible one at a time

Currently, the "switch" is in Edit > Tempo
This commit is contained in:
Paul Davis 2023-04-08 11:44:03 -06:00
parent a37d4dbacf
commit 13311b7a32
6 changed files with 76 additions and 43 deletions

View File

@ -332,7 +332,6 @@ Editor::Editor ()
, timecode_label (_("Timecode"))
, samples_label (_("Samples"))
, tempo_label (_("Tempo"))
, mapping_label (_("Tempo Mapping"))
, meter_label (_("Time Signature"))
, mark_label (_("Location Markers"))
, range_mark_label (_("Range Markers"))
@ -545,13 +544,6 @@ Editor::Editor ()
tempo_label.hide();
tempo_label.set_no_show_all();
mapping_label.set_name ("EditorRulerLabel");
mapping_label.set_size_request (-1, (int)timebar_height);
mapping_label.set_alignment (1.0, 0.5);
mapping_label.set_padding (5,0);
mapping_label.hide();
mapping_label.set_no_show_all();
meter_label.set_name ("EditorRulerLabel");
meter_label.set_size_request (-1, (int)timebar_height);
meter_label.set_alignment (1.0, 0.5);
@ -890,6 +882,9 @@ Editor::Editor ()
UIConfiguration::instance().map_parameters (pc);
setup_fade_images ();
/* force correct state for tempo edit behavior */
tempo_edit_behavior_toggled (_tempo_edit_behavior);
}
Editor::~Editor()

View File

@ -917,6 +917,7 @@ private:
Gtk::EventBox time_bars_event_box;
Gtk::VBox time_bars_vbox;
ArdourCanvas::Container* tempo_meta_group;
ArdourCanvas::Container* tempo_group;
ArdourCanvas::Container* mapping_group;
ArdourCanvas::Container* meter_group;
@ -965,7 +966,6 @@ private:
Glib::RefPtr<Gtk::ToggleAction> ruler_bbt_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_meter_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_tempo_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_mapping_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_range_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_loop_punch_action;
Glib::RefPtr<Gtk::ToggleAction> ruler_cd_marker_action;
@ -1070,7 +1070,6 @@ private:
Gtk::Label timecode_label;
Gtk::Label samples_label;
Gtk::Label tempo_label;
Gtk::Label mapping_label;
Gtk::Label meter_label;
Gtk::Label mark_label;
Gtk::Label range_mark_label;
@ -2529,6 +2528,7 @@ private:
void choose_mapping_drag (ArdourCanvas::Item*, GdkEvent*);
Editing::TempoEditBehavior _tempo_edit_behavior;
void tempo_edit_behavior_toggled (Editing::TempoEditBehavior);
template<typename T>
Temporal::TimeDomain drag_time_domain (T* thing_with_time_domain) {

View File

@ -207,8 +207,8 @@ Editor::register_actions ()
ActionManager::register_action (editor_actions, "lock", S_("Session|Lock"), sigc::mem_fun (*this, &Editor::lock));
RadioAction::Group tempo_edit_group;
ActionManager::register_radio_action (editor_actions, tempo_edit_group, "tempo-edit-is-mapping", _("Map Tempo"), sigc::bind (sigc::mem_fun (*this, &Editor::set_tempo_edit_behavior), Editing::TempoMapping));
ActionManager::register_radio_action (editor_actions, tempo_edit_group, "tempo-edit-is-change", _("Change Tempo"), sigc::bind (sigc::mem_fun (*this, &Editor::set_tempo_edit_behavior), Editing::TempoChanging));
ActionManager::register_radio_action (editor_actions, tempo_edit_group, "tempo-edit-is-mapping", _("Map Tempo"), sigc::bind (sigc::mem_fun (*this, &Editor::tempo_edit_behavior_toggled), Editing::TempoMapping));
ActionManager::register_radio_action (editor_actions, tempo_edit_group, "tempo-edit-is-changing", _("Change Tempo"), sigc::bind (sigc::mem_fun (*this, &Editor::tempo_edit_behavior_toggled), Editing::TempoChanging));
toggle_reg_sens (editor_actions, "show-editor-mixer", _("Show Editor Mixer"), sigc::mem_fun (*this, &Editor::editor_mixer_button_toggled));
toggle_reg_sens (editor_actions, "show-editor-list", _("Show Editor List"), sigc::mem_fun (*this, &Editor::editor_list_button_toggled));
@ -718,7 +718,6 @@ Editor::register_actions ()
ruler_bbt_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-bbt-ruler"), _("Bars:Beats"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_meter_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-meter-ruler"), _("Time Signature"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_tempo_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-tempo-ruler"), _("Tempo"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_mapping_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-mapping-ruler"), _("Tempo Mapping"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_range_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-range-ruler"), _("Range Markers"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_loop_punch_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-loop-punch-ruler"), _("Loop/Punch Ranges"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));
ruler_cd_marker_action = Glib::RefPtr<ToggleAction>::cast_static (ActionManager::register_toggle_action (ruler_actions, X_("toggle-cd-marker-ruler"), _("CD Markers"), sigc::mem_fun(*this, &Editor::toggle_ruler_visibility)));

View File

@ -162,12 +162,14 @@ Editor::initialize_canvas ()
CANVAS_DEBUG_NAME (transport_marker_group, "transport marker group");
range_marker_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 3.0) + 1.0));
CANVAS_DEBUG_NAME (range_marker_group, "range marker group");
tempo_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 4.0) + 1.0));
tempo_meta_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 4.0) + 1.0));
CANVAS_DEBUG_NAME (tempo_meta_group, "tempo meta group");
tempo_group = new ArdourCanvas::Container (tempo_meta_group, ArdourCanvas::Duple (0.0, 0.0));
CANVAS_DEBUG_NAME (tempo_group, "tempo group");
mapping_group = new ArdourCanvas::Container (tempo_meta_group, ArdourCanvas::Duple (0.0, 0.0));
CANVAS_DEBUG_NAME (tempo_group, "mapping group");
meter_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 5.0) + 1.0));
CANVAS_DEBUG_NAME (meter_group, "meter group");
mapping_group = new ArdourCanvas::Container (_time_markers_group, ArdourCanvas::Duple (0.0, (timebar_height * 6.0) + 1.0));
CANVAS_DEBUG_NAME (mapping_group, "mapping group");
float timebar_thickness = timebar_height; //was 4
float timebar_top = (timebar_height - timebar_thickness)/2;
@ -183,11 +185,12 @@ Editor::initialize_canvas ()
tempo_bar->set_outline(false);
tempo_bar->set_outline_what(ArdourCanvas::Rectangle::BOTTOM);
mapping_bar = new ArdourCanvas::Rectangle (mapping_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
mapping_bar = new ArdourCanvas::Rectangle (tempo_group, ArdourCanvas::Rect (0.0, 0.0, ArdourCanvas::COORD_MAX, timebar_height));
CANVAS_DEBUG_NAME (mapping_bar, "Mapping Bar");
mapping_bar->set_fill(true);
mapping_bar->set_outline(false);
mapping_bar->set_outline_what(ArdourCanvas::Rectangle::BOTTOM);
mapping_bar->hide ();
range_marker_bar = new ArdourCanvas::Rectangle (range_marker_group, ArdourCanvas::Rect (0.0, timebar_top, ArdourCanvas::COORD_MAX, timebar_btm));
CANVAS_DEBUG_NAME (range_marker_bar, "Range Marker Bar");

View File

@ -173,7 +173,6 @@ Editor::initialize_rulers ()
lab_children.push_back (Element(timecode_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(samples_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(bbt_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(mapping_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(tempo_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(meter_label, PACK_SHRINK, PACK_START));
lab_children.push_back (Element(range_mark_label, PACK_SHRINK, PACK_START));
@ -336,7 +335,6 @@ Editor::store_ruler_visibility ()
node->set_property (X_("bbt"), ruler_bbt_action->get_active());
node->set_property (X_("meter"), ruler_meter_action->get_active());
node->set_property (X_("tempo"), ruler_tempo_action->get_active());
node->set_property (X_("mapping"), ruler_mapping_action->get_active());
node->set_property (X_("rangemarker"), ruler_range_action->get_active());
node->set_property (X_("transportmarker"), ruler_loop_punch_action->get_active());
node->set_property (X_("cdmarker"), ruler_cd_marker_action->get_active());
@ -371,9 +369,6 @@ Editor::restore_ruler_visibility ()
if (node->get_property ("tempo", yn)) {
ruler_tempo_action->set_active (yn);
}
if (node->get_property ("mapping", yn)) {
ruler_mapping_action->set_active (yn);
}
if (node->get_property ("meter", yn)) {
ruler_meter_action->set_active (yn);
}
@ -453,7 +448,6 @@ Editor::update_ruler_visibility ()
/* gtk update probs require this (damn) */
meter_label.hide();
tempo_label.hide();
mapping_label.hide();
range_mark_label.hide();
transport_mark_label.hide();
cd_mark_label.hide();
@ -522,33 +516,18 @@ Editor::update_ruler_visibility ()
bbt_label.hide();
}
if (ruler_mapping_action->get_active()) {
old_unit_pos = mapping_group->position().y;
if (tbpos != old_unit_pos) {
mapping_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
}
mapping_group->show();
mapping_label.show();
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
} else {
mapping_group->hide();
mapping_label.hide();
}
if (ruler_tempo_action->get_active()) {
old_unit_pos = tempo_group->position().y;
old_unit_pos = tempo_meta_group->position().y;
if (tbpos != old_unit_pos) {
tempo_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
tempo_meta_group->move (ArdourCanvas::Duple (0.0, tbpos - old_unit_pos));
}
tempo_group->show();
tempo_meta_group->show();
tempo_label.show();
tbpos += timebar_height;
tbgpos += timebar_height;
visible_timebars++;
} else {
tempo_group->hide();
tempo_meta_group->hide();
tempo_label.hide();
}

View File

@ -898,5 +898,62 @@ Editor::mid_tempo_per_region_update (RegionView* rv)
void
Editor::set_tempo_edit_behavior (TempoEditBehavior teb)
{
_tempo_edit_behavior = teb;
/* As with all things radio-action related, we carry out the change by
toggling the action, and then actually do the model-view changes in
the actions' toggled handler.
*/
Glib::RefPtr<Action> act;
switch (teb) {
case TempoMapping:
act = ActionManager::get_action (X_("Editor"), X_("tempo-edit-is-mapping"));
break;
case TempoChanging:
act = ActionManager::get_action (X_("Editor"), X_("tempo-edit-is-changing"));
}
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
/* go there and back to ensure that the toggled handler is called to set up mouse_mode */
tact->set_active (false);
tact->set_active (true);
}
void
Editor::tempo_edit_behavior_toggled (TempoEditBehavior teb)
{
Glib::RefPtr<Action> act;
switch (teb) {
case TempoMapping:
act = ActionManager::get_action (X_("Editor"), X_("tempo-edit-is-mapping"));
break;
case TempoChanging:
act = ActionManager::get_action (X_("Editor"), X_("tempo-edit-is-changing"));
}
Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
if (!tact->get_active()) {
/* this was just the notification that the old mode has been
* left. we'll get called again with the new mode active in a
* jiffy.
*/
return;
}
/* change the ruler shown in the tempo position */
_tempo_edit_behavior = teb;
switch (teb) {
case TempoMapping:
tempo_group->hide ();
mapping_group->show ();
break;
case TempoChanging:
tempo_group->show ();
mapping_group->hide ();
break;
}
}