diff options
| author | Ted Gould <ted@gould.cx> | 2007-07-03 03:48:15 +0000 |
|---|---|---|
| committer | gouldtj <gouldtj@users.sourceforge.net> | 2007-07-03 03:48:15 +0000 |
| commit | a6e03f743015dbc21da4ded72fd9145c748514e4 (patch) | |
| tree | 38611caf60de730d14cb24eff6d5e7e1634394ba /src/extension/effect.cpp | |
| parent | r15703@tres: ted | 2007-07-02 15:27:14 -0700 (diff) | |
| download | inkscape-a6e03f743015dbc21da4ded72fd9145c748514e4.tar.gz inkscape-a6e03f743015dbc21da4ded72fd9145c748514e4.zip | |
r15704@tres: ted | 2007-07-02 16:03:34 -0700
Split out the execution environment object.
(bzr r3163)
Diffstat (limited to 'src/extension/effect.cpp')
| -rw-r--r-- | src/extension/effect.cpp | 204 |
1 files changed, 1 insertions, 203 deletions
diff --git a/src/extension/effect.cpp b/src/extension/effect.cpp index 4042a6dcb..aa702a1ae 100644 --- a/src/extension/effect.cpp +++ b/src/extension/effect.cpp @@ -14,15 +14,12 @@ #include "selection.h" #include "sp-namedview.h" #include "document.h" -#include "prefdialog.h" #include "implementation/implementation.h" #include "effect.h" +#include "execution-env.h" #include "timer.h" -#include "ui/view/view.h" -#include "gtkmm/messagedialog.h" -#include "util/glib-list-iterators.h" /* Inkscape::Extension::Effect */ @@ -206,205 +203,6 @@ Effect::check (void) return true; } -class ExecutionEnv { -private: - Effect * _effect; - Gtk::Dialog * _visibleDialog; - bool _prefsVisible; - bool _finished; - bool _humanWait; - bool _canceled; - bool _prefsChanged; - Glib::RefPtr<Glib::MainLoop> _mainloop; - Inkscape::UI::View::View * _doc; - std::list<Glib::ustring> _selected; - -public: - void run (void); - - ExecutionEnv (Effect * effect, Inkscape::UI::View::View * doc, Gtk::Widget * controls = NULL) : - _effect(effect), - _visibleDialog(NULL), - _prefsVisible(false), - _finished(false), - _humanWait(false), - _canceled(false), - _prefsChanged(false), - _doc(doc) { - - SPDesktop *desktop = (SPDesktop *)_doc; - sp_namedview_document_from_window(desktop); - - if (desktop != NULL) { - Inkscape::Util::GSListConstIterator<SPItem *> selected = - sp_desktop_selection(desktop)->itemList(); - while ( selected != NULL ) { - Glib::ustring selected_id; - selected_id = SP_OBJECT_ID(*selected); - _selected.insert(_selected.end(), selected_id); - //std::cout << "Selected: " << selected_id << std::endl; - ++selected; - } - } - - _mainloop = Glib::MainLoop::create(false); - - if (controls != NULL) { - createPrefsDialog(controls); - } else { - createWorkingDialog(); - } - - return; - } - - ~ExecutionEnv (void) { - if (_visibleDialog != NULL) { - delete _visibleDialog; - } - return; - } - - void preferencesChange (void) { - //std::cout << "Preferences are a changin'" << std::endl; - _prefsChanged = true; - if (_humanWait) { - _mainloop->quit(); - documentCancel(); - _humanWait = false; - } else { - processingCancel(); - documentCancel(); - } - return; - } - -private: - void createPrefsDialog (Gtk::Widget * controls) { - if (_visibleDialog != NULL) { - delete _visibleDialog; - } - - _visibleDialog = new PrefDialog(_effect->get_name(), _effect->get_help(), controls); - _visibleDialog->signal_response().connect(sigc::mem_fun(this, &ExecutionEnv::preferencesResponse)); - _visibleDialog->show(); - - _prefsVisible = true; - return; - } - - void createWorkingDialog (void) { - if (_visibleDialog != NULL) { - delete _visibleDialog; - } - - gchar * dlgmessage = g_strdup_printf(_("The effect '%s' is working on your document. Please wait."), _effect->get_name()); - _visibleDialog = new Gtk::MessageDialog(dlgmessage, - false, // use markup - Gtk::MESSAGE_INFO, - Gtk::BUTTONS_CANCEL, - true); // modal - _visibleDialog->signal_response().connect(sigc::mem_fun(this, &ExecutionEnv::workingCanceled)); - g_free(dlgmessage); - _visibleDialog->show(); - - _prefsVisible = false; - return; - } - - void workingCanceled (const int resp) { - processingCancel(); - documentCancel(); - _finished = true; - return; - } - - void preferencesResponse (const int resp) { - if (resp == Gtk::RESPONSE_OK) { - if (_humanWait) { - documentCommit(); - _mainloop->quit(); - _finished = true; - } else { - createWorkingDialog(); - } - } else { - if (_humanWait) { - _mainloop->quit(); - } else { - processingCancel(); - } - documentCancel(); - _finished = true; - } - return; - } - - void processingComplete(void) { - //std::cout << "Processing Complete" << std::endl; - if (_prefsChanged) { return; } // do it all again - if (_prefsVisible) { - _humanWait = true; - } else { - documentCommit(); - _finished = true; - } - return; - } - - void processingCancel (void) { - _effect->get_imp()->cancelProcessing(); - return; - } - - void documentCancel (void) { - _canceled = true; - return; - } - - void documentCommit (void) { - sp_document_done(_doc->doc(), SP_VERB_NONE, _(_effect->get_name())); - Effect::set_last_effect(_effect); - return; - } - - void reselect (void) { - SPDocument * doc = _doc->doc(); - - SPDesktop *desktop = (SPDesktop *)_doc; - sp_namedview_document_from_window(desktop); - - if (desktop == NULL) { return; } - - Inkscape::Selection * selection = sp_desktop_selection(desktop); - - for (std::list<Glib::ustring>::iterator i = _selected.begin(); i != _selected.end(); i++) { - selection->add(doc->getObjectById(i->c_str())); - } - - return; - } -}; - -void -ExecutionEnv::run (void) { - while (!_finished) { - _canceled = false; - if (_humanWait) { - _mainloop->run(); - } else { - _prefsChanged = false; - _effect->get_imp()->effect(_effect, _doc); - processingComplete(); - } - if (_canceled) { - sp_document_cancel(_doc->doc()); - reselect(); - } - } - return; -} - bool Effect::prefs (Inkscape::UI::View::View * doc) { |
