diff --git a/gtk2_ardour/beatbox_gui.cc b/gtk2_ardour/beatbox_gui.cc new file mode 100644 index 0000000000..7e55ed7c85 --- /dev/null +++ b/gtk2_ardour/beatbox_gui.cc @@ -0,0 +1,105 @@ +/* + Copyright (C) 2017 Paul Davis + + This program 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. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "pbd/i18n.h" + +#include "ardour/beatbox.h" +#include "beatbox_gui.h" + +using namespace ARDOUR; + +BBGUI::BBGUI (boost::shared_ptr bb) + : ArdourDialog (_("BeatBox")) + , bbox (bb) + , quantize_off (quantize_group, "None") + , quantize_32nd (quantize_group, "ThirtySecond") + , quantize_16th (quantize_group, "Sixteenth") + , quantize_8th (quantize_group, "Eighth") + , quantize_quarter (quantize_group, "Quarter") + , quantize_half (quantize_group, "Half") + , quantize_whole (quantize_group, "Whole") + , play_button ("Run") + , clear_button ("Clear") + , tempo_adjustment (bb->tempo(), 1, 300, 1, 10) + , tempo_spinner (tempo_adjustment) +{ + quantize_off.signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &BBGUI::set_quantize), 0)); + quantize_32nd.signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &BBGUI::set_quantize), 32)); + quantize_16th.signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &BBGUI::set_quantize), 16)); + quantize_8th.signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &BBGUI::set_quantize), 8)); + quantize_quarter.signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &BBGUI::set_quantize), 4)); + quantize_half.signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &BBGUI::set_quantize), 2)); + quantize_whole.signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &BBGUI::set_quantize), 1)); + + quantize_button_box.pack_start (quantize_off); + quantize_button_box.pack_start (quantize_32nd); + quantize_button_box.pack_start (quantize_16th); + quantize_button_box.pack_start (quantize_8th); + quantize_button_box.pack_start (quantize_quarter); + quantize_button_box.pack_start (quantize_half); + quantize_button_box.pack_start (quantize_whole); + + play_button.signal_toggled().connect (sigc::mem_fun (*this, &BBGUI::toggle_play)); + clear_button.signal_clicked().connect (sigc::mem_fun (*this, &BBGUI::clear)); + + misc_button_box.pack_start (play_button); + misc_button_box.pack_start (clear_button); + + tempo_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &BBGUI::tempo_changed)); + + misc_button_box.pack_start (tempo_spinner); + + get_vbox()->pack_start (misc_button_box); + get_vbox()->pack_start (quantize_button_box, true, true); + + show_all (); +} + +BBGUI::~BBGUI () +{ +} + +void +BBGUI::tempo_changed () +{ + float t = tempo_adjustment.get_value(); + bbox->set_tempo (t); +} + +void +BBGUI::set_quantize (int divisor) +{ + bbox->set_quantize (divisor); +} + +void +BBGUI::clear () +{ + bbox->clear (); +} + +void +BBGUI::toggle_play () +{ + if (bbox->running()) { + bbox->stop (); + } else { + bbox->start (); + } +} diff --git a/gtk2_ardour/beatbox_gui.h b/gtk2_ardour/beatbox_gui.h new file mode 100644 index 0000000000..bf3abbd867 --- /dev/null +++ b/gtk2_ardour/beatbox_gui.h @@ -0,0 +1,70 @@ +/* + Copyright (C) 2017 Paul Davis + + This program 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. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __gtk2_ardour_beatbox_gui_h__ +#define __gtk2_ardour_beatbox_gui_h__ + +#include + +#include +#include +#include +#include +#include + +#include "ardour_dialog.h" + +namespace ARDOUR { +class BeatBox; +} + +class BBGUI : public ArdourDialog { + public: + BBGUI (boost::shared_ptr bb); + ~BBGUI (); + + private: + boost::shared_ptr bbox; + + Gtk::RadioButtonGroup quantize_group; + Gtk::RadioButton quantize_off; + Gtk::RadioButton quantize_32nd; + Gtk::RadioButton quantize_16th; + Gtk::RadioButton quantize_8th; + Gtk::RadioButton quantize_quarter; + Gtk::RadioButton quantize_half; + Gtk::RadioButton quantize_whole; + + Gtk::ToggleButton play_button; + Gtk::Button clear_button; + + Gtk::Adjustment tempo_adjustment; + Gtk::SpinButton tempo_spinner; + + Gtk::VBox quantize_button_box; + Gtk::HBox misc_button_box; + + + void set_quantize (int divisor); + void toggle_play (); + void clear (); + void tempo_changed (); +}; + +#endif /* __gtk2_ardour_beatbox_gui_h__ */ diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc index 3a27188907..9f6c7537d3 100644 --- a/gtk2_ardour/processor_box.cc +++ b/gtk2_ardour/processor_box.cc @@ -69,6 +69,7 @@ #include "actions.h" #include "ardour_dialog.h" #include "ardour_ui.h" +#include "beatbox_gui.h" #include "gui_thread.h" #include "io_selector.h" #include "keyboard.h" @@ -1665,7 +1666,7 @@ ProcessorEntry::LuaPluginDisplay::LuaPluginDisplay (ProcessorEntry& e, boost::sh LuaInstance::bind_cairo (LG); luabridge::LuaRef lua_render = luabridge::getGlobal (LG, "render_inline"); assert (lua_render.isFunction ()); - _lua_render_inline = new luabridge::LuaRef (lua_render); + _lua_render_inline = new luabridge::LuaRef (lua_render); } ProcessorEntry::LuaPluginDisplay::~LuaPluginDisplay () @@ -3580,9 +3581,19 @@ ProcessorBox::get_editor_window (boost::shared_ptr processor, bool us gidget = io_selector; - } else if ((beatbox == boost::dynamic_pointer_cast (processor)) != 0) { - cerr << "Beatbox editor goes here\n"; - return 0; + } else if ((beatbox = boost::dynamic_pointer_cast (processor)) != 0) { + + Window* w = get_processor_ui (beatbox); + BBGUI* bbg = 0; + + if (!w) { + bbg = new BBGUI (beatbox); + set_processor_ui (beatbox, bbg); + } else { + bbg = dynamic_cast (w); + } + + gidget = bbg; } return gidget; diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index b0106c683d..e26734c19f 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -52,6 +52,7 @@ gtk2_ardour_sources = [ 'automation_streamview.cc', 'automation_time_axis.cc', 'axis_view.cc', + 'beatbox_gui.cc', 'big_clock_window.cc', 'bundle_manager.cc', 'clock_group.cc',