#include "ardour/silentfilesource.h"
#include "ardour/profile.h"
-#include <gtkmm2ext/stop_signal.h>
-
#include "editor.h"
#include "editing.h"
#include "keyboard.h"
#include "region_view.h"
#include "utils.h"
#include "editor_regions.h"
+#include "editor_drag.h"
#include "i18n.h"
tv_col->add_attribute(renderer->property_text(), _columns.name);
tv_col->add_attribute(renderer->property_foreground_gdk(), _columns.color_);
+ CellRendererToggle* locked_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (7));
+ locked_cell->property_activatable() = true;
+ locked_cell->signal_toggled().connect (sigc::mem_fun (*this, &EditorRegions::locked_changed));
+ TreeViewColumn* locked_col = _display.get_column (7);
+ locked_col->add_attribute (locked_cell->property_visible(), _columns.property_toggles_visible);
+
+ CellRendererToggle* glued_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (8));
+ glued_cell->property_activatable() = true;
+ glued_cell->signal_toggled().connect (sigc::mem_fun (*this, &EditorRegions::glued_changed));
+ TreeViewColumn* glued_col = _display.get_column (8);
+ glued_col->add_attribute (glued_cell->property_visible(), _columns.property_toggles_visible);
+
+ CellRendererToggle* muted_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (9));
+ muted_cell->property_activatable() = true;
+ muted_cell->signal_toggled().connect (sigc::mem_fun (*this, &EditorRegions::muted_changed));
+ TreeViewColumn* muted_col = _display.get_column (9);
+ muted_col->add_attribute (muted_cell->property_visible(), _columns.property_toggles_visible);
+
+ CellRendererToggle* opaque_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (10));
+ opaque_cell->property_activatable() = true;
+ opaque_cell->signal_toggled().connect (sigc::mem_fun (*this, &EditorRegions::opaque_changed));
+ TreeViewColumn* opaque_col = _display.get_column (10);
+ opaque_col->add_attribute (opaque_cell->property_visible(), _columns.property_toggles_visible);
+
_display.get_selection()->set_mode (SELECTION_MULTIPLE);
_display.add_object_drag (_columns.region.index(), "regions");
void
EditorRegions::set_session (ARDOUR::Session* s)
{
- EditorComponent::set_session (s);
+ SessionHandlePtr::set_session (s);
redisplay ();
}
row[_columns.name] = str;
row[_columns.region] = region;
+ row[_columns.property_toggles_visible] = false;
if (missing_source) {
row[_columns.path] = _("(MISSING) ") + region->source()->name();
if (!found_parent) {
row = *(_model->append());
}
+
+ row[_columns.property_toggles_visible] = true;
}
row[_columns.region] = region;
void
EditorRegions::region_changed (boost::shared_ptr<Region> r, const PropertyChange& what_changed)
{
- if (what_changed.contains (ARDOUR::Properties::name)) {
- /* find the region in our model and change its name */
+ if (what_changed.contains (ARDOUR::Properties::name) ||
+ what_changed.contains (ARDOUR::Properties::start) ||
+ what_changed.contains (ARDOUR::Properties::position) ||
+ what_changed.contains (ARDOUR::Properties::length) ||
+ what_changed.contains (ARDOUR::Properties::locked) ||
+ what_changed.contains (ARDOUR::Properties::position_lock_style) ||
+ what_changed.contains (ARDOUR::Properties::muted) ||
+ what_changed.contains (ARDOUR::Properties::opaque)) {
+
+ /* find the region in our model and update its row */
TreeModel::Children rows = _model->children ();
TreeModel::iterator i = rows.begin ();
while (i != rows.end ()) {
}
if (j != children.end()) {
- (*j)[_columns.name] = r->name ();
- break;
+ populate_row (r, *j);
}
++i;
} else {
_change_connection.block (true);
- cerr << "\tpush to region selection\n";
_editor->set_selected_regionview_from_region_list (region, Selection::Add);
_change_connection.block (false);
boost::shared_ptr<Region> compared_region = (*i)[_columns.region];
if (r == compared_region) {
- cerr << "\tpush into region list\n";
_display.get_selection()->select(*i);
break;
}
if (!(*i).children().empty()) {
- cerr << "\tlook for " << r->name() << " among children of " << (compared_region ? compared_region->name() : string ("NO REGION")) << endl;
if (set_selected_in_subrow(r, (*i), 2)) {
break;
}
boost::shared_ptr<Region> region = (*i)[_columns.region];
if (!region->automatic()) {
- cerr << "level 1 : Updating " << region->name() << "\n";
populate_row(region, (*i));
}
boost::shared_ptr<Region> region = (*i)[_columns.region];
if (!region->automatic()) {
- cerr << "level " << level << " : Updating " << region->name() << "\n";
populate_row(region, (*i));
}
case AudioClock::Frames:
snprintf (start_str, sizeof (start_str), "%" PRId64, region->position());
- snprintf (end_str, sizeof (end_str), "%" PRId64, (region->position() + region->length() - 1));
+ snprintf (end_str, sizeof (end_str), "%" PRId64, (region->last_frame()));
snprintf (length_str, sizeof (length_str), "%" PRId64, region->length());
snprintf (sync_str, sizeof (sync_str), "%" PRId64, region->sync_position() + region->position());
row[_columns.locked] = region->locked();
- if (region->positional_lock_style() == Region::MusicTime) {
+ if (region->position_lock_style() == MusicTime) {
row[_columns.glued] = true;
} else {
row[_columns.glued] = false;
if (Keyboard::is_context_menu_event (ev)) {
show_context_menu (ev->button, ev->time);
- return true;
+ return false;
}
if (region != 0 && Keyboard::is_button2_event (ev)) {
vector<ustring> paths;
if (data.get_target() == "GTK_TREE_MODEL_ROW") {
+ /* something is being dragged over the region list */
+ _editor->_drags->abort ();
_display.on_drag_data_received (context, x, y, data, info, time);
return;
}
}
+/** @return Region that has been dragged out of the list, or 0 */
boost::shared_ptr<Region>
EditorRegions::get_dragged_region ()
{
list<boost::shared_ptr<Region> > regions;
TreeView* source;
_display.get_object_drag_data (regions, &source);
+
+ if (regions.empty()) {
+ return boost::shared_ptr<Region> ();
+ }
+
assert (regions.size() == 1);
return regions.front ();
}
return (*iter)[_columns.region];
}
+
+void
+EditorRegions::locked_changed (Glib::ustring const & path)
+{
+ TreeIter i = _model->get_iter (path);
+ if (i) {
+ boost::shared_ptr<ARDOUR::Region> region = (*i)[_columns.region];
+ if (region) {
+ region->set_locked (!(*i)[_columns.locked]);
+ }
+ }
+}
+
+void
+EditorRegions::glued_changed (Glib::ustring const & path)
+{
+ TreeIter i = _model->get_iter (path);
+ if (i) {
+ boost::shared_ptr<ARDOUR::Region> region = (*i)[_columns.region];
+ if (region) {
+ /* `glued' means MusicTime, and we're toggling here */
+ region->set_position_lock_style ((*i)[_columns.glued] ? AudioTime : MusicTime);
+ }
+ }
+
+}
+
+void
+EditorRegions::muted_changed (Glib::ustring const & path)
+{
+ TreeIter i = _model->get_iter (path);
+ if (i) {
+ boost::shared_ptr<ARDOUR::Region> region = (*i)[_columns.region];
+ if (region) {
+ region->set_muted (!(*i)[_columns.muted]);
+ }
+ }
+
+}
+
+void
+EditorRegions::opaque_changed (Glib::ustring const & path)
+{
+ TreeIter i = _model->get_iter (path);
+ if (i) {
+ boost::shared_ptr<ARDOUR::Region> region = (*i)[_columns.region];
+ if (region) {
+ region->set_opaque (!(*i)[_columns.opaque]);
+ }
+ }
+
+}