summaryrefslogtreecommitdiff
path: root/gtk2_ardour/video_timeline.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-04-09 14:23:41 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-04-09 14:23:41 -0400
commitbca507a80811e0878f976434767bc45cd61f5ab3 (patch)
tree1851b91f34fa28d754c92764fb36d1616cfd90b1 /gtk2_ardour/video_timeline.cc
parent053eaf77fde7639d4e200d36a9db99b2d4fc615b (diff)
parent082de27a4e4b192e541c95cb90b97be67d5ed2d0 (diff)
Merge branch 'master' into cairocanvas
Diffstat (limited to 'gtk2_ardour/video_timeline.cc')
-rw-r--r--gtk2_ardour/video_timeline.cc116
1 files changed, 63 insertions, 53 deletions
diff --git a/gtk2_ardour/video_timeline.cc b/gtk2_ardour/video_timeline.cc
index 8360ef75d4..aebb4f5d9f 100644
--- a/gtk2_ardour/video_timeline.cc
+++ b/gtk2_ardour/video_timeline.cc
@@ -87,63 +87,26 @@ VideoTimeLine::save_session ()
LocaleGuard lg (X_("POSIX"));
- bool is_dirty = false;
-
- XMLNode* prev = _session->extra_xml (X_("Videomonitor"));
-
- /* remember if vmonitor was open.. */
XMLNode* node = new XMLNode(X_("Videomonitor"));
-
+ if (!node) return;
node->add_property (X_("active"), (vmonitor && vmonitor->is_started())?"yes":"no");
- if (!prev || !(prev->property (X_("active")) && prev->property (X_("active"))->value() == node->property(X_("active"))->value()) ){
- _session->add_extra_xml (*node);
- is_dirty=true; // TODO not if !prev && value==default
- }
-
- /* VTL settings */
- node = _session->extra_xml (X_("Videotimeline"));
+ _session->add_extra_xml (*node);
- if (node) {
- if (!(node->property(X_("id")) && node->property(X_("id"))->value() == id().to_s())) {
- node->add_property (X_("id"), id().to_s());
- is_dirty=true;
- }
- }
-
- /* remember timeline height.. */
- if (node) {
- int h = editor->get_videotl_bar_height();
- if (!(node->property(X_("Height")) && atoi(node->property(X_("Height"))->value().c_str())==h)) {
- node->add_property (X_("Height"), h);
- is_dirty=true;
- }
- }
-
- /* save video-offset-lock */
- if (node) {
- if (!(node->property(X_("VideoOffsetLock")) && atoi(node->property(X_("VideoOffsetLock"))->value().c_str())==video_offset_lock)) {
- node->add_property (X_("VideoOffsetLock"), video_offset_lock?X_("1"):X_("0"));
- is_dirty=true;
- }
- }
- /* save video-offset */
- if (node) {
- if (!(node->property(X_("VideoOffset")) && atoll(node->property(X_("VideoOffset"))->value().c_str())==video_offset)) {
- node->add_property (X_("VideoOffset"), video_offset);
- is_dirty=true;
+ if (vmonitor) {
+ if (vmonitor->is_started()) {
+ vmonitor->query_full_state(true);
}
+ vmonitor->save_session();
}
- /* save 'auto_set_session_fps' */
- if (node) {
- if (!(node->property(X_("AutoFPS")) && atoi(node->property(X_("AutoFPS"))->value().c_str())==auto_set_session_fps)) {
- node->add_property (X_("AutoFPS"), auto_set_session_fps?X_("1"):X_("0"));
- is_dirty=true;
- }
- }
- if (is_dirty) {
- _session->set_dirty ();
- }
+ /* VTL settings */
+ node = _session->extra_xml (X_("Videotimeline"));
+ if (!node) return;
+ node->add_property (X_("id"), id().to_s());
+ node->add_property (X_("Height"), editor->get_videotl_bar_height());
+ node->add_property (X_("VideoOffsetLock"), video_offset_lock?X_("1"):X_("0"));
+ node->add_property (X_("VideoOffset"), video_offset);
+ node->add_property (X_("AutoFPS"), auto_set_session_fps?X_("1"):X_("0"));
}
/* close and save settings */
@@ -153,7 +116,7 @@ VideoTimeLine::close_session ()
if (video_duration == 0) {
return;
}
- save_session();
+ sessionsave.disconnect();
close_video_monitor();
remove_frames();
@@ -162,6 +125,15 @@ VideoTimeLine::close_session ()
GuiUpdate("set-xjadeo-sensitive-off");
}
+void
+VideoTimeLine::sync_session_state ()
+{
+ if (!_session || !vmonitor || !vmonitor->is_started()) {
+ return;
+ }
+ save_session();
+}
+
/** load settings from session */
void
VideoTimeLine::set_session (ARDOUR::Session *s)
@@ -169,6 +141,7 @@ VideoTimeLine::set_session (ARDOUR::Session *s)
SessionHandlePtr::set_session (s);
if (!_session) { return ; }
+ _session->SaveSession.connect_same_thread (sessionsave, boost::bind (&VideoTimeLine::save_session, this));
LocaleGuard lg (X_("POSIX"));
XMLNode* node = _session->extra_xml (X_("Videotimeline"));
@@ -226,8 +199,27 @@ VideoTimeLine::set_session (ARDOUR::Session *s)
}
void
+VideoTimeLine::set_offset_locked (bool v) {
+ if (_session && v != video_offset_lock) {
+ _session->set_dirty ();
+ }
+ video_offset_lock = v;
+}
+
+void
+VideoTimeLine::toggle_offset_locked () {
+ video_offset_lock = !video_offset_lock;
+ if (_session) {
+ _session->set_dirty ();
+ }
+}
+
+void
VideoTimeLine::save_undo ()
{
+ if (_session && video_offset_p != video_offset) {
+ _session->set_dirty ();
+ }
video_offset_p = video_offset;
}
@@ -608,6 +600,9 @@ VideoTimeLine::gui_update(std::string const & t) {
void
VideoTimeLine::set_height (int height) {
+ if (_session && bar_height != height) {
+ _session->set_dirty ();
+ }
bar_height = height;
flush_local_cache();
}
@@ -736,6 +731,17 @@ VideoTimeLine::open_video_monitor() {
GuiUpdate("set-xjadeo-active-on");
vmonitor->set_fps(video_file_fps);
vmonitor->open(video_filename);
+
+ if (_session) {
+ XMLNode* node = _session->extra_xml (X_("Videomonitor"));
+ if (node) {
+ const XMLProperty* prop = node->property (X_("active"));
+ if (prop && prop->value() != "yes") _session->set_dirty ();
+ } else {
+ _session->set_dirty ();
+ }
+ }
+
}
}
@@ -762,9 +768,13 @@ VideoTimeLine::terminated_video_monitor () {
}
GuiUpdate("set-xjadeo-active-off");
vmonitor=0;
- if (reopen_vmonitor) {
+ if (reopen_vmonitor) {
reopen_vmonitor=false;
open_video_monitor();
+ } else {
+ if (_session) {
+ _session->set_dirty ();
+ }
}
}