summaryrefslogtreecommitdiff
path: root/plugingui/plugingui.cc
diff options
context:
space:
mode:
Diffstat (limited to 'plugingui/plugingui.cc')
-rw-r--r--plugingui/plugingui.cc625
1 files changed, 157 insertions, 468 deletions
diff --git a/plugingui/plugingui.cc b/plugingui/plugingui.cc
index 170f4f9..a56818c 100644
--- a/plugingui/plugingui.cc
+++ b/plugingui/plugingui.cc
@@ -27,533 +27,222 @@
#include "plugingui.h"
#include <hugin.hpp>
-#include <stdio.h>
-
-#include "knob.h"
-#include "verticalline.h"
-#include "../version.h"
#include "pluginconfig.h"
#include "messagehandler.h"
-static void checkClick(void *ptr)
-{
- PluginGUI *gui = (PluginGUI*)ptr;
-
- ChangeSettingMessage *msg =
- new ChangeSettingMessage(ChangeSettingMessage::enable_velocity_modifier,
- gui->check->checked());
- msghandler.sendMessage(MSGRCV_ENGINE, msg);
-}
-
-static void knobChange(void *ptr)
-{
- PluginGUI *gui = (PluginGUI*)ptr;
-
- ChangeSettingMessage *msg =
- new ChangeSettingMessage(ChangeSettingMessage::velocity_modifier_weight,
- gui->knob->value());
-
- msghandler.sendMessage(MSGRCV_ENGINE, msg);
-
-#ifdef STANDALONE
- int i = gui->knob->value() * 4;
- switch(i) {
- case 0: gui->progress->setState(GUI::ProgressBar::off); break;
- case 1: gui->progress->setState(GUI::ProgressBar::blue); break;
- case 2: gui->progress->setState(GUI::ProgressBar::green); break;
- case 3: gui->progress->setState(GUI::ProgressBar::red); break;
- default: break;
- }
-#endif
-}
-
-static void knobChange2(void *ptr)
-{
- PluginGUI *gui = (PluginGUI*)ptr;
-
- ChangeSettingMessage *msg =
- new ChangeSettingMessage(ChangeSettingMessage::velocity_modifier_falloff,
- gui->knob2->value());
- msghandler.sendMessage(MSGRCV_ENGINE, msg);
-
-#ifdef STANDALONE
- gui->progress->setProgress(gui->knob2->value());
-#endif
-}
-
-//static void quit(void *ptr) {
-// PluginGUI *gui = (PluginGUI*)ptr;
-//
-// gui->stopThread();
-//}
-
-GUI::FileBrowser *fb;
-static void selectKitFile(void *ptr, std::string filename)
-{
- PluginGUI *gui = (PluginGUI*)ptr;
-
- gui->lineedit->setText(filename);
-
- fb->hide();
-
- std::string drumkit = gui->lineedit->text();
-
- gui->config->lastkit = drumkit;
- gui->config->save();
-
- gui->progress->setProgress(0);
- gui->progress->setState(GUI::ProgressBar::blue);
-
- LoadDrumKitMessage *msg = new LoadDrumKitMessage();
- msg->drumkitfile = drumkit;
-
- 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;
-
- gui->lineedit2->setText(filename);
- fb->hide();
-
- std::string midimap = gui->lineedit2->text();
-
- gui->config->lastmidimap = midimap;
- gui->config->save();
-
- LoadMidimapMessage *msg = new LoadMidimapMessage();
- msg->midimapfile = midimap;
- msghandler.sendMessage(MSGRCV_ENGINE, msg);
-
- /*
- if(gui->changeMidimapHandler)
- gui->changeMidimapHandler(gui->changeMidimapPtr, midimap.c_str());
- gui->progress2->setState(GUI::ProgressBar::green);
- */
-}
-
-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)
-{
- PluginGUI *gui = (PluginGUI*)ptr;
- if(gui->windowClosedHandler) gui->windowClosedHandler(gui->windowClosedPtr);
-}
-*/
+namespace GUI {
PluginGUI::PluginGUI()
- : MessageReceiver(MSGRCV_UI)
- , initialised(false)
- , sem("plugingui")
+ : MessageReceiver(MSGRCV_UI)
{
- windowClosedHandler = NULL;
- changeMidimapHandler = NULL;
-
- window = NULL;
-
- running = true;
- closing = false;
-
#ifdef USE_THREAD
- run();
+ run();
#else
- init();
+ init();
#endif/*USE_THREAD*/
- sem.wait();
+ sem.wait();
}
PluginGUI::~PluginGUI()
{
- stopThread();
+ stopThread();
}
-void PluginGUI::stopThread()
-{
- if(running) {
- running = false;
- wait_stop();
- }
-}
-
-
void PluginGUI::handleMessage(Message *msg)
{
- GUI::Painter p(window);// Make sure we only redraw buffer one time.
-
- switch(msg->type()) {
- case Message::LoadStatus:
- {
- LoadStatusMessage *ls = (LoadStatusMessage*)msg;
- progress->setProgress((float)ls->numer_of_files_loaded /
- (float)ls->number_of_files);
- if(ls->numer_of_files_loaded == ls->number_of_files) {
- progress->setState(GUI::ProgressBar::green);
- }
- }
- break;
- case Message::LoadStatusMidimap:
- {
- LoadStatusMessageMidimap *ls = (LoadStatusMessageMidimap*)msg;
- progress2->setProgress(1);
- if(ls->success) {
- progress2->setState(GUI::ProgressBar::green);
- } else {
- progress2->setState(GUI::ProgressBar::red);
- }
- }
- break;
- case Message::EngineSettingsMessage:
- {
- EngineSettingsMessage *settings = (EngineSettingsMessage *)msg;
- lineedit->setText(settings->drumkitfile);
- if(settings->drumkit_loaded) {
- progress->setProgress(1);
- progress->setState(GUI::ProgressBar::green);
- } else {
- progress->setProgress(0);
- progress->setState(GUI::ProgressBar::blue);
- }
- lineedit2->setText(settings->midimapfile);
- if(settings->midimap_loaded) {
- progress2->setProgress(1);
- progress2->setState(GUI::ProgressBar::green);
- } else {
- progress2->setProgress(0);
- progress2->setState(GUI::ProgressBar::blue);
- }
- check->setChecked(settings->enable_velocity_modifier);
- knob->setValue(settings->velocity_modifier_weight);
- knob2->setValue(settings->velocity_modifier_falloff);
-
- }
- default:
- break;
- }
+ Painter p(*window);// Make sure we only redraw buffer once (set refcount to 1)
+
+ switch(msg->type()) {
+ case Message::LoadStatus:
+ {
+ LoadStatusMessage *ls = (LoadStatusMessage*)msg;
+ window->drumkitFileProgress->setProgress((float)ls->numer_of_files_loaded /
+ (float)ls->number_of_files);
+ if(ls->numer_of_files_loaded == ls->number_of_files)
+ {
+ window->drumkitFileProgress->setState(ProgressBarState::Green);
+ }
+ }
+ break;
+ case Message::LoadStatusMidimap:
+ {
+ LoadStatusMessageMidimap *ls = (LoadStatusMessageMidimap*)msg;
+ window->midimapFileProgress->setProgress(1);
+ if(ls->success)
+ {
+ window->midimapFileProgress->setState(ProgressBarState::Green);
+ }
+ else
+ {
+ window->midimapFileProgress->setState(ProgressBarState::Red);
+ }
+ }
+ break;
+ case Message::EngineSettingsMessage:
+ {
+ EngineSettingsMessage *settings = (EngineSettingsMessage *)msg;
+ window->lineedit->setText(settings->drumkitfile);
+ if(settings->drumkit_loaded)
+ {
+ window->drumkitFileProgress->setProgress(1);
+ window->drumkitFileProgress->setState(ProgressBarState::Green);
+ }
+ else
+ {
+ window->drumkitFileProgress->setProgress(0);
+ window->drumkitFileProgress->setState(ProgressBarState::Blue);
+ }
+ window->lineedit2->setText(settings->midimapfile);
+ if(settings->midimap_loaded)
+ {
+ window->midimapFileProgress->setProgress(1);
+ window->midimapFileProgress->setState(ProgressBarState::Green);
+ }
+ else
+ {
+ window->midimapFileProgress->setProgress(0);
+ window->midimapFileProgress->setState(ProgressBarState::Blue);
+ }
+ window->velocityCheck->setChecked(settings->enable_velocity_modifier);
+ window->attackKnob->setValue(settings->velocity_modifier_weight);
+ window->falloffKnob->setValue(settings->velocity_modifier_falloff);
+ }
+ default:
+ break;
+ }
}
void PluginGUI::thread_main()
{
- init();
+ init();
- { // Request all engine settings
- EngineSettingsMessage *msg = new EngineSettingsMessage();
- msghandler.sendMessage(MSGRCV_ENGINE, msg);
- }
+ { // Request all engine settings
+ EngineSettingsMessage *msg = new EngineSettingsMessage();
+ msghandler.sendMessage(MSGRCV_ENGINE, msg);
+ }
- while(running) {
+ while(processEvents())
+ {
#ifdef WIN32
- SleepEx(50, FALSE);
+ SleepEx(50, FALSE);
#else
- usleep(50000);
+ usleep(50000);
#endif/*WIN32*/
+ }
- // DEBUG(gui, "loop");
-
- window->eventHandler()->processEvents();
- handleMessages();
- }
-
- deinit();
+ deinit();
}
-void PluginGUI::deinit()
+bool PluginGUI::processEvents()
{
- if(config) {
- config->save();
- delete config;
- }
- if(window) delete window;
+ if(!initialised)
+ {
+ return running;
+ }
+
+ window->eventHandler()->processEvents();
+ handleMessages();
+
+ if(closing)
+ {
+ closeNotifier();
+ closing = false;
+ return false;
+ }
+
+ return running;
}
-void closeEventHandler(void *ptr)
+void PluginGUI::stopThread()
{
- volatile bool *closing = (volatile bool*)ptr;
- *closing = true;
+ if(running)
+ {
+ running = false;
+ wait_stop();
+ }
}
void PluginGUI::init()
{
- DEBUG(gui, "init");
-
- config = new Config();
- config->load();
-
- window = new GUI::Window();
- window->eventHandler()->registerCloseHandler(closeEventHandler,
- (void*)&closing);
-
- window->setFixedSize(370, 330);
- window->setCaption("DrumGizmo v" VERSION);
-
- GUI::Label *lbl_title = new GUI::Label(window);
- lbl_title->setText("DrumGizmo");
- lbl_title->move(127, 7);
- lbl_title->resize(200, 20);
-
- GUI::VerticalLine *l1 = new GUI::VerticalLine(window);
- l1->move(20, 30);
- l1->resize(window->width() - 40, 2);
-
-#define OFFSET1 17
-#define OFFSET2 38
-#define OFFSET3 20
-
-#define XOFFSET 20
- // Drumkit file
- {
- int y = 37;
- GUI::Label *lbl = new GUI::Label(window);
- lbl->setText("Drumkit file:");
- lbl->move(XOFFSET - 4, y);
- lbl->resize(100, 20);
-
- y += OFFSET1;
- lineedit = new GUI::LineEdit(window);
- lineedit->move(XOFFSET, y);
- lineedit->resize(243, 29);
- lineedit->setReadOnly(true);
-
- GUI::Button *btn_brw = new GUI::Button(window);
- btn_brw->setText("Browse...");
- btn_brw->move(266, y - 6 + 4);
- btn_brw->resize(85, 35 + 6 - 4);
- btn_brw->registerClickHandler(kitBrowseClick, this);
-
- y += OFFSET2;
- progress = new GUI::ProgressBar(window);
- progress->move(XOFFSET, y);
- progress->resize(window->width() - 2*XOFFSET, 11);
-
- y += OFFSET3;
- GUI::VerticalLine *l = new GUI::VerticalLine(window);
- l->move(XOFFSET, y);
- l->resize(window->width() - 2*XOFFSET, 2);
- }
-
- // Midimap file
- {
- int y = 120;
- lbl2 = new GUI::Label(window);
- lbl2->setText("Midimap file:");
- lbl2->move(XOFFSET - 4, y);
- lbl2->resize(100, 20);
-
- y += OFFSET1;
- lineedit2 = new GUI::LineEdit(window);
- lineedit2->move(XOFFSET, y);
- lineedit2->resize(243, 29);
- lineedit2->setReadOnly(true);
-
- GUI::Button *btn_brw = new GUI::Button(window);
- btn_brw->setText("Browse...");
- btn_brw->move(266, y - 6 + 4);
- btn_brw->resize(85, 35 + 6 - 4);
- btn_brw->registerClickHandler(midimapBrowseClick, this);
-
- y += OFFSET2;
- progress2 = new GUI::ProgressBar(window);
- progress2->move(XOFFSET, y);
- progress2->resize(window->width() - 2*XOFFSET, 11);
-
- y += OFFSET3;
- GUI::VerticalLine *l = new GUI::VerticalLine(window);
- l->move(XOFFSET, y);
- l->resize(window->width() - 2*XOFFSET, 2);
- }
-
- {
- int y = 203;
-#define OFFSET4 21
-
- // Enable Velocity
- GUI::Label *lbl_velocity = new GUI::Label(window);
- lbl_velocity->resize(78 ,20);
- lbl_velocity->move(16, y);
- lbl_velocity->setText("Humanizer");
-
- check = new GUI::CheckBox(window);
- //check->setText("Enable Velocity Modifier");
- check->move(26, y + OFFSET4);
- check->resize(59,38);
- check->registerClickHandler(checkClick, this);
-
- // Velocity Weight Modifier:
- {
- GUI::Label *lbl_weight = new GUI::Label(window);
- lbl_weight->setText("Attack");
- lbl_weight->move(107, y);
- lbl_weight->resize(100, 20);
-
- knob = new GUI::Knob(window);
- knob->move(109, y + OFFSET4 - 4);
- knob->resize(57, 57);
- knob->registerClickHandler(knobChange, this);
- }
-
- // Velocity Falloff Modifier:
- {
- GUI::Label *lbl_falloff = new GUI::Label(window);
- lbl_falloff->setText("Release");
- lbl_falloff->move(202 - 17 - 7, y);
- lbl_falloff->resize(100, 20);
-
- knob2 = new GUI::Knob(window);
- knob2->move(202 - 13 - 5, y + OFFSET4 - 4);
- knob2->resize(57, 57);
- knob2->registerClickHandler(knobChange2, this);
- }
- }
-
- GUI::VerticalLine *l2 = new GUI::VerticalLine(window);
- l2->move(20, 310 - 15 - 9);
- l2->resize(window->width() - 40, 2);
-
- GUI::Label *lbl_version = new GUI::Label(window);
- lbl_version->setText(".::. v" VERSION " .::. http://www.drumgizmo.org .::. GPLv3 .::.");
- lbl_version->move(16, 300);
- lbl_version->resize(window->width(), 20);
- /*
- {
- GUI::ComboBox *cmb = new GUI::ComboBox(window);
- cmb->addItem("Foo", "Bar");
- cmb->addItem("Hello", "World");
- cmb->move(10,10);
- cmb->resize(70, 30);
- }
- */
- // Create filebrowser
- filebrowser = new GUI::FileBrowser(window);
- filebrowser->move(0, 0);
- filebrowser->resize(window->width() - 1, window->height() - 1);
- filebrowser->hide();
- fb = filebrowser;
-
- // Enable quit button
-// GUI::Button *btn_quit = new GUI::Button(window);
-// btn_quit->setText("Quit");
-// btn_quit->move(50,280);
-// btn_quit->resize(80,80);
-// btn_quit->registerClickHandler(quit, this);
-
- window->show();
-
- sem.post();
-
- initialised = true;
-}
+ DEBUG(gui, "init");
-void PluginGUI::show()
-{
- while(!initialised) usleep(10000);
+ config = new Config();
+ config->load();
+
+ window = new DGWindow(msghandler, *config);
- if(!window) init();
+ auto eventHandler = window->eventHandler();
+ CONNECT(eventHandler, closeNotifier, this, &PluginGUI::closeEventHandler);
- window->show();
+ window->show();
+
+ sem.post();
+
+ initialised = true;
}
-void PluginGUI::hide()
+void PluginGUI::deinit()
{
- while(!initialised) usleep(10000);
+ if(config)
+ {
+ config->save();
+ delete config;
+ }
- if(window) window->hide();
+ if(window)
+ {
+ delete window;
+ }
}
-void PluginGUI::processEvents()
+void PluginGUI::show()
{
- if(!initialised) return;
+ while(!initialised)
+ {
+ usleep(10000);
+ }
- if(closing) {
- if(windowClosedHandler) windowClosedHandler(windowClosedPtr);
- closing = false;
- }
+ if(!window)
+ {
+ init();
+ }
-#ifndef USE_THREAD
- window->eventHandler()->processEvents(window);
-#endif/*USE_THREAD*/
+ if(window)
+ {
+ window->show();
+ }
}
-void PluginGUI::setWindowClosedCallback(void (*handler)(void *), void *ptr)
+void PluginGUI::hide()
{
- windowClosedHandler = handler;
- windowClosedPtr = ptr;
-}
-
-#ifdef STANDALONE
-
-class Engine : public MessageHandler {
-public:
- void handleMessage(Message *msg) {}
-};
+ while(!initialised)
+ {
+ usleep(10000);
+ }
+ if(window)
+ {
+ window->hide();
+ }
+}
-void stop(void *ptr)
+void PluginGUI::setWindowClosedCallback(void (*handler)(void *), void* ptr)
{
- DEBUG(stop, "Stopping...\n");
- bool *running = (bool*)ptr;
- *running = false;
+ windowClosedHandler = handler;
+ windowClosedPtr = ptr;
}
-int main()
+void PluginGUI::closeEventHandler()
{
-/*
- hug_status_t status = hug_init(HUG_FLAG_OUTPUT_TO_SYSLOG,
- HUG_OPTION_SYSLOG_HOST, "192.168.0.10",
- HUG_OPTION_SYSLOG_PORT, 514,
- HUG_OPTION_END);
-
- if(status != HUG_STATUS_OK) {
- printf("Error: %d\n", status);
- return 1;
- }
-*/
- INFO(example, "We are up and running");
-
- bool running = true;
-
- PluginGUI gui;
- gui.setWindowClosedCallback(stop, &running);
-
- // gui.show();
-
- while(running) {
- // gui.processEvents();
-#ifdef WIN32
- SleepEx(1000, FALSE);
-#else
- // usleep(10000);
- sleep(1);
-#endif
- }
-
- return 0;
+ closing = true;
+ closeNotifier();
+ // Call old-style notifier if one is registered.
+ if(windowClosedHandler)
+ {
+ windowClosedHandler(windowClosedPtr);
+ }
}
-#endif/*STANDALONE*/
+} // GUI::