summaryrefslogtreecommitdiffstats
path: root/src/inkscape.h
diff options
context:
space:
mode:
authorLiam P. White <inkscapebrony@gmail.com>2014-06-26 17:49:17 +0000
committerLiam P. White <inkscapebrony@gmail.com>2014-06-26 17:49:17 +0000
commit6dfb9b4eade77ac55d11f05669c2192352b9b8fa (patch)
treeb5925ceaf9684f21ff9cfb9b8e639be9e0937957 /src/inkscape.h
parentUpdate to exp. r13409 (diff)
downloadinkscape-6dfb9b4eade77ac55d11f05669c2192352b9b8fa.tar.gz
inkscape-6dfb9b4eade77ac55d11f05669c2192352b9b8fa.zip
4. further refactor Application class; create proper singleton, encapsulate members, simplify signals
(bzr r13341.5.6)
Diffstat (limited to 'src/inkscape.h')
-rw-r--r--src/inkscape.h107
1 files changed, 53 insertions, 54 deletions
diff --git a/src/inkscape.h b/src/inkscape.h
index 4b969bddb..821970748 100644
--- a/src/inkscape.h
+++ b/src/inkscape.h
@@ -48,7 +48,7 @@ struct Document;
Inkscape::Application * inkscape_ref (Inkscape::Application * in);
Inkscape::Application * inkscape_unref(Inkscape::Application * in);
-#define INKSCAPE inkscape_get_instance()
+#define INKSCAPE (Inkscape::Application::instance())
#define SP_INKSCAPE(obj) (dynamic_cast<Inkscape::Application*>(obj))
#define SP_IS_INKSCAPE(obj) (dynamic_cast<Inkscape::Application*> (obj) != NULL)
#define SP_ACTIVE_EVENTCONTEXT (INKSCAPE->active_event_context())
@@ -76,23 +76,15 @@ public:
namespace Inkscape {
class Application {
-private:
- unsigned refCount;
- gboolean _dialogs_toggle;
- guint _mapalt;
- guint _trackalt;
- char * _argv0;
- bool _use_gui; // may want to consider a virtual function
- // for overriding things like the warning dlg's
+protected:
+ static Inkscape::Application * _S_inst;
-public:
Application(const char* argv0, bool use_gui);
~Application();
- Inkscape::XML::Document *menus;
- std::map<SPDocument *, int> document_set;
- std::map<SPDocument *, AppSelectionModel *> selection_models;
- std::vector<SPDesktop *> * desktops;
+public:
+ static Application* instance();
+ static void init(const char* argv0, bool use_gui);
// returns the mask of the keyboard modifier to map to Alt, zero if no mapping
// Needs to be a guint because gdktypes.h does not define a 'no-modifier' value
@@ -110,36 +102,8 @@ public:
char const* argv0() const { return _argv0; }
void argv0(char const *);
- // signals
-
- // one of selections changed
- sigc::signal<void, Inkscape::Application *, Inkscape::Selection *> signal_selection_changed;
- // one of subselections (text selection, gradient handle, etc) changed
- sigc::signal<void, Inkscape::Application *, SPDesktop *> signal_subselection_changed;
- // one of selections modified
- sigc::signal<void, Inkscape::Application *, Inkscape::Selection *, guint /*flags*/> signal_selection_modified;
- // one of selections set
- sigc::signal<void, Inkscape::Application *, Inkscape::Selection *> signal_selection_set;
- // tool switched
- sigc::signal<void, Inkscape::Application *, Inkscape::UI::Tools::ToolBase * /*eventcontext*/> signal_eventcontext_set;
- // some desktop got focus
- sigc::signal<void, Inkscape::Application *, SPDesktop *> signal_activate_desktop;
- // some desktop lost focus
- sigc::signal<void, Inkscape::Application *, SPDesktop *> signal_deactivate_desktop;
-
- // probably orphaned signals
- sigc::signal<void, Inkscape::Application *, SPDocument *> signal_destroy_document;
- sigc::signal<void, Inkscape::Application *, SPColor *, double /*opacity*/> signal_color_set;
-
- // inkscape is quitting
- sigc::signal<void, Inkscape::Application *> signal_shut_down;
- // user pressed F12
- sigc::signal<void, Inkscape::Application *> signal_dialogs_hide;
- // user pressed F12
- sigc::signal<void, Inkscape::Application *> signal_dialogs_unhide;
- // a document was changed by some external means (undo or XML editor); this
- // may not be reflected by a selection change and thus needs a separate signal
- sigc::signal<void, Inkscape::Application *> signal_external_change;
+ // no setter for this -- only we can control this variable
+ static bool isCrashing() { return _crashIsHappening; }
// useful functions
void autosave_init();
@@ -207,22 +171,57 @@ public:
int autosave();
+ // nobody should be accessing our reference count, so it's made private.
friend Application * ::inkscape_ref (Application * in);
friend Application * ::inkscape_unref(Application * in);
-};
-} // namespace Inkscape
-
-bool inkscapeIsCrashing();
+ // signals
+
+ // one of selections changed
+ sigc::signal<void, Inkscape::Selection *> signal_selection_changed;
+ // one of subselections (text selection, gradient handle, etc) changed
+ sigc::signal<void, SPDesktop *> signal_subselection_changed;
+ // one of selections modified
+ sigc::signal<void, Inkscape::Selection *, guint /*flags*/> signal_selection_modified;
+ // one of selections set
+ sigc::signal<void, Inkscape::Selection *> signal_selection_set;
+ // tool switched
+ sigc::signal<void, Inkscape::UI::Tools::ToolBase * /*eventcontext*/> signal_eventcontext_set;
+ // some desktop got focus
+ sigc::signal<void, SPDesktop *> signal_activate_desktop;
+ // some desktop lost focus
+ sigc::signal<void, SPDesktop *> signal_deactivate_desktop;
+
+ // these are orphaned signals (nothing emits them and nothing connects to them)
+ sigc::signal<void, SPDocument *> signal_destroy_document;
+ sigc::signal<void, SPColor *, double /*opacity*/> signal_color_set;
+
+ // inkscape is quitting
+ sigc::signal<void> signal_shut_down;
+ // user pressed F12
+ sigc::signal<void> signal_dialogs_hide;
+ // user pressed F12
+ sigc::signal<void> signal_dialogs_unhide;
+ // a document was changed by some external means (undo or XML editor); this
+ // may not be reflected by a selection change and thus needs a separate signal
+ sigc::signal<void> signal_external_change;
-// gets the current instance and calls autosave()
-int inkscape_autosave(gpointer unused);
+private:
+ Inkscape::XML::Document * _menus;
+ std::map<SPDocument *, int> _document_set;
+ std::map<SPDocument *, AppSelectionModel *> _selection_models;
+ std::vector<SPDesktop *> * _desktops;
-// hmm, I wonder what this does /s
-Inkscape::Application* inkscape_get_instance();
+ unsigned refCount;
+ bool _dialogs_toggle;
+ guint _mapalt;
+ guint _trackalt;
+ char * _argv0;
+ static bool _crashIsHappening;
+ bool _use_gui;
+};
-// only temporary until I can properly clean this up
-void inkscape_application_init (const gchar *argv0, gboolean use_gui);
+} // namespace Inkscape
#endif