From 5c657dabaea8b7d0f7f44c73be37662ff8eff988 Mon Sep 17 00:00:00 2001
From: fluxgen <fluxgen>
Date: Mon, 30 Jun 2003 14:49:23 +0000
Subject: command factory for basic fluxbox commands

---
 src/FbCommandFactory.cc | 163 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/FbCommandFactory.hh |  35 +++++++++++
 2 files changed, 198 insertions(+)
 create mode 100644 src/FbCommandFactory.cc
 create mode 100644 src/FbCommandFactory.hh

diff --git a/src/FbCommandFactory.cc b/src/FbCommandFactory.cc
new file mode 100644
index 0000000..9c4e172
--- /dev/null
+++ b/src/FbCommandFactory.cc
@@ -0,0 +1,163 @@
+// FbCommandFactory.cc for Fluxbox Window manager
+// Copyright (c) 2003 Henrik Kinnunen (fluxgen at users.sourceforge.net)
+//                and Simon Bowden (rathnor at users.sourceforge.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// $Id: FbCommandFactory.cc,v 1.1 2003/06/30 14:49:23 fluxgen Exp $
+
+#include "FbCommandFactory.hh"
+
+#include "CurrentWindowCmd.hh"
+#include "FbCommands.hh"
+#include "Window.hh"
+#include "WorkspaceCmd.hh"
+#include "fluxbox.hh"
+#include "SimpleCommand.hh"
+
+// autoregister this module to command parser
+FbCommandFactory FbCommandFactory::s_autoreg;
+
+
+FbCommandFactory::FbCommandFactory() {
+    // setup commands that we can handle
+    const char commands[][20] = {
+        "execcommand",
+        "exec",
+        "execute",
+        "quit",
+        "restart",
+        "minimizewindow",
+        "minimize",
+        "iconfiy",
+        "maximizewindow",
+        "maximize",
+        "maximizevertical",
+        "maximizehorizontal",
+        "moveright",
+        "moveleft",
+        "moveup",
+        "movedown",
+        "raise",
+        "lower",
+        "close",
+        "shade",
+        "stick",
+        "sendtoworkspace",
+        "killwindow",
+        "nexttab",
+        "prevtab",
+        "detachclient",
+        "nextworkspace",
+        "prevworkspace",
+        "nextwindow",
+        "prevwindow",
+        "showdesktop",
+        "arrangewindows",
+        ""
+    };
+
+    for (int i=0;; ++i) {
+        if (strcmp(commands[i], "") == 0)
+            break;
+        addCommand(commands[i]);
+    }
+                     
+}
+
+FbTk::Command *FbCommandFactory::stringToCommand(const std::string &command,
+                                                 const std::string &arguments) {
+    using namespace FbCommands;
+    //
+    // WM commands
+    //
+    if (command == "restart")
+        return new RestartFluxboxCmd(arguments);
+    else if (command == "reconfigure")
+        return new ReconfigureFluxboxCmd();
+    else if (command == "setstyle")
+        return new SetStyleCmd(arguments);
+    else if (command == "saverc")
+        return new SaveResources();
+    else if (command == "execcommand" || command == "execute" || command == "exec")
+        return new ExecuteCmd(arguments); // execute command on key screen
+    else if (command == "quit")
+        return new FbTk::SimpleCommand<Fluxbox>(*Fluxbox::instance(), &Fluxbox::shutdown);
+    //
+    // Current focused window commands
+    //
+    else if (command == "minimizewindow" || command == "mimimize" || command == "iconify")
+        return new CurrentWindowCmd(&FluxboxWindow::iconify);
+    else if (command == "maximizewindow" || command == "maximize")
+        return new CurrentWindowCmd(&FluxboxWindow::maximize);
+    else if (command == "maximizevertical")
+        return new CurrentWindowCmd(&FluxboxWindow::maximizeVertical);
+    else if (command == "maximizehorizontal")
+        return new CurrentWindowCmd(&FluxboxWindow::maximizeHorizontal);
+    else if (command == "moveright")
+        return new MoveRightCmd(atoi(arguments.c_str()));
+    else if (command == "moveleft")
+        return new MoveLeftCmd(atoi(arguments.c_str()));    
+    else if (command == "moveup")
+        return new MoveUpCmd(atoi(arguments.c_str()));
+    else if (command == "movedown")
+        return new MoveDownCmd(atoi(arguments.c_str()));
+    else if (command == "raise")
+        return new CurrentWindowCmd(&FluxboxWindow::raise);
+    else if (command == "lower")
+        return new CurrentWindowCmd(&FluxboxWindow::lower);
+    else if (command == "close")
+        return new CurrentWindowCmd(&FluxboxWindow::close);
+    else if (command == "shade" || command == "shadewindow")
+        return new CurrentWindowCmd(&FluxboxWindow::shade);
+    else if (command == "stick" || command == "stickwindow")
+        return new CurrentWindowCmd(&FluxboxWindow::stick);
+    else if (command == "sendtoworkspace")
+        return new SendToWorkspaceCmd(atoi(arguments.c_str()));
+    else if (command == "killwindow")
+        return new KillWindowCmd();
+     else if (command == "nexttab")
+        return new CurrentWindowCmd(&FluxboxWindow::nextClient);
+    else if (command == "prevtab")
+        return new CurrentWindowCmd(&FluxboxWindow::prevClient);
+    else if (command == "detachclient")
+        return new CurrentWindowCmd(&FluxboxWindow::detachCurrentClient);
+    // 
+    // Workspace commands
+    //
+    else if (command == "nextworkspace" && arguments.size() == 0)
+        return new NextWorkspaceCmd();
+    else if (command == "prevworkspace" && arguments.size() == 0)
+        return new PrevWorkspaceCmd();
+    else if (command == "workspace") {
+        int num = 0;
+        if (!arguments.empty())
+            num = atoi(arguments.c_str());
+        return new JumpToWorkspaceCmd(num);
+    } else if (command == "nextwindow")
+        return new NextWindowCmd(atoi(arguments.c_str()));
+    else if (command == "prevwindow")
+        return new PrevWindowCmd(atoi(arguments.c_str()));
+    else if (command == "arrangewindows")
+        return new ArrangeWindowsCmd();
+    else if (command == "showdesktop")
+        return new ShowDesktopCmd();
+
+    return 0;
+}
diff --git a/src/FbCommandFactory.hh b/src/FbCommandFactory.hh
new file mode 100644
index 0000000..135c87f
--- /dev/null
+++ b/src/FbCommandFactory.hh
@@ -0,0 +1,35 @@
+// FbCommandFactory.hh for Fluxbox Window manager
+// Copyright (c) 2003 Henrik Kinnunen (fluxgen at users.sourceforge.net)
+//                and Simon Bowden (rathnor at users.sourceforge.net)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+// $Id: FbCommandFactory.hh,v 1.1 2003/06/30 14:49:23 fluxgen Exp $
+
+#include "CommandParser.hh"
+
+class FbCommandFactory: public CommandFactory {
+public:
+    FbTk::Command *stringToCommand(const std::string &command, 
+                                   const std::string &arguments);
+
+private:
+    FbCommandFactory();
+    static FbCommandFactory s_autoreg; ///< autoregister variable
+};
-- 
cgit v0.11.2