Oofus's work on region lists: highlight selected canvas regions on the region list
git-svn-id: svn://localhost/ardour2/branches/3.0@4414 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
c174fa6174
commit
ef038c1a84
@ -859,27 +859,31 @@ style "treeview_parent_node"
|
||||
|
||||
style "treeview_display" = "small_bold_text"
|
||||
{
|
||||
GtkWidget::focus-line-width = 0
|
||||
|
||||
# expander arrow border and DnD "icon" text
|
||||
fg[NORMAL] = { 0.8, 0.8, 0.8 }
|
||||
#fg[NORMAL] = { 0.8, 0.8, 0.8 }
|
||||
|
||||
bg[NORMAL] = { 0.8, 0.8, 0.8 }
|
||||
|
||||
# background with no rows or no selection, plus
|
||||
# expander arrow core and DnD "icon" background
|
||||
base[NORMAL] = { 0.20, 0.20, 0.25 }
|
||||
#base[NORMAL] = { 0.20, 0.20, 0.25 }
|
||||
|
||||
# selected row bg when window does not have focus (including during DnD)
|
||||
base[ACTIVE] = { 0.0, 0.60, 0.60 }
|
||||
#base[ACTIVE] = { 0.0, 0.60, 0.60 }
|
||||
|
||||
# selected row bg when window has focus
|
||||
base[SELECTED] = { 0, 0.75, 0.75 }
|
||||
#base[SELECTED] = { 0, 0.75, 0.75 }
|
||||
|
||||
# row text when in normal state and not a parent
|
||||
text[NORMAL] = { 0.80, 0.80, 0.80 }
|
||||
#text[NORMAL] = { 0.80, 0.80, 0.80 }
|
||||
|
||||
# selected row text with window focus
|
||||
text[SELECTED] = { 0, 1.0, 1.0 }
|
||||
#text[SELECTED] = { 0, 1.0, 1.0 }
|
||||
|
||||
# selected row text without window focus (including during DnD)
|
||||
text[ACTIVE] = { 0, 1.0, 1.0 }
|
||||
#text[ACTIVE] = { 0, 1.0, 1.0 }
|
||||
}
|
||||
|
||||
style "main_canvas_area"
|
||||
|
@ -446,7 +446,7 @@ Editor::Editor ()
|
||||
|
||||
selection->TimeChanged.connect (mem_fun(*this, &Editor::time_selection_changed));
|
||||
selection->TracksChanged.connect (mem_fun(*this, &Editor::track_selection_changed));
|
||||
selection->RegionsChanged.connect (mem_fun(*this, &Editor::region_selection_changed));
|
||||
editor_regions_selection_changed_connection = selection->RegionsChanged.connect (mem_fun(*this, &Editor::region_selection_changed));
|
||||
selection->PointsChanged.connect (mem_fun(*this, &Editor::point_selection_changed));
|
||||
selection->MarkersChanged.connect (mem_fun(*this, &Editor::marker_selection_changed));
|
||||
|
||||
@ -667,7 +667,7 @@ Editor::Editor ()
|
||||
region_list_display.append_column (_("Used"), region_list_columns.used);
|
||||
region_list_display.append_column (_("Path"), region_list_columns.path);
|
||||
region_list_display.set_headers_visible (true);
|
||||
region_list_display.set_grid_lines (TREE_VIEW_GRID_LINES_BOTH);
|
||||
//region_list_display.set_grid_lines (TREE_VIEW_GRID_LINES_BOTH);
|
||||
|
||||
CellRendererText* region_name_cell = dynamic_cast<CellRendererText*>(region_list_display.get_column_cell_renderer (0));
|
||||
region_name_cell->property_editable() = true;
|
||||
@ -701,7 +701,7 @@ Editor::Editor ()
|
||||
region_list_display.signal_key_release_event().connect (mem_fun(*this, &Editor::region_list_display_key_release));
|
||||
region_list_display.signal_button_press_event().connect (mem_fun(*this, &Editor::region_list_display_button_press), false);
|
||||
region_list_display.signal_button_release_event().connect (mem_fun(*this, &Editor::region_list_display_button_release));
|
||||
region_list_display.get_selection()->signal_changed().connect (mem_fun(*this, &Editor::region_list_selection_changed));
|
||||
region_list_change_connection = region_list_display.get_selection()->signal_changed().connect (mem_fun(*this, &Editor::region_list_selection_changed));
|
||||
// region_list_display.signal_popup_menu().connect (bind (mem_fun (*this, &Editor::show_region_list_display_context_menu), 1, 0));
|
||||
|
||||
//ARDOUR_UI::instance()->secondary_clock.mode_changed.connect (mem_fun(*this, &Editor::redisplay_regions));
|
||||
@ -3526,7 +3526,7 @@ Editor::restore_state (State *state)
|
||||
|
||||
*selection = *state->selection;
|
||||
time_selection_changed ();
|
||||
region_selection_changed ();
|
||||
region_selection_changed ();
|
||||
|
||||
/* XXX other selection change handlers? */
|
||||
}
|
||||
|
@ -990,6 +990,9 @@ class Editor : public PublicEditor
|
||||
|
||||
void region_list_region_changed (ARDOUR::Change, boost::weak_ptr<ARDOUR::Region>);
|
||||
void region_list_selection_changed ();
|
||||
sigc::connection region_list_change_connection;
|
||||
void set_selected_in_region_list(RegionSelection&);
|
||||
bool set_selected_in_region_list_subrow(boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &, int);
|
||||
bool region_list_selection_filter (const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::Path& path, bool yn);
|
||||
void region_name_edit (const Glib::ustring&, const Glib::ustring&);
|
||||
void get_regions_corresponding_to (boost::shared_ptr<ARDOUR::Region> region, std::vector<RegionView*>& regions);
|
||||
@ -1775,6 +1778,7 @@ public:
|
||||
void time_selection_changed ();
|
||||
void track_selection_changed ();
|
||||
void region_selection_changed ();
|
||||
sigc::connection editor_regions_selection_changed_connection;
|
||||
void sensitize_the_right_region_actions (bool have_selected_regions);
|
||||
void point_selection_changed ();
|
||||
void marker_selection_changed ();
|
||||
|
@ -111,9 +111,7 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
||||
TreeModel::Row child;
|
||||
|
||||
if (!iter) {
|
||||
|
||||
parent = *(region_list_model->append());
|
||||
|
||||
parent[region_list_columns.name] = _("Hidden");
|
||||
boost::shared_ptr<Region> proxy = parent[region_list_columns.region];
|
||||
proxy.reset ();
|
||||
@ -136,7 +134,6 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
||||
TreeModel::Children rows = region_list_model->children();
|
||||
|
||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||
|
||||
boost::shared_ptr<Region> rr = (*i)[region_list_columns.region];
|
||||
|
||||
if (rr && region->region_list_equivalent (rr)) {
|
||||
@ -145,17 +142,24 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
||||
}
|
||||
|
||||
row = *(region_list_model->append());
|
||||
|
||||
if (missing_source) {
|
||||
c.set_rgb(65535,0,0); // FIXME: error color from style
|
||||
|
||||
} else if (region->automatic()){
|
||||
c.set_rgb(0,65535,0); // FIXME: error color from style
|
||||
|
||||
} else {
|
||||
set_color(c, rgba_from_style ("RegionListWholeFile", 0xff, 0, 0, 0, "fg", Gtk::STATE_NORMAL, false ));
|
||||
|
||||
}
|
||||
|
||||
row[region_list_columns.color_] = c;
|
||||
|
||||
if (region->source()->name()[0] == '/') { // external file
|
||||
|
||||
if (region->whole_file()) {
|
||||
|
||||
boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource>(region->source());
|
||||
str = ".../";
|
||||
|
||||
@ -186,8 +190,10 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
||||
|
||||
if (missing_source) {
|
||||
row[region_list_columns.path] = _("(MISSING) ") + region->source()->name();
|
||||
|
||||
} else {
|
||||
row[region_list_columns.path] = region->source()->name();
|
||||
|
||||
}
|
||||
|
||||
if (region->automatic()) {
|
||||
@ -205,27 +211,29 @@ Editor::add_region_to_region_display (boost::shared_ptr<Region> region)
|
||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||
boost::shared_ptr<Region> rr = (*i)[region_list_columns.region];
|
||||
boost::shared_ptr<AudioRegion> r = boost::dynamic_pointer_cast<AudioRegion>(rr);
|
||||
|
||||
|
||||
if (r && r->whole_file()) {
|
||||
|
||||
if (region->source_equivalent (r)) {
|
||||
row = *(region_list_model->append ((*i).children()));
|
||||
found_parent = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TreeModel::iterator ii;
|
||||
TreeModel::Children subrows = (*i).children();
|
||||
|
||||
for (ii = subrows.begin(); ii != subrows.end(); ++ii) {
|
||||
|
||||
boost::shared_ptr<Region> rrr = (*ii)[region_list_columns.region];
|
||||
|
||||
if (region->region_list_equivalent (rrr)) {
|
||||
return;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!found_parent) {
|
||||
row = *(region_list_model->append());
|
||||
}
|
||||
@ -290,15 +298,78 @@ Editor::region_list_selection_changed()
|
||||
boost::shared_ptr<Region> region = (*iter)[region_list_columns.region];
|
||||
|
||||
if (region) {
|
||||
set_selected_regionview_from_region_list (region, Selection::Add);
|
||||
|
||||
if (region->automatic()) {
|
||||
region_list_display.get_selection()->unselect(*i);
|
||||
|
||||
} else {
|
||||
region_list_change_connection.block(true);
|
||||
//editor_regions_selection_changed_connection.block(true);
|
||||
|
||||
set_selected_regionview_from_region_list (region, Selection::Add);
|
||||
|
||||
region_list_change_connection.block(false);
|
||||
//editor_regions_selection_changed_connection.block(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
deselect_all();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::set_selected_in_region_list(RegionSelection& regions)
|
||||
{
|
||||
for (RegionSelection::iterator iter = regions.begin(); iter != regions.end(); ++iter) {
|
||||
|
||||
TreeModel::iterator i;
|
||||
TreeModel::Children rows = region_list_model->children();
|
||||
boost::shared_ptr<Region> r ((*iter)->region());
|
||||
|
||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||
|
||||
boost::shared_ptr<Region> compared_region = (*i)[region_list_columns.region];
|
||||
|
||||
if (r == compared_region) {
|
||||
region_list_display.get_selection()->select(*i);;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(*i).children().empty()) {
|
||||
if (set_selected_in_region_list_subrow(r, (*i), 2)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::set_selected_in_region_list_subrow (boost::shared_ptr<Region> region, TreeModel::Row const &parent_row, int level)
|
||||
{
|
||||
TreeModel::iterator i;
|
||||
TreeModel::Children subrows = (*parent_row).children();
|
||||
|
||||
for (i = subrows.begin(); i != subrows.end(); ++i) {
|
||||
|
||||
boost::shared_ptr<Region> compared_region = (*i)[region_list_columns.region];
|
||||
|
||||
if (region == compared_region) {
|
||||
region_list_display.get_selection()->select(*i);;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(*i).children().empty()) {
|
||||
if (update_region_subrows(region, (*i), level + 1)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::insert_into_tmp_regionlist(boost::shared_ptr<Region> region)
|
||||
{
|
||||
@ -630,10 +701,10 @@ Editor::populate_row (boost::shared_ptr<Region> region, TreeModel::Row const &ro
|
||||
row[region_list_columns.sync] = _("Multiple");
|
||||
row[region_list_columns.fadein] = _("Multiple");
|
||||
row[region_list_columns.fadeout] = _("Multiple");
|
||||
row[region_list_columns.locked] = _(" ");
|
||||
row[region_list_columns.glued] = _(" ");
|
||||
row[region_list_columns.muted] = _(" ");
|
||||
row[region_list_columns.opaque] = _(" ");
|
||||
row[region_list_columns.locked] = false;
|
||||
row[region_list_columns.glued] = false;
|
||||
row[region_list_columns.muted] = false;
|
||||
row[region_list_columns.opaque] = false;
|
||||
} else {
|
||||
row[region_list_columns.start] = start_str;
|
||||
row[region_list_columns.end] = end_str;
|
||||
@ -1024,9 +1095,9 @@ Editor::remove_region_from_region_list ()
|
||||
|
||||
void
|
||||
Editor::region_list_display_drag_data_received (const RefPtr<Gdk::DragContext>& context,
|
||||
int x, int y,
|
||||
const SelectionData& data,
|
||||
guint info, guint time)
|
||||
int x, int y,
|
||||
const SelectionData& data,
|
||||
guint info, guint time)
|
||||
{
|
||||
vector<ustring> paths;
|
||||
|
||||
|
@ -852,13 +852,24 @@ Editor::sensitize_the_right_region_actions (bool have_selected_regions)
|
||||
void
|
||||
Editor::region_selection_changed ()
|
||||
{
|
||||
region_list_change_connection.block(true);
|
||||
editor_regions_selection_changed_connection.block(true);
|
||||
|
||||
region_list_display.get_selection()->unselect_all();
|
||||
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||
|
||||
(*i)->set_selected_regionviews (selection->regions);
|
||||
set_selected_in_region_list(selection->regions);
|
||||
|
||||
}
|
||||
|
||||
sensitize_the_right_region_actions (!selection->regions.empty());
|
||||
|
||||
zoomed_to_region = false;
|
||||
|
||||
region_list_change_connection.block(false);
|
||||
editor_regions_selection_changed_connection.block(false);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -399,6 +399,7 @@ StreamView::set_selected_regionviews (RegionSelection& regions)
|
||||
for (RegionSelection::iterator ii = regions.begin(); ii != regions.end(); ++ii) {
|
||||
if (*i == *ii) {
|
||||
selected = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user