From bf72f82495542f7e052978b7135fc312ede8eec4 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Mon, 28 Sep 2015 19:32:26 +0200 Subject: Refactored Button. --- plugingui/button.cc | 208 ++++++++++++++++++++++++----------------------- plugingui/button.h | 55 ++++++------- plugingui/filebrowser.cc | 14 +++- plugingui/filebrowser.h | 3 + plugingui/plugingui.cc | 75 +++++++++-------- 5 files changed, 189 insertions(+), 166 deletions(-) (limited to 'plugingui') 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 #include -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 #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:: -- cgit v1.2.3