diff options
Diffstat (limited to 'plugingui/plugingui.cc')
-rw-r--r-- | plugingui/plugingui.cc | 379 |
1 files changed, 184 insertions, 195 deletions
diff --git a/plugingui/plugingui.cc b/plugingui/plugingui.cc index 170f4f9..5de74fb 100644 --- a/plugingui/plugingui.cc +++ b/plugingui/plugingui.cc @@ -36,129 +36,7 @@ #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(); -} +namespace GUI { /* void closeClick(void *ptr) @@ -206,7 +84,7 @@ void PluginGUI::stopThread() void PluginGUI::handleMessage(Message *msg) { - GUI::Painter p(window);// Make sure we only redraw buffer one time. + Painter p(*window);// Make sure we only redraw buffer one time. switch(msg->type()) { case Message::LoadStatus: @@ -215,7 +93,7 @@ void PluginGUI::handleMessage(Message *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); + progress->setState(ProgressBarState::Green); } } break; @@ -224,9 +102,9 @@ void PluginGUI::handleMessage(Message *msg) LoadStatusMessageMidimap *ls = (LoadStatusMessageMidimap*)msg; progress2->setProgress(1); if(ls->success) { - progress2->setState(GUI::ProgressBar::green); + progress2->setState(ProgressBarState::Green); } else { - progress2->setState(GUI::ProgressBar::red); + progress2->setState(ProgressBarState::Red); } } break; @@ -236,22 +114,22 @@ void PluginGUI::handleMessage(Message *msg) lineedit->setText(settings->drumkitfile); if(settings->drumkit_loaded) { progress->setProgress(1); - progress->setState(GUI::ProgressBar::green); + progress->setState(ProgressBarState::Green); } else { progress->setProgress(0); - progress->setState(GUI::ProgressBar::blue); + progress->setState(ProgressBarState::Blue); } lineedit2->setText(settings->midimapfile); if(settings->midimap_loaded) { progress2->setProgress(1); - progress2->setState(GUI::ProgressBar::green); + progress2->setState(ProgressBarState::Green); } else { progress2->setProgress(0); - progress2->setState(GUI::ProgressBar::blue); + progress2->setState(ProgressBarState::Blue); } - check->setChecked(settings->enable_velocity_modifier); - knob->setValue(settings->velocity_modifier_weight); - knob2->setValue(settings->velocity_modifier_falloff); + velocityCheck->setChecked(settings->enable_velocity_modifier); + attackKnob->setValue(settings->velocity_modifier_weight); + falloffKnob->setValue(settings->velocity_modifier_falloff); } default: @@ -279,6 +157,13 @@ void PluginGUI::thread_main() window->eventHandler()->processEvents(); handleMessages(); + +#ifdef STANDALONE + if(closing) { + if(windowClosedHandler) windowClosedHandler(windowClosedPtr); + break; + } +#endif } deinit(); @@ -293,10 +178,50 @@ void PluginGUI::deinit() if(window) delete window; } -void closeEventHandler(void *ptr) +void PluginGUI::closeEventHandler() { - volatile bool *closing = (volatile bool*)ptr; - *closing = true; + closing = true; +} + +void PluginGUI::selectKitFile(const std::string& filename) +{ + lineedit->setText(filename); + + fileBrowser->hide(); + + std::string drumkit = lineedit->text(); + + config->lastkit = drumkit; + config->save(); + + progress->setProgress(0); + progress->setState(ProgressBarState::Blue); + + LoadDrumKitMessage *msg = new LoadDrumKitMessage(); + msg->drumkitfile = drumkit; + + msghandler.sendMessage(MSGRCV_ENGINE, msg); +} + +void PluginGUI::selectMapFile(const std::string& filename) +{ + lineedit2->setText(filename); + fileBrowser->hide(); + + std::string midimap = lineedit2->text(); + + config->lastmidimap = midimap; + 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(ProgressBarState::Green); + */ } void PluginGUI::init() @@ -306,19 +231,19 @@ void PluginGUI::init() config = new Config(); config->load(); - window = new GUI::Window(); - window->eventHandler()->registerCloseHandler(closeEventHandler, - (void*)&closing); + window = new Window(); + auto eventHandler = window->eventHandler(); + CONNECT(eventHandler, closeNotifier, this, &PluginGUI::closeEventHandler); window->setFixedSize(370, 330); window->setCaption("DrumGizmo v" VERSION); - GUI::Label *lbl_title = new GUI::Label(window); + Label *lbl_title = new Label(window); lbl_title->setText("DrumGizmo"); lbl_title->move(127, 7); lbl_title->resize(200, 20); - GUI::VerticalLine *l1 = new GUI::VerticalLine(window); + VerticalLine *l1 = new VerticalLine(window); l1->move(20, 30); l1->resize(window->width() - 40, 2); @@ -330,30 +255,31 @@ void PluginGUI::init() // Drumkit file { int y = 37; - GUI::Label *lbl = new GUI::Label(window); + Label *lbl = new Label(window); lbl->setText("Drumkit file:"); lbl->move(XOFFSET - 4, y); lbl->resize(100, 20); y += OFFSET1; - lineedit = new GUI::LineEdit(window); + lineedit = new LineEdit(window); lineedit->move(XOFFSET, y); lineedit->resize(243, 29); lineedit->setReadOnly(true); - GUI::Button *btn_brw = new GUI::Button(window); + Button *btn_brw = new 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); +// btn_brw->registerClickHandler(kitBrowseClick, this); + CONNECT(btn_brw, clickNotifier, this, &PluginGUI::kitBrowseClick); y += OFFSET2; - progress = new GUI::ProgressBar(window); + progress = new ProgressBar(window); progress->move(XOFFSET, y); progress->resize(window->width() - 2*XOFFSET, 11); y += OFFSET3; - GUI::VerticalLine *l = new GUI::VerticalLine(window); + VerticalLine *l = new VerticalLine(window); l->move(XOFFSET, y); l->resize(window->width() - 2*XOFFSET, 2); } @@ -361,30 +287,30 @@ void PluginGUI::init() // Midimap file { int y = 120; - lbl2 = new GUI::Label(window); + lbl2 = new Label(window); lbl2->setText("Midimap file:"); lbl2->move(XOFFSET - 4, y); lbl2->resize(100, 20); y += OFFSET1; - lineedit2 = new GUI::LineEdit(window); + lineedit2 = new LineEdit(window); lineedit2->move(XOFFSET, y); lineedit2->resize(243, 29); lineedit2->setReadOnly(true); - GUI::Button *btn_brw = new GUI::Button(window); + Button *btn_brw = new 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); + CONNECT(btn_brw, clickNotifier, this, &PluginGUI::midimapBrowseClick); y += OFFSET2; - progress2 = new GUI::ProgressBar(window); + progress2 = new ProgressBar(window); progress2->move(XOFFSET, y); progress2->resize(window->width() - 2*XOFFSET, 11); y += OFFSET3; - GUI::VerticalLine *l = new GUI::VerticalLine(window); + VerticalLine *l = new VerticalLine(window); l->move(XOFFSET, y); l->resize(window->width() - 2*XOFFSET, 2); } @@ -394,70 +320,69 @@ void PluginGUI::init() #define OFFSET4 21 // Enable Velocity - GUI::Label *lbl_velocity = new GUI::Label(window); + Label *lbl_velocity = new 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); + velocityCheck = new CheckBox(window); + //velocityCheck->setText("Enable Velocity Modifier"); + velocityCheck->move(26, y + OFFSET4); + velocityCheck->resize(59,38); + CONNECT(velocityCheck, stateChangedNotifier, this, &PluginGUI::velocityCheckClick); // Velocity Weight Modifier: { - GUI::Label *lbl_weight = new GUI::Label(window); + Label *lbl_weight = new 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); + attackKnob = new Knob(window); + attackKnob->move(109, y + OFFSET4 - 4); + attackKnob->resize(57, 57); + CONNECT(attackKnob, valueChangedNotifier, this, &PluginGUI::attackValueChanged); } // Velocity Falloff Modifier: { - GUI::Label *lbl_falloff = new GUI::Label(window); + Label *lbl_falloff = new 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); + falloffKnob = new Knob(window); + falloffKnob->move(202 - 13 - 5, y + OFFSET4 - 4); + falloffKnob->resize(57, 57); + CONNECT(falloffKnob, valueChangedNotifier, this, &PluginGUI::falloffValueChanged); } } - GUI::VerticalLine *l2 = new GUI::VerticalLine(window); + VerticalLine *l2 = new VerticalLine(window); l2->move(20, 310 - 15 - 9); l2->resize(window->width() - 40, 2); - GUI::Label *lbl_version = new GUI::Label(window); + Label *lbl_version = new 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); + ComboBox *cmb = new 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; + // Create file browser + fileBrowser = new FileBrowser(window); + fileBrowser->move(0, 0); + fileBrowser->resize(window->width() - 1, window->height() - 1); + fileBrowser->hide(); // Enable quit button -// GUI::Button *btn_quit = new GUI::Button(window); +// Button *btn_quit = new Button(window); // btn_quit->setText("Quit"); // btn_quit->move(50,280); // btn_quit->resize(80,80); @@ -506,6 +431,84 @@ void PluginGUI::setWindowClosedCallback(void (*handler)(void *), void *ptr) windowClosedPtr = ptr; } +void PluginGUI::attackValueChanged(float value) +{ + ChangeSettingMessage *msg = + new ChangeSettingMessage(ChangeSettingMessage::velocity_modifier_weight, + value); + + msghandler.sendMessage(MSGRCV_ENGINE, msg); + +#ifdef STANDALONE + int i = value * 4; + switch(i) { + case 0: progress->setState(ProgressBarState::Off); break; + case 1: progress->setState(ProgressBarState::Blue); break; + case 2: progress->setState(ProgressBarState::Green); break; + case 3: progress->setState(ProgressBarState::Red); break; + default: break; + } +#endif +} + +void PluginGUI::falloffValueChanged(float value) +{ + ChangeSettingMessage *msg = + new ChangeSettingMessage(ChangeSettingMessage::velocity_modifier_falloff, + value); + msghandler.sendMessage(MSGRCV_ENGINE, msg); + +#ifdef STANDALONE + progress->setProgress(value); +#endif +} + +void PluginGUI::velocityCheckClick(bool checked) +{ + 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(); + } + + fileBrowser->setPath(path); + CONNECT(fileBrowser, fileSelectNotifier, this, &PluginGUI::selectKitFile); + fileBrowser->show(); +} + +void PluginGUI::midimapBrowseClick() +{ + std::string path = lineedit2->text(); + if(path == "") + { + path = config->lastmidimap; + } + + if(path == "") + { + path = lineedit->text(); + } + + fileBrowser->setPath(path); + CONNECT(fileBrowser, fileSelectNotifier, this, &PluginGUI::selectMapFile); + fileBrowser->show(); +} + +} // GUI:: + #ifdef STANDALONE class Engine : public MessageHandler { @@ -513,7 +516,6 @@ public: void handleMessage(Message *msg) {} }; - void stop(void *ptr) { DEBUG(stop, "Stopping...\n"); @@ -523,32 +525,19 @@ void stop(void *ptr) int main() { -/* - 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::PluginGUI gui; gui.setWindowClosedCallback(stop, &running); // gui.show(); while(running) { - // gui.processEvents(); #ifdef WIN32 SleepEx(1000, FALSE); #else - // usleep(10000); sleep(1); #endif } |