command factory for basic fluxbox commands
fluxgen fluxgen
2 files changed,
198 insertions(+),
0 deletions(-)
A
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; +}
A
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 +};