all repos — fluxbox @ 3de12a0ad38e1543974827d211f8e498fe7b7ac6

custom fork of the fluxbox windowmanager

multi button menu item
fluxgen fluxgen
commit

3de12a0ad38e1543974827d211f8e498fe7b7ac6

parent

91a3914de0069c6e2fe144ebd8549583261d874a

2 files changed, 128 insertions(+), 0 deletions(-)

jump to
A src/FbTk/MultiButtonMenuItem.cc

@@ -0,0 +1,74 @@

+// MultiButtonMenuItem.cc for FbTk +// Copyright (c) 2003 Henrik Kinnunen (fluxgen at users.sourceforge.net) +// and Simon Bowden (rathnor at users.sourceforge.net) +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +// $Id: MultiButtonMenuItem.cc,v 1.1 2003/11/27 13:20:57 fluxgen Exp $ + +#include "MultiButtonMenuItem.hh" + +namespace FbTk { + +MultiButtonMenuItem::MultiButtonMenuItem(int buttons, const char *label): + MenuItem(label), + m_buttons(buttons), + m_button_exe(0) { + init(buttons); +} + +MultiButtonMenuItem::MultiButtonMenuItem(int buttons, const char *label, Menu *submenu): + MenuItem(label, submenu), + m_buttons(buttons), + m_button_exe(0) { + init(buttons); +} + +MultiButtonMenuItem::~MultiButtonMenuItem() { + if (m_button_exe != 0) + delete [] m_button_exe; +} + +void MultiButtonMenuItem::setCommand(int button, FbTk::RefCount<FbTk::Command> &cmd) { + if (button <= 0 || button > buttons() || buttons() == 0) + return; + m_button_exe[button - 1] = cmd; +} + +void MultiButtonMenuItem::click(int button, int time) { + if (button <= 0 || button > buttons() || buttons() == 0) + return; + + if (*m_button_exe[button - 1] != 0) + m_button_exe[button - 1]->execute(); +} + +void MultiButtonMenuItem::init(int buttons) { + if (buttons < 0) + m_buttons = 0; + else + m_buttons = buttons; + + if (m_buttons != 0) + m_button_exe = new FbTk::RefCount<FbTk::Command>[m_buttons]; + else + m_button_exe = 0; +} + +} // end namespace FbTk
A src/FbTk/MultiButtonMenuItem.hh

@@ -0,0 +1,54 @@

+// MultiButtonMenuItem.hh for FbTk +// Copyright (c) 2003 Henrik Kinnunen (fluxgen at users.sourceforge.net) +// and Simon Bowden (rathnor at users.sourceforge.net) +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +// $Id: MultiButtonMenuItem.hh,v 1.1 2003/11/27 13:20:57 fluxgen Exp $ + +#ifndef FBTK_MULTIBUTTONMENUITEM_HH +#define FBTK_MULTIBUTTONMENUITEM_HH + +#include "MenuItem.hh" + +namespace FbTk { + +/// Handles commands for the specified numbers of buttons +class MultiButtonMenuItem: public FbTk::MenuItem { +public: + MultiButtonMenuItem(int buttons, const char *label); + MultiButtonMenuItem(int buttons, const char *label, Menu *submenu); + virtual ~MultiButtonMenuItem(); + /// sets command to specified button + void setCommand(int button, FbTk::RefCount<FbTk::Command> &cmd); + /// executes command for the button click + virtual void click(int button, int time); + /// @return number of buttons this instance handles + inline unsigned int buttons() const { return m_buttons; } + +private: + void init(int buttons); + + FbTk::RefCount<FbTk::Command> *m_button_exe; + unsigned int m_buttons; +}; + +} // end namespace FbTk + +#endif // FBTK_MULTIBUTTONMENUITEM_HH