Code

Implement object-snapping for clones (see bug #1511260)
[inkscape.git] / src / application / editor.h
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;
57     
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);
70     
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);
95    
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 :