diff options
| author | Ted Gould <ted@gould.cx> | 2007-03-01 07:15:16 +0000 |
|---|---|---|
| committer | gouldtj <gouldtj@users.sourceforge.net> | 2007-03-01 07:15:16 +0000 |
| commit | 0f5c7e743bf7b5109200821cc0c58f68d0f58417 (patch) | |
| tree | f28f0242b532dc613343049f84b1b96e7a00c3fd /src | |
| parent | r14584@tres: ted | 2007-02-28 20:01:52 -0800 (diff) | |
| download | inkscape-0f5c7e743bf7b5109200821cc0c58f68d0f58417.tar.gz inkscape-0f5c7e743bf7b5109200821cc0c58f68d0f58417.zip | |
r14632@tres: ted | 2007-02-28 23:12:58 -0800
Splitting out the command line action class to try and leave SOME
dependencies out of main.cpp.
(bzr r2481)
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile_insert | 1 | ||||
| -rw-r--r-- | src/main-cmdlineact.cpp | 107 | ||||
| -rw-r--r-- | src/main-cmdlineact.h | 51 | ||||
| -rw-r--r-- | src/main.cpp | 2 |
4 files changed, 161 insertions, 0 deletions
diff --git a/src/Makefile_insert b/src/Makefile_insert index 04cebc866..281e8e148 100644 --- a/src/Makefile_insert +++ b/src/Makefile_insert @@ -91,6 +91,7 @@ libinkpre_a_SOURCES = \ layer-fns.cpp layer-fns.h \ layer-manager.cpp layer-manager.h \ macros.h \ + main-cmdlineact.cpp main-cmdlineact.h \ marker-status.cpp marker-status.h \ media.cpp media.h \ message-context.cpp message-context.h \ diff --git a/src/main-cmdlineact.cpp b/src/main-cmdlineact.cpp new file mode 100644 index 000000000..dc59e1a93 --- /dev/null +++ b/src/main-cmdlineact.cpp @@ -0,0 +1,107 @@ +/* + * Authors: + * Ted Gould <ted@gould.cx> + * + * Copyright (C) 2007 Authors + * + * Released under GNU GPL v2, read the file 'COPYING' for more information + */ + +#include <ui/view/view.h> +#include <desktop.h> +#include <desktop-handles.h> +#include <helper/action.h> +#include <selection.h> +#include <verbs.h> +#include <inkscape.h> +#include <document.h> + +#include <glibmm/i18n.h> + +#include "main-cmdlineact.h" + +namespace Inkscape { + +std::list <CmdLineAction *> CmdLineAction::_list; + +CmdLineAction::CmdLineAction (bool isVerb, gchar const * arg) : _isVerb(isVerb), _arg(NULL) { + if (arg != NULL) { + _arg = g_strdup(arg); + } + + _list.insert(_list.end(), this); + + return; +} + +CmdLineAction::~CmdLineAction () { + if (_arg != NULL) { + g_free(_arg); + } +} + +void +CmdLineAction::doIt (Inkscape::UI::View::View * view) { + //printf("Doing: %s\n", _arg); + if (_isVerb) { + Inkscape::Verb * verb = Inkscape::Verb::getbyid(_arg); + if (verb == NULL) { + printf(_("Unable to find verb ID '%s' specified on the command line.\n"), _arg); + return; + } + SPAction * action = verb->get_action(view); + sp_action_perform(action, NULL); + } else { + SPDesktop * desktop = dynamic_cast<SPDesktop *>(view); + if (desktop == NULL) { return; } + + SPDocument * doc = view->doc(); + SPObject * obj = doc->getObjectById(_arg); + if (obj == NULL) { + printf(_("Unable to find node ID: '%s'\n"), _arg); + return; + } + + Inkscape::Selection * selection = sp_desktop_selection(desktop); + selection->add(obj, false); + } + return; +} + +void +CmdLineAction::doList (Inkscape::UI::View::View * view) { + for (std::list<CmdLineAction *>::iterator i = _list.begin(); + i != _list.end(); i++) { + CmdLineAction * entry = *i; + entry->doIt(view); + } +} + +bool +CmdLineAction::idle (void) { + std::list<SPDesktop *> desktops; + inkscape_get_all_desktops(desktops); + + // We're going to assume one desktop per document, because no one + // should have had time to make more at this point. + for (std::list<SPDesktop *>::iterator i = desktops.begin(); + i != desktops.end(); i++) { + SPDesktop * desktop = *i; + //Inkscape::UI::View::View * view = dynamic_cast<Inkscape::UI::View::View *>(desktop); + doList(desktop); + } + return false; +} + +} // 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 : diff --git a/src/main-cmdlineact.h b/src/main-cmdlineact.h new file mode 100644 index 000000000..bcf94c5a2 --- /dev/null +++ b/src/main-cmdlineact.h @@ -0,0 +1,51 @@ + +#ifndef __INK_MAIN_CMD_LINE_ACTIONS_H__ +#define __INK_MAIN_CMD_LINE_ACTIONS_H__ + +/** \file + * Small actions that can be queued at the command line + */ + +/* + * Authors: + * Ted Gould <ted@gould.cx> + * + * Copyright (C) 2007 Authors + * + * Released under GNU GPL v2.x, read the file 'COPYING' for more information + */ + + +namespace Inkscape { + +class CmdLineAction { + bool _isVerb; + gchar * _arg; + + static std::list <CmdLineAction *> _list; + +public: + CmdLineAction (bool isVerb, gchar const * arg); + ~CmdLineAction (); + + void doIt (Inkscape::UI::View::View * view); + static void doList (Inkscape::UI::View::View * view); + static bool idle (void); +}; + +} // Inkscape + + + +#endif /* __INK_MAIN_CMD_LINE_ACTIONS_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 : diff --git a/src/main.cpp b/src/main.cpp index d9e3138f9..dbca3f74c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -108,6 +108,8 @@ using Inkscape::Extension::Internal::PrintWin32; #include "application/application.h" +#include "main-cmdlineact.h" + enum { SP_ARG_NONE, SP_ARG_NOGUI, |
