X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmain_clock.cc;h=6a759eb9dce18a69df93574682ae5b2518156a96;hb=c7863289664f0c847f6a5e1c0fa5b4c731c134d3;hp=36b398ee44b406e9c2f56b6726cc78c28647a4f9;hpb=fb313fb1741a04f270fff3703967df572ac4fc45;p=ardour.git diff --git a/gtk2_ardour/main_clock.cc b/gtk2_ardour/main_clock.cc index 36b398ee44..6a759eb9dc 100644 --- a/gtk2_ardour/main_clock.cc +++ b/gtk2_ardour/main_clock.cc @@ -17,26 +17,33 @@ */ -#include "ardour/rc_configuration.h" +#include "ardour/tempo.h" + +#include "actions.h" #include "main_clock.h" -#include "i18n.h" +#include "ui_config.h" +#include "public_editor.h" + +#include "pbd/i18n.h" using namespace Gtk; MainClock::MainClock ( const std::string& clock_name, - bool is_transient, const std::string& widget_name, - bool editable, - bool follows_playhead, - bool primary, - bool duration, - bool with_info + bool primary ) - : AudioClock (clock_name, is_transient, widget_name, editable, follows_playhead, duration, with_info) + : AudioClock (clock_name, false, widget_name, true, true, false, true) , _primary (primary) { +} +void +MainClock::set_session (ARDOUR::Session *s) +{ + AudioClock::set_session (s); + _left_btn.set_related_action (ActionManager::get_action (X_("Editor"), X_("edit-current-tempo"))); + _right_btn.set_related_action (ActionManager::get_action (X_("Editor"), X_("edit-current-meter"))); } void @@ -51,24 +58,69 @@ MainClock::build_ops_menu () ops_items.push_back (CheckMenuElem (_("Display delta to edit cursor"), sigc::mem_fun (*this, &MainClock::display_delta_to_edit_cursor))); Gtk::CheckMenuItem* c = dynamic_cast (&ops_items.back()); if (_primary) { - if (ARDOUR::Config->get_primary_clock_delta_edit_cursor ()) { - ARDOUR::Config->set_primary_clock_delta_edit_cursor (false); + if (UIConfiguration::instance().get_primary_clock_delta_edit_cursor ()) { + UIConfiguration::instance().set_primary_clock_delta_edit_cursor (false); c->set_active (true); } } else { - if (ARDOUR::Config->get_secondary_clock_delta_edit_cursor ()) { - ARDOUR::Config->set_secondary_clock_delta_edit_cursor (false); + if (UIConfiguration::instance().get_secondary_clock_delta_edit_cursor ()) { + UIConfiguration::instance().set_secondary_clock_delta_edit_cursor (false); c->set_active (true); } } + + ops_items.push_back (SeparatorElem()); + ops_items.push_back (MenuElem (_("Edit Tempo"), sigc::mem_fun(*this, &MainClock::edit_current_tempo))); + ops_items.push_back (MenuElem (_("Edit Meter"), sigc::mem_fun(*this, &MainClock::edit_current_meter))); + ops_items.push_back (MenuElem (_("Insert Tempo Change"), sigc::mem_fun(*this, &MainClock::insert_new_tempo))); + ops_items.push_back (MenuElem (_("Insert Meter Change"), sigc::mem_fun(*this, &MainClock::insert_new_meter))); +} + +framepos_t +MainClock::absolute_time () const +{ + if (get_is_duration ()) { + // delta to edit cursor + return current_time () + PublicEditor::instance().get_preferred_edit_position (Editing::EDIT_IGNORE_PHEAD); + } else { + return current_time (); + } } void MainClock::display_delta_to_edit_cursor () { if (_primary) { - ARDOUR::Config->set_primary_clock_delta_edit_cursor (!ARDOUR::Config->get_primary_clock_delta_edit_cursor ()); + UIConfiguration::instance().set_primary_clock_delta_edit_cursor (!UIConfiguration::instance().get_primary_clock_delta_edit_cursor ()); } else { - ARDOUR::Config->set_secondary_clock_delta_edit_cursor (!ARDOUR::Config->get_secondary_clock_delta_edit_cursor ()); + UIConfiguration::instance().set_secondary_clock_delta_edit_cursor (!UIConfiguration::instance().get_secondary_clock_delta_edit_cursor ()); } } + +void +MainClock::edit_current_tempo () +{ + if (!PublicEditor::instance().session()) return; + ARDOUR::TempoSection* ts = const_cast(&PublicEditor::instance().session()->tempo_map().tempo_section_at_frame (absolute_time())); + PublicEditor::instance().edit_tempo_section (ts); +} + +void +MainClock::edit_current_meter () +{ + if (!PublicEditor::instance().session()) return; + ARDOUR::MeterSection* ms = const_cast(&PublicEditor::instance().session()->tempo_map().meter_section_at_frame (absolute_time())); + PublicEditor::instance().edit_meter_section (ms); +} + +void +MainClock::insert_new_tempo () +{ + PublicEditor::instance().mouse_add_new_tempo_event (absolute_time ()); +} + +void +MainClock::insert_new_meter () +{ + PublicEditor::instance().mouse_add_new_meter_event (absolute_time ()); +}