diff options
-rw-r--r-- | gtk2_ardour/location_ui.cc | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/location.h | 4 | ||||
-rw-r--r-- | libs/ardour/location.cc | 28 |
3 files changed, 32 insertions, 8 deletions
diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc index ac7b227e5b..d2c1a1931f 100644 --- a/gtk2_ardour/location_ui.cc +++ b/gtk2_ardour/location_ui.cc @@ -193,7 +193,11 @@ LocationEditRow::set_location (Location *loc) location = loc; - if (!location) return; + if (!location) { + return; + } + + ++i_am_the_modifier; if (!hide_check_button.get_parent()) { item_table.attach (hide_check_button, 5, 6, 0, 1, FILL, Gtk::FILL, 4, 0); @@ -293,6 +297,8 @@ LocationEditRow::set_location (Location *loc) end_clock.set_sensitive (!location->locked()); length_clock.set_sensitive (!location->locked()); + --i_am_the_modifier; + location->start_changed.connect (connections, invalidator (*this), ui_bind (&LocationEditRow::start_changed, this, _1), gui_context()); location->end_changed.connect (connections, invalidator (*this), ui_bind (&LocationEditRow::end_changed, this, _1), gui_context()); location->name_changed.connect (connections, invalidator (*this), ui_bind (&LocationEditRow::name_changed, this, _1), gui_context()); diff --git a/libs/ardour/ardour/location.h b/libs/ardour/ardour/location.h index 429fac177c..f3c322e2d4 100644 --- a/libs/ardour/ardour/location.h +++ b/libs/ardour/ardour/location.h @@ -58,8 +58,8 @@ class Location : public SessionHandleRef, public PBD::StatefulDestructible Location* operator= (const Location& other); bool locked() const { return _locked; } - void lock() { _locked = true; LockChanged (this); } - void unlock() { _locked = false; LockChanged (this); } + void lock (); + void unlock (); nframes64_t start() const { return _start; } nframes64_t end() const { return _end; } diff --git a/libs/ardour/location.cc b/libs/ardour/location.cc index ea267db25e..d9d5911555 100644 --- a/libs/ardour/location.cc +++ b/libs/ardour/location.cc @@ -357,6 +357,7 @@ Location::get_state () node->add_property ("end", buf); node->add_property ("flags", enum_2_string (_flags)); node->add_property ("locked", (_locked ? "yes" : "no")); + node->add_property ("position-lock-style", enum_2_string (_position_lock_style)); return *node; } @@ -427,24 +428,27 @@ Location::set_state (const XMLNode& node, int /*version*/) cd_node = *cd_iter; if (cd_node->name() != "CD-Info") { - continue; + continue; } if ((prop = cd_node->property ("name")) != 0) { - cd_name = prop->value(); + cd_name = prop->value(); } else { - throw failed_constructor (); + throw failed_constructor (); } if ((prop = cd_node->property ("value")) != 0) { - cd_value = prop->value(); + cd_value = prop->value(); } else { - throw failed_constructor (); + throw failed_constructor (); } cd_info[cd_name] = cd_value; + } + if ((prop = node.property ("position-lock-style")) != 0) { + _position_lock_style = PositionLockStyle (string_2_enum (prop->value(), _position_lock_style)); } recompute_bbt_from_frames (); @@ -490,6 +494,20 @@ Location::recompute_frames_from_bbt () set (map.frame_time (_bbt_start), map.frame_time (_bbt_end), false); } +void +Location::lock () +{ + _locked = true; + LockChanged (this); +} + +void +Location::unlock () +{ + _locked = false; + LockChanged (this); +} + /*---------------------------------------------------------------------- */ Locations::Locations (Session& s) |