summaryrefslogtreecommitdiff
path: root/plugingui
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2013-04-19 22:57:02 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2013-04-19 22:57:02 +0200
commitabc0caf95536a4001615f863860a091d6bc55973 (patch)
treeb3f79d1c92bc8e48df7d20375050808a945ca7e6 /plugingui
parent615c1f1544cabbe7ed4b33a1bde10b1b2ab71d2e (diff)
New listbox widgets and scrollbar.
Diffstat (limited to 'plugingui')
-rw-r--r--plugingui/listbox.cc5
-rw-r--r--plugingui/listbox.h1
-rw-r--r--plugingui/listboxbasic.cc118
-rw-r--r--plugingui/listboxbasic.h21
-rw-r--r--plugingui/listboxthin.cc118
-rw-r--r--plugingui/listboxthin.h67
-rw-r--r--plugingui/scrollbar.cc182
-rw-r--r--plugingui/scrollbar.h75
8 files changed, 527 insertions, 60 deletions
diff --git a/plugingui/listbox.cc b/plugingui/listbox.cc
index 6c6c6e7..3647753 100644
--- a/plugingui/listbox.cc
+++ b/plugingui/listbox.cc
@@ -57,6 +57,11 @@ void GUI::ListBox::addItem(std::string name, std::string value)
basic->addItem(name, value);
}
+void GUI::ListBox::addItems(std::vector<ListBoxBasic::Item> &items)
+{
+ basic->addItems(items);
+}
+
void GUI::ListBox::clear()
{
basic->clear();
diff --git a/plugingui/listbox.h b/plugingui/listbox.h
index 9a702df..4a7af20 100644
--- a/plugingui/listbox.h
+++ b/plugingui/listbox.h
@@ -42,6 +42,7 @@ public:
~ListBox();
void addItem(std::string name, std::string value);
+ void addItems(std::vector<ListBoxBasic::Item> &items);
void clear();
bool selectItem(int index);
diff --git a/plugingui/listboxbasic.cc b/plugingui/listboxbasic.cc
index 25b3daf..25cf00d 100644
--- a/plugingui/listboxbasic.cc
+++ b/plugingui/listboxbasic.cc
@@ -30,14 +30,25 @@
#include "font.h"
#include <stdio.h>
+#include <hugin.hpp>
+
+void scrolled(void *ptr)
+{
+ GUI::ListBoxBasic *l = (GUI::ListBoxBasic *)ptr;
+ l->repaintEvent(NULL);
+}
GUI::ListBoxBasic::ListBoxBasic(GUI::Widget *parent)
- : GUI::Widget(parent)
+ : GUI::Widget(parent), scroll(this), bg_img(":widget_c.png")
{
+ scroll.move(0,0);
+ scroll.resize(18, 100);
+
+ scroll.registerValueChangeHandler(scrolled, this);
+
padding = 4;
- btn_size = 14;
+ btn_size = 18;
- scroll_offset = 0;
selected = -1;
marked = -1;
@@ -49,13 +60,10 @@ GUI::ListBoxBasic::ListBoxBasic(GUI::Widget *parent)
valch_handler = NULL;
valch_ptr = NULL;
-
- bg_img = new GUI::Image(":widget_c.png");
}
GUI::ListBoxBasic::~ListBoxBasic()
{
- delete bg_img;
}
void GUI::ListBoxBasic::setSelection(int index)
@@ -66,11 +74,25 @@ void GUI::ListBoxBasic::setSelection(int index)
void GUI::ListBoxBasic::addItem(std::string name, std::string value)
{
- struct item i;
- i.name = name;
- i.value = value;
-
- items.push_back(i);
+ std::vector<GUI::ListBoxBasic::Item> items;
+ GUI::ListBoxBasic::Item item;
+ item.name = name;
+ item.value = value;
+ items.push_back(item);
+ addItems(items);
+}
+
+void GUI::ListBoxBasic::addItems(std::vector<GUI::ListBoxBasic::Item> &is)
+{
+ std::vector<GUI::ListBoxBasic::Item>::iterator i = is.begin();
+ while(i != is.end()) {
+ items.push_back(*i);
+ i++;
+ }
+
+ int numitems = height() / (font.textHeight() + padding);
+ scroll.setRange(numitems);
+ scroll.setMaximum(items.size());
// sort
for(int x = 0; x < (int)items.size() - 1; x++) {
@@ -80,7 +102,7 @@ void GUI::ListBoxBasic::addItem(std::string name, std::string value)
if(x == selected) setSelection(y);
else if(selected == y) setSelection(x);
- struct item tmp = items[x];
+ GUI::ListBoxBasic::Item tmp = items[x];
items[x] = items[y];
items[y] = tmp;
}
@@ -94,7 +116,7 @@ void GUI::ListBoxBasic::clear()
{
items.clear();
setSelection(-1);
- scroll_offset = 0;
+ scroll.setValue(0);
repaintEvent(NULL);
}
@@ -147,45 +169,39 @@ void GUI::ListBoxBasic::repaintEvent(GUI::RepaintEvent *e)
int h = height();
if(w == 0 || h == 0) return;
- p.drawImageStretched(0, 0, bg_img, w, h);
+ p.drawImageStretched(0, 0, &bg_img, w, h);
+
+ p.setColour(GUI::Colour(183.0/255.0, 219.0/255.0 , 255.0/255.0, 1));
int yoffset = padding / 2;
- int skip = scroll_offset;
+ int skip = scroll.value();
for(int idx = skip; idx < (int)items.size(); idx++) {
- struct item *i = &items[idx];
+ GUI::ListBoxBasic::Item *i = &items[idx];
if(idx == selected) {
- p.setColour(Colour(0.6, 0.9));
- p.drawFilledRectangle(1,
+ p.setColour(GUI::Colour(183.0/255.0, 219.0/255.0 , 255.0/255.0, 0.5));
+ p.drawFilledRectangle(0,
yoffset - (padding / 2),
width() - 1,
yoffset + (font.textHeight() + 1));
}
if(idx == marked) {
- p.setColour(Colour(1, 0.9));
- p.drawRectangle(1,
+ p.drawRectangle(0,
yoffset - (padding / 2),
width() - 1,
yoffset + (font.textHeight() + 1));
}
- p.setColour(Colour(1, 1));
+ p.setColour(GUI::Colour(183.0/255.0, 219.0/255.0 , 255.0/255.0, 1));
+
p.drawText(2, yoffset + font.textHeight(), font, i->name);
yoffset += font.textHeight() + padding;
}
-
- p.drawRectangle(width() - btn_size, 0, width() - 1, btn_size);
- p.drawRectangle(width() - btn_size, height() - btn_size,
- width() - 1, height() - 1);
}
void GUI::ListBoxBasic::scrollEvent(ScrollEvent *e)
{
- scroll_offset += e->delta;
- if(scroll_offset < 0) scroll_offset = 0;
- if(scroll_offset > ((int)items.size() - 1))
- scroll_offset = ((int)items.size() - 1);
- repaintEvent(NULL);
+ scroll.scrollEvent(e);
}
void GUI::ListBoxBasic::keyEvent(GUI::KeyEvent *e)
@@ -198,9 +214,8 @@ void GUI::ListBoxBasic::keyEvent(GUI::KeyEvent *e)
marked--;
if(marked < 0) marked = 0;
- if(marked < scroll_offset) {
- scroll_offset = marked;
- if(scroll_offset < 0) scroll_offset = 0;
+ if(marked < scroll.value()) {
+ scroll.setValue(marked);
}
}
break;
@@ -212,18 +227,15 @@ void GUI::ListBoxBasic::keyEvent(GUI::KeyEvent *e)
marked++;
if(marked > ((int)items.size() - 1)) marked = (int)items.size() - 1;
- if(marked > (scroll_offset + numitems - 1)) {
- scroll_offset = marked - numitems + 1;
- if(scroll_offset > ((int)items.size() - 1))
- scroll_offset = ((int)items.size() - 1);
+ if(marked > (scroll.value() + numitems - 1)) {
+ scroll.setValue(marked - numitems + 1);
}
}
break;
case GUI::KeyEvent::KEY_HOME:
marked = 0;
- if(marked < scroll_offset) {
- scroll_offset = marked;
- if(scroll_offset < 0) scroll_offset = 0;
+ if(marked < scroll.value()) {
+ scroll.setValue(marked);
}
break;
case GUI::KeyEvent::KEY_END:
@@ -232,10 +244,8 @@ void GUI::ListBoxBasic::keyEvent(GUI::KeyEvent *e)
int numitems = height() / (font.textHeight() + padding);
marked = (int)items.size() - 1;
- if(marked > (scroll_offset + numitems - 1)) {
- scroll_offset = marked - numitems + 1;
- if(scroll_offset > ((int)items.size() - 1))
- scroll_offset = ((int)items.size() - 1);
+ if(marked > (scroll.value() + numitems - 1)) {
+ scroll.setValue(marked - numitems + 1);
}
}
break;
@@ -261,24 +271,19 @@ void GUI::ListBoxBasic::buttonEvent(ButtonEvent *e)
if(e->x > ((int)width() - btn_size) && e->y < ((int)width() - 1)) {
if(e->y > 0 && e->y < btn_size) {
if(e->direction == -1) return;
- scroll_offset--;
- if(scroll_offset < 0) scroll_offset = 0;
- repaintEvent(NULL);
+ scroll.setValue(scroll.value() - 1);
return;
}
if(e->y > ((int)height() - btn_size) && e->y < ((int)height() - 1)) {
if(e->direction == -1) return;
- scroll_offset++;
- if(scroll_offset > ((int)items.size() - 1))
- scroll_offset = ((int)items.size() - 1);
- repaintEvent(NULL);
+ scroll.setValue(scroll.value() + 1);
return;
}
}
if(e->direction == -1) {
- int skip = scroll_offset;
+ int skip = scroll.value();
size_t yoffset = padding / 2;
for(int idx = skip; idx < (int)items.size(); idx++) {
yoffset += font.textHeight() + padding;
@@ -294,7 +299,7 @@ void GUI::ListBoxBasic::buttonEvent(ButtonEvent *e)
}
if(e->direction != -1) {
- int skip = scroll_offset;
+ int skip = scroll.value();
size_t yoffset = padding / 2;
for(int idx = skip; idx < (int)items.size(); idx++) {
yoffset += font.textHeight() + padding;
@@ -309,3 +314,10 @@ void GUI::ListBoxBasic::buttonEvent(ButtonEvent *e)
if(e->doubleclick && sel_handler) sel_handler(sel_ptr);
}
+
+void GUI::ListBoxBasic::resize(int w, int h)
+{
+ GUI::Widget::resize(w,h);
+ scroll.move(w - scroll.width(), 0);
+ scroll.resize(scroll.width(), h);
+}
diff --git a/plugingui/listboxbasic.h b/plugingui/listboxbasic.h
index 1b7644e..ebb46b0 100644
--- a/plugingui/listboxbasic.h
+++ b/plugingui/listboxbasic.h
@@ -34,16 +34,25 @@
#include "font.h"
#include "painter.h"
+#include "scrollbar.h"
+
namespace GUI {
class ListBoxBasic : public Widget {
public:
+ class Item {
+ public:
+ std::string name;
+ std::string value;
+ };
+
ListBoxBasic(Widget *parent);
~ListBoxBasic();
bool isFocusable() { return true; }
void addItem(std::string name, std::string value);
+ void addItems(std::vector<Item> &items);
void clear();
bool selectItem(int index);
@@ -58,24 +67,22 @@ public:
virtual void buttonEvent(ButtonEvent *e);
virtual void scrollEvent(ScrollEvent *e);
virtual void keyEvent(KeyEvent *e);
+ virtual void resize(int w, int h);
private:
- Image *bg_img;
+ ScrollBar scroll;
+
+ Image bg_img;
void setSelection(int index);
- struct item {
- std::string name;
- std::string value;
- };
+ std::vector<Item> items;
- std::vector<struct item> items;
int selected;
int marked;
GUI::Font font;
int padding;
int btn_size;
- int scroll_offset;
void (*sel_handler)(void *);
void *sel_ptr;
diff --git a/plugingui/listboxthin.cc b/plugingui/listboxthin.cc
new file mode 100644
index 0000000..3f0fbc6
--- /dev/null
+++ b/plugingui/listboxthin.cc
@@ -0,0 +1,118 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * listboxthin.cc
+ *
+ * Sun Apr 7 19:39:36 CEST 2013
+ * Copyright 2013 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "listboxthin.h"
+
+#include "painter.h"
+#include "font.h"
+
+#include <stdio.h>
+
+GUI::ListBoxThin::ListBoxThin(GUI::Widget *parent)
+ : GUI::Widget(parent)
+{
+ box.topLeft = new Image(":thinlistbox_tl.png");
+ box.top = new Image(":thinlistbox_t.png");
+ box.topRight = new Image(":thinlistbox_tr.png");
+ box.left = new Image(":thinlistbox_l.png");
+ box.right = new Image(":thinlistbox_r.png");
+ box.bottomLeft = new Image(":thinlistbox_bl.png");
+ box.bottom = new Image(":thinlistbox_b.png");
+ box.bottomRight = new Image(":thinlistbox_br.png");
+ box.center = new Image(":thinlistbox_c.png");
+
+ basic = new GUI::ListBoxBasic(this);
+ basic->move(box.left->width(), box.top->height());
+}
+
+GUI::ListBoxThin::~ListBoxThin()
+{
+}
+
+void GUI::ListBoxThin::addItem(std::string name, std::string value)
+{
+ basic->addItem(name, value);
+}
+
+void GUI::ListBoxThin::addItems(std::vector<ListBoxBasic::Item> &items)
+{
+ basic->addItems(items);
+}
+
+void GUI::ListBoxThin::clear()
+{
+ basic->clear();
+}
+
+bool GUI::ListBoxThin::selectItem(int index)
+{
+ return basic->selectItem(index);
+}
+
+std::string GUI::ListBoxThin::selectedName()
+{
+ return basic->selectedName();
+}
+
+std::string GUI::ListBoxThin::selectedValue()
+{
+ return basic->selectedValue();
+}
+
+void GUI::ListBoxThin::registerClickHandler(void (*handler)(void *), void *ptr)
+{
+ basic->registerClickHandler(handler, ptr);
+}
+
+void GUI::ListBoxThin::registerSelectHandler(void (*handler)(void *), void *ptr)
+{
+ basic->registerSelectHandler(handler, ptr);
+}
+
+void GUI::ListBoxThin::registerValueChangeHandler(void (*handler)(void *),
+ void *ptr)
+{
+ basic->registerValueChangeHandler(handler, ptr);
+}
+
+void GUI::ListBoxThin::repaintEvent(GUI::RepaintEvent *e)
+{
+ GUI::Painter p(this);
+
+ p.clear();
+
+ int w = width();
+ int h = height();
+ if(w == 0 || h == 0) return;
+ p.drawBox(0, 0, &box, w, h);
+}
+
+void GUI::ListBoxThin::resize(int width, int height)
+{
+ GUI::Widget::resize(width, height);
+ basic->resize(width - (box.left->width() + box.right->width()),
+ height - (box.top->height() + box.bottom->height()));
+}
diff --git a/plugingui/listboxthin.h b/plugingui/listboxthin.h
new file mode 100644
index 0000000..9c5363a
--- /dev/null
+++ b/plugingui/listboxthin.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * listboxthin.h
+ *
+ * Sun Apr 7 19:39:35 CEST 2013
+ * Copyright 2013 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#ifndef __DRUMGIZMO_LISTBOXTHIN_H__
+#define __DRUMGIZMO_LISTBOXTHIN_H__
+
+#include <string.h>
+#include <vector>
+
+#include "widget.h"
+#include "painter.h"
+#include "listboxbasic.h"
+
+namespace GUI {
+
+class ListBoxThin : public Widget {
+public:
+ ListBoxThin(Widget *parent);
+ ~ListBoxThin();
+
+ void addItem(std::string name, std::string value);
+ void addItems(std::vector<ListBoxBasic::Item> &items);
+
+ void clear();
+ bool selectItem(int index);
+ std::string selectedName();
+ std::string selectedValue();
+
+ void registerSelectHandler(void (*handler)(void *), void *ptr);
+ void registerClickHandler(void (*handler)(void *), void *ptr);
+ void registerValueChangeHandler(void (*handler)(void *), void *ptr);
+
+ virtual void repaintEvent(GUI::RepaintEvent *e);
+ virtual void resize(int w, int h);
+
+private:
+ ListBoxBasic *basic;
+
+ Painter::Box box;
+};
+
+};
+
+#endif/*__DRUMGIZMO_LISTBOXTHIN_H__*/
diff --git a/plugingui/scrollbar.cc b/plugingui/scrollbar.cc
new file mode 100644
index 0000000..3fc3ac8
--- /dev/null
+++ b/plugingui/scrollbar.cc
@@ -0,0 +1,182 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * scrollbar.cc
+ *
+ * Sun Apr 14 12:54:58 CEST 2013
+ * Copyright 2013 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include "scrollbar.h"
+
+#include <hugin.hpp>
+
+#include "painter.h"
+
+GUI::ScrollBar::ScrollBar(GUI::Widget *parent)
+ : GUI::Widget(parent), bg_img(":widget_c.png")
+{
+ handler = NULL;
+ ptr = NULL;
+}
+
+void GUI::ScrollBar::setRange(int r)
+{
+ DEBUG(scroll, "%d\n", r);
+ ran = r;
+ setValue(value());
+ repaintEvent(NULL);
+}
+
+int GUI::ScrollBar::range()
+{
+ return ran;
+}
+
+void GUI::ScrollBar::setMaximum(int m)
+{
+ DEBUG(scroll, "%d\n", m);
+ max = m;
+ setValue(value());
+ repaintEvent(NULL);
+}
+
+int GUI::ScrollBar::maximum()
+{
+ return max;
+}
+
+void GUI::ScrollBar::setValue(int value)
+{
+ val = value;
+ if(val > max - ran) val = max - ran;
+ if(val < 0) val = 0;
+
+ if(handler) handler(ptr);
+
+ repaintEvent(NULL);
+}
+
+int GUI::ScrollBar::value()
+{
+ return val;
+}
+
+void GUI::ScrollBar::registerValueChangeHandler(void (*handler)(void *),
+ void *ptr)
+{
+ this->handler = handler;
+ this->ptr = ptr;
+}
+
+static void drawArrow(GUI::Painter &p, int x, int y, int w, int h)
+{
+ if(h < 0) y -= h;
+
+ p.drawLine(x, y, x+(w/2), y+h);
+ p.drawLine(x+(w/2), y+h, x+w, y);
+
+ y++;
+ p.drawLine(x, y, x+(w/2), y+h);
+ p.drawLine(x+(w/2), y+h, x+w, y);
+}
+
+void GUI::ScrollBar::repaintEvent(RepaintEvent *e)
+{
+ GUI::Painter p(this);
+
+ p.clear();
+
+ p.drawImageStretched(0, 0, &bg_img, width(), height());
+
+ p.setColour(GUI::Colour(183.0/255.0, 219.0/255.0 , 255.0/255.0, 1));
+ if(!max) return;
+
+ {
+ int h = height() - 2 * width() - 3;
+ int offset = width() + 2;
+
+ int y_val1 = (val * h) / max;
+ int y_val2 = ((val + ran) * h) / max;
+
+ p.drawFilledRectangle(2, y_val1 + offset, width() - 1, y_val2 + offset);
+ }
+
+ p.drawLine(0, 0, 0, height());
+
+ drawArrow(p, width()/4, width()/4, width()/2, -1 * (width()/3));
+ p.drawLine(0, width(), width(), width());
+
+ drawArrow(p, width()/4, height() - width() + width()/4, width()/2, width()/3);
+ p.drawLine(0, height() - width(), width(), height() - width());
+}
+
+void GUI::ScrollBar::scrollEvent(ScrollEvent *e)
+{
+ setValue(value() + e->delta);
+}
+
+void GUI::ScrollBar::mouseMoveEvent(MouseMoveEvent *e)
+{
+ if(!dragging) return;
+
+ float delta = yoffset - e->y;
+
+ int h = height() - 2 * width() - 3;
+ delta /= (float)h / (float)max;
+ setValue(value_offset - delta);
+}
+
+void GUI::ScrollBar::buttonEvent(ButtonEvent *e)
+{
+ if(e->y < (int)width() && e->y > 0) {
+ if(e->direction == -1) setValue(value() - 1);
+ return;
+ }
+
+ if(e->y > (int)height() - (int)width() && e->y < (int)height()) {
+ if(e->direction == -1) setValue(value() + 1);
+ return;
+ }
+
+ if(e->direction == 1) {
+ yoffset = e->y;
+ value_offset = value();
+ }
+
+ dragging = (e->direction == 1);
+}
+
+#ifdef TEST_SCROLLBAR
+//Additional dependency files
+//deps:
+//Required cflags (autoconf vars may be used)
+//cflags:
+//Required link options (autoconf vars may be used)
+//libs:
+#include "test.h"
+
+TEST_BEGIN;
+
+// TODO: Put some testcode here (see test.h for usable macros).
+
+TEST_END;
+
+#endif/*TEST_SCROLLBAR*/
diff --git a/plugingui/scrollbar.h b/plugingui/scrollbar.h
new file mode 100644
index 0000000..52acf9d
--- /dev/null
+++ b/plugingui/scrollbar.h
@@ -0,0 +1,75 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * scrollbar.h
+ *
+ * Sun Apr 14 12:54:58 CEST 2013
+ * Copyright 2013 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#ifndef __DRUMGIZMO_SCROLLBAR_H__
+#define __DRUMGIZMO_SCROLLBAR_H__
+
+#include "widget.h"
+#include "image.h"
+
+namespace GUI {
+
+class ScrollBar : public Widget {
+public:
+ ScrollBar(Widget *parent);
+
+ bool catchMouse() { return true; }
+
+ void setRange(int range);
+ int range();
+
+ void setMaximum(int max);
+ int maximum();
+
+ void setValue(int value);
+ int value();
+
+ void registerValueChangeHandler(void (*handler)(void *), void *ptr);
+
+ void repaintEvent(RepaintEvent *e);
+ void scrollEvent(ScrollEvent *e);
+ void buttonEvent(ButtonEvent *e);
+ void mouseMoveEvent(MouseMoveEvent *e);
+
+private:
+ int max;
+ int val;
+ int ran;
+
+ int yoffset;
+ int value_offset;
+ bool dragging;
+
+ Image bg_img;
+
+ void (*handler)(void *);
+ void *ptr;
+};
+
+};
+
+
+#endif/*__DRUMGIZMO_SCROLLBAR_H__*/