1 /** \file
2 * \brief Class to manage an application used for editing SVG documents
3 * using GUI views
4 *
5 * \note This class is a Singleton
6 *
7 * Authors:
8 * Bryce W. Harrington <bryce@bryceharrington.org>
9 * Ralf Stephan <ralf@ark.in-berlin.de>
10 *
11 * Copyright (C) 2004 Bryce Harrington
12 *
13 * Released under GNU GPL. Read the file 'COPYING' for more information.
14 */
16 #ifndef INKSCAPE_APPLICATION_EDITOR_H
17 #define INKSCAPE_APPLICATION_EDITOR_H
19 #include <sigc++/sigc++.h>
20 #include <glib/gslist.h>
21 #include <glibmm/ustring.h>
22 #include <set>
23 #include "app-prototype.h"
25 class SPDesktop;
26 class SPDocument;
27 class SPEventContext;
29 namespace Inkscape {
30 class Selection;
31 namespace XML {
32 class Document;
33 }
34 namespace UI {
35 namespace View {
36 class Edit;
37 }
38 }
39 namespace NSApplication {
41 class Editor : public AppPrototype
42 {
43 public:
44 static Editor *create (int argc, char **argv);
45 virtual ~Editor();
47 void* getWindow();
49 void toggleDialogs();
50 void nextDesktop();
51 void prevDesktop();
53 void refreshDisplay();
54 void exit();
56 bool lastViewOfDocument(SPDocument* doc, SPDesktop* view) const;
58 bool addView(SPDesktop* view);
59 bool deleteView(SPDesktop* view);
61 static Inkscape::XML::Document *getPreferences();
62 static SPDesktop* getActiveDesktop();
63 static bool isDesktopActive (SPDesktop* dt) { return getActiveDesktop()==dt; }
64 static SPDesktop* createDesktop (SPDocument* doc);
65 static void addDesktop (SPDesktop* dt);
66 static void removeDesktop (SPDesktop* dt);
67 static void activateDesktop (SPDesktop* dt);
68 static void reactivateDesktop (SPDesktop* dt);
69 static bool isDuplicatedView (SPDesktop* dt);
71 static SPDocument* getActiveDocument();
72 static void addDocument (SPDocument* doc);
73 static void removeDocument (SPDocument* doc);
75 static void selectionModified (Inkscape::Selection*, guint);
76 static void selectionChanged (Inkscape::Selection*);
77 static void subSelectionChanged (SPDesktop*);
78 static void selectionSet (Inkscape::Selection*);
79 static void eventContextSet (SPEventContext*);
80 static void hideDialogs();
81 static void unhideDialogs();
83 static sigc::connection connectSelectionModified (const sigc::slot<void, Inkscape::Selection*, guint> &slot);
84 static sigc::connection connectSelectionChanged (const sigc::slot<void, Inkscape::Selection*> &slot);
85 static sigc::connection connectSubselectionChanged (const sigc::slot<void, SPDesktop*> &slot);
86 static sigc::connection connectSelectionSet (const sigc::slot<void, Inkscape::Selection*> &slot);
87 static sigc::connection connectEventContextSet (const sigc::slot<void, SPEventContext*> &slot);
88 static sigc::connection connectDesktopActivated (const sigc::slot<void, SPDesktop*> &slot);
89 static sigc::connection connectDesktopDeactivated (const sigc::slot<void, SPDesktop*> &slot);
90 static sigc::connection connectShutdown (const sigc::slot<void> &slot);
91 static sigc::connection connectDialogsHidden (const sigc::slot<void> &slot);
92 static sigc::connection connectDialogsUnhidden (const sigc::slot<void> &slot);
93 static sigc::connection connectExternalChange (const sigc::slot<void> &slot);
96 protected:
97 Editor(Editor const &);
98 Editor& operator=(Editor const &);
100 std::multiset<SPDocument *> _document_set;
101 GSList *_documents;
102 GSList *_desktops;
103 gchar *_argv0;
105 bool _dialogs_toggle;
107 sigc::signal <void, Inkscape::Selection*, guint> _selection_modified_signal;
108 sigc::signal <void, Inkscape::Selection*> _selection_changed_signal;
109 sigc::signal <void, SPDesktop*> _subselection_changed_signal;
110 sigc::signal <void, Inkscape::Selection*> _selection_set_signal;
111 sigc::signal <void, SPEventContext*> _event_context_set_signal;
112 sigc::signal <void, SPDesktop*> _desktop_activated_signal;
113 sigc::signal <void, SPDesktop*> _desktop_deactivated_signal;
114 sigc::signal <void> _shutdown_signal;
115 sigc::signal <void> _dialogs_hidden_signal;
116 sigc::signal <void> _dialogs_unhidden_signal;
117 sigc::signal <void> _external_change_signal;
119 private:
120 Editor(int argc, char **argv);
121 bool init();
122 };
124 #define ACTIVE_DESKTOP Inkscape::NSApplication::Editor::getActiveDesktop()
126 } // namespace NSApplication
127 } // namespace Inkscape
130 #endif /* !INKSCAPE_APPLICATION_EDITOR_H */
132 /*
133 Local Variables:
134 mode:c++
135 c-file-style:"stroustrup"
136 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
137 indent-tabs-mode:nil
138 fill-column:99
139 End:
140 */
141 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :