diff options
Diffstat (limited to 'src/progs/gtk/App.h')
-rw-r--r-- | src/progs/gtk/App.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/progs/gtk/App.h b/src/progs/gtk/App.h new file mode 100644 index 00000000..1ba18962 --- /dev/null +++ b/src/progs/gtk/App.h @@ -0,0 +1,123 @@ +/* This file is part of Om. Copyright (C) 2006 Dave Robillard. + * + * Om is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * Om is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef OMGTKAPP_H +#define OMGTKAPP_H + +#include <cassert> +#include <string> +#include <map> +#include <list> +#include <iostream> +#include <libgnomecanvasmm.h> +#include <gtkmm.h> +#include <libglademm.h> +using std::string; using std::map; using std::list; +using std::cerr; using std::endl; + +namespace LibOmClient { class PatchModel; class PluginModel; } +using namespace LibOmClient; + +/** \defgroup OmGtk GTK Client + */ + +namespace OmGtk { + +class PatchWindow; +class GtkObjectController; +class PatchController; +class NodeController; +class PortController; +class LoadPatchWindow; +class MessagesWindow; +class ConfigWindow; +class OmGtkObject; +class OmModule; +class OmPort; +class OmFlowCanvas; +class PatchTreeView; +class PatchTreeWindow; +class ControlInterface; +class ConnectWindow; +class Configuration; + + +/** Singleton master class most everything is contained within. + * + * This is a horrible god-object, but it's shrinking in size as things are + * moved out. Hopefully it will go away entirely some day.. + * + * \ingroup OmGtk + */ +class App +{ +public: + ~App(); + + void error_message(const string& msg); + + void quit(); + void quit_and_kill(); + + void add_patch_window(PatchWindow* pw); + void remove_patch_window(PatchWindow* pw); + + int num_open_patch_windows(); + + ConnectWindow* connect_window() const { return m_connect_window; } + Gtk::Dialog* about_dialog() const { return m_about_dialog; } + ConfigWindow* configuration_dialog() const { return m_config_window; } + MessagesWindow* messages_dialog() const { return m_messages_window; } + PatchTreeWindow* patch_tree() const { return m_patch_tree_window; } + Configuration* configuration() const { return m_configuration; } + + ControlInterface* control_interface() { return m_control_interface; } + + static void instantiate() { if (!_instance) _instance = new App(); } + static inline App& instance() { assert(_instance); return *_instance; } + +protected: + App(); + static App* _instance; + + //bool connect_callback(); + //bool idle_callback(); + + ControlInterface* m_control_interface; + Configuration* m_configuration; + + list<PatchWindow*> m_windows; + + ConnectWindow* m_connect_window; + MessagesWindow* m_messages_window; + PatchTreeWindow* m_patch_tree_window; + ConfigWindow* m_config_window; + Gtk::Dialog* m_about_dialog; + Gtk::Button* m_engine_error_close_button; + + /** Used to avoid feedback loops with (eg) process checkbutton + * FIXME: Maybe this should be globally implemented at the Controller level, + * disable all command sending while handling events to avoid feedback + * issues with widget event callbacks? This same pattern is duplicated + * too much... */ + bool m_enable_signal; +}; + + +} // namespace OmGtk + +#endif // OMGTKAPP_H + |