Remove internal edit mode and add "content" tool.
[ardour.git] / gtk2_ardour / editor_regions.cc
index 01b26705f51e4a2faf0161277f41b075654875b9..f406694e4d6df6e11d6fb2488dc3cfae5fe7e9c5 100644 (file)
 #include "utils.h"
 #include "editor_regions.h"
 #include "editor_drag.h"
+#include "main_clock.h"
 
 #include "i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
 using namespace PBD;
 using namespace Gtk;
 using namespace Glib;
@@ -78,6 +80,7 @@ EditorRegions::EditorRegions (Editor* e)
 {
        _display.set_size_request (100, -1);
        _display.set_rules_hint (true);
+       _display.set_name ("EditGroupList");
 
        /* Try to prevent single mouse presses from initiating edits.
           This relies on a hack in gtktreeview.c:gtk_treeview_button_press()
@@ -112,7 +115,7 @@ EditorRegions::EditorRegions (Editor* e)
                { 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 dsisabled") },
+               { 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?") },
@@ -292,7 +295,7 @@ EditorRegions::add_region (boost::shared_ptr<Region> region)
        string str;
        TreeModel::Row row;
        Gdk::Color c;
-       bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source());
+       bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source()) != NULL;
 
        if (!_show_automatic_regions && region->automatic()) {
                return;
@@ -338,14 +341,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, ARDOUR_UI::config()->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, ARDOUR_UI::config()->color ("region list automatic"));
 
                } else {
-                       set_color(c, rgba_from_style ("RegionListWholeFile", 0xff, 0, 0, 0, "fg", Gtk::STATE_NORMAL, false ));
-
+                       set_color_from_rgba (c, ARDOUR_UI::config()->color ("region list whole file"));
                }
 
                row[_columns.color_] = c;
@@ -549,6 +553,7 @@ EditorRegions::selection_changed ()
                for (TreeView::Selection::ListHandle_Path::iterator i = rows.begin(); i != rows.end(); ++i) {
 
                        if ((iter = _model->get_iter (*i))) {
+
                                boost::shared_ptr<Region> region = (*iter)[_columns.region];
 
                                // they could have clicked on a row that is just a placeholder, like "Hidden"
@@ -557,18 +562,12 @@ EditorRegions::selection_changed ()
 
                                if (region) {
 
-                                       if (region->automatic()) {
-
-                                               _display.get_selection()->unselect(*i);
-
-                                       } else {
-                                               _change_connection.block (true);
-                                               _editor->set_selected_regionview_from_region_list (region, Selection::Add);
-
-                                               _change_connection.block (false);
-                                       }
+                                       _change_connection.block (true);
+                                       _editor->set_selected_regionview_from_region_list (region, Selection::Add);
+                                       _change_connection.block (false);
                                }
                        }
+                       
                }
        } else {
                _editor->get_selection().clear_regions ();
@@ -1118,7 +1117,7 @@ EditorRegions::sorter (TreeModel::iterator a, TreeModel::iterator b)
 
        switch (_sort_type) {
        case ByName:
-               cmp = strcasecmp (region1->name().c_str(), region2->name().c_str());
+               cmp = region1->name().compare(region2->name());
                break;
 
        case ByLength:
@@ -1143,7 +1142,7 @@ EditorRegions::sorter (TreeModel::iterator a, TreeModel::iterator b)
                break;
 
        case BySourceFileName:
-               cmp = strcasecmp (region1->source()->name().c_str(), region2->source()->name().c_str());
+               cmp = region1->source()->name().compare(region2->source()->name());
                break;
 
        case BySourceFileLength:
@@ -1156,9 +1155,9 @@ EditorRegions::sorter (TreeModel::iterator a, TreeModel::iterator b)
 
        case BySourceFileFS:
                if (region1->source()->name() == region2->source()->name()) {
-                       cmp = strcasecmp (region1->name().c_str(),  region2->name().c_str());
+                       cmp = region1->name().compare(region2->name());
                } else {
-                       cmp = strcasecmp (region1->source()->name().c_str(),  region2->source()->name().c_str());
+                       cmp = region1->source()->name().compare(region2->source()->name());
                }
                break;
        }
@@ -1236,7 +1235,9 @@ EditorRegions::drag_data_received (const RefPtr<Gdk::DragContext>& context,
 
        if (_editor->convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) {
                framepos_t pos = 0;
-               if (Profile->get_sae() || Config->get_only_copy_imported_files()) {
+               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) {
                        _editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, SrcBest, pos);
                } else {
                        _editor->do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos);
@@ -1298,7 +1299,7 @@ EditorRegions::name_edit (const std::string& path, const std::string& new_text)
 
        if (region) {
                vector<RegionView*> equivalents;
-               _editor->get_regions_corresponding_to (region, equivalents);
+               _editor->get_regions_corresponding_to (region, equivalents, false);
 
                for (vector<RegionView*>::iterator i = equivalents.begin(); i != equivalents.end(); ++i) {
                        if (new_text != (*i)->region()->name()) {
@@ -1560,7 +1561,7 @@ EditorRegions::sort_type_action (Editing::RegionListSortType t) const
                break;
        default:
                fatal << string_compose (_("programming error: %1: %2"), "EditorRegions: impossible sort type", (int) t) << endmsg;
-               /*NOTREACHED*/
+               abort(); /*NOTREACHED*/
        }
 
        RefPtr<Action> act = ActionManager::get_action (X_("RegionList"), action);