diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-05-07 22:09:16 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-05-07 22:09:16 -0400 |
commit | bedc7b170eb72f1b9aaaf3872c7160aa1661a4e1 (patch) | |
tree | 2c659ab7a49ede69a32e00799c04713a9ec15b02 /gtk2_ardour/window_manager.h | |
parent | 87d502c15bf78f84a67566e0f2a8d51a820ad14a (diff) |
change namespace/naming of WindowManager classes; register all ArdourDialog and ArdourWindow classes as ProxyTemporary windows so that transient-for can be set for all such windows
Diffstat (limited to 'gtk2_ardour/window_manager.h')
-rw-r--r-- | gtk2_ardour/window_manager.h | 283 |
1 files changed, 153 insertions, 130 deletions
diff --git a/gtk2_ardour/window_manager.h b/gtk2_ardour/window_manager.h index 1b1b2566ab..7138a95e7b 100644 --- a/gtk2_ardour/window_manager.h +++ b/gtk2_ardour/window_manager.h @@ -43,136 +43,15 @@ namespace ARDOUR { class SessionHandlePtr; } -class WindowManager -{ - public: - static WindowManager& instance(); - - class ProxyBase : public sigc::trackable { - public: - ProxyBase (const std::string& name, const std::string& menu_name); - ProxyBase (const std::string& name, const std::string& menu_name, const XMLNode&); - virtual ~ProxyBase(); - - void show (); - void show_all (); - void hide (); - void present (); - void maybe_show (); - - bool visible() const { return _visible; } - const std::string& name() const { return _name; } - const std::string& menu_name() const { return _menu_name; } - - std::string action_name() const; - void set_action (Glib::RefPtr<Gtk::Action>); - Glib::RefPtr<Gtk::Action> action() const { return _action; }; - - void drop_window (); - void use_window (Gtk::Window&); - - virtual Gtk::Window* get (bool create = false) = 0; - - virtual void toggle (); - - void set_state (const XMLNode&); - XMLNode& get_state () const; - - virtual ARDOUR::SessionHandlePtr* session_handle () = 0; - - operator bool() const { return _window != 0; } +namespace WM { - protected: - std::string _name; - std::string _menu_name; - Glib::RefPtr<Gtk::Action> _action; - Gtk::Window* _window; - mutable bool _visible; ///< true if the window should be visible on startup - mutable int _x_off; ///< x position - mutable int _y_off; ///< y position - mutable int _width; ///< width - mutable int _height; ///< height - Gtkmm2ext::VisibilityTracker* vistracker; +class ProxyBase; - void setup (); - }; +class Manager +{ + public: + static Manager& instance(); - template<typename T> - class ProxyWithConstructor: public ProxyBase { - public: - ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function<T*()>& c) - : ProxyBase (name, menu_name) , creator (c) {} - - ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function<T*()>& c, const XMLNode* node) - : ProxyBase (name, menu_name, node) , creator (c) {} - - Gtk::Window* get (bool create = false) { - if (!_window) { - if (!create) { - return 0; - } - - _window = creator (); - - if (_window) { - setup (); - } - } - - return _window; - } - - T* operator->() { - return dynamic_cast<T*> (get (true)); - } - - ARDOUR::SessionHandlePtr* session_handle () { - /* may return null */ - return dynamic_cast<T*> (_window); - } - - private: - boost::function<T*()> creator; - }; - - template<typename T> - class Proxy : public ProxyBase { - public: - Proxy (const std::string& name, const std::string& menu_name) - : ProxyBase (name, menu_name) {} - - Proxy (const std::string& name, const std::string& menu_name, const XMLNode* node) - : ProxyBase (name, menu_name, node) {} - - Gtk::Window* get (bool create = false) { - if (!_window) { - if (!create) { - return 0; - } - - _window = new T (); - - if (_window) { - setup (); - } - } - - return _window; - } - - T* operator->() { - return dynamic_cast<T*> (get(true)); - } - - ARDOUR::SessionHandlePtr* session_handle () { - /* may return null */ - return dynamic_cast<T*> (_window); - } - - private: - boost::function<T*()> creator; - }; - void register_window (ProxyBase*); void remove (const ProxyBase*); void toggle_window (ProxyBase*); @@ -190,10 +69,154 @@ class WindowManager Glib::RefPtr<Gtk::ActionGroup> window_actions; Gtk::Window* current_transient_parent; - WindowManager(); - ~WindowManager(); + Manager(); + ~Manager(); - static WindowManager* _instance; + static Manager* _instance; +}; + +class ProxyBase : public sigc::trackable { + public: + ProxyBase (const std::string& name, const std::string& menu_name); + ProxyBase (const std::string& name, const std::string& menu_name, const XMLNode&); + virtual ~ProxyBase(); + + void show (); + void show_all (); + void hide (); + void present (); + void maybe_show (); + + bool visible() const { return _visible; } + const std::string& name() const { return _name; } + const std::string& menu_name() const { return _menu_name; } + + std::string action_name() const; + void set_action (Glib::RefPtr<Gtk::Action>); + Glib::RefPtr<Gtk::Action> action() const { return _action; }; + + void drop_window (); + void use_window (Gtk::Window&); + + virtual Gtk::Window* get (bool create = false) = 0; + + virtual void toggle (); + + void set_state (const XMLNode&); + XMLNode& get_state () const; + + virtual ARDOUR::SessionHandlePtr* session_handle () = 0; + + operator bool() const { return _window != 0; } + + protected: + std::string _name; + std::string _menu_name; + Glib::RefPtr<Gtk::Action> _action; + Gtk::Window* _window; + mutable bool _visible; ///< true if the window should be visible on startup + mutable int _x_off; ///< x position + mutable int _y_off; ///< y position + mutable int _width; ///< width + mutable int _height; ///< height + Gtkmm2ext::VisibilityTracker* vistracker; + + void setup (); }; + +class ProxyTemporary: public ProxyBase { + public: + ProxyTemporary (const std::string& name, Gtk::Window* win); + ~ProxyTemporary(); + + Gtk::Window* get (bool create = false) { + (void) create; + return _window; + } + + Gtk::Window* operator->() { + return _window; + } + + ARDOUR::SessionHandlePtr* session_handle (); +}; + +template<typename T> +class ProxyWithConstructor: public ProxyBase { + public: + ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function<T*()>& c) + : ProxyBase (name, menu_name) , creator (c) {} + + ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function<T*()>& c, const XMLNode* node) + : ProxyBase (name, menu_name, node) , creator (c) {} + + Gtk::Window* get (bool create = false) { + if (!_window) { + if (!create) { + return 0; + } + + _window = creator (); + + if (_window) { + setup (); + } + } + + return _window; + } + + T* operator->() { + return dynamic_cast<T*> (get (true)); + } + + ARDOUR::SessionHandlePtr* session_handle () { + /* may return null */ + return dynamic_cast<T*> (_window); + } + + private: + boost::function<T*()> creator; +}; + +template<typename T> +class Proxy : public ProxyBase { + public: + Proxy (const std::string& name, const std::string& menu_name) + : ProxyBase (name, menu_name) {} + + Proxy (const std::string& name, const std::string& menu_name, const XMLNode* node) + : ProxyBase (name, menu_name, node) {} + + Gtk::Window* get (bool create = false) { + if (!_window) { + if (!create) { + return 0; + } + + _window = new T (); + + if (_window) { + setup (); + } + } + + return _window; + } + + T* operator->() { + return dynamic_cast<T*> (get(true)); + } + + ARDOUR::SessionHandlePtr* session_handle () { + /* may return null */ + return dynamic_cast<T*> (_window); + } + + private: + boost::function<T*()> creator; +}; + +} /* namespace */ #endif /* __gtk2_ardour_window_manager_h__ */ |