From 941898843ead9677792df9e10e6a545f29d43499 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 29 Mar 2013 09:46:29 +0100 Subject: [PATCH] vtl: add close/remove video menu entry --- gtk2_ardour/ardour.menus.in | 1 + gtk2_ardour/ardour_ui.cc | 13 +++++++++++++ gtk2_ardour/ardour_ui.h | 1 + gtk2_ardour/ardour_ui_ed.cc | 3 +++ gtk2_ardour/video_timeline.cc | 13 +++++++++++-- 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/ardour.menus.in b/gtk2_ardour/ardour.menus.in index 8ad92c89f1..0451146b2a 100644 --- a/gtk2_ardour/ardour.menus.in +++ b/gtk2_ardour/ardour.menus.in @@ -36,6 +36,7 @@ #ifdef WITH_VIDEOTIMELINE + diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index dc53f8fa6e..4ab24dcd18 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -3484,6 +3484,19 @@ ARDOUR_UI::add_video (Gtk::Window* float_window) } } +void +ARDOUR_UI::remove_video () +{ + video_timeline->close_session(); + editor->toggle_ruler_video(false); + + /* delete session state */ + XMLNode* node = new XMLNode(X_("Videotimeline")); + _session->add_extra_xml(*node); + node = new XMLNode(X_("Videomonitor")); + _session->add_extra_xml(*node); +} + void ARDOUR_UI::flush_videotimeline_cache (bool localcacheonly) { diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 0716813436..6c7edff1ba 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -227,6 +227,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr void add_routes_thread (); #ifdef WITH_VIDEOTIMELINE void add_video (Gtk::Window* float_window); + void remove_video (); void start_video_server_menu (Gtk::Window* float_window); bool start_video_server (Gtk::Window* float_window, bool popup_msg); void stop_video_server (bool ask_confirm=false); diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 6228fcb4ba..5d6b230796 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -136,6 +136,9 @@ ARDOUR_UI::install_actions () act = ActionManager::register_action (main_actions, X_("OpenVideo"), _("Open Video"), sigc::bind (sigc::mem_fun(*this, &ARDOUR_UI::add_video), (Gtk::Window*) 0)); ActionManager::session_sensitive_actions.push_back (act); + act = ActionManager::register_action (main_actions, X_("CloseVideo"), _("Remove Video"), + sigc::mem_fun (*this, &ARDOUR_UI::remove_video)); + ActionManager::session_sensitive_actions.push_back (act); act = ActionManager::register_action (main_actions, X_("ExportVideo"), _("Export To Video File"), sigc::mem_fun (*editor, &PublicEditor::export_video)); ActionManager::session_sensitive_actions.push_back (act); diff --git a/gtk2_ardour/video_timeline.cc b/gtk2_ardour/video_timeline.cc index e214341d20..328d1311ac 100644 --- a/gtk2_ardour/video_timeline.cc +++ b/gtk2_ardour/video_timeline.cc @@ -153,12 +153,16 @@ VideoTimeLine::save_session () void VideoTimeLine::close_session () { + if (video_duration == 0) { + return; + } close_video_monitor(); save_session(); remove_frames(); video_filename = ""; - video_duration = 0L; + video_duration = 0; + GuiUpdate("set-xjadeo-sensitive-off"); } /** load settings from session */ @@ -171,6 +175,11 @@ VideoTimeLine::set_session (ARDOUR::Session *s) LocaleGuard lg (X_("POSIX")); XMLNode* node = _session->extra_xml (X_("Videotimeline")); + + if (!node || !node->property (X_("Filename"))) { + return; + } + if (node) { ARDOUR_UI::instance()->start_video_server((Gtk::Window*)0, false); @@ -210,7 +219,7 @@ VideoTimeLine::set_session (ARDOUR::Session *s) node = _session->extra_xml (X_("Videomonitor")); if (node) { const XMLProperty* prop = node->property (X_("active")); - if (prop->value() == "yes" && found_xjadeo() && !video_filename.empty() && local_file) { + if (prop && prop->value() == "yes" && found_xjadeo() && !video_filename.empty() && local_file) { open_video_monitor(false); } }