diff options
author | Ben Loftis <ben@harrisonconsoles.com> | 2018-11-15 09:27:04 -0600 |
---|---|---|
committer | Ben Loftis <ben@harrisonconsoles.com> | 2019-08-01 12:11:31 -0500 |
commit | c12a0177287d8a590aad51979055cbc5561cf31e (patch) | |
tree | ddd86c023da39a977cc31d259e0ba02fc710485d /gtk2_ardour/editor_regions.cc | |
parent | 6c052348b513719cf40893595fb82d46d55704cb (diff) |
(Source List) Region Tags (gtk2 part)
Diffstat (limited to 'gtk2_ardour/editor_regions.cc')
-rw-r--r-- | gtk2_ardour/editor_regions.cc | 103 |
1 files changed, 78 insertions, 25 deletions
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc index 32e7a67b8c..eaa83bc339 100644 --- a/gtk2_ardour/editor_regions.cc +++ b/gtk2_ardour/editor_regions.cc @@ -79,6 +79,7 @@ EditorRegions::EditorRegions (Editor* e) : EditorComponent (e) , old_focus (0) , name_editable (0) + , tags_editable (0) , _menu (0) , _no_redisplay (false) { @@ -110,9 +111,9 @@ EditorRegions::EditorRegions (Editor* e) TreeViewColumn* col_name = manage (new TreeViewColumn ("", _columns.name)); col_name->set_fixed_width (120); col_name->set_sizing (TREE_VIEW_COLUMN_FIXED); - TreeViewColumn* col_take = manage (new TreeViewColumn ("", _columns.take_id)); - col_take->set_fixed_width (date_width); - col_take->set_sizing (TREE_VIEW_COLUMN_FIXED); + TreeViewColumn* col_tags = manage (new TreeViewColumn ("", _columns.tags)); + col_tags->set_fixed_width (date_width); + col_tags->set_sizing (TREE_VIEW_COLUMN_FIXED); TreeViewColumn* col_start = manage (new TreeViewColumn ("", _columns.start)); col_start->set_fixed_width (bbt_width); col_start->set_sizing (TREE_VIEW_COLUMN_FIXED); @@ -145,7 +146,7 @@ EditorRegions::EditorRegions (Editor* e) col_opaque->set_sizing (TREE_VIEW_COLUMN_FIXED); _display.append_column (*col_name); - _display.append_column (*col_take); + _display.append_column (*col_tags); _display.append_column (*col_start); _display.append_column (*col_locked); _display.append_column (*col_glued); @@ -162,7 +163,7 @@ EditorRegions::EditorRegions (Editor* e) ColumnInfo ci[] = { { 0, 0, ALIGN_LEFT, _("Region"), _("Region name, with number of channels in []'s") }, - { 1, 1, ALIGN_LEFT, _("Take"), _("Take ID (or file creation time)") }, + { 1, 1, ALIGN_LEFT, _("Tags"), _("Tags") }, { 2, 15, ALIGN_RIGHT, _("Start"), _("Position of start of region") }, { 3, -1, ALIGN_CENTER, S_("Lock|L"), _("Region position locked?") }, { 4, -1, ALIGN_CENTER, S_("Gain|G"), _("Region position glued to Bars|Beats time?") }, @@ -212,18 +213,25 @@ EditorRegions::EditorRegions (Editor* e) } _display.get_selection()->set_select_function (sigc::mem_fun (*this, &EditorRegions::selection_filter)); - //Region Name: editable; and color turns red if source is missing. + //Name cell: make editable CellRendererText* region_name_cell = dynamic_cast<CellRendererText*>(_display.get_column_cell_renderer (0)); region_name_cell->property_editable() = true; region_name_cell->signal_edited().connect (sigc::mem_fun (*this, &EditorRegions::name_edit)); region_name_cell->signal_editing_started().connect (sigc::mem_fun (*this, &EditorRegions::name_editing_started)); + //Region Name: color turns red if source is missing. TreeViewColumn* tv_col = _display.get_column(0); CellRendererText* renderer = dynamic_cast<CellRendererText*>(_display.get_column_cell_renderer (0)); tv_col->add_attribute(renderer->property_text(), _columns.name); tv_col->add_attribute(renderer->property_foreground_gdk(), _columns.color_); tv_col->set_expand (true); + //Tags cell: make editable + CellRendererText* region_tags_cell = dynamic_cast<CellRendererText*>(_display.get_column_cell_renderer (1)); + region_tags_cell->property_editable() = true; + region_tags_cell->signal_edited().connect (sigc::mem_fun (*this, &EditorRegions::tag_edit)); + region_tags_cell->signal_editing_started().connect (sigc::mem_fun (*this, &EditorRegions::tag_editing_started)); + CellRendererToggle* locked_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (3)); locked_cell->property_activatable() = true; locked_cell->signal_toggled().connect (sigc::mem_fun (*this, &EditorRegions::locked_changed)); @@ -286,6 +294,7 @@ EditorRegions::focus_in (GdkEventFocus*) } name_editable = 0; + tags_editable = 0; /* try to do nothing on focus in (doesn't work, hence selection_count nonsense) */ return true; @@ -300,6 +309,7 @@ EditorRegions::focus_out (GdkEventFocus*) } name_editable = 0; + tags_editable = 0; return false; } @@ -307,7 +317,7 @@ EditorRegions::focus_out (GdkEventFocus*) bool EditorRegions::enter_notify (GdkEventCrossing*) { - if (name_editable) { + if (name_editable || tags_editable) { return true; } @@ -639,15 +649,17 @@ EditorRegions::populate_row (boost::shared_ptr<Region> region, TreeModel::Row co _editor->mark_region_boundary_cache_dirty(); } - Gdk::Color c; - bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source()) != NULL; - if (missing_source) { - set_color_from_rgba (c, UIConfiguration::instance().color ("region list missing source")); - } else { - set_color_from_rgba (c, UIConfiguration::instance().color ("region list whole file")); + { + Gdk::Color c; + bool missing_source = boost::dynamic_pointer_cast<SilentFileSource>(region->source()) != NULL; + if (missing_source) { + set_color_from_rgba (c, UIConfiguration::instance().color ("region list missing source")); + } else { + set_color_from_rgba (c, UIConfiguration::instance().color ("region list whole file")); + } + row[_columns.color_] = c; } - row[_columns.color_] = c; - + boost::shared_ptr<AudioRegion> audioregion = boost::dynamic_pointer_cast<AudioRegion>(region); PropertyChange c; @@ -684,7 +696,7 @@ EditorRegions::populate_row (boost::shared_ptr<Region> region, TreeModel::Row co if (all) { populate_row_source (region, row); } - if (all || what_changed.contains (Properties::name)) { + if (all || what_changed.contains (Properties::name) || what_changed.contains (Properties::tags)) { populate_row_name (region, row); } } @@ -832,6 +844,8 @@ EditorRegions::populate_row_name (boost::shared_ptr<Region> region, TreeModel::R } else { row[_columns.name] = Gtkmm2ext::markup_escape_text (region->name()); } + + row[_columns.tags] = region->tags(); } void @@ -842,8 +856,6 @@ EditorRegions::populate_row_source (boost::shared_ptr<Region> region, TreeModel: } else { row[_columns.path] = Gtkmm2ext::markup_escape_text (region->source()->name()); } - - row[_columns.take_id] = region->source()->take_id(); //TODO: what if there is no take-id? anything else we can use? } void @@ -876,6 +888,11 @@ EditorRegions::key_press (GdkEventKey* ev) name_editable = 0; } + if (tags_editable) { + tags_editable->editing_done (); + tags_editable = 0; + } + col = _display.get_column (0); // select&focus on name column if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { @@ -1043,17 +1060,53 @@ EditorRegions::name_edit (const std::string& path, const std::string& new_text) (*row_iter)[_columns.name] = new_text; } - /* now mapover everything */ - if (region) { - vector<RegionView*> 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()) { - (*i)->region()->set_name (new_text); + region->set_name (new_text); + + populate_row_name (region, (*row_iter)); + } +} + + +void +EditorRegions::tag_editing_started (CellEditable* ce, const Glib::ustring& path) +{ + tags_editable = ce; + + /* give it a special name */ + + Gtk::Entry *e = dynamic_cast<Gtk::Entry*> (ce); + + if (e) { + e->set_name (X_("RegionTagEditorEntry")); + + TreeIter iter; + if ((iter = _model->get_iter (path))) { + boost::shared_ptr<Region> region = (*iter)[_columns.region]; + + if(region) { + e->set_text(region->tags()); } } + } +} + +void +EditorRegions::tag_edit (const std::string& path, const std::string& new_text) +{ + tags_editable = 0; + + boost::shared_ptr<Region> region; + TreeIter row_iter; + + if ((row_iter = _model->get_iter (path))) { + region = (*row_iter)[_columns.region]; + (*row_iter)[_columns.tags] = new_text; + } + + if (region) { + region->set_tags (new_text); populate_row_name (region, (*row_iter)); } |