remove all trace of SAE from source code.
[ardour.git] / gtk2_ardour / editor_regions.cc
index 78c45c7d8d0bc3180f8bbf5563aef8f0c02b0f5c..63b96f1e64c3288b56638461842f5cbad8faf752 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "gtkmm2ext/choice.h"
 #include "gtkmm2ext/treeutils.h"
+#include "gtkmm2ext/utils.h"
 
 #include "audio_clock.h"
 #include "editor.h"
@@ -48,6 +49,8 @@
 #include "editor_regions.h"
 #include "editor_drag.h"
 #include "main_clock.h"
+#include "tooltips.h"
+#include "ui_config.h"
 
 #include "i18n.h"
 
@@ -109,31 +112,31 @@ EditorRegions::EditorRegions (Editor* e)
        Gtk::Label* l;
 
        ColumnInfo ci[] = {
-               { 0, _("Region"), _("Region name, with number of channels in []'s") },
-               { 1, _("Position"),  _("Position of start of region") },
-               { 2, _("End"),  _("Position of end of region") },
-               { 3, _("Length"),  _("Length of the region") },
-               { 4, _("Sync"),  _("Position of region sync point, relative to start of the region") },
-               { 5, _("Fade In"),  _("Length of region fade-in (units: secondary clock), () if disabled") },
-               { 6, _("Fade Out"),  _("Length of region fade-out (units: secondary clock), () if disabled") },
-               { 7, _("L"),  _("Region position locked?") },
-               { 8, _("G"),  _("Region position glued to Bars|Beats time?") },
-               { 9, _("M"),  _("Region muted?") },
-               { 10, _("O"),  _("Region opaque (blocks regions below it from being heard)?") },
+               { 0,   _("Region"),    _("Region name, with number of channels in []'s") },
+               { 1,   _("Position"),  _("Position of start of region") },
+               { 2,   _("End"),       _("Position of end of region") },
+               { 3,   _("Length"),    _("Length of the region") },
+               { 4,   _("Sync"),      _("Position of region sync point, relative to start of the region") },
+               { 5,   _("Fade In"),   _("Length of region fade-in (units: secondary clock), () if disabled") },
+               { 6,   _("Fade Out"),  _("Length of region fade-out (units: secondary clock), () if disabled") },
+               { 7,  S_("Lock|L"),    _("Region position locked?") },
+               { 8,  S_("Gain|G"),    _("Region position glued to Bars|Beats time?") },
+               { 9,  S_("Mute|M"),    _("Region muted?") },
+               { 10, S_("Opaque|O"),  _("Region opaque (blocks regions below it from being heard)?") },
                { -1, 0, 0 }
        };
-       
+
        for (int i = 0; ci[i].index >= 0; ++i) {
                col = _display.get_column (ci[i].index);
                l = manage (new Label (ci[i].label));
-               ARDOUR_UI::instance()->set_tip (*l, ci[i].tooltip);
+               set_tooltip (*l, ci[i].tooltip);
                col->set_widget (*l);
                l->show ();
 
                if (ci[i].index > 6) {
                        col->set_expand (false);
                        col->set_alignment (ALIGN_CENTER);
-               } 
+               }
        }
 
        _display.set_headers_visible (true);
@@ -185,6 +188,7 @@ EditorRegions::EditorRegions (Editor* e)
 
        _display.get_selection()->set_mode (SELECTION_MULTIPLE);
        _display.add_object_drag (_columns.region.index(), "regions");
+       _display.set_drag_column (_columns.name.index());
 
        /* setup DnD handling */
 
@@ -341,14 +345,15 @@ EditorRegions::add_region (boost::shared_ptr<Region> region)
                row = *(_model->append());
 
                if (missing_source) {
-                       c.set_rgb(65535,0,0);     // FIXME: error color from style
+                       // c.set_rgb(65535,0,0);     // FIXME: error color from style
+                       set_color_from_rgba (c, UIConfiguration::instance().color ("region list missing source"));
 
                } else if (region->automatic()){
-                       c.set_rgb(0,65535,0);     // FIXME: error color from style
+                       // c.set_rgb(0,65535,0);     // FIXME: error color from style
+                       set_color_from_rgba (c, UIConfiguration::instance().color ("region list automatic"));
 
                } else {
-                       set_color_from_rgba (c, rgba_from_style ("RegionListWholeFile", 0xff, 0, 0, 0, "fg", Gtk::STATE_NORMAL, false ));
-
+                       set_color_from_rgba (c, UIConfiguration::instance().color ("region list whole file"));
                }
 
                row[_columns.color_] = c;
