From 584440f2b02ba5dba824efee8b7f47da65439d9b Mon Sep 17 00:00:00 2001
From: fluxgen <fluxgen>
Date: Mon, 17 Feb 2003 12:45:59 +0000
Subject: changes resource integer value in the menu

---
 src/IntResMenuItem.cc | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++
 src/IntResMenuItem.hh | 44 ++++++++++++++++++++++++++++++++
 2 files changed, 114 insertions(+)
 create mode 100644 src/IntResMenuItem.cc
 create mode 100644 src/IntResMenuItem.hh

diff --git a/src/IntResMenuItem.cc b/src/IntResMenuItem.cc
new file mode 100644
index 0000000..b272268
--- /dev/null
+++ b/src/IntResMenuItem.cc
@@ -0,0 +1,70 @@
+// IntResMenuItem.cc for Fluxbox Window Manager
+// Copyright (c) 2003 Henrik Kinnunen (fluxgen 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: IntResMenuItem.cc,v 1.1 2003/02/17 12:45:59 fluxgen Exp $
+
+#include "IntResMenuItem.hh"
+#include <cstdio>
+
+namespace {
+
+std::string appendIntValue(const std::string &label, int value) {
+    char *buff = new char[label.size() + 16];
+    sprintf(buff, "%s:  %d", label.c_str(), value);
+    std::string ret(buff);
+    delete [] buff;
+    return ret;
+}
+
+};
+
+IntResMenuItem::IntResMenuItem(const char *label, Resource<int> &res, int min_val, int max_val):
+    FbTk::MenuItem(label), m_org_label(FbTk::MenuItem::label()),
+        m_max(max_val), m_min(min_val), m_res(res) { 
+        setLabel(appendIntValue(m_org_label, *m_res).c_str());
+}
+
+void IntResMenuItem::click(int button, int time) {
+    static int last_time = -201;
+    int inc_val = 1;
+    // check double click
+    //!! TODO: must have some sort of "global" double click time in FbTk
+    if (time - last_time <= 200)
+        inc_val = 5;
+
+    last_time = time;
+
+    if ((button == 4 || button == 3)&& *m_res < m_max) // scroll up
+        (*m_res) += inc_val;
+    else if ((button == 5 || button == 1) && *m_res > m_min) // scroll down
+        (*m_res) -= inc_val;
+
+    // clamp value
+    if (*m_res > m_max)
+        *m_res = m_max;
+    else if (*m_res < m_min)
+        *m_res = m_min;
+
+    // update label
+    setLabel(appendIntValue(m_org_label, *m_res).c_str());
+    // call other commands
+    MenuItem::click(button, time);
+}
diff --git a/src/IntResMenuItem.hh b/src/IntResMenuItem.hh
new file mode 100644
index 0000000..3466c91
--- /dev/null
+++ b/src/IntResMenuItem.hh
@@ -0,0 +1,44 @@
+// IntResMenuItem.hh for Fluxbox Window Manager
+// Copyright (c) 2003 Henrik Kinnunen (fluxgen 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: IntResMenuItem.hh,v 1.1 2003/02/17 12:45:58 fluxgen Exp $
+
+#ifndef INTRESMENUITEM_HH
+#define INTRESMENUITEM_HH
+
+#include "MenuItem.hh"
+#include "Resource.hh"
+
+/// Changes an resource integer value between min and max
+class IntResMenuItem: public FbTk::MenuItem {
+public:
+    IntResMenuItem(const char *label, Resource<int> &res, int min_val, int max_val);
+
+    void click(int button, int time);
+
+private:
+    std::string m_org_label; ///< original label
+    const int m_max; ///< maximum value the integer can have
+    const int m_min; ///< minimum value the integer can have
+    Resource<int> &m_res; ///< resource item to be changed
+};
+
+#endif // INTRESMENUITEM_HH
-- 
cgit v0.11.2