replace unicode dash with (monospace) minus.
[ardour.git] / gtk2_ardour / editor.cc
index e9863069769a1ed59296e136be722ba8125dc519..1c9c613e4b72ffdafef6660ff62bd3cbf2a6cfb5 100644 (file)
@@ -44,6 +44,7 @@
 #include "pbd/memento_command.h"
 #include "pbd/unknown_type.h"
 #include "pbd/unwind.h"
+#include "pbd/stacktrace.h"
 
 #include <glibmm/miscutils.h>
 #include <gtkmm/image.h>
@@ -383,67 +384,67 @@ Editor::Editor ()
        set_zoom_focus (ZoomFocusLeft);
        zoom_range_clock->ValueChanged.connect (sigc::mem_fun(*this, &Editor::zoom_adjustment_changed));
 
-       bbt_label.set_name ("EditorTimeButton");
+       bbt_label.set_name ("EditorRulerLabel");
        bbt_label.set_size_request (-1, (int)timebar_height);
        bbt_label.set_alignment (1.0, 0.5);
        bbt_label.set_padding (5,0);
        bbt_label.hide ();
        bbt_label.set_no_show_all();
-       minsec_label.set_name ("EditorTimeButton");
+       minsec_label.set_name ("EditorRulerLabel");
        minsec_label.set_size_request (-1, (int)timebar_height);
        minsec_label.set_alignment (1.0, 0.5);
        minsec_label.set_padding (5,0);
        minsec_label.hide ();
        minsec_label.set_no_show_all();
-       timecode_label.set_name ("EditorTimeButton");
+       timecode_label.set_name ("EditorRulerLabel");
        timecode_label.set_size_request (-1, (int)timebar_height);
        timecode_label.set_alignment (1.0, 0.5);
        timecode_label.set_padding (5,0);
        timecode_label.hide ();
        timecode_label.set_no_show_all();
-       samples_label.set_name ("EditorTimeButton");
+       samples_label.set_name ("EditorRulerLabel");
        samples_label.set_size_request (-1, (int)timebar_height);
        samples_label.set_alignment (1.0, 0.5);
        samples_label.set_padding (5,0);
        samples_label.hide ();
        samples_label.set_no_show_all();
 
-       tempo_label.set_name ("EditorTimeButton");
+       tempo_label.set_name ("EditorRulerLabel");
        tempo_label.set_size_request (-1, (int)timebar_height);
        tempo_label.set_alignment (1.0, 0.5);
        tempo_label.set_padding (5,0);
        tempo_label.hide();
        tempo_label.set_no_show_all();
 
-       meter_label.set_name ("EditorTimeButton");
+       meter_label.set_name ("EditorRulerLabel");
        meter_label.set_size_request (-1, (int)timebar_height);
        meter_label.set_alignment (1.0, 0.5);
        meter_label.set_padding (5,0);
        meter_label.hide();
        meter_label.set_no_show_all();
 
-       mark_label.set_name ("EditorTimeButton");
+       mark_label.set_name ("EditorRulerLabel");
        mark_label.set_size_request (-1, (int)timebar_height);
        mark_label.set_alignment (1.0, 0.5);
        mark_label.set_padding (5,0);
        mark_label.hide();
        mark_label.set_no_show_all();
 
-       cd_mark_label.set_name ("EditorTimeButton");
+       cd_mark_label.set_name ("EditorRulerLabel");
        cd_mark_label.set_size_request (-1, (int)timebar_height);
        cd_mark_label.set_alignment (1.0, 0.5);
        cd_mark_label.set_padding (5,0);
        cd_mark_label.hide();
        cd_mark_label.set_no_show_all();
 
-       range_mark_label.set_name ("EditorTimeButton");
+       range_mark_label.set_name ("EditorRulerLabel");
        range_mark_label.set_size_request (-1, (int)timebar_height);
        range_mark_label.set_alignment (1.0, 0.5);
        range_mark_label.set_padding (5,0);
        range_mark_label.hide();
        range_mark_label.set_no_show_all();
 
-       transport_mark_label.set_name ("EditorTimeButton");
+       transport_mark_label.set_name ("EditorRulerLabel");
        transport_mark_label.set_size_request (-1, (int)timebar_height);
        transport_mark_label.set_alignment (1.0, 0.5);
        transport_mark_label.set_padding (5,0);
@@ -652,11 +653,13 @@ Editor::Editor ()
 
        /* nudge stuff */
 
-       nudge_forward_button.add (*(manage (new Image (::get_icon("nudge_right")))));
-       nudge_backward_button.add (*(manage (new Image (::get_icon("nudge_left")))));
+       nudge_forward_button.set_name ("zoom button");
+       nudge_forward_button.add_elements (ArdourButton::FlatFace);
+       nudge_forward_button.set_image(::get_icon("nudge_right"));
 
-       nudge_forward_button.set_name ("TransportButton");
-       nudge_backward_button.set_name ("TransportButton");
+       nudge_backward_button.set_name ("zoom button");
+       nudge_backward_button.add_elements (ArdourButton::FlatFace);
+       nudge_backward_button.set_image(::get_icon("nudge_left"));
 
        fade_context_menu.set_name ("ArdourContextMenu");
 
@@ -1367,7 +1370,7 @@ Editor::fill_xfade_menu (Menu_Helpers::MenuList& items, bool start)
        
        items.push_back (
                ImageMenuElem (
-                       _("ConstantPower"),
+                       _("Constant power"),
                        *(*images)[FadeConstantPower],
                        sigc::bind (sigc::mem_fun (*this, emf), FadeConstantPower)
                        ));
@@ -1504,7 +1507,7 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
                                
                        items.push_back (
                                ImageMenuElem (
-                                       _("Constant Power"),
+                                       _("Constant power"),
                                        *_fade_in_images[FadeConstantPower],
                                        sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeConstantPower)
                                        ));
@@ -1566,7 +1569,7 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
 
                        items.push_back (
                                ImageMenuElem (
-                                       _("Constant Power"),
+                                       _("Constant power"),
                                        *_fade_out_images[FadeConstantPower],
                                        sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeConstantPower)
                                        ));
@@ -2137,9 +2140,16 @@ Editor::set_snap_to (SnapType st)
 void
 Editor::set_snap_mode (SnapMode mode)
 {
-       _snap_mode = mode;
        string str = snap_mode_strings[(int)mode];
 
+       if (_internal_editing) {
+               internal_snap_mode = mode;
+       } else {
+               pre_internal_snap_mode = mode;
+       }
+
+       _snap_mode = mode;
+
        if (str != snap_mode_selector.get_active_text ()) {
                snap_mode_selector.set_active_text (str);
        }
@@ -2287,6 +2297,7 @@ Editor::set_state (const XMLNode& node, int /*version*/)
                pre_internal_snap_type = (SnapType) string_2_enum (prop->value(), pre_internal_snap_type);
        }
 
+
        if ((prop = node.property ("pre-internal-snap-mode"))) {
                pre_internal_snap_mode = (SnapMode) string_2_enum (prop->value(), pre_internal_snap_mode);
        }
@@ -2857,7 +2868,7 @@ Editor::setup_toolbar ()
        mouse_mode_size_group->add_widget (internal_edit_button);
 
        /* make them just a bit bigger */
-       mouse_move_button.set_size_request (-1, 25);
+       mouse_move_button.set_size_request (-1, 30);
 
        mouse_mode_hbox->set_spacing (2);
 
@@ -2916,19 +2927,25 @@ Editor::setup_toolbar ()
        RefPtr<Action> act;
 
        zoom_in_button.set_name ("zoom button");
-       zoom_in_button.add (*(manage (new Image (::get_icon ("zoom_in")))));
+       zoom_in_button.add_elements ( ArdourButton::FlatFace );
+       zoom_in_button.set_tweaks ((ArdourButton::Tweaks) (ArdourButton::ShowClick) );
+       zoom_in_button.set_image(::get_icon ("zoom_in"));
        act = ActionManager::get_action (X_("Editor"), X_("temporal-zoom-in"));
-       act->connect_proxy (zoom_in_button);
+       zoom_in_button.set_related_action (act);
 
        zoom_out_button.set_name ("zoom button");
-       zoom_out_button.add (*(manage (new Image (::get_icon ("zoom_out")))));
+       zoom_out_button.add_elements ( ArdourButton::FlatFace );
+       zoom_out_button.set_tweaks ((ArdourButton::Tweaks) (ArdourButton::ShowClick) );
+       zoom_out_button.set_image(::get_icon ("zoom_out"));
        act = ActionManager::get_action (X_("Editor"), X_("temporal-zoom-out"));
-       act->connect_proxy (zoom_out_button);
+       zoom_out_button.set_related_action (act);
 
        zoom_out_full_button.set_name ("zoom button");
