From 3de12a0ad38e1543974827d211f8e498fe7b7ac6 Mon Sep 17 00:00:00 2001
From: fluxgen <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<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
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<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
-- 
cgit v0.11.2