From 3de12a0ad38e1543974827d211f8e498fe7b7ac6 Mon Sep 17 00:00:00 2001 From: fluxgen Date: Thu, 27 Nov 2003 13:20:57 +0000 Subject: multi button menu item --- src/FbTk/MultiButtonMenuItem.cc | 74 +++++++++++++++++++++++++++++++++++++++++ src/FbTk/MultiButtonMenuItem.hh | 54 ++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 src/FbTk/MultiButtonMenuItem.cc create mode 100644 src/FbTk/MultiButtonMenuItem.hh diff --git a/src/FbTk/MultiButtonMenuItem.cc b/src/FbTk/MultiButtonMenuItem.cc new file mode 100644 index 0000000..23b6abf --- /dev/null +++ b/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 &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[m_buttons]; + else + m_button_exe = 0; +} + +} // end namespace FbTk diff --git a/src/FbTk/MultiButtonMenuItem.hh b/src/FbTk/MultiButtonMenuItem.hh new file mode 100644 index 0000000..d56bfcf --- /dev/null +++ b/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 &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 *m_button_exe; + unsigned int m_buttons; +}; + +} // end namespace FbTk + +#endif // FBTK_MULTIBUTTONMENUITEM_HH -- cgit v0.11.2