@@ -387,14 +392,14 @@ EditorRegions::add_region (boost::shared_ptr<Region> region)
                row[_columns.property_toggles_visible] = false;
 
                if (missing_source) {
-                       row[_columns.path] = _("(MISSING) ") + region->source()->name();
+                       row[_columns.path] = _("(MISSING) ") + Gtkmm2ext::markup_escape_text (region->source()->name());
 
                } else {
                        boost::shared_ptr<FileSource> fs = boost::dynamic_pointer_cast<FileSource>(region->source());
                        if (fs) {
-                               row[_columns.path] = fs->path();
+                               row[_columns.path] = Gtkmm2ext::markup_escape_text (fs->path());
                        } else {
-                               row[_columns.path] = region->source()->name();
+                               row[_columns.path] = Gtkmm2ext::markup_escape_text (region->source()->name());
                        }
                }
 
@@ -430,7 +435,7 @@ EditorRegions::add_region (boost::shared_ptr<Region> region)
                        */
 
                        row = *(_model->insert (subrows.end()));
-                       
+
                } else {
                        row = *(_model->append());
                }
@@ -566,7 +571,7 @@ EditorRegions::selection_changed ()
                                        _change_connection.block (false);
                                }
                        }
-                       
+
                }
        } else {
                _editor->get_selection().clear_regions ();
@@ -689,6 +694,12 @@ EditorRegions::format_position (framepos_t pos, char* buf, size_t bufsize, bool
        Timecode::BBT_Time bbt;
        Timecode::Time timecode;
 
+       if (pos < 0) {
+               error << string_compose (_("EditorRegions::format_position: negative timecode position: %1"), pos) << endmsg;
+               snprintf (buf, bufsize, "invalid");
+               return;
+       }
+
        switch (ARDOUR_UI::instance()->secondary_clock->mode ()) {
        case AudioClock::BBT:
                _session->tempo_map().bbt_time (pos, bbt);
@@ -815,10 +826,12 @@ EditorRegions::populate_row_end (boost::shared_ptr<Region> region, TreeModel::Ro
                row[_columns.end] = "";
        } else if (used > 1) {
                row[_columns.end] = _("Mult.");
-       } else {
+       } else if (region->last_frame() >= region->first_frame()) {
                char buf[16];
                format_position (region->last_frame(), buf, sizeof (buf));
                row[_columns.end] = buf;
+       } else {
+               row[_columns.end] = "empty";
        }
 }
 
@@ -938,9 +951,9 @@ void
 EditorRegions::populate_row_name (boost::shared_ptr<Region> region, TreeModel::Row const &row)
 {
        if (region->n_channels() > 1) {
-               row[_columns.name] = string_compose("%1  [%2]", region->name(), region->n_channels());
+               row[_columns.name] = string_compose("%1  [%2]", Gtkmm2ext::markup_escape_text (region->name()), region->n_channels());
        } else {
-               row[_columns.name] = region->name();
+               row[_columns.name] = Gtkmm2ext::markup_escape_text (region->name());
        }
 }
 
@@ -948,9 +961,9 @@ void
 EditorRegions::populate_row_source (boost::shared_ptr<Region> region, TreeModel::Row const &row)
 {
         if (boost::dynamic_pointer_cast<SilentFileSource>(region->source())) {
-               row[_columns.path] = _("MISSING ") + region->source()->name();
+               row[_columns.path] = _("MISSING ") + Gtkmm2ext::markup_escape_text (region->source()->name());
        } else {
-               row[_columns.path] = region->source()->name();
+               row[_columns.path] = Gtkmm2ext::markup_escape_text (region->source()->name());
        }
 }
 
@@ -1236,7 +1249,7 @@ EditorRegions::drag_data_received (const RefPtr<Gdk::DragContext>& context,
                framepos_t pos = 0;
                bool copy = ((context->get_actions() & (Gdk::ACTION_COPY | Gdk::ACTION_LINK | Gdk::ACTION_MOVE)) == Gdk::ACTION_COPY);
 
-               if (Profile->get_sae() || Config->get_only_copy_imported_files() || copy) {
+               if (UIConfiguration::instance().get_only_copy_imported_files() || copy) {
                        _editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, SrcBest, pos);
                } else {
                        _editor->do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos);