/* * ActionContext implementation. * * Author: * Eric Greveson * * 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" 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(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(_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 :