diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-03-19 02:49:01 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-03-19 02:49:01 +0000 |
commit | f0748535a5023d132eff03999a705a3e56c516db (patch) | |
tree | 34924d873426319d77cb52ac3239acb7aec916a1 /gtk2_ardour/ardour_ui_ed.cc | |
parent | 295eb9a395d2ad36654a1d71019a571400adaee8 (diff) |
save tearoff state; restore monitor section state reasonably well; fixup access control to parts of editor.h (needs more work); extend CrossThread just a little
git-svn-id: svn://localhost/ardour2/branches/3.0@6774 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/ardour_ui_ed.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 97 |
1 files changed, 94 insertions, 3 deletions
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index 9630c37fae..46cd5d952d 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -26,11 +26,12 @@ #include <cmath> #include <glibmm/miscutils.h> - -#include <gtkmm2ext/utils.h> -#include <gtkmm2ext/window_title.h> #include <gtk/gtk.h> +#include "gtkmm2ext/utils.h" +#include "gtkmm2ext/window_title.h" +#include "gtkmm2ext/tearoff.h" + #include "pbd/file_utils.h" #include "pbd/fpu.h" #include "pbd/convert.h" @@ -38,10 +39,13 @@ #include "ardour_ui.h" #include "public_editor.h" #include "audio_clock.h" +#include "keyboard.h" +#include "monitor_section.h" #include "engine_dialog.h" #include "editor.h" #include "actions.h" #include "mixer_ui.h" +#include "startup.h" #include "utils.h" #ifdef GTKOSX @@ -671,3 +675,90 @@ ARDOUR_UI::idle_big_clock_text_resizer (int win_w, int win_h) return false; } + +void +ARDOUR_UI::save_ardour_state () +{ + if (!keyboard || !mixer || !editor) { + return; + } + + /* XXX this is all a bit dubious. add_extra_xml() uses + a different lifetime model from add_instant_xml(). + */ + + XMLNode* node = new XMLNode (keyboard->get_state()); + Config->add_extra_xml (*node); + Config->add_extra_xml (get_transport_controllable_state()); + + XMLNode* window_node = new XMLNode (X_("UI")); + + window_node->add_property ("show-big-clock", (big_clock_window && big_clock_window->is_visible() ? "yes" : "no")); + + Glib::RefPtr<Gdk::Window> win; + + if (big_clock_window && (win = big_clock_window->get_window())) { + + int w, h; + int xoff, yoff; + char buf[32]; + + win->get_size (w, h); + win->get_position (xoff, yoff); + + snprintf (buf, sizeof (buf), "%d", w); + window_node->add_property ("big-clock-x-size", buf); + snprintf (buf, sizeof (buf), "%d", h); + window_node->add_property ("big-clock-y-size", buf); + snprintf (buf, sizeof (buf), "%d", xoff); + window_node->add_property ("big-clock-x-off", buf); + snprintf (buf, sizeof (buf), "%d", yoff); + window_node->add_property ("big-clock-y-off", buf); + } + + /* tearoffs */ + + XMLNode* tearoff_node = new XMLNode (X_("Tearoffs")); + + if (transport_tearoff) { + XMLNode* t = new XMLNode (X_("transport")); + transport_tearoff->add_tornoff_state (*t); + tearoff_node->add_child_nocopy (*t); + } + + if (mixer && mixer->monitor_section()) { + XMLNode* t = new XMLNode (X_("monitor-section")); + mixer->monitor_section()->tearoff()->add_tornoff_state (*t); + tearoff_node->add_child_nocopy (*t); + } + + if (editor && editor->mouse_mode_tearoff()) { + XMLNode* t = new XMLNode (X_("mouse-mode")); + editor->mouse_mode_tearoff ()->add_tornoff_state (*t); + tearoff_node->add_child_nocopy (*t); + } + + window_node->add_child_nocopy (*tearoff_node); + + Config->add_extra_xml (*window_node); + + if (_startup && _startup->engine_control() && _startup->engine_control()->was_used()) { + Config->add_extra_xml (_startup->engine_control()->get_state()); + } + Config->save_state(); + ui_config->save_state (); + + XMLNode enode(static_cast<Stateful*>(editor)->get_state()); + XMLNode mnode(mixer->get_state()); + + if (_session) { + _session->add_instant_xml (enode); + _session->add_instant_xml (mnode); + } else { + Config->add_instant_xml (enode); + Config->add_instant_xml (mnode); + } + + Keyboard::save_keybindings (); +} + |