diff options
Diffstat (limited to 'src/extension/execution-env.h')
-rw-r--r-- | src/extension/execution-env.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/extension/execution-env.h b/src/extension/execution-env.h new file mode 100644 index 0000000..d33bdc4 --- /dev/null +++ b/src/extension/execution-env.h @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Authors: + * Ted Gould <ted@gould.cx> + * + * Copyright (C) 2007 Authors + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#ifndef INKSCAPE_EXTENSION_EXECUTION_ENV_H__ +#define INKSCAPE_EXTENSION_EXECUTION_ENV_H__ + +#include <glibmm/main.h> +#include <glibmm/ustring.h> + +#include <gtkmm/dialog.h> + +namespace Inkscape { + +namespace UI { +namespace View { +class View; +} // namespace View +} // namespace UI + +namespace Extension { + +class Effect; + +namespace Implementation +{ +class ImplementationDocumentCache; +} + +class ExecutionEnv { +private: + enum state_t { + INIT, //< The context has been initialized + COMPLETE, //< We've completed atleast once + RUNNING //< The effect is currently running + }; + /** \brief What state the execution engine is in. */ + state_t _state; + + /** \brief If there is a working dialog it'll be referenced + right here. */ + Gtk::Dialog * _visibleDialog; + /** \brief Signal that the run is complete. */ + sigc::signal<void> _runComplete; + /** \brief In some cases we need a mainLoop, when we do, this is + a pointer to it. */ + Glib::RefPtr<Glib::MainLoop> _mainloop; + /** \brief The document that we're working on. */ + Inkscape::UI::View::View * _doc; + /** \brief A document cache if we were passed one. */ + Implementation::ImplementationDocumentCache * _docCache; + + /** \brief The effect that we're executing in this context. */ + Effect * _effect; + + /** \brief Show the working dialog when the effect is executing. */ + bool _show_working; +public: + + /** \brief Create a new context for execution of an effect + \param effect The effect to execute + \param doc The document to execute the effect on + \param docCache The implementation cache of the document. May be + NULL in which case it'll be created by the execution + environment. + \prarm show_working Show a small dialog signaling the effect + is working. Allows for user canceling. + \param show_errors If the effect has an error, show it or not. + */ + ExecutionEnv (Effect * effect, + Inkscape::UI::View::View * doc, + Implementation::ImplementationDocumentCache * docCache = nullptr, + bool show_working = true, + bool show_errors = true); + virtual ~ExecutionEnv (); + + /** \brief Starts the execution of the effect + \return Returns whether the effect was executed to completion */ + void run (); + /** \brief Cancel the execution of the effect */ + void cancel (); + /** \brief Commit the changes to the document */ + void commit (); + /** \brief Undoes what the effect completed. */ + void undo (); + /** \brief Wait for the effect to complete if it hasn't. */ + bool wait (); + void reselect (); + + /** \brief Return reference to working dialog (if any) */ + Gtk::Dialog *get_working_dialog () { return _visibleDialog; }; + +private: + void runComplete (); + void createWorkingDialog (); + void workingCanceled (const int resp); + void genDocCache (); + void killDocCache (); +}; + +} } /* namespace Inkscape, Extension */ +#endif /* INKSCAPE_EXTENSION_EXECUTION_ENV_H__ */ + +/* + 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 : |