-       zoom_out_full_button.add (*(manage (new Image (::get_icon ("zoom_full")))));
+       zoom_out_full_button.add_elements ( ArdourButton::FlatFace );
+       zoom_out_full_button.set_tweaks ((ArdourButton::Tweaks) (ArdourButton::ShowClick) );
+       zoom_out_full_button.set_image(::get_icon ("zoom_full"));
        act = ActionManager::get_action (X_("Editor"), X_("zoom-to-session"));
-       act->connect_proxy (zoom_out_full_button);
+       zoom_out_full_button.set_related_action (act);
 
        zoom_focus_selector.set_name ("ZoomFocusSelector");
        set_popdown_strings (zoom_focus_selector, zoom_focus_strings);
@@ -2941,17 +2958,21 @@ Editor::setup_toolbar ()
        _zoom_box.pack_start (zoom_focus_selector, false, false);
 
        /* Track zoom buttons */
-       tav_expand_button.set_name ("TrackHeightButton");
+       tav_expand_button.set_name ("zoom button");
+       tav_expand_button.add_elements ( ArdourButton::FlatFace );
+       tav_expand_button.set_tweaks ((ArdourButton::Tweaks) (ArdourButton::ShowClick) );
        tav_expand_button.set_size_request (-1, 20);
-       tav_expand_button.add (*(manage (new Image (::get_icon ("tav_exp")))));
+       tav_expand_button.set_image(::get_icon ("tav_exp"));
        act = ActionManager::get_action (X_("Editor"), X_("expand-tracks"));
-       act->connect_proxy (tav_expand_button);
+       tav_expand_button.set_related_action (act);
 
-       tav_shrink_button.set_name ("TrackHeightButton");
+       tav_shrink_button.set_name ("zoom button");
+       tav_shrink_button.add_elements ( ArdourButton::FlatFace );
+       tav_shrink_button.set_tweaks ((ArdourButton::Tweaks) (ArdourButton::ShowClick) );
        tav_shrink_button.set_size_request (-1, 20);
-       tav_shrink_button.add (*(manage (new Image (::get_icon ("tav_shrink")))));
+       tav_shrink_button.set_image(::get_icon ("tav_shrink"));
        act = ActionManager::get_action (X_("Editor"), X_("shrink-tracks"));
-       act->connect_proxy (tav_shrink_button);
+       tav_shrink_button.set_related_action (act);
 
        _zoom_box.pack_start (tav_shrink_button);
        _zoom_box.pack_start (tav_expand_button);
@@ -2967,7 +2988,7 @@ Editor::setup_toolbar ()
        _zoom_tearoff->Visible.connect (sigc::bind (sigc::mem_fun(*this, &Editor::reattach_tearoff), static_cast<Box*> (&toolbar_hbox),
                                                    &_zoom_tearoff->tearoff_window(), 0));
 
-       snap_box.set_spacing (1);
+       snap_box.set_spacing (2);
        snap_box.set_border_width (2);
 
        snap_type_selector.set_name ("SnapTypeSelector");
@@ -2995,6 +3016,9 @@ Editor::setup_toolbar ()
        nudge_forward_button.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::nudge_forward_release), false);
        nudge_backward_button.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::nudge_backward_release), false);
 
+       nudge_forward_button.set_tweaks ((ArdourButton::Tweaks) (ArdourButton::ShowClick) );
+       nudge_backward_button.set_tweaks ((ArdourButton::Tweaks) (ArdourButton::ShowClick) );
+
        nudge_box->pack_start (nudge_backward_button, false, false);
        nudge_box->pack_start (nudge_forward_button, false, false);
        nudge_box->pack_start (*nudge_clock, false, false);
@@ -3563,6 +3587,31 @@ Editor::set_zoom_focus (ZoomFocus f)
        }
 }
 
+void
+Editor::cycle_zoom_focus ()
+{
+       switch (zoom_focus) {
+       case ZoomFocusLeft:
+               set_zoom_focus (ZoomFocusRight);
+               break;
+       case ZoomFocusRight:
+               set_zoom_focus (ZoomFocusCenter);
+               break;
+       case ZoomFocusCenter:
+               set_zoom_focus (ZoomFocusPlayhead);
+               break;
+       case ZoomFocusPlayhead:
+               set_zoom_focus (ZoomFocusMouse);
+               break;
+       case ZoomFocusMouse:
+               set_zoom_focus (ZoomFocusEdit);
+               break;
+       case ZoomFocusEdit:
+               set_zoom_focus (ZoomFocusLeft);
+               break;
+       }
+}
+
 void
 Editor::ensure_float (Window& win)
 {
@@ -3985,7 +4034,7 @@ Editor::new_playlists (TimeAxisView* v)
        begin_reversible_command (_("new playlists"));
        vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
        _session->playlists->get (playlists);
-       mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_new_playlist), playlists), v, ARDOUR::Properties::edit.property_id);
+       mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_new_playlist), playlists), v, ARDOUR::Properties::select.property_id);
        commit_reversible_command ();
 }
 
@@ -4001,7 +4050,7 @@ Editor::copy_playlists (TimeAxisView* v)
        begin_reversible_command (_("copy playlists"));
        vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
        _session->playlists->get (playlists);
-       mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_copy_playlist), playlists), v, ARDOUR::Properties::edit.property_id);
+       mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_copy_playlist), playlists), v, ARDOUR::Properties::select.property_id);
        commit_reversible_command ();
 }
 
@@ -4016,7 +4065,7 @@ Editor::clear_playlists (TimeAxisView* v)
        begin_reversible_command (_("clear playlists"));
        vector<boost::shared_ptr<ARDOUR::Playlist> > playlists;
        _session->playlists->get (playlists);
-       mapover_tracks (sigc::mem_fun (*this, &Editor::mapped_clear_playlist), v, ARDOUR::Properties::edit.property_id);
+       mapover_tracks (sigc::mem_fun (*this, &Editor::mapped_clear_playlist), v, ARDOUR::Properties::select.property_id);
        commit_reversible_command ();
 }
 
@@ -4278,7 +4327,7 @@ Editor::idle_visual_changer ()
                                            current_bbt_points_begin, current_bbt_points_end);
                compute_bbt_ruler_scale (pending_visual_change.time_origin, pending_visual_change.time_origin + current_page_frames(),
                                         current_bbt_points_begin, current_bbt_points_end);
-               update_tempo_based_rulers (current_bbt_points_end, current_bbt_points_begin);
+               update_tempo_based_rulers (current_bbt_points_begin, current_bbt_points_end);
        }
        if (p & VisualChange::TimeOrigin) {
                set_horizontal_position (pending_visual_change.time_origin / frames_per_unit);
@@ -4506,7 +4555,7 @@ Editor::get_regions_after (RegionSelection& rs, framepos_t where, const TrackVie
 RegionSelection
 Editor::get_regions_from_selection ()
 {
-       return get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id);
+       return get_equivalent_regions (selection->regions, ARDOUR::Properties::select.property_id);
 }
 
 /** Get regions using the following method:
@@ -4554,7 +4603,7 @@ Editor::get_regions_from_selection_and_edit_point ()
        /* Add any other regions that are in the same
           edit-activated route group as one of our regions.
         */
-       regions = get_equivalent_regions (regions, ARDOUR::Properties::edit.property_id);
+       regions = get_equivalent_regions (regions, ARDOUR::Properties::select.property_id);
        framepos_t const where = get_preferred_edit_position ();
 
        if (_route_groups->all_group_active_button().get_active() && tracks.empty()) {
@@ -4604,11 +4653,11 @@ Editor::get_regions_from_selection_and_entered ()
                regions.add (entered_regionview);
        }
 
-       return get_equivalent_regions (regions, ARDOUR::Properties::edit.property_id);
+       return get_equivalent_regions (regions, ARDOUR::Properties::select.property_id);
 }
 
 void
-Editor::get_regions_corresponding_to (boost::shared_ptr<Region> region, vector<RegionView*>& regions)
+Editor::get_regions_corresponding_to (boost::shared_ptr<Region> region, vector<RegionView*>& regions, bool src_comparison)
 {
        for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
 
@@ -4627,7 +4676,11 @@ Editor::get_regions_corresponding_to (boost::shared_ptr<Region> region, vector<R
                        }
 
                        if ((pl = (tr->playlist())) != 0) {
-                               pl->get_region_list_equivalent_regions (region, results);
+                               if (src_comparison) {
+                                       pl->get_source_equivalent_regions (region, results);
+                               } else {
+                                       pl->get_region_list_equivalent_regions (region, results);
+                               }
                        }
 
                        for (vector<boost::shared_ptr<Region> >::iterator ir = results.begin(); ir != results.end(); ++ir) {