summaryrefslogtreecommitdiffstats
path: root/src/helper/action-context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/helper/action-context.cpp')
-rw-r--r--src/helper/action-context.cpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/helper/action-context.cpp b/src/helper/action-context.cpp
new file mode 100644
index 000000000..d52e43d96
--- /dev/null
+++ b/src/helper/action-context.cpp
@@ -0,0 +1,84 @@
+/*
+ * ActionContext implementation.
+ *
+ * Author:
+ * Eric Greveson <eric@greveson.co.uk>
+ *
+ * Copyright (C) 2013 Eric Greveson
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "desktop.h"
+#include "document.h"
+#include "layer-model.h"
+#include "selection.h"
+#include "helper/action-context.h"
+#include "ui/view/view.h"
+
+namespace Inkscape {
+
+ActionContext::ActionContext()
+ : _selection(NULL)
+ , _view(NULL)
+{
+}
+
+ActionContext::ActionContext(Selection *selection)
+ : _selection(selection)
+ , _view(NULL)
+{
+}
+
+ActionContext::ActionContext(UI::View::View *view)
+ : _selection(NULL)
+ , _view(view)
+{
+ SPDesktop *desktop = static_cast<SPDesktop *>(view);
+ if (desktop) {
+ _selection = desktop->selection;
+ }
+}
+
+SPDocument *ActionContext::getDocument() const
+{
+ if (_selection == NULL) {
+ return NULL;
+ }
+
+ // Should be the same as the view's document, if view is non-NULL
+ return _selection->layers()->getDocument();
+}
+
+Selection *ActionContext::getSelection() const
+{
+ return _selection;
+}
+
+UI::View::View *ActionContext::getView() const
+{
+ return _view;
+}
+
+SPDesktop *ActionContext::getDesktop() const
+{
+ // TODO: this slightly horrible storage of a UI::View::View*, and
+ // casting to an SPDesktop*, is only done because that's what was
+ // already the norm in the Inkscape codebase. This seems wrong. Surely
+ // we should store an SPDesktop* in the first place? Is there a case
+ // of actions being carried out on a View that is not an SPDesktop?
+ return static_cast<SPDesktop *>(_view);
+}
+
+} // namespace Inkscape
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :