summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2015-09-28 19:32:26 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2015-09-28 19:32:26 +0200
commitbf72f82495542f7e052978b7135fc312ede8eec4 (patch)
tree7108deec160a858dffd51ab89a2e36fabdce8ad4
parentf7bdf8448c3ea0fcb07a1dffb14c5811d4e91079 (diff)
Refactored Button.
-rw-r--r--plugingui/button.cc208
-rw-r--r--plugingui/button.h55
-rw-r--r--plugingui/filebrowser.cc14
-rw-r--r--plugingui/filebrowser.h3
-rw-r--r--plugingui/plugingui.cc75
5 files changed, 189 insertions, 166 deletions
diff --git a/plugingui/button.cc b/plugingui/button.cc
index c316ef3..dea376c 100644
--- a/plugingui/button.cc
+++ b/plugingui/button.cc
@@ -31,127 +31,131 @@
#include <stdio.h>
#include <hugin.hpp>
-GUI::Button::Button(Widget *parent)
- : GUI::Widget(parent)
-{
- box_up.topLeft = new Image(":pushbutton_tl.png");
- box_up.top = new Image(":pushbutton_t.png");
- box_up.topRight = new Image(":pushbutton_tr.png");
- box_up.left = new Image(":pushbutton_l.png");
- box_up.right = new Image(":pushbutton_r.png");
- box_up.bottomLeft = new Image(":pushbutton_bl.png");
- box_up.bottom = new Image(":pushbutton_b.png");
- box_up.bottomRight = new Image(":pushbutton_br.png");
- box_up.center = new Image(":pushbutton_c.png");
-
- box_down.topLeft = new Image(":pushbuttondown_tl.png");
- box_down.top = new Image(":pushbuttondown_t.png");
- box_down.topRight = new Image(":pushbuttondown_tr.png");
- box_down.left = new Image(":pushbuttondown_l.png");
- box_down.right = new Image(":pushbuttondown_r.png");
- box_down.bottomLeft = new Image(":pushbuttondown_bl.png");
- box_down.bottom = new Image(":pushbuttondown_b.png");
- box_down.bottomRight = new Image(":pushbuttondown_br.png");
- box_down.center = new Image(":pushbuttondown_c.png");
-
- draw_state = up;
- button_state = up;
-
- handler = NULL;
- ptr = NULL;
-}
+namespace GUI {
-void GUI::Button::registerClickHandler(void (*handler)(void *), void *ptr)
+Button::Button(Widget *parent)
+ : Widget(parent)
+ , draw_state(up)
+ , button_state(up)
{
- this->handler = handler;
- this->ptr = ptr;
+ box_up.topLeft = new Image(":pushbutton_tl.png");
+ box_up.top = new Image(":pushbutton_t.png");
+ box_up.topRight = new Image(":pushbutton_tr.png");
+ box_up.left = new Image(":pushbutton_l.png");
+ box_up.right = new Image(":pushbutton_r.png");
+ box_up.bottomLeft = new Image(":pushbutton_bl.png");
+ box_up.bottom = new Image(":pushbutton_b.png");
+ box_up.bottomRight = new Image(":pushbutton_br.png");
+ box_up.center = new Image(":pushbutton_c.png");
+
+ box_down.topLeft = new Image(":pushbuttondown_tl.png");
+ box_down.top = new Image(":pushbuttondown_t.png");
+ box_down.topRight = new Image(":pushbuttondown_tr.png");
+ box_down.left = new Image(":pushbuttondown_l.png");
+ box_down.right = new Image(":pushbuttondown_r.png");
+ box_down.bottomLeft = new Image(":pushbuttondown_bl.png");
+ box_down.bottom = new Image(":pushbuttondown_b.png");
+ box_down.bottomRight = new Image(":pushbuttondown_br.png");
+ box_down.center = new Image(":pushbuttondown_c.png");
}
-void GUI::Button::buttonEvent(ButtonEvent *e)
+Button::~Button()
{
- if(e->direction == 1) {
- draw_state = down;
- button_state = down;
- in_button = true;
- repaintEvent(NULL);
- }
- if(e->direction == -1) {
- draw_state = up;
- button_state = up;
- repaintEvent(NULL);
- if(in_button) {
- clicked();
- if(handler) handler(ptr);
- }
- }
+ delete(box_up.topLeft);
+ delete(box_up.top);
+ delete(box_up.topRight);
+ delete(box_up.left);
+ delete(box_up.right);
+ delete(box_up.bottomLeft);
+ delete(box_up.bottom);
+ delete(box_up.bottomRight);
+ delete(box_up.center);
+ delete(box_down.topLeft);
+ delete(box_down.top);
+ delete(box_down.topRight);
+ delete(box_down.left);
+ delete(box_down.right);
+ delete(box_down.bottomLeft);
+ delete(box_down.bottom);
+ delete(box_down.bottomRight);
+ delete(box_down.center);
}
-void GUI::Button::repaintEvent(GUI::RepaintEvent *e)
+void Button::buttonEvent(ButtonEvent *e)
{
- Painter p(this);
-
- p.clear();
-
- int w = width();
- int h = height();
- if(w == 0 || h == 0) return;
-
- switch(draw_state) {
- case up:
- p.drawBox(0, 0, &box_up, w, h);
- break;
- case down:
- p.drawBox(0, 0, &box_down, w, h);
- break;
- }
-
- Font font(":fontemboss.png");
- p.setColour(Colour(0.1));
- p.drawText(width()/2-(text.length()*3)+(draw_state==up?0:1),
- height()/2+5+1+(draw_state==up?0:1), font, text, true);
+ if(e->direction == 1)
+ {
+ draw_state = down;
+ button_state = down;
+ in_button = true;
+ repaintEvent(nullptr);
+ }
+
+ if(e->direction == -1)
+ {
+ draw_state = up;
+ button_state = up;
+ repaintEvent(nullptr);
+ if(in_button)
+ {
+ clicked();
+ clickNotifier();
+ }
+ }
}
-void GUI::Button::setText(std::string text)
+void Button::repaintEvent(RepaintEvent *e)
{
- this->text = text;
- repaintEvent(NULL);
+ Painter p(this);
+
+ p.clear();
+
+ int w = width();
+ int h = height();
+ if(w == 0 || h == 0)
+ {
+ return;
+ }
+
+ switch(draw_state) {
+ case up:
+ p.drawBox(0, 0, &box_up, w, h);
+ break;
+ case down:
+ p.drawBox(0, 0, &box_down, w, h);
+ break;
+ }
+
+ Font font(":fontemboss.png");
+ p.setColour(Colour(0.1));
+ p.drawText(width()/2-(text.length()*3)+(draw_state==up?0:1),
+ height()/2+5+1+(draw_state==up?0:1), font, text, true);
}
-void GUI::Button::mouseLeaveEvent()
+void Button::setText(std::string text)
{
- in_button = false;
- if(button_state == down) {
- draw_state = up;
- repaintEvent(NULL);
- }
+ this->text = text;
+ repaintEvent(nullptr);
}
-void GUI::Button::mouseEnterEvent()
+void Button::mouseLeaveEvent()
{
- in_button = true;
- if(button_state == down) {
- draw_state = down;
- repaintEvent(NULL);
- }
+ in_button = false;
+ if(button_state == down)
+ {
+ draw_state = up;
+ repaintEvent(nullptr);
+ }
}
-void GUI::Button::mouseMoveEvent(MouseMoveEvent *e)
+void Button::mouseEnterEvent()
{
+ in_button = true;
+ if(button_state == down)
+ {
+ draw_state = down;
+ repaintEvent(nullptr);
+ }
}
-#ifdef TEST_BUTTON
-//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_BUTTON*/
+} //GUI::
diff --git a/plugingui/button.h b/plugingui/button.h
index 682dfa2..7302b87 100644
--- a/plugingui/button.h
+++ b/plugingui/button.h
@@ -24,57 +24,52 @@
* along with DrumGizmo; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-#ifndef __DRUMGIZMO_BUTTON_H__
-#define __DRUMGIZMO_BUTTON_H__
+#pragma once
#include <string>
#include "widget.h"
#include "painter.h"
+#include "notifier.h"
namespace GUI {
class Button : public Widget {
public:
- Button(Widget *parent);
+ Button(Widget *parent);
+ ~Button();
- bool isFocusable() { return true; }
- bool catchMouse() { return true; }
+ bool isFocusable() { return true; }
+ bool catchMouse() { return true; }
- void setText(std::string text);
+ void setText(std::string text);
- void registerClickHandler(void (*handler)(void *), void *ptr);
+ Notifier<> clickNotifier;
- //protected:
- virtual void clicked() {}
+protected:
+ virtual void clicked() {}
- virtual void repaintEvent(RepaintEvent *e);
- virtual void buttonEvent(ButtonEvent *e);
+ virtual void repaintEvent(RepaintEvent *e);
+ virtual void buttonEvent(ButtonEvent *e);
- virtual void mouseLeaveEvent();
- virtual void mouseEnterEvent();
- virtual void mouseMoveEvent(MouseMoveEvent *e);
+ virtual void mouseLeaveEvent();
+ virtual void mouseEnterEvent();
private:
- bool in_button;
+ bool in_button;
- Painter::Box box_up;
- Painter::Box box_down;
+ Painter::Box box_up;
+ Painter::Box box_down;
- typedef enum {
- up,
- down
- } state_t;
+ typedef enum {
+ up,
+ down
+ } state_t;
- std::string text;
-
- state_t draw_state;
- state_t button_state;
-
- void (*handler)(void *);
- void *ptr;
-};
+ std::string text;
+ state_t draw_state;
+ state_t button_state;
};
-#endif/*__DRUMGIZMO_BUTTON_H__*/
+} // GUI::
diff --git a/plugingui/filebrowser.cc b/plugingui/filebrowser.cc
index f025c25..b32b586 100644
--- a/plugingui/filebrowser.cc
+++ b/plugingui/filebrowser.cc
@@ -196,10 +196,10 @@ GUI::FileBrowser::FileBrowser(GUI::Widget *parent)
listbox.registerSelectHandler(changeDir, prv);
btn_sel.setText("Select");
- btn_sel.registerClickHandler(changeDir, prv);
+ CONNECT((&btn_sel), clickNotifier, this, &FileBrowser::selectButtonClicked);
btn_esc.setText("Cancel");
- btn_esc.registerClickHandler(cancel, this);
+ CONNECT((&btn_esc), clickNotifier, this, &FileBrowser::cancelButtonClicked);
changeDir(prv);
@@ -266,3 +266,13 @@ void GUI::FileBrowser::repaintEvent(GUI::RepaintEvent *e)
Painter p(this);
p.drawImageStretched(0,0, &back, width(), height());
}
+
+void GUI::FileBrowser::selectButtonClicked()
+{
+ changeDir(prv);
+}
+
+void GUI::FileBrowser::cancelButtonClicked()
+{
+ cancel(this);
+}
diff --git a/plugingui/filebrowser.h b/plugingui/filebrowser.h
index 6583b53..9eb9f54 100644
--- a/plugingui/filebrowser.h
+++ b/plugingui/filebrowser.h
@@ -57,6 +57,9 @@ public:
virtual void resize(int w, int h);
private:
+ void selectButtonClicked();
+ void cancelButtonClicked();
+
struct private_data *prv;
GUI::Label lbl_path;
diff --git a/plugingui/plugingui.cc b/plugingui/plugingui.cc
index 49dce85..da18f71 100644
--- a/plugingui/plugingui.cc
+++ b/plugingui/plugingui.cc
@@ -61,19 +61,6 @@ static void selectKitFile(void *ptr, std::string filename)
msghandler.sendMessage(MSGRCV_ENGINE, msg);
}
-static void kitBrowseClick(void *ptr)
-{
- PluginGUI *gui = (PluginGUI*)ptr;
-
- std::string path = gui->lineedit->text();
- if(path == "") path = gui->config->lastkit;
- if(path == "") path = gui->lineedit2->text();
-
- fb->setPath(path);
- fb->registerFileSelectHandler(selectKitFile, gui);
- fb->show();
-}
-
static void selectMapFile(void *ptr, std::string filename)
{
PluginGUI *gui = (PluginGUI*)ptr;
@@ -97,19 +84,6 @@ static void selectMapFile(void *ptr, std::string filename)
*/
}
-static void midimapBrowseClick(void *ptr)
-{
- PluginGUI *gui = (PluginGUI*)ptr;
-
- std::string path = gui->lineedit2->text();
- if(path == "") path = gui->config->lastmidimap;
- if(path == "") path = gui->lineedit->text();
-
- fb->setPath(path);
- fb->registerFileSelectHandler(selectMapFile, gui);
- fb->show();
-}
-
/*
void closeClick(void *ptr)
{
@@ -295,7 +269,8 @@ void PluginGUI::init()
btn_brw->setText("Browse...");
btn_brw->move(266, y - 6 + 4);
btn_brw->resize(85, 35 + 6 - 4);
- btn_brw->registerClickHandler(kitBrowseClick, this);
+// btn_brw->registerClickHandler(kitBrowseClick, this);
+ CONNECT(btn_brw, clickNotifier, this, &PluginGUI::kitBrowseClick);
y += OFFSET2;
progress = new ProgressBar(window);
@@ -326,7 +301,7 @@ void PluginGUI::init()
btn_brw->setText("Browse...");
btn_brw->move(266, y - 6 + 4);
btn_brw->resize(85, 35 + 6 - 4);
- btn_brw->registerClickHandler(midimapBrowseClick, this);
+ CONNECT(btn_brw, clickNotifier, this, &PluginGUI::midimapBrowseClick);
y += OFFSET2;
progress2 = new ProgressBar(window);
@@ -490,10 +465,46 @@ void PluginGUI::falloffValueChanged(float value)
void PluginGUI::velocityCheckClick(bool checked)
{
- ChangeSettingMessage *msg =
- new ChangeSettingMessage(ChangeSettingMessage::enable_velocity_modifier,
- checked);
- msghandler.sendMessage(MSGRCV_ENGINE, msg);
+ ChangeSettingMessage *msg =
+ new ChangeSettingMessage(ChangeSettingMessage::enable_velocity_modifier,
+ checked);
+ msghandler.sendMessage(MSGRCV_ENGINE, msg);
+}
+
+void PluginGUI::kitBrowseClick()
+{
+ std::string path = lineedit->text();
+ if(path == "")
+ {
+ path = config->lastkit;
+ }
+
+ if(path == "")
+ {
+ path = lineedit2->text();
+ }
+
+ fb->setPath(path);
+ fb->registerFileSelectHandler(selectKitFile, this);
+ fb->show();
+}
+
+void PluginGUI::midimapBrowseClick()
+{
+ std::string path = lineedit2->text();
+ if(path == "")
+ {
+ path = config->lastmidimap;
+ }
+
+ if(path == "")
+ {
+ path = lineedit->text();
+ }
+
+ fb->setPath(path);
+ fb->registerFileSelectHandler(selectMapFile, this);
+ fb->show();
}
} // GUI::