X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ftime_info_box.cc;h=364b0fda43025111e7c85216dd6556624f884be4;hb=c08b336292cd66e066eae23bc6272dce42ae28c2;hp=fe6fe23bc364b35b04ff29ec2ab09676d0676ec6;hpb=966b62516f2435c51ea0e44d6a38c2f00d3b9f9f;p=ardour.git diff --git a/gtk2_ardour/time_info_box.cc b/gtk2_ardour/time_info_box.cc index fe6fe23bc3..364b0fda43 100644 --- a/gtk2_ardour/time_info_box.cc +++ b/gtk2_ardour/time_info_box.cc @@ -32,6 +32,8 @@ #include "time_info_box.h" #include "audio_clock.h" #include "editor.h" +#include "control_point.h" +#include "automation_line.h" #include "i18n.h" @@ -45,36 +47,27 @@ TimeInfoBox::TimeInfoBox () , right (2, 4) , syncing_selection (false) , syncing_punch (false) - , punch_in_button (_("In")) - , punch_out_button (_("Out")) { - selection_start = new AudioClock ("selection-start", false, "SelectionClockDisplay", false, false, false, false); - selection_end = new AudioClock ("selection-end", false, "SelectionClockDisplay", false, false, false, false); - selection_length = new AudioClock ("selection-length", false, "SelectionClockDisplay", false, false, true, false); + set_name (X_("TimeInfoBox")); - punch_start = new AudioClock ("punch-start", false, "PunchClockDisplay", false, false, false, false); - punch_end = new AudioClock ("punch-end", false, "PunchClockDisplay", false, false, false, false); + selection_start = new AudioClock ("selection-start", false, "selection", false, false, false, false); + selection_end = new AudioClock ("selection-end", false, "selection", false, false, false, false); + selection_length = new AudioClock ("selection-length", false, "selection", false, false, true, false); - CairoEditableText& ss (selection_start->main_display()); - ss.set_corner_radius (0); + punch_start = new AudioClock ("punch-start", false, "punch", false, false, false, false); + punch_end = new AudioClock ("punch-end", false, "punch", false, false, false, false); - CairoEditableText& se (selection_end->main_display()); - se.set_corner_radius (0); - - CairoEditableText& sl (selection_length->main_display()); - sl.set_corner_radius (0); - - CairoEditableText& ps (punch_start->main_display()); - ps.set_corner_radius (0); - - CairoEditableText& pe (punch_end->main_display()); - pe.set_corner_radius (0); + selection_start->set_draw_background (false); + selection_end->set_draw_background (false); + selection_length->set_draw_background (false); + punch_start->set_draw_background (false); + punch_end->set_draw_background (false); selection_title.set_text (_("Selection")); punch_title.set_text (_("Punch")); set_homogeneous (false); - set_spacing (6); + set_spacing (0); set_border_width (2); pack_start (left, true, true); @@ -90,11 +83,10 @@ TimeInfoBox::TimeInfoBox () right.set_border_width (2); right.set_col_spacings (2); - Gtk::Label* l; selection_title.set_name ("TimeInfoSelectionTitle"); - left.attach (selection_title, 0, 2, 0, 1); + left.attach (selection_title, 1, 2, 0, 1); l = manage (new Label); l->set_text (_("Start")); l->set_alignment (1.0, 0.5); @@ -116,37 +108,25 @@ TimeInfoBox::TimeInfoBox () left.attach (*l, 0, 1, 3, 4, FILL); left.attach (*selection_length, 1, 2, 3, 4); - punch_title.set_name ("TimeInfoSelectionTitle"); - right.attach (punch_title, 2, 4, 0, 1); - l = manage (new Label); - l->set_alignment (1.0, 0.5); - l->set_text (_("In")); - l->set_name (X_("TimeInfoPunchLabel")); - right.attach (*l, 2, 3, 1, 2, FILL); - right.attach (*punch_start, 3, 4, 1, 2); + punch_in_button.set_name ("punch button"); + punch_out_button.set_name ("punch button"); + punch_in_button.set_text (_("In")); + punch_out_button.set_text (_("Out")); - l = manage (new Label); - l->set_alignment (1.0, 0.5); - l->set_text (_("Out")); - l->set_name (X_("TimeInfoPunchLabel")); - right.attach (*l, 2, 3, 2, 3, FILL); - right.attach (*punch_end, 3, 4, 2, 3); - - punch_in_button.set_name ("TimeInfoPunchButton"); - punch_out_button.set_name ("TimeInfoPunchButton"); - punch_button_box.set_homogeneous (true); - punch_button_box.set_spacing (6); - punch_button_box.set_border_width (2); - punch_button_box.pack_start (punch_in_button, true, true); - punch_button_box.pack_start (punch_out_button, true, true); - - ActionManager::get_action ("Transport", "TogglePunchIn")->connect_proxy (punch_in_button); - ActionManager::get_action ("Transport", "TogglePunchOut")->connect_proxy (punch_out_button); + Glib::RefPtr act = ActionManager::get_action ("Transport", "TogglePunchIn"); + punch_in_button.set_related_action (act); + act = ActionManager::get_action ("Transport", "TogglePunchOut"); + punch_out_button.set_related_action (act); Gtkmm2ext::UI::instance()->set_tip (punch_in_button, _("Start recording at auto-punch start")); Gtkmm2ext::UI::instance()->set_tip (punch_out_button, _("Stop recording at auto-punch end")); - right.attach (punch_button_box, 2, 4, 3, 4, FILL, FILL); + punch_title.set_name ("TimeInfoSelectionTitle"); + right.attach (punch_title, 3, 4, 0, 1); + right.attach (punch_in_button, 2, 3, 1, 2, FILL, SHRINK); + right.attach (*punch_start, 3, 4, 1, 2); + right.attach (punch_out_button, 2, 3, 2, 3, FILL, SHRINK); + right.attach (*punch_end, 3, 4, 2, 3); show_all (); @@ -166,7 +146,7 @@ TimeInfoBox::TimeInfoBox () Editor::instance().get_selection().TimeChanged.connect (sigc::mem_fun (*this, &TimeInfoBox::selection_changed)); Editor::instance().get_selection().RegionsChanged.connect (sigc::mem_fun (*this, &TimeInfoBox::selection_changed)); - Editor::instance().MouseModeChanged.connect (editor_connections, invalidator(*this), ui_bind (&TimeInfoBox::track_mouse_mode, this), gui_context()); + Editor::instance().MouseModeChanged.connect (editor_connections, invalidator(*this), boost::bind (&TimeInfoBox::track_mouse_mode, this), gui_context()); } TimeInfoBox::~TimeInfoBox () @@ -193,7 +173,9 @@ TimeInfoBox::clock_button_release_event (GdkEventButton* ev, AudioClock* src) } if (ev->button == 1) { - _session->request_locate (src->current_time ()); + if (!src->off()) { + _session->request_locate (src->current_time ()); + } return true; } @@ -269,15 +251,29 @@ TimeInfoBox::selection_changed () } else { if (selection.regions.empty()) { if (selection.points.empty()) { - selection_start->set_off (true); - selection_end->set_off (true); - selection_length->set_off (true); + Glib::RefPtr act = ActionManager::get_action ("MouseMode", "set-mouse-mode-object-range"); + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + + if (tact && tact->get_active() && !selection.time.empty()) { + /* show selected range */ + selection_start->set_off (false); + selection_end->set_off (false); + selection_length->set_off (false); + selection_start->set (selection.time.start()); + selection_end->set (selection.time.end_frame()); + selection_length->set (selection.time.length()); + } else { + selection_start->set_off (true); + selection_end->set_off (true); + selection_length->set_off (true); + } } else { s = max_framepos; e = 0; for (PointSelection::iterator i = selection.points.begin(); i != selection.points.end(); ++i) { - s = min (s, (framepos_t) i->start); - e = max (e, (framepos_t) i->end); + framepos_t const p = (*i)->line().session_position ((*i)->model ()); + s = min (s, p); + e = max (e, p); } selection_start->set_off (false); selection_end->set_off (false); @@ -301,9 +297,24 @@ TimeInfoBox::selection_changed () case Editing::MouseRange: if (selection.time.empty()) { - selection_start->set_off (true); - selection_end->set_off (true); - selection_length->set_off (true); + Glib::RefPtr act = ActionManager::get_action ("MouseMode", "set-mouse-mode-object-range"); + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); + + if (tact && tact->get_active() && !selection.regions.empty()) { + /* show selected regions */ + s = selection.regions.start(); + e = selection.regions.end_frame(); + selection_start->set_off (false); + selection_end->set_off (false); + selection_length->set_off (false); + selection_start->set (s); + selection_end->set (e); + selection_length->set (e - s + 1); + } else { + selection_start->set_off (true); + selection_end->set_off (true); + selection_length->set_off (true); + } } else { selection_start->set_off (false); selection_end->set_off (false); @@ -357,31 +368,3 @@ TimeInfoBox::punch_changed (Location* loc) punch_end->set (loc->end()); } -bool -TimeInfoBox::on_expose_event (GdkEventExpose* ev) -{ - { - int x, y; - Gtk::Widget* window_parent; - Glib::RefPtr win = Gtkmm2ext::window_to_draw_on (*this, &window_parent); - - if (win) { - - Cairo::RefPtr context = win->create_cairo_context(); - -#if 0 - translate_coordinates (*window_parent, ev->area.x, ev->area.y, x, y); - context->rectangle (x, y, ev->area.width, ev->area.height); - context->clip (); -#endif - translate_coordinates (*window_parent, 0, 0, x, y); - context->set_source_rgba (0.149, 0.149, 0.149, 1.0); - Gtkmm2ext::rounded_rectangle (context, x, y, get_allocation().get_width(), get_allocation().get_height(), 5); - context->fill (); - } - } - - HBox::on_expose_event (ev); - - return false; -}