summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: d8e3f58)
raw | patch | inline | side by side (parent: d8e3f58)
author | gouldtj <gouldtj@users.sourceforge.net> | |
Thu, 1 Mar 2007 07:15:16 +0000 (07:15 +0000) | ||
committer | gouldtj <gouldtj@users.sourceforge.net> | |
Thu, 1 Mar 2007 07:15:16 +0000 (07:15 +0000) |
Splitting out the command line action class to try and leave SOME
dependencies out of main.cpp.
dependencies out of main.cpp.
src/Makefile_insert | patch | blob | history | |
src/main-cmdlineact.cpp | [new file with mode: 0644] | patch | blob |
src/main-cmdlineact.h | [new file with mode: 0644] | patch | blob |
src/main.cpp | patch | blob | history |
diff --git a/src/Makefile_insert b/src/Makefile_insert
index 04cebc8667878255f183a9fe92c5ef347c5b225a..281e8e14877dc4a94c33c1b04d1cddf87d3f76eb 100644 (file)
--- a/src/Makefile_insert
+++ b/src/Makefile_insert
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
--- /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
--- /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 d9e3138f956ece14f226c6e4e5d410d650388c0e..dbca3f74ca7c65fbe34f5435ebfa18a787e71a9d 100644 (file)
--- a/src/main.cpp
+++ b/src/main.cpp
#include "application/application.h"
+#include "main-cmdlineact.h"
+
enum {
SP_ARG_NONE,
SP_ARG_NOGUI,