From 9f2f65a698c4cc71373a7fe9d73a0889e0d3487b Mon Sep 17 00:00:00 2001 From: Mark Tiefenbruck <mark@fluxbox.org> Date: Thu, 10 Jan 2008 23:41:22 -0800 Subject: make FbTk::Command a template class, split parsing information out of ObjectRegistry --- src/AttentionNoticeHandler.cc | 4 +- src/ClockTool.cc | 12 ++-- src/CommandDialog.cc | 10 ++-- src/CommandDialog.hh | 10 ++-- src/CurrentWindowCmd.cc | 124 ++++++++++++++++++++-------------------- src/CurrentWindowCmd.hh | 16 +++--- src/FbCommands.cc | 60 +++++++++---------- src/FbCommands.hh | 48 ++++++++-------- src/FbTk/BoolMenuItem.hh | 2 +- src/FbTk/Button.cc | 2 +- src/FbTk/Button.hh | 4 +- src/FbTk/Command.hh | 11 +--- src/FbTk/ImageControl.cc | 2 +- src/FbTk/LogicCommands.cc | 56 +++++++++--------- src/FbTk/LogicCommands.hh | 56 +++++++++--------- src/FbTk/MacroCommand.cc | 20 +++---- src/FbTk/MacroCommand.hh | 12 ++-- src/FbTk/Menu.cc | 6 +- src/FbTk/Menu.hh | 4 +- src/FbTk/MenuItem.cc | 2 +- src/FbTk/MenuItem.hh | 10 ++-- src/FbTk/MultiButtonMenuItem.cc | 4 +- src/FbTk/MultiButtonMenuItem.hh | 4 +- src/FbTk/ObjectRegistry.hh | 114 ++++-------------------------------- src/FbTk/SimpleCommand.hh | 16 +----- src/FbTk/Timer.cc | 14 ++--- src/FbTk/Timer.hh | 12 ++-- src/FbWinFrame.hh | 2 +- src/FocusModelMenuItem.hh | 6 +- src/IconbarTool.cc | 20 +++---- src/Keys.cc | 6 +- src/LayerMenu.cc | 2 +- src/LayerMenu.hh | 2 +- src/MenuCreator.cc | 16 +++--- src/Remember.cc | 2 +- src/RootCmdMenuItem.cc | 2 +- src/Screen.cc | 24 ++++---- src/SendToMenu.cc | 6 +- src/Slit.cc | 30 +++++----- src/StyleMenuItem.cc | 2 +- src/ToolFactory.cc | 10 ++-- src/Toolbar.cc | 14 ++--- src/Window.cc | 8 +-- src/WindowCmd.hh | 2 +- src/WorkspaceCmd.cc | 94 +++++++++++++++--------------- src/WorkspaceCmd.hh | 64 ++++++++++----------- src/WorkspaceMenu.cc | 18 +++--- src/Xinerama.hh | 4 +- src/fluxbox.cc | 4 +- 49 files changed, 430 insertions(+), 543 deletions(-) diff --git a/src/AttentionNoticeHandler.cc b/src/AttentionNoticeHandler.cc index f8aafde..999b9d4 100644 --- a/src/AttentionNoticeHandler.cc +++ b/src/AttentionNoticeHandler.cc @@ -30,7 +30,7 @@ #include "FbTk/Resource.hh" namespace { -class ToggleFrameFocusCmd: public FbTk::Command { +class ToggleFrameFocusCmd: public FbTk::Command<void> { public: ToggleFrameFocusCmd(Focusable &client): m_client(client), @@ -82,7 +82,7 @@ void AttentionNoticeHandler::addAttention(Focusable &client) { timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = **timeout_res * 1000; - RefCount<Command> cmd(new ToggleFrameFocusCmd(client)); + RefCount<Command<void> > cmd(new ToggleFrameFocusCmd(client)); timer->setCommand(cmd); timer->setTimeout(timeout); timer->fireOnce(false); // will repeat until window has focus diff --git a/src/ClockTool.cc b/src/ClockTool.cc index adc6adc..ae78266 100644 --- a/src/ClockTool.cc +++ b/src/ClockTool.cc @@ -24,7 +24,7 @@ #include "ToolTheme.hh" #include "Screen.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "CommandDialog.hh" #include "fluxbox.hh" @@ -116,7 +116,7 @@ private: ClockTool &m_tool; }; -class EditClockFormatCmd: public FbTk::Command { +class EditClockFormatCmd: public FbTk::Command<void> { public: void execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); @@ -126,7 +126,7 @@ public: CommandDialog *dialog = new CommandDialog(*screen, "Edit Clock Format", "SetResourceValue " + resourcename + " "); - FbTk::RefCount<FbTk::Command> cmd(FbTk::ObjectRegistry<FbTk::Command>::instance().parse("reconfigure")); + FbTk::RefCount<FbTk::Command<void> > cmd(FbTk::CommandParser<void>::instance().parse("reconfigure")); dialog->setPostCommand(cmd); dialog->setText(screen->resourceManager().resourceValue(resourcename)); dialog->show(); @@ -160,7 +160,7 @@ ClockTool::ClockTool(const FbTk::FbWindow &parent, // if nothing has changed, it wont update the graphics m_timer.setInterval(1); // m_timer.setTimeout(delay); // don't need to set timeout on interval timer - FbTk::RefCount<FbTk::Command> update_graphic(new FbTk::SimpleCommand<ClockTool>(*this, + FbTk::RefCount<FbTk::Command<void> > update_graphic(new FbTk::SimpleCommand<ClockTool>(*this, &ClockTool::updateTime)); m_timer.setCommand(update_graphic); m_timer.start(); @@ -168,11 +168,11 @@ ClockTool::ClockTool(const FbTk::FbWindow &parent, m_button.setGC(m_theme->textGC()); // setup menu - FbTk::RefCount<FbTk::Command> saverc(FbTk::ObjectRegistry<FbTk::Command>::instance().parse("saverc")); + FbTk::RefCount<FbTk::Command<void> > saverc(FbTk::CommandParser<void>::instance().parse("saverc")); FbTk::MenuItem *item = new ClockMenuItem(*this); item->setCommand(saverc); menu.insert(item); - FbTk::RefCount<FbTk::Command> editformat_cmd(new EditClockFormatCmd()); + FbTk::RefCount<FbTk::Command<void> > editformat_cmd(new EditClockFormatCmd()); menu.insert(_FB_XTEXT(Toolbar, ClockEditFormat, "Edit Clock Format", "edit Clock Format") , editformat_cmd); diff --git a/src/CommandDialog.cc b/src/CommandDialog.cc index 1c9005e..346a1a4 100644 --- a/src/CommandDialog.cc +++ b/src/CommandDialog.cc @@ -25,7 +25,7 @@ #include "Screen.hh" #include "FbWinFrameTheme.hh" #include "WinClient.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "FocusControl.hh" #include "fluxbox.hh" @@ -136,8 +136,8 @@ void CommandDialog::keyPressEvent(XKeyEvent &event) { if (ks == XK_Return) { hide(); // hide and return focus to a FluxboxWindow - // create command from line - auto_ptr<FbTk::Command> cmd(FbTk::ObjectRegistry<FbTk::Command>::instance().parse(m_precommand + m_textbox.text())); + // create Command<void> from line + auto_ptr<FbTk::Command<void> > cmd(FbTk::CommandParser<void>::instance().parse(m_precommand + m_textbox.text())); if (cmd.get()) cmd->execute(); // post execute @@ -167,8 +167,8 @@ void CommandDialog::tabComplete() { return; } - FbTk::ObjectRegistry<FbTk::Command>::CreatorMap::const_iterator it = FbTk::ObjectRegistry<FbTk::Command>::instance().creatorMap().begin(); - const FbTk::ObjectRegistry<FbTk::Command>::CreatorMap::const_iterator it_end = FbTk::ObjectRegistry<FbTk::Command>::instance().creatorMap().end(); + FbTk::ObjectRegistry<FbTk::CommandParser<void>::Creator *>::CreatorMap::const_iterator it = FbTk::ObjectRegistry<FbTk::CommandParser<void>::Creator *>::instance().creatorMap().begin(); + const FbTk::ObjectRegistry<FbTk::CommandParser<void>::Creator *>::CreatorMap::const_iterator it_end = FbTk::ObjectRegistry<FbTk::CommandParser<void>::Creator *>::instance().creatorMap().end(); vector<string> matches; for (; it != it_end; ++it) { if ((*it).first.find(prefix) == 0) { diff --git a/src/CommandDialog.hh b/src/CommandDialog.hh index 9f102b9..bd0a6df 100644 --- a/src/CommandDialog.hh +++ b/src/CommandDialog.hh @@ -44,10 +44,10 @@ public: /// Sets the entry text. void setText(const std::string &text); /** - * Sets the command to be execute after the command is done. + * Sets the command to be executed after the command is done. * @param postcommand the command. */ - void setPostCommand(FbTk::RefCount<FbTk::Command> &postcommand) { + void setPostCommand(FbTk::RefCount<FbTk::Command<void> > &postcommand) { m_postcommand = postcommand; } void show(); @@ -71,11 +71,13 @@ private: FbTk::TextBox m_textbox; //< entry field FbTk::TextButton m_label; //< text in the titlebar FbTk::GContext m_gc; - FbTk::RefCount<FbTk::Command> m_postcommand; ///< command to do after the first command was issued (like reconfigure) + /// command to do after the first command was issued (like reconfigure) + FbTk::RefCount<FbTk::Command<void> > m_postcommand; BScreen &m_screen; int m_move_x, m_move_y; Pixmap m_pixmap; - const std::string m_precommand; ///< command to be used before the text (usefull for setting workspace name) + /// command to be used before the text (usefull for setting workspace name) + const std::string m_precommand; }; diff --git a/src/CurrentWindowCmd.cc b/src/CurrentWindowCmd.cc index f08112b..4c027d9 100644 --- a/src/CurrentWindowCmd.cc +++ b/src/CurrentWindowCmd.cc @@ -29,7 +29,7 @@ #include "WinClient.hh" #include "FocusControl.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "FbTk/stringstream.hh" #include "FbTk/StringUtil.hh" @@ -37,7 +37,7 @@ using FbTk::Command; namespace { -FbTk::Command *createCurrentWindowCmd(const std::string &command, +FbTk::Command<void> *createCurrentWindowCmd(const std::string &command, const std::string &args, bool trusted) { if (command == "minimizewindow" || command == "minimize" || command == "iconify") return new CurrentWindowCmd(&FluxboxWindow::iconify); @@ -86,35 +86,35 @@ FbTk::Command *createCurrentWindowCmd(const std::string &command, return 0; } -REGISTER_OBJECT_PARSER(minimizewindow, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(minimize, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(iconify, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(maximizewindow, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(maximize, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(maximizevertical, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(maximizehorizontal, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(raise, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(raiselayer, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(lower, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(lowerlayer, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(activate, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(focus, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(close, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(killwindow, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(kill, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(shade, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(shadewindow, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(shadeon, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(shadeoff, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(stick, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(stickwindow, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(toggledecor, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(nexttab, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(prevtab, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(movetableft, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(movetabright, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(detachclient, createCurrentWindowCmd, Command); -REGISTER_OBJECT_PARSER(windowmenu, createCurrentWindowCmd, Command); +REGISTER_COMMAND_PARSER(minimizewindow, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(minimize, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(iconify, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(maximizewindow, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(maximize, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(maximizevertical, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(maximizehorizontal, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(raise, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(raiselayer, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(lower, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(lowerlayer, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(activate, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(focus, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(close, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(killwindow, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(kill, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(shade, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(shadewindow, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(shadeon, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(shadeoff, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(stick, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(stickwindow, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(toggledecor, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(nexttab, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(prevtab, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(movetableft, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(movetabright, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(detachclient, createCurrentWindowCmd, void); +REGISTER_COMMAND_PARSER(windowmenu, createCurrentWindowCmd, void); }; // end anonymous namespace @@ -130,7 +130,7 @@ FluxboxWindow &WindowHelperCmd::fbwindow() { return *FocusControl::focusedFbWindow(); } -bool WindowHelperBoolCmd::bool_execute() { +bool WindowHelperBoolCmd::execute() { if (WindowCmd<void>::window() || FocusControl::focusedFbWindow()) return real_execute(); return false; @@ -156,7 +156,7 @@ void CurrentWindowCmd::real_execute() { namespace { -FbTk::Command *parseIntCmd(const string &command, const string &args, +FbTk::Command<void> *parseIntCmd(const string &command, const string &args, bool trusted) { int num = (command == "sethead" ? 0 : 1); FbTk_istringstream iss(args.c_str()); @@ -181,14 +181,14 @@ FbTk::Command *parseIntCmd(const string &command, const string &args, return 0; } -REGISTER_OBJECT_PARSER(sethead, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(tab, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(sendtonextworkspace, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(sendtoprevworkspace, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(taketonextworkspace, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(taketoprevworkspace, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(sendtoworkspace, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(taketoworkspace, parseIntCmd, Command); +REGISTER_COMMAND_PARSER(sethead, parseIntCmd, void); +REGISTER_COMMAND_PARSER(tab, parseIntCmd, void); +REGISTER_COMMAND_PARSER(sendtonextworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(sendtoprevworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(taketonextworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(taketoprevworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(sendtoworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(taketoworkspace, parseIntCmd, void); }; // end anonymous namespace @@ -251,7 +251,7 @@ void GoToTabCmd::real_execute() { (*it)->focus(); } -REGISTER_OBJECT(startmoving, StartMovingCmd, Command); +REGISTER_COMMAND(startmoving, StartMovingCmd, void); void StartMovingCmd::real_execute() { const XEvent &last = Fluxbox::instance()->lastEvent(); @@ -261,7 +261,7 @@ void StartMovingCmd::real_execute() { } } -FbTk::Command *StartResizingCmd::parse(const string &cmd, const string &args, +FbTk::Command<void> *StartResizingCmd::parse(const string &cmd, const string &args, bool trusted) { FluxboxWindow::ResizeModel mode = FluxboxWindow::DEFAULTRESIZE; std::vector<string> tokens; @@ -294,7 +294,7 @@ FbTk::Command *StartResizingCmd::parse(const string &cmd, const string &args, return new StartResizingCmd(mode); } -REGISTER_OBJECT_PARSER(startresizing, StartResizingCmd::parse, Command); +REGISTER_COMMAND_PARSER(startresizing, StartResizingCmd::parse, void); void StartResizingCmd::real_execute() { const XEvent &last = Fluxbox::instance()->lastEvent(); @@ -308,7 +308,7 @@ void StartResizingCmd::real_execute() { } } -REGISTER_OBJECT(starttabbing, StartTabbingCmd, Command); +REGISTER_COMMAND(starttabbing, StartTabbingCmd, void); void StartTabbingCmd::real_execute() { const XEvent &last = Fluxbox::instance()->lastEvent(); @@ -318,7 +318,7 @@ void StartTabbingCmd::real_execute() { } } -FbTk::Command *MoveCmd::parse(const string &command, const string &args, +FbTk::Command<void> *MoveCmd::parse(const string &command, const string &args, bool trusted) { FbTk_istringstream is(args.c_str()); int dx = 0, dy = 0; @@ -339,11 +339,11 @@ FbTk::Command *MoveCmd::parse(const string &command, const string &args, return new MoveCmd(dx, dy); } -REGISTER_OBJECT_PARSER(move, MoveCmd::parse, Command); -REGISTER_OBJECT_PARSER(moveright, MoveCmd::parse, Command); -REGISTER_OBJECT_PARSER(moveleft, MoveCmd::parse, Command); -REGISTER_OBJECT_PARSER(moveup, MoveCmd::parse, Command); -REGISTER_OBJECT_PARSER(movedown, MoveCmd::parse, Command); +REGISTER_COMMAND_PARSER(move, MoveCmd::parse, void); +REGISTER_COMMAND_PARSER(moveright, MoveCmd::parse, void); +REGISTER_COMMAND_PARSER(moveleft, MoveCmd::parse, void); +REGISTER_COMMAND_PARSER(moveup, MoveCmd::parse, void); +REGISTER_COMMAND_PARSER(movedown, MoveCmd::parse, void); MoveCmd::MoveCmd(const int step_size_x, const int step_size_y) : m_step_size_x(step_size_x), m_step_size_y(step_size_y) { } @@ -354,7 +354,7 @@ void MoveCmd::real_execute() { fbwindow().y() + m_step_size_y); } -FbTk::Command *ResizeCmd::parse(const string &command, const string &args, +FbTk::Command<void> *ResizeCmd::parse(const string &command, const string &args, bool trusted) { FbTk_istringstream is(args.c_str()); int dx = 0, dy = 0; @@ -371,10 +371,10 @@ FbTk::Command *ResizeCmd::parse(const string &command, const string &args, return new ResizeCmd(dx, dy); } -REGISTER_OBJECT_PARSER(resize, ResizeCmd::parse, Command); -REGISTER_OBJECT_PARSER(resizeto, ResizeCmd::parse, Command); -REGISTER_OBJECT_PARSER(resizehorizontal, ResizeCmd::parse, Command); -REGISTER_OBJECT_PARSER(resizevertical, ResizeCmd::parse, Command); +REGISTER_COMMAND_PARSER(resize, ResizeCmd::parse, void); +REGISTER_COMMAND_PARSER(resizeto, ResizeCmd::parse, void); +REGISTER_COMMAND_PARSER(resizehorizontal, ResizeCmd::parse, void); +REGISTER_COMMAND_PARSER(resizevertical, ResizeCmd::parse, void); ResizeCmd::ResizeCmd(const int step_size_x, const int step_size_y) : m_step_size_x(step_size_x), m_step_size_y(step_size_y) { } @@ -390,7 +390,7 @@ void ResizeCmd::real_execute() { fbwindow().resize(w, h); } -FbTk::Command *MoveToCmd::parse(const string &cmd, const string &args, +FbTk::Command<void> *MoveToCmd::parse(const string &cmd, const string &args, bool trusted) { typedef std::vector<string> StringTokens; StringTokens tokens; @@ -435,7 +435,7 @@ FbTk::Command *MoveToCmd::parse(const string &cmd, const string &args, } -REGISTER_OBJECT_PARSER(moveto, MoveToCmd::parse, Command); +REGISTER_COMMAND_PARSER(moveto, MoveToCmd::parse, void); MoveToCmd::MoveToCmd(const int step_size_x, const int step_size_y, const unsigned int refc) : m_step_size_x(step_size_x), m_step_size_y(step_size_y), m_refc(refc) { } @@ -472,14 +472,14 @@ void ResizeToCmd::real_execute() { fbwindow().resize(m_step_size_x, m_step_size_y); } -REGISTER_OBJECT(fullscreen, FullscreenCmd, Command); +REGISTER_COMMAND(fullscreen, FullscreenCmd, void); FullscreenCmd::FullscreenCmd() { } void FullscreenCmd::real_execute() { fbwindow().setFullscreen(!fbwindow().isFullscreen()); } -FbTk::Command *SetAlphaCmd::parse(const string &command, const string &args, +FbTk::Command<void> *SetAlphaCmd::parse(const string &command, const string &args, bool trusted) { typedef std::vector<string> StringTokens; StringTokens tokens; @@ -504,7 +504,7 @@ FbTk::Command *SetAlphaCmd::parse(const string &command, const string &args, return new SetAlphaCmd(focused, relative, unfocused, un_rel); } -REGISTER_OBJECT_PARSER(setalpha, SetAlphaCmd::parse, Command); +REGISTER_COMMAND_PARSER(setalpha, SetAlphaCmd::parse, void); SetAlphaCmd::SetAlphaCmd(int focused, bool relative, int unfocused, bool un_relative) : @@ -536,7 +536,7 @@ void SetAlphaCmd::real_execute() { fbwindow().setUnfocusedAlpha(m_unfocus); } -REGISTER_OBJECT_WITH_ARGS_NSBASE(matches, MatchCmd, FbTk, BoolCommand); +REGISTER_COMMAND_WITH_ARGS(matches, MatchCmd, bool); bool MatchCmd::real_execute() { return m_pat.match(winclient()); diff --git a/src/CurrentWindowCmd.hh b/src/CurrentWindowCmd.hh index 6b4359a..157855c 100644 --- a/src/CurrentWindowCmd.hh +++ b/src/CurrentWindowCmd.hh @@ -29,7 +29,7 @@ /// helper class for window commands /// calls real_execute if there's a focused window or a window in button press/release window -class WindowHelperCmd: public FbTk::Command { +class WindowHelperCmd: public FbTk::Command<void> { public: explicit WindowHelperCmd() { } @@ -40,11 +40,11 @@ protected: virtual void real_execute() = 0; }; -class WindowHelperBoolCmd: public FbTk::BoolCommand { +class WindowHelperBoolCmd: public FbTk::Command<bool> { public: explicit WindowHelperBoolCmd() { } - bool bool_execute(); + bool execute(); protected: FluxboxWindow &fbwindow(); @@ -149,7 +149,7 @@ protected: class StartResizingCmd: public WindowHelperCmd { public: explicit StartResizingCmd(FluxboxWindow::ResizeModel mode):m_mode(mode) { } - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); protected: void real_execute(); @@ -169,7 +169,7 @@ protected: class MoveCmd: public WindowHelperCmd { public: explicit MoveCmd(const int step_size_x, const int step_size_y); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); protected: void real_execute(); @@ -183,7 +183,7 @@ private: class ResizeCmd: public WindowHelperCmd{ public: explicit ResizeCmd(int step_size_x, int step_size_y); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); protected: void real_execute(); @@ -206,7 +206,7 @@ public: IGNORE_Y = 1 << 9 }; explicit MoveToCmd(const int step_size_x, const int step_size_y, const unsigned int refc); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); protected: void real_execute(); @@ -238,7 +238,7 @@ protected: class SetAlphaCmd: public WindowHelperCmd { public: SetAlphaCmd(int focus, bool rel, int unfocus, bool unrel); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); protected: void real_execute(); diff --git a/src/FbCommands.cc b/src/FbCommands.cc index 1569704..5e7f6dc 100644 --- a/src/FbCommands.cc +++ b/src/FbCommands.cc @@ -31,7 +31,7 @@ #include "FbTk/Theme.hh" #include "FbTk/Menu.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "FbTk/StringUtil.hh" #include "FbTk/stringstream.hh" @@ -123,9 +123,9 @@ namespace FbCommands { using FbTk::Command; -REGISTER_UNTRUSTED_OBJECT_WITH_ARGS(exec, FbCommands::ExecuteCmd, Command); -REGISTER_UNTRUSTED_OBJECT_WITH_ARGS(execute, FbCommands::ExecuteCmd, Command); -REGISTER_UNTRUSTED_OBJECT_WITH_ARGS(execcommand, FbCommands::ExecuteCmd, Command); +REGISTER_UNTRUSTED_COMMAND_WITH_ARGS(exec, FbCommands::ExecuteCmd, void); +REGISTER_UNTRUSTED_COMMAND_WITH_ARGS(execute, FbCommands::ExecuteCmd, void); +REGISTER_UNTRUSTED_COMMAND_WITH_ARGS(execcommand, FbCommands::ExecuteCmd, void); ExecuteCmd::ExecuteCmd(const string &cmd, int screen_num):m_cmd(cmd), m_screen_num(screen_num) { @@ -176,7 +176,7 @@ int ExecuteCmd::run() { return pid; // compiler happy -> we are happy ;) } -FbTk::Command *ExportCmd::parse(const string &command, const string &args, +FbTk::Command<void> *ExportCmd::parse(const string &command, const string &args, bool trusted) { string name = args; FbTk::StringUtil::removeFirstWhitespace(name); @@ -193,9 +193,9 @@ FbTk::Command *ExportCmd::parse(const string &command, const string &args, return new ExportCmd(name, value); } -REGISTER_OBJECT_PARSER(setenv, ExportCmd::parse, Command); -REGISTER_OBJECT_PARSER(export, ExportCmd::parse, Command); -REGISTER_OBJECT_PARSER(setresourcevalue, ExportCmd::parse, Command); +REGISTER_COMMAND_PARSER(setenv, ExportCmd::parse, void); +REGISTER_COMMAND_PARSER(export, ExportCmd::parse, void); +REGISTER_COMMAND_PARSER(setresourcevalue, ExportCmd::parse, void); ExportCmd::ExportCmd(const string& name, const string& value) : m_name(name), m_value(value) { @@ -233,20 +233,20 @@ void ExportCmd::execute() { } } -REGISTER_OBJECT(exit, FbCommands::ExitFluxboxCmd, Command); -REGISTER_OBJECT(quit, FbCommands::ExitFluxboxCmd, Command); +REGISTER_COMMAND(exit, FbCommands::ExitFluxboxCmd, void); +REGISTER_COMMAND(quit, FbCommands::ExitFluxboxCmd, void); void ExitFluxboxCmd::execute() { Fluxbox::instance()->shutdown(); } -REGISTER_OBJECT(saverc, FbCommands::SaveResources, Command); +REGISTER_COMMAND(saverc, FbCommands::SaveResources, void); void SaveResources::execute() { Fluxbox::instance()->save_rc(); } -REGISTER_UNTRUSTED_OBJECT_WITH_ARGS(restart, FbCommands::RestartFluxboxCmd, Command); +REGISTER_UNTRUSTED_COMMAND_WITH_ARGS(restart, FbCommands::RestartFluxboxCmd, void); RestartFluxboxCmd::RestartFluxboxCmd(const string &cmd):m_cmd(cmd){ } @@ -258,21 +258,21 @@ void RestartFluxboxCmd::execute() { Fluxbox::instance()->restart(m_cmd.c_str()); } -REGISTER_OBJECT(reconfigure, FbCommands::ReconfigureFluxboxCmd, Command); -REGISTER_OBJECT(reconfig, FbCommands::ReconfigureFluxboxCmd, Command); +REGISTER_COMMAND(reconfigure, FbCommands::ReconfigureFluxboxCmd, void); +REGISTER_COMMAND(reconfig, FbCommands::ReconfigureFluxboxCmd, void); void ReconfigureFluxboxCmd::execute() { Fluxbox::instance()->reconfigure(); } -REGISTER_OBJECT(reloadstyle, FbCommands::ReloadStyleCmd, Command); +REGISTER_COMMAND(reloadstyle, FbCommands::ReloadStyleCmd, void); void ReloadStyleCmd::execute() { SetStyleCmd cmd(Fluxbox::instance()->getStyleFilename()); cmd.execute(); } -REGISTER_OBJECT_WITH_ARGS(setstyle, FbCommands::SetStyleCmd, Command); +REGISTER_COMMAND_WITH_ARGS(setstyle, FbCommands::SetStyleCmd, void); SetStyleCmd::SetStyleCmd(const string &filename):m_filename(filename) { @@ -285,7 +285,7 @@ void SetStyleCmd::execute() { Fluxbox::instance()->getStyleOverlayFilename()); } -REGISTER_OBJECT_WITH_ARGS(keymode, FbCommands::KeyModeCmd, Command); +REGISTER_COMMAND_WITH_ARGS(keymode, FbCommands::KeyModeCmd, void); KeyModeCmd::KeyModeCmd(const string &arguments):m_keymode(arguments),m_end_args("None Escape") { string::size_type second_pos = m_keymode.find_first_of(" \t", 0); @@ -302,13 +302,13 @@ void KeyModeCmd::execute() { Fluxbox::instance()->keys()->keyMode(m_keymode); } -REGISTER_OBJECT(hidemenus, FbCommands::HideMenuCmd, Command); +REGISTER_COMMAND(hidemenus, FbCommands::HideMenuCmd, void); void HideMenuCmd::execute() { FbTk::Menu::hideShownMenu(); } -FbTk::Command *ShowClientMenuCmd::parse(const string &command, +FbTk::Command<void> *ShowClientMenuCmd::parse(const string &command, const string &args, bool trusted) { int opts; string pat; @@ -316,7 +316,7 @@ FbTk::Command *ShowClientMenuCmd::parse(const string &command, return new ShowClientMenuCmd(opts, pat); } -REGISTER_OBJECT_PARSER(clientmenu, ShowClientMenuCmd::parse, Command); +REGISTER_COMMAND_PARSER(clientmenu, ShowClientMenuCmd::parse, void); void ShowClientMenuCmd::execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); @@ -339,7 +339,7 @@ void ShowClientMenuCmd::execute() { ::showMenu(*screen, **m_menu); } -REGISTER_OBJECT_WITH_ARGS(custommenu, FbCommands::ShowCustomMenuCmd, Command); +REGISTER_COMMAND_WITH_ARGS(custommenu, FbCommands::ShowCustomMenuCmd, void); ShowCustomMenuCmd::ShowCustomMenuCmd(const string &arguments) : custom_menu_file(arguments) {} @@ -354,7 +354,7 @@ void ShowCustomMenuCmd::execute() { ::showMenu(*screen, **m_menu); } -REGISTER_OBJECT(rootmenu, FbCommands::ShowRootMenuCmd, Command); +REGISTER_COMMAND(rootmenu, FbCommands::ShowRootMenuCmd, void); void ShowRootMenuCmd::execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); @@ -364,7 +364,7 @@ void ShowRootMenuCmd::execute() { ::showMenu(*screen, screen->rootMenu()); } -REGISTER_OBJECT(workspacemenu, FbCommands::ShowWorkspaceMenuCmd, Command); +REGISTER_COMMAND(workspacemenu, FbCommands::ShowWorkspaceMenuCmd, void); void ShowWorkspaceMenuCmd::execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); @@ -374,7 +374,7 @@ void ShowWorkspaceMenuCmd::execute() { ::showMenu(*screen, screen->workspaceMenu()); } -REGISTER_OBJECT_WITH_ARGS(setworkspacename, FbCommands::SetWorkspaceNameCmd, Command); +REGISTER_COMMAND_WITH_ARGS(setworkspacename, FbCommands::SetWorkspaceNameCmd, void); SetWorkspaceNameCmd::SetWorkspaceNameCmd(const string &name, int spaceid): m_name(name), m_workspace(spaceid) { @@ -403,7 +403,7 @@ void SetWorkspaceNameCmd::execute() { Fluxbox::instance()->save_rc(); } -REGISTER_OBJECT(setworkspacenamedialog, FbCommands::WorkspaceNameDialogCmd, Command); +REGISTER_COMMAND(setworkspacenamedialog, FbCommands::WorkspaceNameDialogCmd, void); void WorkspaceNameDialogCmd::execute() { @@ -416,7 +416,7 @@ void WorkspaceNameDialogCmd::execute() { win->show(); } -REGISTER_OBJECT(commanddialog, FbCommands::CommandDialogCmd, Command); +REGISTER_COMMAND(commanddialog, FbCommands::CommandDialogCmd, void); void CommandDialogCmd::execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); @@ -443,7 +443,7 @@ void SetResourceValueCmd::execute() { Fluxbox::instance()->save_rc(); } -REGISTER_OBJECT(setresourcevaluedialog, FbCommands::SetResourceValueDialogCmd, Command); +REGISTER_COMMAND(setresourcevaluedialog, FbCommands::SetResourceValueDialogCmd, void); void SetResourceValueDialogCmd::execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); @@ -454,7 +454,7 @@ void SetResourceValueDialogCmd::execute() { win->show(); }; -REGISTER_UNTRUSTED_OBJECT_WITH_ARGS(bindkey, FbCommands::BindKeyCmd, Command); +REGISTER_UNTRUSTED_COMMAND_WITH_ARGS(bindkey, FbCommands::BindKeyCmd, void); BindKeyCmd::BindKeyCmd(const string &keybind):m_keybind(keybind) { } @@ -469,7 +469,7 @@ void BindKeyCmd::execute() { } } -FbTk::Command *DeiconifyCmd::parse(const string &command, const string &args, +FbTk::Command<void> *DeiconifyCmd::parse(const string &command, const string &args, bool trusted) { FbTk_istringstream iss(args.c_str()); string mode; @@ -502,7 +502,7 @@ FbTk::Command *DeiconifyCmd::parse(const string &command, const string &args, return new DeiconifyCmd(DeiconifyCmd::LASTWORKSPACE, dest); } -REGISTER_OBJECT_PARSER(deiconify, DeiconifyCmd::parse, Command); +REGISTER_COMMAND_PARSER(deiconify, DeiconifyCmd::parse, void); DeiconifyCmd::DeiconifyCmd(Mode mode, Destination dest) : m_mode(mode), m_dest(dest) { } diff --git a/src/FbCommands.hh b/src/FbCommands.hh index d784a75..f9c33af 100644 --- a/src/FbCommands.hh +++ b/src/FbCommands.hh @@ -34,7 +34,7 @@ namespace FbCommands { /// executes a system command -class ExecuteCmd: public FbTk::Command { +class ExecuteCmd: public FbTk::Command<void> { public: ExecuteCmd(const std::string &cmd, int screen_num = -1); void execute(); @@ -48,11 +48,11 @@ private: }; /// sets environment -class ExportCmd : public FbTk::Command { +class ExportCmd : public FbTk::Command<void> { public: ExportCmd(const std::string& name, const std::string& value); void execute(); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); private: std::string m_name; @@ -60,19 +60,19 @@ private: }; /// exit fluxbox -class ExitFluxboxCmd: public FbTk::Command { +class ExitFluxboxCmd: public FbTk::Command<void> { public: void execute(); }; /// saves resources -class SaveResources: public FbTk::Command { +class SaveResources: public FbTk::Command<void> { public: void execute(); }; /// restarts fluxbox -class RestartFluxboxCmd: public FbTk::Command { +class RestartFluxboxCmd: public FbTk::Command<void> { public: RestartFluxboxCmd(const std::string &cmd); void execute(); @@ -81,17 +81,17 @@ private: }; /// reconfigures fluxbox -class ReconfigureFluxboxCmd: public FbTk::Command { +class ReconfigureFluxboxCmd: public FbTk::Command<void> { public: void execute(); }; -class ReloadStyleCmd: public FbTk::Command { +class ReloadStyleCmd: public FbTk::Command<void> { public: void execute(); }; -class SetStyleCmd: public FbTk::Command { +class SetStyleCmd: public FbTk::Command<void> { public: explicit SetStyleCmd(const std::string &filename); void execute(); @@ -99,7 +99,7 @@ private: std::string m_filename; }; -class KeyModeCmd: public FbTk::Command { +class KeyModeCmd: public FbTk::Command<void> { public: explicit KeyModeCmd(const std::string &arguments); void execute(); @@ -108,17 +108,17 @@ private: std::string m_end_args; }; -class HideMenuCmd: public FbTk::Command { +class HideMenuCmd: public FbTk::Command<void> { public: void execute(); }; -class ShowClientMenuCmd: public FbTk::Command { +class ShowClientMenuCmd: public FbTk::Command<void> { public: ShowClientMenuCmd(int option, std::string &pat): m_option(option|FocusableList::LIST_GROUPS), m_pat(pat.c_str()) { } void execute(); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); private: const int m_option; @@ -127,7 +127,7 @@ private: FbTk::RefCount<ClientMenu> m_menu; }; -class ShowCustomMenuCmd: public FbTk::Command { +class ShowCustomMenuCmd: public FbTk::Command<void> { public: explicit ShowCustomMenuCmd(const std::string &arguments); void execute(); @@ -136,17 +136,17 @@ private: FbTk::RefCount<FbTk::Menu> m_menu; }; -class ShowRootMenuCmd: public FbTk::Command { +class ShowRootMenuCmd: public FbTk::Command<void> { public: void execute(); }; -class ShowWorkspaceMenuCmd: public FbTk::Command { +class ShowWorkspaceMenuCmd: public FbTk::Command<void> { public: void execute(); }; -class SetWorkspaceNameCmd: public FbTk::Command { +class SetWorkspaceNameCmd: public FbTk::Command<void> { public: SetWorkspaceNameCmd(const std::string &name, int spaceid = -1); void execute(); @@ -155,18 +155,18 @@ private: int m_workspace; }; -class WorkspaceNameDialogCmd: public FbTk::Command { +class WorkspaceNameDialogCmd: public FbTk::Command<void> { public: void execute(); }; -class CommandDialogCmd: public FbTk::Command { +class CommandDialogCmd: public FbTk::Command<void> { public: void execute(); }; -class SetResourceValueCmd: public FbTk::Command { +class SetResourceValueCmd: public FbTk::Command<void> { public: SetResourceValueCmd(const std::string &resourcename, const std::string &value); void execute(); @@ -175,12 +175,12 @@ private: const std::string m_value; }; -class SetResourceValueDialogCmd: public FbTk::Command { +class SetResourceValueDialogCmd: public FbTk::Command<void> { public: void execute(); }; -class BindKeyCmd: public FbTk::Command { +class BindKeyCmd: public FbTk::Command<void> { public: BindKeyCmd(const std::string &keybind); void execute(); @@ -189,7 +189,7 @@ private: }; /// deiconifies iconified windows -class DeiconifyCmd: public FbTk::Command { +class DeiconifyCmd: public FbTk::Command<void> { public: enum Mode { LAST, @@ -207,7 +207,7 @@ public: DeiconifyCmd(Mode mode= LASTWORKSPACE, Destination dest= CURRENT); void execute(); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); private: Mode m_mode; diff --git a/src/FbTk/BoolMenuItem.hh b/src/FbTk/BoolMenuItem.hh index 7390066..47d6db4 100644 --- a/src/FbTk/BoolMenuItem.hh +++ b/src/FbTk/BoolMenuItem.hh @@ -32,7 +32,7 @@ class Accessor<class T>; class BoolMenuItem: public FbTk::MenuItem { public: BoolMenuItem(const FbTk::FbString &label, Accessor<bool> &item, - FbTk::RefCount<FbTk::Command> &cmd): + FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(label, cmd), m_item(item) { FbTk::MenuItem::setSelected(m_item); setToggleItem(true); diff --git a/src/FbTk/Button.cc b/src/FbTk/Button.cc index 25f9a5c..bcdc90e 100644 --- a/src/FbTk/Button.cc +++ b/src/FbTk/Button.cc @@ -62,7 +62,7 @@ Button::~Button() { } } -void Button::setOnClick(RefCount<Command> &cmd, int button) { +void Button::setOnClick(RefCount<Command<void> > &cmd, int button) { // we only handle buttons 1 to 5 if (button > 5 || button == 0) return; diff --git a/src/FbTk/Button.hh b/src/FbTk/Button.hh index d6414b3..bcf909b 100644 --- a/src/FbTk/Button.hh +++ b/src/FbTk/Button.hh @@ -42,7 +42,7 @@ public: virtual ~Button(); /// sets action when the button is clicked with #button mouse btn - void setOnClick(RefCount<Command> &com, int button = 1); + void setOnClick(RefCount<Command<void> > &com, int button = 1); /// sets the pixmap to be viewed when the button is pressed virtual void setPressedPixmap(Pixmap pm); @@ -83,7 +83,7 @@ private: GC m_gc; ///< graphic context for button bool m_pressed; ///< if the button is pressed bool *mark_if_deleted; ///< if the button is deleted and this is set, make it true - RefCount<Command> m_onclick[5]; ///< what to do when this button is clicked with button num + RefCount<Command<void> > m_onclick[5]; ///< what to do when this button is clicked with button num }; } // namespace FbTk diff --git a/src/FbTk/Command.hh b/src/FbTk/Command.hh index 5d38cb8..f1eb8f2 100644 --- a/src/FbTk/Command.hh +++ b/src/FbTk/Command.hh @@ -25,18 +25,11 @@ namespace FbTk { /// Interface class for commands +template <typename Ret=void> class Command { public: virtual ~Command() { } - virtual void execute() = 0; -}; - -/// Interface class for boolean commands -class BoolCommand: public Command { -public: - virtual ~BoolCommand() { } - virtual void execute() { bool_execute(); } - virtual bool bool_execute() = 0; + virtual Ret execute() = 0; }; } // end namespace FbTk diff --git a/src/FbTk/ImageControl.cc b/src/FbTk/ImageControl.cc index 394939a..1281b56 100644 --- a/src/FbTk/ImageControl.cc +++ b/src/FbTk/ImageControl.cc @@ -112,7 +112,7 @@ ImageControl::ImageControl(int screen_num, bool dither, if (cache_timeout && s_timed_cache) { m_timer.setTimeout(cache_timeout); - RefCount<Command> clean_cache(new SimpleCommand<ImageControl>(*this, &ImageControl::cleanCache)); + RefCount<Command<void> > clean_cache(new SimpleCommand<ImageControl>(*this, &ImageControl::cleanCache)); m_timer.setCommand(clean_cache); m_timer.start(); } diff --git a/src/FbTk/LogicCommands.cc b/src/FbTk/LogicCommands.cc index fedffe9..3545b61 100644 --- a/src/FbTk/LogicCommands.cc +++ b/src/FbTk/LogicCommands.cc @@ -21,7 +21,7 @@ #include "LogicCommands.hh" -#include "ObjectRegistry.hh" +#include "CommandParser.hh" #include "StringUtil.hh" #include <vector> @@ -39,11 +39,11 @@ M *addCommands(M *macro, const string &args, bool trusted) { std::string blah; std::vector<std::string> cmds; StringUtil::stringTokensBetween(cmds, args, blah, '{', '}'); - RefCount<BoolCommand> cmd(0); + RefCount<Command<bool> > cmd(0); std::vector<std::string>::iterator it = cmds.begin(), it_end = cmds.end(); for (; it != it_end; ++it) { - cmd = ObjectRegistry<BoolCommand>::instance().parse(*it, trusted); + cmd = CommandParser<bool>::instance().parse(*it, trusted); if (*cmd) macro->add(cmd); } @@ -54,14 +54,14 @@ M *addCommands(M *macro, const string &args, bool trusted) { return 0; } -BoolCommand *parseLogicCommand(const string &command, const string &args, +Command<bool> *parseLogicCommand(const string &command, const string &args, bool trusted) { if (command == "not") { - BoolCommand *boolcmd = - ObjectRegistry<BoolCommand>::instance().parse(args, trusted); + Command<bool> *boolcmd = + CommandParser<bool>::instance().parse(args, trusted); if (!boolcmd) return 0; - RefCount<BoolCommand> ref(boolcmd); + RefCount<Command<bool> > ref(boolcmd); return new NotCommand(ref); } else if (command == "and") return addCommands<AndCommand>(new AndCommand(), args, trusted); @@ -72,41 +72,41 @@ BoolCommand *parseLogicCommand(const string &command, const string &args, return 0; } -REGISTER_OBJECT_PARSER(not, parseLogicCommand, BoolCommand); -REGISTER_OBJECT_PARSER(and, parseLogicCommand, BoolCommand); -REGISTER_OBJECT_PARSER(or, parseLogicCommand, BoolCommand); -REGISTER_OBJECT_PARSER(xor, parseLogicCommand, BoolCommand); +REGISTER_COMMAND_PARSER(not, parseLogicCommand, bool); +REGISTER_COMMAND_PARSER(and, parseLogicCommand, bool); +REGISTER_COMMAND_PARSER(or, parseLogicCommand, bool); +REGISTER_COMMAND_PARSER(xor, parseLogicCommand, bool); }; // end anonymous namespace -Command *IfCommand::parse(const std::string &command, const std::string &args, +Command<void> *IfCommand::parse(const std::string &command, const std::string &args, bool trusted) { std::string blah; std::vector<std::string> cmds; - RefCount<BoolCommand> cond(0); - RefCount<Command> t(0), f(0); + RefCount<Command<bool> > cond(0); + RefCount<Command<void> > t(0), f(0); StringUtil::stringTokensBetween(cmds, args, blah, '{', '}'); if (cmds.size() < 3) return 0; - cond = ObjectRegistry<BoolCommand>::instance().parse(cmds[0], trusted); + cond = CommandParser<bool>::instance().parse(cmds[0], trusted); if (*cond == 0) return 0; - t = ObjectRegistry<Command>::instance().parse(cmds[1], trusted); + t = CommandParser<void>::instance().parse(cmds[1], trusted); if (cmds.size() >= 3) - f = ObjectRegistry<Command>::instance().parse(cmds[2], trusted); + f = CommandParser<void>::instance().parse(cmds[2], trusted); if (*t == 0 && *f == 0) return 0; return new IfCommand(cond, t, f); } -REGISTER_OBJECT_PARSER(if, IfCommand::parse, Command); -REGISTER_OBJECT_PARSER(cond, IfCommand::parse, Command); +REGISTER_COMMAND_PARSER(if, IfCommand::parse, void); +REGISTER_COMMAND_PARSER(cond, IfCommand::parse, void); -void OrCommand::add(RefCount<BoolCommand> &com) { +void OrCommand::add(RefCount<Command<bool> > &com) { m_commandlist.push_back(com); } @@ -114,15 +114,15 @@ size_t OrCommand::size() const { return m_commandlist.size(); } -bool OrCommand::bool_execute() { +bool OrCommand::execute() { for (size_t i=0; i < m_commandlist.size(); ++i) { - if (m_commandlist[i]->bool_execute()) + if (m_commandlist[i]->execute()) return true; } return false; } -void AndCommand::add(RefCount<BoolCommand> &com) { +void AndCommand::add(RefCount<Command<bool> > &com) { m_commandlist.push_back(com); } @@ -130,15 +130,15 @@ size_t AndCommand::size() const { return m_commandlist.size(); } -bool AndCommand::bool_execute() { +bool AndCommand::execute() { for (size_t i=0; i < m_commandlist.size(); ++i) { - if (!m_commandlist[i]->bool_execute()) + if (!m_commandlist[i]->execute()) return false; } return true; } -void XorCommand::add(RefCount<BoolCommand> &com) { +void XorCommand::add(RefCount<Command<bool> > &com) { m_commandlist.push_back(com); } @@ -146,10 +146,10 @@ size_t XorCommand::size() const { return m_commandlist.size(); } -bool XorCommand::bool_execute() { +bool XorCommand::execute() { bool ret = false; for (size_t i=0; i < m_commandlist.size(); ++i) - ret ^= m_commandlist[i]->bool_execute(); + ret ^= m_commandlist[i]->execute(); return ret; } diff --git a/src/FbTk/LogicCommands.hh b/src/FbTk/LogicCommands.hh index 96d648e..5e84473 100644 --- a/src/FbTk/LogicCommands.hh +++ b/src/FbTk/LogicCommands.hh @@ -30,66 +30,66 @@ namespace FbTk { -/// executes a boolcommand and uses the result to decide what to do -class IfCommand: public Command { +/// executes a Command<bool> and uses the result to decide what to do +class IfCommand: public Command<void> { public: - IfCommand(RefCount<BoolCommand> &cond, - RefCount<Command> &t, RefCount<Command> &f): + IfCommand(RefCount<Command<bool> > &cond, + RefCount<Command<void> > &t, RefCount<Command<void> > &f): m_cond(cond), m_t(t), m_f(f) { } void execute() { - if (m_cond->bool_execute()) { + if (m_cond->execute()) { if (*m_t) m_t->execute(); } else if (*m_f) m_f->execute(); } - static Command *parse(const std::string &cmd, const std::string &args, + static Command<void> *parse(const std::string &cmd, const std::string &args, bool trusted); private: - RefCount<BoolCommand> m_cond; - RefCount<Command> m_t, m_f; + RefCount<Command<bool> > m_cond; + RefCount<Command<void> > m_t, m_f; }; -/// executes a list of boolcommands until one is true -class OrCommand: public BoolCommand { +/// executes a list of Command<bool>s until one is true +class OrCommand: public Command<bool> { public: - void add(RefCount<BoolCommand> &com); + void add(RefCount<Command<bool> > &com); size_t size() const; - bool bool_execute(); + bool execute(); private: - std::vector<RefCount<BoolCommand> > m_commandlist; + std::vector<RefCount<Command<bool> > > m_commandlist; }; -/// executes a list of boolcommands until one is false -class AndCommand: public BoolCommand { +/// executes a list of Command<bool>s until one is false +class AndCommand: public Command<bool> { public: - void add(RefCount<BoolCommand> &com); + void add(RefCount<Command<bool> > &com); size_t size() const; - bool bool_execute(); + bool execute(); private: - std::vector<RefCount<BoolCommand> > m_commandlist; + std::vector<RefCount<Command<bool> > > m_commandlist; }; -/// executes a list of boolcommands, returning the parity -class XorCommand: public BoolCommand { +/// executes a list of Command<bool>s, returning the parity +class XorCommand: public Command<bool> { public: - void add(RefCount<BoolCommand> &com); + void add(RefCount<Command<bool> > &com); size_t size() const; - bool bool_execute(); + bool execute(); private: - std::vector<RefCount<BoolCommand> > m_commandlist; + std::vector<RefCount<Command<bool> > > m_commandlist; }; -/// executes a boolcommand and returns the negation -class NotCommand: public BoolCommand { +/// executes a Command<bool> and returns the negation +class NotCommand: public Command<bool> { public: - NotCommand(RefCount<BoolCommand> &com): m_command(com) { } - bool bool_execute() { return !m_command->bool_execute(); } + NotCommand(RefCount<Command<bool> > &com): m_command(com) { } + bool execute() { return !m_command->execute(); } private: - RefCount<BoolCommand> m_command; + RefCount<Command<bool> > m_command; }; } // end namespace FbTk diff --git a/src/FbTk/MacroCommand.cc b/src/FbTk/MacroCommand.cc index 63e532f..372cde9 100644 --- a/src/FbTk/MacroCommand.cc +++ b/src/FbTk/MacroCommand.cc @@ -21,7 +21,7 @@ #include "MacroCommand.hh" -#include "ObjectRegistry.hh" +#include "CommandParser.hh" #include "StringUtil.hh" #include <list> @@ -36,11 +36,11 @@ M *addCommands(M *macro, const std::string &args, bool trusted) { std::string blah; std::list<std::string> cmds; StringUtil::stringTokensBetween(cmds, args, blah, '{', '}'); - RefCount<Command> cmd(0); + RefCount<Command<void> > cmd(0); std::list<std::string>::iterator it = cmds.begin(), it_end = cmds.end(); for (; it != it_end; ++it) { - cmd = ObjectRegistry<Command>::instance().parse(*it, trusted); + cmd = CommandParser<void>::instance().parse(*it, trusted); if (*cmd) macro->add(cmd); } @@ -52,21 +52,21 @@ M *addCommands(M *macro, const std::string &args, bool trusted) { return 0; } -Command *parseMacroCmd(const std::string &command, const std::string &args, +Command<void> *parseMacroCmd(const std::string &command, const std::string &args, bool trusted) { if (command == "macrocmd") - return addCommands<MacroCommand>(new MacroCommand, args, trusted); + return addCommands<MacroCommand >(new MacroCommand, args, trusted); else if (command == "togglecmd") - return addCommands<ToggleCommand>(new ToggleCommand, args, trusted); + return addCommands<ToggleCommand >(new ToggleCommand, args, trusted); return 0; } -REGISTER_OBJECT_PARSER(macrocmd, parseMacroCmd, Command); -REGISTER_OBJECT_PARSER(togglecmd, parseMacroCmd, Command); +REGISTER_COMMAND_PARSER(macrocmd, parseMacroCmd, void); +REGISTER_COMMAND_PARSER(togglecmd, parseMacroCmd, void); }; // end anonymous namespace -void MacroCommand::add(RefCount<Command> &com) { +void MacroCommand::add(RefCount<Command<void> > &com) { m_commandlist.push_back(com); } @@ -83,7 +83,7 @@ ToggleCommand::ToggleCommand() { m_state = 0; } -void ToggleCommand::add(RefCount<Command> &com) { +void ToggleCommand::add(RefCount<Command<void> > &com) { m_commandlist.push_back(com); } diff --git a/src/FbTk/MacroCommand.hh b/src/FbTk/MacroCommand.hh index a7d9204..932ecaf 100644 --- a/src/FbTk/MacroCommand.hh +++ b/src/FbTk/MacroCommand.hh @@ -30,26 +30,26 @@ namespace FbTk { /// executes a list of commands -class MacroCommand:public Command { +class MacroCommand:public Command<void> { public: - void add(RefCount<Command> &com); + void add(RefCount<Command<void> > &com); size_t size() const; virtual void execute(); private: - std::vector<RefCount<Command> > m_commandlist; + std::vector<RefCount<Command<void> > > m_commandlist; }; /// executes one command at a time -class ToggleCommand:public Command { +class ToggleCommand:public Command<void> { public: ToggleCommand(); - void add(RefCount<Command> &com); + void add(RefCount<Command<void> > &com); size_t size() const; virtual void execute(); private: - std::vector<RefCount<Command> > m_commandlist; + std::vector<RefCount<Command<void> > > m_commandlist; size_t m_state; }; diff --git a/src/FbTk/Menu.cc b/src/FbTk/Menu.cc index 51fca9d..696d847 100644 --- a/src/FbTk/Menu.cc +++ b/src/FbTk/Menu.cc @@ -95,12 +95,12 @@ Menu::Menu(FbTk::ThemeProxy<MenuTheme> &tm, ImageControl &imgctrl): m_need_update(true) { // setup timers - RefCount<Command> show_cmd(new SimpleCommand<Menu>(*this, &Menu::openSubmenu)); + RefCount<Command<void> > show_cmd(new SimpleCommand<Menu>(*this, &Menu::openSubmenu)); m_submenu_timer.setCommand(show_cmd); m_submenu_timer.fireOnce(true); - RefCount<Command> hide_cmd(new SimpleCommand<Menu>(*this, &Menu::closeMenu)); + RefCount<Command<void> > hide_cmd(new SimpleCommand<Menu>(*this, &Menu::closeMenu)); m_hide_timer.setCommand(hide_cmd); m_hide_timer.fireOnce(true); @@ -198,7 +198,7 @@ Menu::~Menu() { s_focused = 0; } -int Menu::insert(const FbString &label, RefCount<Command> &cmd, int pos) { +int Menu::insert(const FbString &label, RefCount<Command<void> > &cmd, int pos) { return insert(new MenuItem(label, cmd, this), pos); } diff --git a/src/FbTk/Menu.hh b/src/FbTk/Menu.hh index 2f37234..4ebab83 100644 --- a/src/FbTk/Menu.hh +++ b/src/FbTk/Menu.hh @@ -38,7 +38,7 @@ namespace FbTk { -class Command; +class Command<class T>; class MenuItem; class ImageControl; class RefCount<class T>; @@ -63,7 +63,7 @@ public: */ //@{ /// add a menu item with a label and a command - int insert(const FbString &label, RefCount<Command> &cmd, int pos=-1); + int insert(const FbString &label, RefCount<Command<void> > &cmd, int pos=-1); /// add empty menu item int insert(const FbString &label, int pos=-1); /// add submenu diff --git a/src/FbTk/MenuItem.cc b/src/FbTk/MenuItem.cc index 1e8c8e9..81765b1 100644 --- a/src/FbTk/MenuItem.cc +++ b/src/FbTk/MenuItem.cc @@ -37,7 +37,7 @@ void MenuItem::click(int button, int time, unsigned int mods) { if (m_menu && m_close_on_click && (mods & ControlMask) == 0) m_menu->hide(); // we need a local variable, since the command may destroy this object - RefCount<Command> tmp(m_command); + RefCount<Command<void> > tmp(m_command); tmp->execute(); } } diff --git a/src/FbTk/MenuItem.hh b/src/FbTk/MenuItem.hh index 8c73036..9150849 100644 --- a/src/FbTk/MenuItem.hh +++ b/src/FbTk/MenuItem.hh @@ -69,7 +69,7 @@ public: m_toggle_item(false) { } /// create a menu item with a specific command to be executed on click - MenuItem(const FbString &label, RefCount<Command> &cmd, Menu *menu = 0) + MenuItem(const FbString &label, RefCount<Command<void> > &cmd, Menu *menu = 0) : m_label(label), m_menu(menu), m_submenu(0), @@ -91,7 +91,7 @@ public: { } virtual ~MenuItem() { } - void setCommand(RefCount<Command> &cmd) { m_command = cmd; } + void setCommand(RefCount<Command<void> > &cmd) { m_command = cmd; } virtual void setSelected(bool selected) { m_selected = selected; } virtual void setEnabled(bool enabled) { m_enabled = enabled; } virtual void setLabel(const FbString &label) { m_label = label; } @@ -140,8 +140,8 @@ public: virtual void click(int button, int time, unsigned int mods); /// must use this to show submenu to ensure consistency for object like window menu in ClientMenu (see Workspace.cc) virtual void showSubmenu(); - RefCount<Command> &command() { return m_command; } - const RefCount<Command> &command() const { return m_command; } + RefCount<Command<void> > &command() { return m_command; } + const RefCount<Command<void> > &command() const { return m_command; } //@} void setMenu(Menu &menu) { m_menu = &menu; } @@ -151,7 +151,7 @@ private: FbString m_label; ///< label of this item Menu *m_menu; ///< the menu we live in Menu *m_submenu; ///< a submenu, 0 if we don't have one - RefCount<Command> m_command; ///< command to be executed + RefCount<Command<void> > m_command; ///< command to be executed bool m_enabled, m_selected; bool m_close_on_click, m_toggle_item; int m_index; diff --git a/src/FbTk/MultiButtonMenuItem.cc b/src/FbTk/MultiButtonMenuItem.cc index 42a096d..6fd8fee 100644 --- a/src/FbTk/MultiButtonMenuItem.cc +++ b/src/FbTk/MultiButtonMenuItem.cc @@ -45,7 +45,7 @@ MultiButtonMenuItem::~MultiButtonMenuItem() { delete [] m_button_exe; } -void MultiButtonMenuItem::setCommand(int button, FbTk::RefCount<FbTk::Command> &cmd) { +void MultiButtonMenuItem::setCommand(int button, FbTk::RefCount<FbTk::Command<void> > &cmd) { if (button <= 0 || button > static_cast<signed>(buttons()) || buttons() == 0) return; m_button_exe[button - 1] = cmd; @@ -66,7 +66,7 @@ void MultiButtonMenuItem::init(int buttons) { m_buttons = buttons; if (m_buttons != 0) - m_button_exe = new FbTk::RefCount<FbTk::Command>[m_buttons]; + m_button_exe = new FbTk::RefCount<FbTk::Command<void> >[m_buttons]; else m_button_exe = 0; } diff --git a/src/FbTk/MultiButtonMenuItem.hh b/src/FbTk/MultiButtonMenuItem.hh index 6d717af..5d67bdf 100644 --- a/src/FbTk/MultiButtonMenuItem.hh +++ b/src/FbTk/MultiButtonMenuItem.hh @@ -34,7 +34,7 @@ public: MultiButtonMenuItem(int buttons, const FbString &label, Menu *submenu); virtual ~MultiButtonMenuItem(); /// sets command to specified button - void setCommand(int button, FbTk::RefCount<FbTk::Command> &cmd); + void setCommand(int button, FbTk::RefCount<FbTk::Command<void> > &cmd); /// executes command for the button click virtual void click(int button, int time, unsigned int mods); /// @return number of buttons this instance handles @@ -43,7 +43,7 @@ public: private: void init(int buttons); - FbTk::RefCount<FbTk::Command> *m_button_exe; + FbTk::RefCount<FbTk::Command<void> > *m_button_exe; unsigned int m_buttons; }; diff --git a/src/FbTk/ObjectRegistry.hh b/src/FbTk/ObjectRegistry.hh index d6a97d9..e68d630 100644 --- a/src/FbTk/ObjectRegistry.hh +++ b/src/FbTk/ObjectRegistry.hh @@ -22,124 +22,30 @@ #ifndef OBJECTREGISTRY_HH #define OBJECTREGISTRY_HH -#include "StringUtil.hh" - #include <map> - -using std::string; +#include <string> namespace FbTk { -#define REGISTER_OBJECT_PARSER(name, parser, type) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<type>::instance().registerObject(#name, parser); \ - } - -#define REGISTER_OBJECT_PARSER_NSBASE(name, parser, space, base) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<space::base >::instance().registerObject(#name, parser); \ - } - -/* Include some basic Object creators */ -template <typename Derived, typename Base> -Base *ObjectCreator(const string &name, const string &args, bool trusted) { - return new Derived(); -} - -#define REGISTER_OBJECT(name, derived, base) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<base >::instance().registerObject(#name, FbTk::ObjectCreator<derived, base >); \ - } - -#define REGISTER_OBJECT_NSBASE(name, derived, space, base) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<space::base >::instance().registerObject(#name, FbTk::ObjectCreator<derived, space::base >); \ - } - -template <typename Derived, typename Base> -Base *ObjectCreatorWithArgs(const string &name, const string &args, - bool trusted) { - return new Derived(args); -} - -#define REGISTER_OBJECT_WITH_ARGS(name, derived, base) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<base >::instance().registerObject(#name, FbTk::ObjectCreatorWithArgs<derived, base >); \ - } - -#define REGISTER_OBJECT_WITH_ARGS_NSBASE(name, derived, space, base) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<space::base >::instance().registerObject(#name, FbTk::ObjectCreatorWithArgs<derived, space::base >); \ - } - -template <typename Derived, typename Base> -Base *UntrustedObjectCreator(const string &name, const string &args, - bool trusted) { - if (!trusted) return 0; - return new Derived(); -} - -#define REGISTER_UNTRUSTED_OBJECT(name, derived, base) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<base >::instance().registerObject(#name, FbTk::UntrustedObjectCreator<derived, base >); \ - } - -#define REGISTER_UNTRUSTED_OBJECT_NSBASE(name, derived, space, base) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<space::base >::instance().registerObject(#name, FbTk::UntrustedObjectCreator<derived, space::base >); \ - } - -template <typename Derived, typename Base> -Base * UntrustedObjectCreatorWithArgs(const string &name, const string &args, - bool trusted) { - if (!trusted) return 0; - return new Derived(args); -} - -#define REGISTER_UNTRUSTED_OBJECT_WITH_ARGS(name, derived, base) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<base >::instance().registerObject(#name, FbTk::UntrustedObjectCreatorWithArgs<derived, base >); \ - } - -#define REGISTER_UNTRUSTED_OBJECT_WITH_ARGS_NSBASE(name, derived, space, base) \ - namespace { \ - static const bool p_register_##type_##name = FbTk::ObjectRegistry<space::base >::instance().registerObject(#name, FbTk::UntrustedObjectCreatorWithArgs<derived, space::base >); \ - } - -template <typename Base> +template <typename Creator> class ObjectRegistry { public: - typedef Base * CreateFunction(const string &name, const string &args, bool trusted); - typedef std::map<string, CreateFunction *> CreatorMap; + typedef std::map<std::string, Creator> CreatorMap; - static ObjectRegistry<Base > &instance() { - static ObjectRegistry<Base > s_instance; + static ObjectRegistry<Creator> &instance() { + static ObjectRegistry<Creator> s_instance; return s_instance; } - Base *parse(const string &name, const string &args, bool trusted = true) const { - string lc = StringUtil::toLower(name); - typename CreatorMap::const_iterator it = m_creators.find(lc.c_str()); + Creator lookup(const std::string &name) { + typename CreatorMap::const_iterator it = m_creators.find(name); if (it == m_creators.end()) return 0; - else - return it->second(lc, args, trusted); - } - - Base *parse(const string &line, bool trusted = true) const { - // parse args and command - string command, args; - StringUtil::getFirstWord(line, command, args); - StringUtil::removeFirstWhitespace(args); - StringUtil::removeTrailingWhitespace(args); - - // now we have parsed command and args - return parse(command, args, trusted); + return it->second; } - bool registerObject(string name, CreateFunction createFunction) { - name = StringUtil::toLower(name); - m_creators[name] = createFunction; + bool registerObject(const std::string &name, Creator creator) { + m_creators[name] = creator; return true; } diff --git a/src/FbTk/SimpleCommand.hh b/src/FbTk/SimpleCommand.hh index 7ae91a5..1c4c39a 100644 --- a/src/FbTk/SimpleCommand.hh +++ b/src/FbTk/SimpleCommand.hh @@ -26,9 +26,9 @@ namespace FbTk { -/// a simple command +/// a simple command template <typename Receiver, typename ReturnType=void> -class SimpleCommand: public Command { +class SimpleCommand: public Command<ReturnType> { public: typedef ReturnType (Receiver::* Action)(); SimpleCommand(Receiver &r, Action a): @@ -39,18 +39,6 @@ private: Action m_action; }; -template <typename Receiver, typename ReturnType=bool> -class SimpleBoolCommand: public BoolCommand { -public: - typedef ReturnType (Receiver::* Action)(); - SimpleBoolCommand(Receiver &r, Action a): - m_receiver(r), m_action(a) { } - bool bool_execute() { return (bool)(m_receiver.*m_action)(); } -private: - Receiver &m_receiver; - Action m_action; -}; - } // end namespace FbTk #endif // FBTK_SIMPLECOMMAND_HH diff --git a/src/FbTk/Timer.cc b/src/FbTk/Timer.cc index ff568dc..f235476 100644 --- a/src/FbTk/Timer.cc +++ b/src/FbTk/Timer.cc @@ -24,7 +24,7 @@ #include "Timer.hh" -#include "ObjectRegistry.hh" +#include "CommandParser.hh" #include "StringUtil.hh" //use GNU extensions @@ -53,7 +53,7 @@ Timer::Timer():m_timing(false), m_once(false), m_interval(0) { } -Timer::Timer(RefCount<Command> &handler): +Timer::Timer(RefCount<Command<void> > &handler): m_handler(handler), m_timing(false), m_once(false), @@ -79,7 +79,7 @@ void Timer::setTimeout(const timeval &t) { m_timeout.tv_usec = t.tv_usec; } -void Timer::setCommand(RefCount<Command> &cmd) { +void Timer::setCommand(RefCount<Command<void> > &cmd) { m_handler = cmd; } @@ -247,7 +247,7 @@ void Timer::addTimer(Timer *timer) { } -Command *DelayedCmd::parse(const std::string &command, +Command<void> *DelayedCmd::parse(const std::string &command, const std::string &args, bool trusted) { std::string cmd_str; @@ -255,7 +255,7 @@ Command *DelayedCmd::parse(const std::string &command, if (err == 0) return 0; - RefCount<Command> cmd(ObjectRegistry<Command>::instance().parse(cmd_str, trusted)); + RefCount<Command<void> > cmd(CommandParser<void>::instance().parse(cmd_str, trusted)); if (*cmd == 0) return 0; @@ -265,9 +265,9 @@ Command *DelayedCmd::parse(const std::string &command, return new DelayedCmd(cmd, delay); } -REGISTER_OBJECT_PARSER(delay, DelayedCmd::parse, Command); +REGISTER_COMMAND_PARSER(delay, DelayedCmd::parse, void); -DelayedCmd::DelayedCmd(RefCount<Command> &cmd, unsigned int timeout) { +DelayedCmd::DelayedCmd(RefCount<Command<void> > &cmd, unsigned int timeout) { timeval to; // defaults to 200ms to.tv_sec = timeout/1000000; to.tv_usec = timeout % 1000000; diff --git a/src/FbTk/Timer.hh b/src/FbTk/Timer.hh index 01f4860..4893fdb 100644 --- a/src/FbTk/Timer.hh +++ b/src/FbTk/Timer.hh @@ -57,7 +57,7 @@ namespace FbTk { class Timer { public: Timer(); - explicit Timer(RefCount<Command> &handler); + explicit Timer(RefCount<Command<void> > &handler); virtual ~Timer(); void fireOnce(bool once) { m_once = once; } @@ -65,7 +65,7 @@ public: void setTimeout(time_t val); /// set timeout void setTimeout(const timeval &val); - void setCommand(RefCount<Command> &cmd); + void setCommand(RefCount<Command<void> > &cmd); void setInterval(int val) { m_interval = val; } /// start timing void start(); @@ -96,7 +96,7 @@ private: typedef std::list<Timer *> TimerList; static TimerList m_timerlist; ///< list of all timers, sorted by next trigger time (start + timeout) - RefCount<Command> m_handler; ///< what to do on a timeout + RefCount<Command<void> > m_handler; ///< what to do on a timeout bool m_timing; ///< clock running? bool m_once; ///< do timeout only once? @@ -108,11 +108,11 @@ private: }; /// executes a command after a specified timeout -class DelayedCmd: public Command { +class DelayedCmd: public Command<void> { public: - DelayedCmd(RefCount<Command> &cmd, unsigned int timeout = 200000); + DelayedCmd(RefCount<Command<void> > &cmd, unsigned int timeout = 200000); void execute(); - static Command *parse(const std::string &command, + static Command<void> *parse(const std::string &command, const std::string &args, bool trusted); private: Timer m_timer; diff --git a/src/FbWinFrame.hh b/src/FbWinFrame.hh index 6196cf3..643fc49 100644 --- a/src/FbWinFrame.hh +++ b/src/FbWinFrame.hh @@ -44,7 +44,7 @@ template <class T> class FocusableTheme; namespace FbTk { class ImageControl; -class Command; +template <class T> class Command; class Texture; class XLayer; } diff --git a/src/FocusModelMenuItem.hh b/src/FocusModelMenuItem.hh index db023f5..d75e8a0 100644 --- a/src/FocusModelMenuItem.hh +++ b/src/FocusModelMenuItem.hh @@ -28,7 +28,7 @@ #include "FbTk/RefCount.hh" namespace FbTk { -class Command; +template <class T> class Command; } #include "FocusControl.hh" @@ -37,7 +37,7 @@ class FocusModelMenuItem : public FbTk::MenuItem { public: FocusModelMenuItem(const FbTk::FbString &label, FocusControl &focus_control, FocusControl::FocusModel model, - FbTk::RefCount<FbTk::Command> &cmd): + FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(label, cmd), m_focus_control(focus_control), m_focusmodel(model) { @@ -61,7 +61,7 @@ public: TabFocusModelMenuItem(const FbTk::FbString &label, FocusControl &focus_control, FocusControl::TabFocusModel model, - FbTk::RefCount<FbTk::Command> &cmd): + FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(label, cmd), m_focus_control(focus_control), m_tabfocusmodel(model) { diff --git a/src/IconbarTool.cc b/src/IconbarTool.cc index d8579f2..8aa0db8 100644 --- a/src/IconbarTool.cc +++ b/src/IconbarTool.cc @@ -30,7 +30,7 @@ #include "IconButton.hh" #include "Workspace.hh" #include "FbMenu.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "WinClient.hh" #include "FocusControl.hh" #include "FbCommands.hh" @@ -103,7 +103,7 @@ class ToolbarModeMenuItem : public FbTk::MenuItem { public: ToolbarModeMenuItem(const FbTk::FbString &label, IconbarTool &handler, string mode, - FbTk::RefCount<FbTk::Command> &cmd): + FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(label, cmd), m_handler(handler), m_mode(mode) { setCloseOnClick(false); } @@ -122,7 +122,7 @@ class ToolbarAlignMenuItem: public FbTk::MenuItem { public: ToolbarAlignMenuItem(const FbTk::FbString &label, IconbarTool &handler, FbTk::Container::Alignment mode, - FbTk::RefCount<FbTk::Command> &cmd): + FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(label, cmd), m_handler(handler), m_mode(mode) { setCloseOnClick(false); } @@ -143,7 +143,7 @@ void setupModeMenu(FbTk::Menu &menu, IconbarTool &handler) { menu.setLabel(_FB_XTEXT(Toolbar, IconbarMode, "Iconbar Mode", "Menu title - chooses which set of icons are shown in the iconbar")); - RefCount<Command> saverc_cmd(new FbCommands::SaveResources()); + RefCount<Command<void> > saverc_cmd(new FbCommands::SaveResources()); menu.insert(new ToolbarModeMenuItem(_FB_XTEXT(Toolbar, IconbarModeNone, @@ -208,9 +208,9 @@ void setupModeMenu(FbTk::Menu &menu, IconbarTool &handler) { menu.updateMenu(); } -typedef FbTk::RefCount<FbTk::Command> RefCmd; +typedef FbTk::RefCount<FbTk::Command<void> > RefCmd; -class ShowMenu: public FbTk::Command { +class ShowMenu: public FbTk::Command<void> { public: explicit ShowMenu(FluxboxWindow &win):m_win(win) { } void execute() { @@ -229,7 +229,7 @@ private: FluxboxWindow &m_win; }; -class FocusCommand: public FbTk::Command { +class FocusCommand: public FbTk::Command<void> { public: explicit FocusCommand(Focusable &win): m_win(win) { } void execute() { @@ -283,11 +283,11 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, using namespace FbTk; // setup use pixmap item to reconfig iconbar and save resource on click MacroCommand *save_and_reconfig = new MacroCommand(); - RefCount<Command> reconfig(new SimpleCommand<IconbarTool>(*this, &IconbarTool::renderTheme)); - RefCount<Command> save(FbTk::ObjectRegistry<Command>::instance().parse("saverc")); + RefCount<Command<void> > reconfig(new SimpleCommand<IconbarTool>(*this, &IconbarTool::renderTheme)); + RefCount<Command<void> > save(FbTk::CommandParser<void>::instance().parse("saverc")); save_and_reconfig->add(reconfig); save_and_reconfig->add(save); - RefCount<Command> s_and_reconfig(save_and_reconfig); + RefCount<Command<void> > s_and_reconfig(save_and_reconfig); m_menu.insert(new FbTk::BoolMenuItem(_FB_XTEXT(Toolbar, ShowIcons, "Show Pictures", "chooses if little icons are shown next to title in the iconbar"), m_rc_use_pixmap, s_and_reconfig)); diff --git a/src/Keys.cc b/src/Keys.cc index 7fcd354..7187c47 100644 --- a/src/Keys.cc +++ b/src/Keys.cc @@ -30,7 +30,7 @@ #include "FbTk/Command.hh" #include "FbTk/RefCount.hh" #include "FbTk/KeyUtil.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "FbTk/I18n.hh" #ifdef HAVE_CONFIG_H @@ -135,7 +135,7 @@ public: unsigned int key; // key code or button number int context; // ON_TITLEBAR, etc.: bitwise-or of all desired contexts bool isdouble; - FbTk::RefCount<FbTk::Command> m_command; + FbTk::RefCount<FbTk::Command<void> > m_command; keylist_t keylist; }; @@ -461,7 +461,7 @@ bool Keys::addBinding(const string &linebuffer) { const char *str = FbTk::StringUtil::strcasestr(linebuffer.c_str(), val[argc].c_str() + 1); // +1 to skip ':' if (str) - current_key->m_command = FbTk::ObjectRegistry<FbTk::Command>::instance().parse(str); + current_key->m_command = FbTk::CommandParser<void>::instance().parse(str); if (!str || *current_key->m_command == 0 || mod) { delete first_new_key; diff --git a/src/LayerMenu.cc b/src/LayerMenu.cc index 1a52f04..f1d9dd9 100644 --- a/src/LayerMenu.cc +++ b/src/LayerMenu.cc @@ -50,7 +50,7 @@ LayerMenu::LayerMenu(FbTk::ThemeProxy<FbTk::MenuTheme> &tm, {0, 0, _FB_XTEXT(Layer, Desktop, "Desktop", "Layer desktop"), Layer::DESKTOP}, }; - FbTk::RefCount<FbTk::Command> saverc_cmd(new FbCommands::SaveResources()); + FbTk::RefCount<FbTk::Command<void> > saverc_cmd(new FbCommands::SaveResources()); for (size_t i=0; i < 6; ++i) { // TODO: fetch nls string diff --git a/src/LayerMenu.hh b/src/LayerMenu.hh index 68b8dec..8de0eba 100644 --- a/src/LayerMenu.hh +++ b/src/LayerMenu.hh @@ -40,7 +40,7 @@ public: class LayerMenuItem : public FbTk::MenuItem { public: LayerMenuItem(const FbTk::FbString &label, LayerObject *object, - int layernum, FbTk::RefCount<FbTk::Command> &cmd): + int layernum, FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(label, cmd), m_object(object), m_layernum(layernum) {} LayerMenuItem(const FbTk::FbString &label, LayerObject *object, diff --git a/src/MenuCreator.cc b/src/MenuCreator.cc index 71c1b56..12b0f1c 100644 --- a/src/MenuCreator.cc +++ b/src/MenuCreator.cc @@ -24,7 +24,7 @@ #include "defaults.hh" #include "Screen.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "fluxbox.hh" #include "Window.hh" #include "WindowCmd.hh" @@ -209,7 +209,7 @@ static void translateMenuItem(FbTk::Parser &parse, ParseItem &pitem, FbTk::Strin else menu.insert(str_label, submenu); } else if (str_key == "exit") { // exit - FbTk::RefCount<FbTk::Command> exit_cmd(FbTk::ObjectRegistry<FbTk::Command>::instance().parse("exit")); + FbTk::RefCount<FbTk::Command<void> > exit_cmd(FbTk::CommandParser<void>::instance().parse("exit")); if (str_label.empty()) menu.insert(_FB_XTEXT(Menu, Exit, "Exit", "Exit Command"), exit_cmd); else @@ -217,11 +217,11 @@ static void translateMenuItem(FbTk::Parser &parse, ParseItem &pitem, FbTk::Strin } else if (str_key == "exec") { // execute and hide menu using namespace FbTk; - RefCount<Command> exec_cmd(FbTk::ObjectRegistry<FbTk::Command>::instance().parse("exec " + str_cmd)); + RefCount<Command<void> > exec_cmd(FbTk::CommandParser<void>::instance().parse("exec " + str_cmd)); menu.insert(str_label, exec_cmd); } else if (str_key == "macrocmd") { using namespace FbTk; - RefCount<Command> macro_cmd(FbTk::ObjectRegistry<FbTk::Command>::instance().parse("macrocmd " + str_cmd)); + RefCount<Command<void> > macro_cmd(FbTk::CommandParser<void>::instance().parse("macrocmd " + str_cmd)); menu.insert(str_label, macro_cmd); } else if (str_key == "style") { // style menu.insert(new StyleMenuItem(str_label, str_cmd)); @@ -313,10 +313,10 @@ static void translateMenuItem(FbTk::Parser &parse, ParseItem &pitem, FbTk::Strin } else if (str_key == "endencoding") { MenuCreator::endEncoding(); } - else { // ok, if we didn't find any special menu item we try with command FbTk::Parser - // we need to attach command with arguments so command FbTk::Parser can parse it + else { // ok, if we didn't find any special menu item we try with command parser + // we need to attach command with arguments so command parser can parse it string line = str_key + " " + str_cmd; - FbTk::RefCount<FbTk::Command> command(FbTk::ObjectRegistry<FbTk::Command>::instance().parse(line)); + FbTk::RefCount<FbTk::Command<void> > command(FbTk::CommandParser<void>::instance().parse(line)); if (*command != 0) { // special NLS default labels if (str_label.empty()) { @@ -507,7 +507,7 @@ FbTk::Menu *MenuCreator::createMenuType(const string &type, int screen_num) { bool MenuCreator::createWindowMenuItem(const string &type, const string &label, FbTk::Menu &menu) { - typedef FbTk::RefCount<FbTk::Command> RefCmd; + typedef FbTk::RefCount<FbTk::Command<void> > RefCmd; _FB_USES_NLS; static MenuContext context; diff --git a/src/Remember.cc b/src/Remember.cc index 92a6663..8a5b29e 100644 --- a/src/Remember.cc +++ b/src/Remember.cc @@ -238,7 +238,7 @@ bool handleStartupItem(const string &line, int offset) { FbCommands::ExecuteCmd *tmp_exec_cmd = new FbCommands::ExecuteCmd(str, screen); #ifdef DEBUG - cerr<<"Executing startup command '"<<str<<"' on screen "<<screen<<endl; + cerr<<"Executing startup Command<void> '"<<str<<"' on screen "<<screen<<endl; #endif // DEBUG tmp_exec_cmd->execute(); delete tmp_exec_cmd; diff --git a/src/RootCmdMenuItem.cc b/src/RootCmdMenuItem.cc index 5cce10c..c3642ee 100644 --- a/src/RootCmdMenuItem.cc +++ b/src/RootCmdMenuItem.cc @@ -34,7 +34,7 @@ RootCmdMenuItem::RootCmdMenuItem(const FbTk::FbString &label, m_filename(filename) { std::string prog = cmd.empty() ? realProgramName("fbsetbg") : cmd; - FbTk::RefCount<FbTk::Command> + FbTk::RefCount<FbTk::Command<void> > setwp_cmd(new FbCommands::ExecuteCmd(prog + " \"" + m_filename + "\"")); setCommand(setwp_cmd); setToggleItem(true); diff --git a/src/Screen.cc b/src/Screen.cc index eba9eb7..ddfb65f 100644 --- a/src/Screen.cc +++ b/src/Screen.cc @@ -48,7 +48,7 @@ #include "WinClient.hh" #include "FbWinFrame.hh" #include "Strut.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "AtomHandler.hh" #include "HeadArea.hh" #include "FbCommands.hh" @@ -168,7 +168,7 @@ class TabPlacementMenuItem: public FbTk::MenuItem { public: TabPlacementMenuItem(FbTk::FbString & label, BScreen &screen, FbWinFrame::TabPlacement place, - FbTk::RefCount<FbTk::Command> &cmd): + FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(label, cmd), m_screen(screen), m_place(place) { @@ -773,7 +773,7 @@ void BScreen::propertyNotify(Atom atom) { &ret_bytes_after, (unsigned char **)&str); } - FbTk::RefCount<FbTk::Command> cmd(FbTk::ObjectRegistry<FbTk::Command>::instance().parse(str, false)); + FbTk::RefCount<FbTk::Command<void> > cmd(FbTk::CommandParser<void>::instance().parse(str, false)); if (cmd.get()) cmd->execute(); XFree(str); @@ -1479,9 +1479,9 @@ void BScreen::initMenu() { if (m_rootmenu.get() == 0) { _FB_USES_NLS; m_rootmenu.reset(createMenu(_FB_XTEXT(Menu, DefaultRootMenu, "Fluxbox default menu", "Title of fallback root menu"))); - FbTk::RefCount<FbTk::Command> restart_fb(FbTk::ObjectRegistry<FbTk::Command>::instance().parse("restart")); - FbTk::RefCount<FbTk::Command> exit_fb(FbTk::ObjectRegistry<FbTk::Command>::instance().parse("exit")); - FbTk::RefCount<FbTk::Command> execute_xterm(FbTk::ObjectRegistry<FbTk::Command>::instance().parse("exec xterm")); + FbTk::RefCount<FbTk::Command<void> > restart_fb(FbTk::CommandParser<void>::instance().parse("restart")); + FbTk::RefCount<FbTk::Command<void> > exit_fb(FbTk::CommandParser<void>::instance().parse("exit")); + FbTk::RefCount<FbTk::Command<void> > execute_xterm(FbTk::CommandParser<void>::instance().parse("exec xterm")); m_rootmenu->setInternalMenu(); m_rootmenu->insert("xterm", execute_xterm); m_rootmenu->insert(_FB_XTEXT(Menu, Restart, "Restart", "Restart command"), @@ -1523,20 +1523,20 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) { FbTk::MacroCommand *s_a_reconf_macro = new FbTk::MacroCommand(); FbTk::MacroCommand *s_a_reconftabs_macro = new FbTk::MacroCommand(); - FbTk::RefCount<FbTk::Command> saverc_cmd(new FbTk::SimpleCommand<Fluxbox>( + FbTk::RefCount<FbTk::Command<void> > saverc_cmd(new FbTk::SimpleCommand<Fluxbox>( *Fluxbox::instance(), &Fluxbox::save_rc)); - FbTk::RefCount<FbTk::Command> reconf_cmd(FbTk::ObjectRegistry<FbTk::Command>::instance().parse("reconfigure")); + FbTk::RefCount<FbTk::Command<void> > reconf_cmd(FbTk::CommandParser<void>::instance().parse("reconfigure")); - FbTk::RefCount<FbTk::Command> reconftabs_cmd(new FbTk::SimpleCommand<BScreen>( + FbTk::RefCount<FbTk::Command<void> > reconftabs_cmd(new FbTk::SimpleCommand<BScreen>( *this, &BScreen::reconfigureTabs)); s_a_reconf_macro->add(saverc_cmd); s_a_reconf_macro->add(reconf_cmd); s_a_reconftabs_macro->add(saverc_cmd); s_a_reconftabs_macro->add(reconftabs_cmd); - FbTk::RefCount<FbTk::Command> save_and_reconfigure(s_a_reconf_macro); - FbTk::RefCount<FbTk::Command> save_and_reconftabs(s_a_reconftabs_macro); + FbTk::RefCount<FbTk::Command<void> > save_and_reconfigure(s_a_reconf_macro); + FbTk::RefCount<FbTk::Command<void> > save_and_reconftabs(s_a_reconftabs_macro); // create focus menu // we don't set this to internal menu so will // be deleted toghether with the parent @@ -1693,7 +1693,7 @@ void BScreen::setupConfigmenu(FbTk::Menu &menu) { // in order to save system resources, don't save or reconfigure alpha // settings until after the user is done changing them - FbTk::RefCount<FbTk::Command> delayed_save_and_reconf( + FbTk::RefCount<FbTk::Command<void> > delayed_save_and_reconf( new FbTk::DelayedCmd(save_and_reconfigure)); FbTk::MenuItem *focused_alpha_item = diff --git a/src/SendToMenu.cc b/src/SendToMenu.cc index 44840dd..ae261b9 100644 --- a/src/SendToMenu.cc +++ b/src/SendToMenu.cc @@ -32,7 +32,7 @@ #include "FbTk/MultiButtonMenuItem.hh" #include "FbTk/Command.hh" -class SendToCmd: public FbTk::Command { +class SendToCmd: public FbTk::Command<void> { public: SendToCmd(int workspace, bool follow): m_workspace(workspace), @@ -78,8 +78,8 @@ void SendToMenu::update(FbTk::Subject *subj) { BScreen *screen = Fluxbox::instance()->findScreen(screenNumber()); const BScreen::Workspaces &wlist = screen->getWorkspacesList(); for (size_t i = 0; i < wlist.size(); ++i) { - FbTk::RefCount<FbTk::Command> sendto_cmd(new SendToCmd(i, false)); - FbTk::RefCount<FbTk::Command> sendto_follow_cmd(new SendToCmd(i, true)); + FbTk::RefCount<FbTk::Command<void> > sendto_cmd(new SendToCmd(i, false)); + FbTk::RefCount<FbTk::Command<void> > sendto_follow_cmd(new SendToCmd(i, true)); FbTk::MultiButtonMenuItem* item = new FbTk::MultiButtonMenuItem(3, wlist[i]->name()); item->setCommand(1, sendto_cmd); diff --git a/src/Slit.cc b/src/Slit.cc index b412eec..18c21f4 100644 --- a/src/Slit.cc +++ b/src/Slit.cc @@ -176,7 +176,7 @@ namespace { class SlitClientMenuItem: public FbTk::MenuItem{ public: - explicit SlitClientMenuItem(Slit& slit, SlitClient &client, FbTk::RefCount<FbTk::Command> &cmd): + explicit SlitClientMenuItem(Slit& slit, SlitClient &client, FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(client.matchName().c_str(), cmd), m_slit(slit), m_client(client) { setCommand(cmd); FbTk::MenuItem::setSelected(client.visible()); @@ -207,7 +207,7 @@ private: class SlitDirMenuItem: public FbTk::MenuItem { public: - SlitDirMenuItem(const FbTk::FbString &label, Slit &slit, FbTk::RefCount<FbTk::Command> &cmd) + SlitDirMenuItem(const FbTk::FbString &label, Slit &slit, FbTk::RefCount<FbTk::Command<void> > &cmd) :FbTk::MenuItem(label,cmd), m_slit(slit), m_label(label) { @@ -242,7 +242,7 @@ private: class PlaceSlitMenuItem: public FbTk::MenuItem { public: - PlaceSlitMenuItem(const FbTk::FbString &label, Slit &slit, Slit::Placement place, FbTk::RefCount<FbTk::Command> &cmd): + PlaceSlitMenuItem(const FbTk::FbString &label, Slit &slit, Slit::Placement place, FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(label, cmd), m_slit(slit), m_place(place) { setCloseOnClick(false); } @@ -317,7 +317,7 @@ Slit::Slit(BScreen &scr, FbTk::XLayer &layer, const char *filename) // setup timer m_timer.setTimeout(200); // default timeout m_timer.fireOnce(true); - FbTk::RefCount<FbTk::Command> toggle_hidden(new FbTk::SimpleCommand<Slit>(*this, &Slit::toggleHidden)); + FbTk::RefCount<FbTk::Command<void> > toggle_hidden(new FbTk::SimpleCommand<Slit>(*this, &Slit::toggleHidden)); m_timer.setCommand(toggle_hidden); @@ -1178,14 +1178,14 @@ void Slit::updateClientmenu() { m_clientlist_menu.removeAll(); m_clientlist_menu.setLabel(_FB_XTEXT(Slit, ClientsMenu, "Clients", "Slit client menu")); - FbTk::RefCount<FbTk::Command> cycle_up(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsUp)); - FbTk::RefCount<FbTk::Command> cycle_down(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsDown)); + FbTk::RefCount<FbTk::Command<void> > cycle_up(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsUp)); + FbTk::RefCount<FbTk::Command<void> > cycle_down(new FbTk::SimpleCommand<Slit>(*this, &Slit::cycleClientsDown)); m_clientlist_menu.insert(_FB_XTEXT(Slit, CycleUp, "Cycle Up", "Cycle clients upwards"), cycle_up); m_clientlist_menu.insert(_FB_XTEXT(Slit, CycleDown, "Cycle Down", "Cycle clients downwards"), cycle_down); m_clientlist_menu.insert(new FbTk::MenuSeparator()); - FbTk::RefCount<FbTk::Command> reconfig(new FbTk::SimpleCommand<Slit>(*this, &Slit::reconfigure)); + FbTk::RefCount<FbTk::Command<void> > reconfig(new FbTk::SimpleCommand<Slit>(*this, &Slit::reconfigure)); SlitClients::iterator it = m_client_list.begin(); for (; it != m_client_list.end(); ++it) { if ((*it) != 0 && (*it)->window() != 0) @@ -1193,7 +1193,7 @@ void Slit::updateClientmenu() { } m_clientlist_menu.insert(new FbTk::MenuSeparator()); - FbTk::RefCount<FbTk::Command> savecmd(new FbTk::SimpleCommand<Slit>(*this, &Slit::saveClientList)); + FbTk::RefCount<FbTk::Command<void> > savecmd(new FbTk::SimpleCommand<Slit>(*this, &Slit::saveClientList)); m_clientlist_menu.insert(_FB_XTEXT(Slit, SaveSlitList, "Save SlitList", "Saves the current order in the slit"), @@ -1224,9 +1224,9 @@ void Slit::setupMenu() { FbTk::MacroCommand *s_a_reconf_macro = new FbTk::MacroCommand(); FbTk::MacroCommand *s_a_reconf_slit_macro = new FbTk::MacroCommand(); - FbTk::RefCount<FbTk::Command> saverc_cmd(new FbCommands::SaveResources()); - FbTk::RefCount<FbTk::Command> reconf_cmd(new FbCommands::ReconfigureFluxboxCmd()); - FbTk::RefCount<FbTk::Command> reconf_slit_cmd(new FbTk::SimpleCommand<Slit>(*this, &Slit::reconfigure)); + FbTk::RefCount<FbTk::Command<void> > saverc_cmd(new FbCommands::SaveResources()); + FbTk::RefCount<FbTk::Command<void> > reconf_cmd(new FbCommands::ReconfigureFluxboxCmd()); + FbTk::RefCount<FbTk::Command<void> > reconf_slit_cmd(new FbTk::SimpleCommand<Slit>(*this, &Slit::reconfigure)); s_a_reconf_macro->add(saverc_cmd); s_a_reconf_macro->add(reconf_cmd); @@ -1234,8 +1234,8 @@ void Slit::setupMenu() { s_a_reconf_slit_macro->add(saverc_cmd); s_a_reconf_slit_macro->add(reconf_slit_cmd); - FbTk::RefCount<FbTk::Command> save_and_reconfigure(s_a_reconf_macro); - FbTk::RefCount<FbTk::Command> save_and_reconfigure_slit(s_a_reconf_slit_macro); + FbTk::RefCount<FbTk::Command<void> > save_and_reconfigure(s_a_reconf_macro); + FbTk::RefCount<FbTk::Command<void> > save_and_reconfigure_slit(s_a_reconf_slit_macro); // it'll be freed by the slitmenu (since not marked internal) @@ -1280,10 +1280,10 @@ void Slit::setupMenu() { 0, 255, m_slitmenu); // setup command for alpha value MacroCommand *alpha_macrocmd = new MacroCommand(); - RefCount<Command> alpha_cmd(new SimpleCommand<Slit>(*this, &Slit::updateAlpha)); + RefCount<Command<void> > alpha_cmd(new SimpleCommand<Slit>(*this, &Slit::updateAlpha)); alpha_macrocmd->add(saverc_cmd); alpha_macrocmd->add(alpha_cmd); - RefCount<Command> set_alpha_cmd(alpha_macrocmd); + RefCount<Command<void> > set_alpha_cmd(alpha_macrocmd); alpha_menuitem->setCommand(set_alpha_cmd); m_slitmenu.insert(alpha_menuitem); diff --git a/src/StyleMenuItem.cc b/src/StyleMenuItem.cc index fde036f..628935d 100644 --- a/src/StyleMenuItem.cc +++ b/src/StyleMenuItem.cc @@ -32,7 +32,7 @@ StyleMenuItem::StyleMenuItem(const FbTk::FbString &label, const std::string &fil m_filename(filename) { // perform shell style ~ home directory expansion // and insert style - FbTk::RefCount<FbTk::Command> + FbTk::RefCount<FbTk::Command<void> > setstyle_cmd(new FbCommands:: SetStyleCmd(m_filename)); setCommand(setstyle_cmd); diff --git a/src/ToolFactory.cc b/src/ToolFactory.cc index 87299cc..074ae71 100644 --- a/src/ToolFactory.cc +++ b/src/ToolFactory.cc @@ -34,7 +34,7 @@ #include "WorkspaceNameTheme.hh" #include "ButtonTheme.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "Screen.hh" #include "Toolbar.hh" #include "fluxbox.hh" @@ -42,7 +42,7 @@ #include <utility> namespace { -class ShowMenuAboveToolbar: public FbTk::Command { +class ShowMenuAboveToolbar: public FbTk::Command<void> { public: explicit ShowMenuAboveToolbar(Toolbar &tbar):m_tbar(tbar) { } void execute() { @@ -92,7 +92,7 @@ ToolbarItem *ToolFactory::create(const std::string &name, const FbTk::FbWindow & WorkspaceNameTool *witem = new WorkspaceNameTool(parent, *m_workspace_theme, screen()); using namespace FbTk; - RefCount<Command> showmenu(new ShowMenuAboveToolbar(tbar)); + RefCount<Command<void> > showmenu(new ShowMenuAboveToolbar(tbar)); witem->button().setOnClick(showmenu); item = witem; } else if (name == "iconbar") { @@ -104,7 +104,7 @@ ToolbarItem *ToolFactory::create(const std::string &name, const FbTk::FbWindow & } else if (name == "nextworkspace" || name == "prevworkspace") { - FbTk::RefCount<FbTk::Command> cmd(FbTk::ObjectRegistry<FbTk::Command>::instance().parse(name)); + FbTk::RefCount<FbTk::Command<void> > cmd(FbTk::CommandParser<void>::instance().parse(name)); if (*cmd == 0) // we need a command return 0; @@ -124,7 +124,7 @@ ToolbarItem *ToolFactory::create(const std::string &name, const FbTk::FbWindow & } else if (name == "nextwindow" || name == "prevwindow") { - FbTk::RefCount<FbTk::Command> cmd(FbTk::ObjectRegistry<FbTk::Command>::instance().parse(name)); + FbTk::RefCount<FbTk::Command<void> > cmd(FbTk::CommandParser<void>::instance().parse(name)); if (*cmd == 0) // we need a command return 0; diff --git a/src/Toolbar.cc b/src/Toolbar.cc index 24bc66d..de19d1d 100644 --- a/src/Toolbar.cc +++ b/src/Toolbar.cc @@ -40,7 +40,7 @@ #endif // XINERAMA #include "Strut.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "Layer.hh" #include "FbTk/I18n.hh" @@ -159,7 +159,7 @@ getString() const { } // end namespace FbTk namespace { -class SetToolbarPlacementCmd: public FbTk::Command { +class SetToolbarPlacementCmd: public FbTk::Command<void> { public: SetToolbarPlacementCmd(Toolbar &tbar, Toolbar::Placement place):m_tbar(tbar), m_place(place) { } void execute() { @@ -266,7 +266,7 @@ Toolbar::Toolbar(BScreen &scrn, FbTk::XLayer &layer, size_t width): // setup hide timer m_hide_timer.setTimeout(Fluxbox::instance()->getAutoRaiseDelay()); - FbTk::RefCount<FbTk::Command> toggle_hidden(new FbTk::SimpleCommand<Toolbar>(*this, &Toolbar::toggleHidden)); + FbTk::RefCount<FbTk::Command<void> > toggle_hidden(new FbTk::SimpleCommand<Toolbar>(*this, &Toolbar::toggleHidden)); m_hide_timer.setCommand(toggle_hidden); m_hide_timer.fireOnce(true); @@ -813,14 +813,14 @@ void Toolbar::setupMenus(bool skip_new_placement) { _FB_USES_NLS; using namespace FbTk; - typedef RefCount<Command> RefCommand; + typedef RefCount<Command<void> > RefCommand; typedef SimpleCommand<Toolbar> ToolbarCommand; menu().setLabel(_FB_XTEXT(Toolbar, Toolbar, "Toolbar", "Title of Toolbar menu")); RefCommand reconfig_toolbar(new ToolbarCommand(*this, &Toolbar::reconfigure)); - RefCommand save_resources(FbTk::ObjectRegistry<Command>::instance().parse("saverc")); + RefCommand save_resources(FbTk::CommandParser<void>::instance().parse("saverc")); MacroCommand *toolbar_menuitem_macro = new MacroCommand(); toolbar_menuitem_macro->add(reconfig_toolbar); toolbar_menuitem_macro->add(save_resources); @@ -924,10 +924,10 @@ void Toolbar::setupMenus(bool skip_new_placement) { 0, 255, menu()); // setup command for alpha value MacroCommand *alpha_macrocmd = new MacroCommand(); - RefCount<Command> alpha_cmd(new SimpleCommand<Toolbar>(*this, &Toolbar::updateAlpha)); + RefCount<Command<void> > alpha_cmd(new SimpleCommand<Toolbar>(*this, &Toolbar::updateAlpha)); alpha_macrocmd->add(save_resources); alpha_macrocmd->add(alpha_cmd); - RefCount<Command> set_alpha_cmd(alpha_macrocmd); + RefCount<Command<void> > set_alpha_cmd(alpha_macrocmd); alpha_menuitem->setCommand(set_alpha_cmd); menu().insert(alpha_menuitem); diff --git a/src/Window.cc b/src/Window.cc index da0a9fa..3e1ad4e 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -221,7 +221,7 @@ void tempRaiseFluxboxWindow(FluxboxWindow &win) { } -class SetClientCmd:public FbTk::Command { +class SetClientCmd:public FbTk::Command<void> { public: explicit SetClientCmd(WinClient &client):m_client(client) { } @@ -446,7 +446,7 @@ void FluxboxWindow::init() { m_client->x = wattrib.x; m_client->y = wattrib.y; m_timer.setTimeout(fluxbox.getAutoRaiseDelay()); - FbTk::RefCount<FbTk::Command> raise_cmd(new FbTk::SimpleCommand<FluxboxWindow>(*this, + FbTk::RefCount<FbTk::Command<void> > raise_cmd(new FbTk::SimpleCommand<FluxboxWindow>(*this, &FluxboxWindow::raise)); m_timer.setCommand(raise_cmd); m_timer.fireOnce(true); @@ -3971,7 +3971,7 @@ void FluxboxWindow::updateButtons() { frame().removeAllButtons(); using namespace FbTk; - typedef RefCount<Command> CommandRef; + typedef RefCount<Command<void> > CommandRef; typedef SimpleCommand<FluxboxWindow> WindowCmd; CommandRef iconify_cmd(new WindowCmd(*this, &FluxboxWindow::iconify)); @@ -4142,7 +4142,7 @@ void FluxboxWindow::associateClient(WinClient &client) { frame().theme().unfocusedTheme()->iconbarTheme(), client); frame().createTab(*btn); - FbTk::RefCount<FbTk::Command> setcmd(new SetClientCmd(client)); + FbTk::RefCount<FbTk::Command<void> > setcmd(new SetClientCmd(client)); btn->setOnClick(setcmd, 1); btn->setTextPadding(Fluxbox::instance()->getTabsPadding()); btn->setPixmap(screen().getTabsUsePixmap()); diff --git a/src/WindowCmd.hh b/src/WindowCmd.hh index 2272283..f979f2b 100644 --- a/src/WindowCmd.hh +++ b/src/WindowCmd.hh @@ -51,7 +51,7 @@ protected: /// executes action for a dynamic context set in WindowCmd_base template <typename ReturnType=void> -class WindowCmd: public WindowCmd_base, public FbTk::Command { +class WindowCmd: public WindowCmd_base, public FbTk::Command<void> { public: typedef ReturnType (FluxboxWindow::* Action)(); WindowCmd(Action a):m_action(a) {} diff --git a/src/WorkspaceCmd.cc b/src/WorkspaceCmd.cc index bc71e32..aba5914 100644 --- a/src/WorkspaceCmd.cc +++ b/src/WorkspaceCmd.cc @@ -31,7 +31,7 @@ #include "WindowCmd.hh" #include "FbTk/KeyUtil.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "FbTk/stringstream.hh" #include "FbTk/StringUtil.hh" @@ -45,16 +45,14 @@ #include <vector> using std::string; -using FbTk::Command; -using FbTk::BoolCommand; -REGISTER_OBJECT_PARSER(map, WindowListCmd::parse, Command); -REGISTER_OBJECT_PARSER(foreach, WindowListCmd::parse, Command); +REGISTER_COMMAND_PARSER(map, WindowListCmd::parse, void); +REGISTER_COMMAND_PARSER(foreach, WindowListCmd::parse, void); -FbTk::Command *WindowListCmd::parse(const string &command, const string &args, +FbTk::Command<void> *WindowListCmd::parse(const string &command, const string &args, bool trusted) { - FbTk::Command *cmd = 0; - FbTk::BoolCommand *filter = 0; + FbTk::Command<void> *cmd = 0; + FbTk::Command<bool> *filter = 0; std::vector<string> tokens; int opts; string pat; @@ -63,19 +61,19 @@ FbTk::Command *WindowListCmd::parse(const string &command, const string &args, if (tokens.empty()) return 0; - cmd = FbTk::ObjectRegistry<Command>::instance().parse(tokens[0], trusted); + cmd = FbTk::CommandParser<void>::instance().parse(tokens[0], trusted); if (!cmd) return 0; if (tokens.size() > 1) { FocusableList::parseArgs(tokens[1], opts, pat); - filter = FbTk::ObjectRegistry<BoolCommand>::instance().parse(pat, + filter = FbTk::CommandParser<bool>::instance().parse(pat, trusted); } - return new WindowListCmd(FbTk::RefCount<Command>(cmd), opts, - FbTk::RefCount<BoolCommand>(filter)); + return new WindowListCmd(FbTk::RefCount<FbTk::Command<void> >(cmd), opts, + FbTk::RefCount<FbTk::Command<bool> >(filter)); } void WindowListCmd::execute() { @@ -92,29 +90,29 @@ void WindowListCmd::execute() { WindowCmd<void>::setWindow((*it)->fbwindow()); else if (typeid(**it) == typeid(WinClient)) WindowCmd<void>::setClient(dynamic_cast<WinClient *>(*it)); - if (!*m_filter || m_filter->bool_execute()) + if (!*m_filter || m_filter->execute()) m_cmd->execute(); } WindowCmd<void>::setClient(old); } } -FbTk::BoolCommand *SomeCmd::parse(const string &command, const string &args, +FbTk::Command<bool> *SomeCmd::parse(const string &command, const string &args, bool trusted) { - FbTk::BoolCommand *boolcmd = - FbTk::ObjectRegistry<FbTk::BoolCommand>::instance().parse(args, + FbTk::Command<bool> *boolcmd = + FbTk::CommandParser<bool>::instance().parse(args, trusted); if (!boolcmd) return 0; if (command == "some") - return new SomeCmd(FbTk::RefCount<FbTk::BoolCommand>(boolcmd)); - return new EveryCmd(FbTk::RefCount<FbTk::BoolCommand>(boolcmd)); + return new SomeCmd(FbTk::RefCount<FbTk::Command<bool> >(boolcmd)); + return new EveryCmd(FbTk::RefCount<FbTk::Command<bool> >(boolcmd)); } -REGISTER_OBJECT_PARSER(some, SomeCmd::parse, BoolCommand); -REGISTER_OBJECT_PARSER(every, SomeCmd::parse, BoolCommand); +REGISTER_COMMAND_PARSER(some, SomeCmd::parse, bool); +REGISTER_COMMAND_PARSER(every, SomeCmd::parse, bool); -bool SomeCmd::bool_execute() { +bool SomeCmd::execute() { BScreen *screen = Fluxbox::instance()->keyScreen(); if (screen != 0) { FocusControl::Focusables win_list(screen->focusControl().creationOrderList().clientList()); @@ -127,7 +125,7 @@ bool SomeCmd::bool_execute() { WinClient *client = dynamic_cast<WinClient *>(*it); if (!client) continue; WindowCmd<void>::setClient(client); - if (m_cmd->bool_execute()) + if (m_cmd->execute()) return true; } WindowCmd<void>::setClient(old); @@ -135,7 +133,7 @@ bool SomeCmd::bool_execute() { return false; } -bool EveryCmd::bool_execute() { +bool EveryCmd::execute() { BScreen *screen = Fluxbox::instance()->keyScreen(); if (screen != 0) { FocusControl::Focusables win_list(screen->focusControl().creationOrderList().clientList()); @@ -148,7 +146,7 @@ bool EveryCmd::bool_execute() { WinClient *client = dynamic_cast<WinClient *>(*it); if (!client) continue; WindowCmd<void>::setClient(client); - if (!m_cmd->bool_execute()) + if (!m_cmd->execute()) return false; } WindowCmd<void>::setClient(old); @@ -158,7 +156,7 @@ bool EveryCmd::bool_execute() { namespace { -FbTk::Command *parseWindowList(const string &command, +FbTk::Command<void> *parseWindowList(const string &command, const string &args, bool trusted) { int opts; string pat; @@ -179,11 +177,11 @@ FbTk::Command *parseWindowList(const string &command, return 0; } -REGISTER_OBJECT_PARSER(attach, parseWindowList, Command); -REGISTER_OBJECT_PARSER(nextwindow, parseWindowList, Command); -REGISTER_OBJECT_PARSER(nextgroup, parseWindowList, Command); -REGISTER_OBJECT_PARSER(prevwindow, parseWindowList, Command); -REGISTER_OBJECT_PARSER(prevgroup, parseWindowList, Command); +REGISTER_COMMAND_PARSER(attach, parseWindowList, void); +REGISTER_COMMAND_PARSER(nextwindow, parseWindowList, void); +REGISTER_COMMAND_PARSER(nextgroup, parseWindowList, void); +REGISTER_COMMAND_PARSER(prevwindow, parseWindowList, void); +REGISTER_COMMAND_PARSER(prevgroup, parseWindowList, void); }; // end anonymous namespace @@ -219,7 +217,7 @@ void PrevWindowCmd::execute() { screen->cycleFocus(m_option, &m_pat, true); } -FbTk::Command *GoToWindowCmd::parse(const string &command, +FbTk::Command<void> *GoToWindowCmd::parse(const string &command, const string &arguments, bool trusted) { int num, opts; string args, pat; @@ -232,7 +230,7 @@ FbTk::Command *GoToWindowCmd::parse(const string &command, return new GoToWindowCmd(num, opts, pat); } -REGISTER_OBJECT_PARSER(gotowindow, GoToWindowCmd::parse, Command); +REGISTER_COMMAND_PARSER(gotowindow, GoToWindowCmd::parse, void); void GoToWindowCmd::execute() { BScreen *screen = Fluxbox::instance()->keyScreen(); @@ -243,7 +241,7 @@ void GoToWindowCmd::execute() { } } -FbTk::Command *DirFocusCmd::parse(const string &command, +FbTk::Command<void> *DirFocusCmd::parse(const string &command, const string &args, bool trusted) { if (command == "focusup") return new DirFocusCmd(FocusControl::FOCUSUP); @@ -256,10 +254,10 @@ FbTk::Command *DirFocusCmd::parse(const string &command, return 0; } -REGISTER_OBJECT_PARSER(focusup, DirFocusCmd::parse, Command); -REGISTER_OBJECT_PARSER(focusdown, DirFocusCmd::parse, Command); -REGISTER_OBJECT_PARSER(focusleft, DirFocusCmd::parse, Command); -REGISTER_OBJECT_PARSER(focusright, DirFocusCmd::parse, Command); +REGISTER_COMMAND_PARSER(focusup, DirFocusCmd::parse, void); +REGISTER_COMMAND_PARSER(focusdown, DirFocusCmd::parse, void); +REGISTER_COMMAND_PARSER(focusleft, DirFocusCmd::parse, void); +REGISTER_COMMAND_PARSER(focusright, DirFocusCmd::parse, void); void DirFocusCmd::execute() { BScreen *screen = Fluxbox::instance()->keyScreen(); @@ -271,7 +269,7 @@ void DirFocusCmd::execute() { screen->focusControl().dirFocus(*win, m_dir); } -REGISTER_OBJECT(addworkspace, AddWorkspaceCmd, Command); +REGISTER_COMMAND(addworkspace, AddWorkspaceCmd, void); void AddWorkspaceCmd::execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); @@ -279,7 +277,7 @@ void AddWorkspaceCmd::execute() { screen->addWorkspace(); } -REGISTER_OBJECT(removelastworkspace, RemoveLastWorkspaceCmd, Command); +REGISTER_COMMAND(removelastworkspace, RemoveLastWorkspaceCmd, void); void RemoveLastWorkspaceCmd::execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); @@ -289,7 +287,7 @@ void RemoveLastWorkspaceCmd::execute() { namespace { -FbTk::Command *parseIntCmd(const string &command, const string &args, +FbTk::Command<void> *parseIntCmd(const string &command, const string &args, bool trusted) { int num = 1; FbTk_istringstream iss(args.c_str()); @@ -308,11 +306,11 @@ FbTk::Command *parseIntCmd(const string &command, const string &args, return 0; } -REGISTER_OBJECT_PARSER(nextworkspace, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(prevworkspace, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(rightworkspace, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(leftworkspace, parseIntCmd, Command); -REGISTER_OBJECT_PARSER(workspace, parseIntCmd, Command); +REGISTER_COMMAND_PARSER(nextworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(prevworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(rightworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(leftworkspace, parseIntCmd, void); +REGISTER_COMMAND_PARSER(workspace, parseIntCmd, void); }; // end anonymous namespace @@ -355,7 +353,7 @@ void JumpToWorkspaceCmd::execute() { } } -REGISTER_OBJECT(arrangewindows, ArrangeWindowsCmd, Command); +REGISTER_COMMAND(arrangewindows, ArrangeWindowsCmd, void); /** try to arrange the windows on the current workspace in a 'clever' way. @@ -481,7 +479,7 @@ void ArrangeWindowsCmd::execute() { } } -REGISTER_OBJECT(showdesktop, ShowDesktopCmd, Command); +REGISTER_COMMAND(showdesktop, ShowDesktopCmd, void); void ShowDesktopCmd::execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); @@ -497,7 +495,7 @@ void ShowDesktopCmd::execute() { } } -REGISTER_OBJECT(closeallwindows, CloseAllWindowsCmd, Command); +REGISTER_COMMAND(closeallwindows, CloseAllWindowsCmd, void); void CloseAllWindowsCmd::execute() { BScreen *screen = Fluxbox::instance()->mouseScreen(); diff --git a/src/WorkspaceCmd.hh b/src/WorkspaceCmd.hh index f094894..d50c0bf 100644 --- a/src/WorkspaceCmd.hh +++ b/src/WorkspaceCmd.hh @@ -28,45 +28,45 @@ #include "ClientPattern.hh" #include "FocusControl.hh" -class WindowListCmd: public FbTk::Command { +class WindowListCmd: public FbTk::Command<void> { public: - WindowListCmd(FbTk::RefCount<FbTk::Command> cmd, int opts, - FbTk::RefCount<FbTk::BoolCommand> filter): + WindowListCmd(FbTk::RefCount<FbTk::Command<void> > cmd, int opts, + FbTk::RefCount<FbTk::Command<bool> > filter): m_cmd(cmd), m_opts(opts), m_filter(filter) { } void execute(); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); private: - FbTk::RefCount<FbTk::Command> m_cmd; + FbTk::RefCount<FbTk::Command<void> > m_cmd; int m_opts; - FbTk::RefCount<FbTk::BoolCommand> m_filter; + FbTk::RefCount<FbTk::Command<bool> > m_filter; }; -class SomeCmd: public FbTk::BoolCommand { +class SomeCmd: public FbTk::Command<bool> { public: - SomeCmd(FbTk::RefCount<FbTk::BoolCommand> cmd): m_cmd(cmd) { } + SomeCmd(FbTk::RefCount<FbTk::Command<bool> > cmd): m_cmd(cmd) { } - bool bool_execute(); - static FbTk::BoolCommand *parse(const std::string &command, + bool execute(); + static FbTk::Command<bool> *parse(const std::string &command, const std::string &args, bool trusted); private: - FbTk::RefCount<FbTk::BoolCommand> m_cmd; + FbTk::RefCount<FbTk::Command<bool> > m_cmd; }; -class EveryCmd: public FbTk::BoolCommand { +class EveryCmd: public FbTk::Command<bool> { public: - EveryCmd(FbTk::RefCount<FbTk::BoolCommand> cmd): m_cmd(cmd) { } + EveryCmd(FbTk::RefCount<FbTk::Command<bool> > cmd): m_cmd(cmd) { } - bool bool_execute(); + bool execute(); private: - FbTk::RefCount<FbTk::BoolCommand> m_cmd; + FbTk::RefCount<FbTk::Command<bool> > m_cmd; }; -class AttachCmd: public FbTk::Command { +class AttachCmd: public FbTk::Command<void> { public: explicit AttachCmd(const std::string &pat): m_pat(pat.c_str()) { } void execute(); @@ -74,7 +74,7 @@ private: const ClientPattern m_pat; }; -class NextWindowCmd: public FbTk::Command { +class NextWindowCmd: public FbTk::Command<void> { public: explicit NextWindowCmd(int option, std::string &pat): m_option(option), m_pat(pat.c_str()) { } @@ -84,7 +84,7 @@ private: const ClientPattern m_pat; }; -class PrevWindowCmd: public FbTk::Command { +class PrevWindowCmd: public FbTk::Command<void> { public: explicit PrevWindowCmd(int option, std::string &pat): m_option(option), m_pat(pat.c_str()) { } @@ -94,12 +94,12 @@ private: const ClientPattern m_pat; }; -class GoToWindowCmd: public FbTk::Command { +class GoToWindowCmd: public FbTk::Command<void> { public: GoToWindowCmd(int num, int option, std::string &pat): m_num(num), m_option(option), m_pat(pat.c_str()) { } void execute(); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); private: const int m_num; @@ -107,27 +107,27 @@ private: const ClientPattern m_pat; }; -class DirFocusCmd: public FbTk::Command { +class DirFocusCmd: public FbTk::Command<void> { public: explicit DirFocusCmd(const FocusControl::FocusDir dir): m_dir(dir) { } void execute(); - static FbTk::Command *parse(const std::string &command, + static FbTk::Command<void> *parse(const std::string &command, const std::string &args, bool trusted); private: const FocusControl::FocusDir m_dir; }; -class AddWorkspaceCmd: public FbTk::Command { +class AddWorkspaceCmd: public FbTk::Command<void> { public: void execute(); }; -class RemoveLastWorkspaceCmd: public FbTk::Command { +class RemoveLastWorkspaceCmd: public FbTk::Command<void> { public: void execute(); }; -class NextWorkspaceCmd: public FbTk::Command { +class NextWorkspaceCmd: public FbTk::Command<void> { public: explicit NextWorkspaceCmd(int option):m_option(option) { } void execute(); @@ -135,7 +135,7 @@ private: const int m_option; }; -class PrevWorkspaceCmd: public FbTk::Command { +class PrevWorkspaceCmd: public FbTk::Command<void> { public: explicit PrevWorkspaceCmd(int option):m_option(option) { } void execute(); @@ -143,7 +143,7 @@ private: const int m_option; }; -class LeftWorkspaceCmd: public FbTk::Command { +class LeftWorkspaceCmd: public FbTk::Command<void> { public: explicit LeftWorkspaceCmd(int num=1):m_param(num == 0 ? 1 : num) { } void execute(); @@ -151,7 +151,7 @@ private: const int m_param; }; -class RightWorkspaceCmd: public FbTk::Command { +class RightWorkspaceCmd: public FbTk::Command<void> { public: explicit RightWorkspaceCmd(int num=1):m_param(num == 0 ? 1 : num) { } void execute(); @@ -159,7 +159,7 @@ private: const int m_param; }; -class JumpToWorkspaceCmd: public FbTk::Command { +class JumpToWorkspaceCmd: public FbTk::Command<void> { public: explicit JumpToWorkspaceCmd(int workspace_num); void execute(); @@ -168,17 +168,17 @@ private: }; /// arranges windows in current workspace to rows and columns -class ArrangeWindowsCmd: public FbTk::Command { +class ArrangeWindowsCmd: public FbTk::Command<void> { public: void execute(); }; -class ShowDesktopCmd: public FbTk::Command { +class ShowDesktopCmd: public FbTk::Command<void> { public: void execute(); }; -class CloseAllWindowsCmd: public FbTk::Command { +class CloseAllWindowsCmd: public FbTk::Command<void> { public: void execute(); }; diff --git a/src/WorkspaceMenu.cc b/src/WorkspaceMenu.cc index 3f417ed..5a83170 100644 --- a/src/WorkspaceMenu.cc +++ b/src/WorkspaceMenu.cc @@ -25,7 +25,7 @@ #include "Workspace.hh" #include "WorkspaceCmd.hh" #include "MenuCreator.hh" -#include "FbTk/ObjectRegistry.hh" +#include "FbTk/CommandParser.hh" #include "FbCommands.hh" #include "Layer.hh" @@ -92,7 +92,7 @@ void WorkspaceMenu::update(FbTk::Subject *subj) { FbTk::MultiButtonMenuItem* mb_menu = new FbTk::MultiButtonMenuItem(5, wkspc->name().c_str(), &wkspc->menu()); - FbTk::RefCount<FbTk::Command> jump_cmd(new JumpToWorkspaceCmd(wkspc->workspaceID())); + FbTk::RefCount<FbTk::Command<void> > jump_cmd(new JumpToWorkspaceCmd(wkspc->workspaceID())); mb_menu->setCommand(3, jump_cmd); insert(mb_menu, workspace + IDX_AFTER_ICONS); } @@ -124,28 +124,28 @@ void WorkspaceMenu::init(BScreen &screen) { FbTk::MultiButtonMenuItem* mb_menu = new FbTk::MultiButtonMenuItem(5, wkspc->name().c_str(), &wkspc->menu()); - FbTk::RefCount<FbTk::Command> jump_cmd(new JumpToWorkspaceCmd(wkspc->workspaceID())); + FbTk::RefCount<FbTk::Command<void> > jump_cmd(new JumpToWorkspaceCmd(wkspc->workspaceID())); mb_menu->setCommand(2, jump_cmd); insert(mb_menu, workspace + IDX_AFTER_ICONS); } setItemSelected(screen.currentWorkspace()->workspaceID() + IDX_AFTER_ICONS, true); - RefCount<Command> saverc_cmd(new FbCommands::SaveResources()); + RefCount<Command<void> > saverc_cmd(new FbCommands::SaveResources()); MacroCommand *new_workspace_macro = new MacroCommand(); - RefCount<Command> addworkspace(new SimpleCommand<BScreen, int>(screen, &BScreen::addWorkspace)); + RefCount<Command<void> > addworkspace(new SimpleCommand<BScreen>(screen, (SimpleCommand<BScreen>::Action)&BScreen::addWorkspace)); new_workspace_macro->add(addworkspace); new_workspace_macro->add(saverc_cmd); - RefCount<Command> new_workspace_cmd(new_workspace_macro); + RefCount<Command<void> > new_workspace_cmd(new_workspace_macro); MacroCommand *remove_workspace_macro = new MacroCommand(); - RefCount<Command> rmworkspace(new SimpleCommand<BScreen, int>(screen, &BScreen::removeLastWorkspace)); + RefCount<Command<void> > rmworkspace(new SimpleCommand<BScreen>(screen, (SimpleCommand<BScreen>::Action)&BScreen::removeLastWorkspace)); remove_workspace_macro->add(rmworkspace); remove_workspace_macro->add(saverc_cmd); - RefCount<Command> remove_last_cmd(remove_workspace_macro); + RefCount<Command<void> > remove_last_cmd(remove_workspace_macro); - RefCount<Command> start_edit(FbTk::ObjectRegistry<Command>::instance().parse("setworkspacenamedialog")); + RefCount<Command<void> > start_edit(FbTk::CommandParser<void>::instance().parse("setworkspacenamedialog")); insert(new FbTk::MenuSeparator()); insert(_FB_XTEXT(Workspace, NewWorkspace, "New Workspace", "Add a new workspace"), diff --git a/src/Xinerama.hh b/src/Xinerama.hh index 4e7d06f..f58b4f0 100644 --- a/src/Xinerama.hh +++ b/src/Xinerama.hh @@ -40,7 +40,7 @@ template <typename ItemType> class XineramaHeadMenuItem : public FbTk::MenuItem { public: XineramaHeadMenuItem(const FbTk::FbString &label, ItemType &object, int headnum, - FbTk::RefCount<FbTk::Command> &cmd): + FbTk::RefCount<FbTk::Command<void> > &cmd): FbTk::MenuItem(label,cmd), m_object(object), m_headnum(headnum) {} XineramaHeadMenuItem(const FbTk::FbString &label, ItemType &object, int headnum): FbTk::MenuItem(label), m_object(object), m_headnum(headnum) {} @@ -79,7 +79,7 @@ XineramaHeadMenu<ItemType>::XineramaHeadMenu( m_object(item) { setLabel(title); - FbTk::RefCount<FbTk::Command> saverc_cmd(new FbTk::SimpleCommand<Fluxbox>( + FbTk::RefCount<FbTk::Command<void> > saverc_cmd(new FbTk::SimpleCommand<Fluxbox>( *Fluxbox::instance(), &Fluxbox::save_rc)); char tname[128]; diff --git a/src/fluxbox.cc b/src/fluxbox.cc index 5a6db71..2ebf931 100644 --- a/src/fluxbox.cc +++ b/src/fluxbox.cc @@ -263,7 +263,7 @@ Fluxbox::Fluxbox(int argc, char **argv, const char *dpy_name, const char *rcfile // Because when the command is executed we shouldn't do reconfig directly // because it could affect ongoing menu stuff so we need to reconfig in // the next event "round". - FbTk::RefCount<FbTk::Command> reconfig_cmd(new FbTk::SimpleCommand<Fluxbox>(*this, &Fluxbox::timed_reconfigure)); + FbTk::RefCount<FbTk::Command<void> > reconfig_cmd(new FbTk::SimpleCommand<Fluxbox>(*this, &Fluxbox::timed_reconfigure)); timeval to; to.tv_sec = 0; to.tv_usec = 1; @@ -1034,7 +1034,7 @@ void Fluxbox::handleSignal(int signum) { break; default: fprintf(stderr, - _FB_CONSOLETEXT(BaseDisplay, SignalCaught, "%s: signal %d caught\n", "signal catch debug message. Include %s for command and %d for signal number").c_str(), + _FB_CONSOLETEXT(BaseDisplay, SignalCaught, "%s: signal %d caught\n", "signal catch debug message. Include %s for Command<void> and %d for signal number").c_str(), m_argv[0], signum); if (! m_starting && ! re_enter) { -- cgit v0.11.2