From 1429e4b2279566384ec09bfe3bfe7d7e0f0f79eb Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 21 Feb 2007 02:30:09 +0000 Subject: Tempo based time in Machina (and related utilities added to Raul). git-svn-id: http://svn.drobilla.net/lad/machina@324 a436a847-0d15-0410-975c-d299462d15a1 --- src/gui/EdgeView.cpp | 1 - src/gui/MachinaCanvas.cpp | 2 +- src/gui/MachinaGUI.cpp | 81 +++++++++++++++++--- src/gui/MachinaGUI.hpp | 23 ++++-- src/gui/machina.glade | 185 +++++++++++++++++++++++++++++++++++++++++++++- src/gui/main.cpp | 6 +- 6 files changed, 275 insertions(+), 23 deletions(-) (limited to 'src/gui') diff --git a/src/gui/EdgeView.cpp b/src/gui/EdgeView.cpp index e681f26..3b5b8ec 100644 --- a/src/gui/EdgeView.cpp +++ b/src/gui/EdgeView.cpp @@ -62,6 +62,5 @@ EdgeView::on_event(GdkEvent* ev) } } - cerr << "NO BUTTON\n"; return false; } diff --git a/src/gui/MachinaCanvas.cpp b/src/gui/MachinaCanvas.cpp index 5029682..26ce935 100644 --- a/src/gui/MachinaCanvas.cpp +++ b/src/gui/MachinaCanvas.cpp @@ -93,7 +93,7 @@ MachinaCanvas::canvas_event(GdkEvent* event) if (event->button.button == 1) { string name = string("Note")+(char)(last++ +'0'); - SharedPtr node(new Machina::Node(1024*10, false)); + SharedPtr node(new Machina::Node(1.0, false)); //node->add_enter_action(SharedPtr(new Machina::PrintAction(name))); SharedPtr view(new NodeView(node, shared_from_this(), name, x, y)); diff --git a/src/gui/MachinaGUI.cpp b/src/gui/MachinaGUI.cpp index 546bf7d..9fa0dbb 100644 --- a/src/gui/MachinaGUI.cpp +++ b/src/gui/MachinaGUI.cpp @@ -68,12 +68,12 @@ gtkmm_set_width_for_given_text (Gtk::Widget &w, const gchar *text, -MachinaGUI::MachinaGUI(SharedPtr machine) +MachinaGUI::MachinaGUI(SharedPtr engine) : _pane_closed(false), _update_pane_position(true), _user_pane_position(0), _refresh(false), - _machine(machine), + _engine(engine), _maid(new Raul::Maid(32)) { /*_settings_filename = getenv("HOME"); @@ -109,10 +109,12 @@ MachinaGUI::MachinaGUI(SharedPtr machine) xml->get_widget("machina_win", _main_window); xml->get_widget("about_win", _about_window); xml->get_widget("help_dialog", _help_dialog); + xml->get_widget("toolbar", _toolbar); xml->get_widget("open_menuitem", _menu_file_open); xml->get_widget("save_menuitem", _menu_file_save); xml->get_widget("save_as_menuitem", _menu_file_save_as); xml->get_widget("quit_menuitem", _menu_file_quit); + xml->get_widget("view_toolbar_menuitem", _menu_view_toolbar); xml->get_widget("view_refresh_menuitem", _menu_view_refresh); xml->get_widget("view_messages_menuitem", _menu_view_messages); xml->get_widget("help_about_menuitem", _menu_help_about); @@ -121,6 +123,11 @@ MachinaGUI::MachinaGUI(SharedPtr machine) xml->get_widget("status_text", _status_text); xml->get_widget("main_paned", _main_paned); xml->get_widget("messages_expander", _messages_expander); + xml->get_widget("slave_radiobutton", _slave_radiobutton); + xml->get_widget("bpm_radiobutton", _bpm_radiobutton); + xml->get_widget("bpm_spinbutton", _bpm_spinbutton); + xml->get_widget("quantize_checkbutton", _quantize_checkbutton); + xml->get_widget("quantize_spinbutton", _quantize_spinbutton); xml->get_widget("zoom_full_but", _zoom_full_button); xml->get_widget("zoom_normal_but", _zoom_normal_button); @@ -136,14 +143,32 @@ MachinaGUI::MachinaGUI(SharedPtr machine) _zoom_full_button->signal_clicked().connect(sigc::mem_fun(_canvas.get(), &MachinaCanvas::zoom_full)); - _menu_file_open->signal_activate().connect( sigc::mem_fun(this, &MachinaGUI::menu_file_open)); - _menu_file_save->signal_activate().connect( sigc::mem_fun(this, &MachinaGUI::menu_file_save)); - _menu_file_save_as->signal_activate().connect( sigc::mem_fun(this, &MachinaGUI::menu_file_save_as)); - _menu_file_quit->signal_activate().connect( sigc::mem_fun(this, &MachinaGUI::menu_file_quit)); - _menu_view_refresh->signal_activate().connect( sigc::mem_fun(this, &MachinaGUI::menu_view_refresh)); - _menu_view_messages->signal_toggled().connect( sigc::mem_fun(this, &MachinaGUI::show_messages_toggled)); - _menu_help_about->signal_activate().connect( sigc::mem_fun(this, &MachinaGUI::menu_help_about)); - _menu_help_help->signal_activate().connect( sigc::mem_fun(this, &MachinaGUI::menu_help_help)); + _menu_file_open->signal_activate().connect( + sigc::mem_fun(this, &MachinaGUI::menu_file_open)); + _menu_file_save->signal_activate().connect( + sigc::mem_fun(this, &MachinaGUI::menu_file_save)); + _menu_file_save_as->signal_activate().connect( + sigc::mem_fun(this, &MachinaGUI::menu_file_save_as)); + _menu_file_quit->signal_activate().connect( + sigc::mem_fun(this, &MachinaGUI::menu_file_quit)); + _menu_view_refresh->signal_activate().connect( + sigc::mem_fun(this, &MachinaGUI::menu_view_refresh)); + _menu_view_toolbar->signal_toggled().connect( + sigc::mem_fun(this, &MachinaGUI::show_toolbar_toggled)); + _menu_view_messages->signal_toggled().connect( + sigc::mem_fun(this, &MachinaGUI::show_messages_toggled)); + _menu_help_about->signal_activate().connect( + sigc::mem_fun(this, &MachinaGUI::menu_help_about)); + _menu_help_help->signal_activate().connect( + sigc::mem_fun(this, &MachinaGUI::menu_help_help)); + _slave_radiobutton->signal_toggled().connect( + sigc::mem_fun(this, &MachinaGUI::tempo_changed)); + _bpm_radiobutton->signal_toggled().connect( + sigc::mem_fun(this, &MachinaGUI::tempo_changed)); + _bpm_spinbutton->signal_changed().connect( + sigc::mem_fun(this, &MachinaGUI::tempo_changed)); + _quantize_checkbutton->signal_toggled().connect( + sigc::mem_fun(this, &MachinaGUI::quantize_changed)); connect_widgets(); @@ -167,6 +192,8 @@ MachinaGUI::MachinaGUI(SharedPtr machine) _update_pane_position = true; _pane_closed = true; + _bpm_radiobutton->set_active(true); + // Idle callback to drive the maid (collect garbage) Glib::signal_timeout().connect( sigc::bind_return( @@ -215,6 +242,28 @@ MachinaGUI::idle_callback() } +void +MachinaGUI::update_toolbar() +{ + _bpm_spinbutton->set_sensitive(_bpm_radiobutton->get_active()); + _quantize_spinbutton->set_sensitive(_quantize_checkbutton->get_active()); +} + + +void +MachinaGUI::quantize_changed() +{ + _engine->set_quantization(1.0/(double)_quantize_spinbutton->get_value_as_int()); +} + + +void +MachinaGUI::tempo_changed() +{ + _engine->set_bpm(_bpm_spinbutton->get_value_as_int()); +} + + void MachinaGUI::zoom(double z) { @@ -308,7 +357,7 @@ MachinaGUI::menu_file_save() Raul::RDFWriter writer; writer.start_to_filename("test.machina.ttl"); - _machine->write_state(writer); + machine()->write_state(writer); writer.finish();} @@ -378,6 +427,16 @@ MachinaGUI::show_messages_toggled() } +void +MachinaGUI::show_toolbar_toggled() +{ + if (_menu_view_toolbar->get_active()) + _toolbar->show(); + else + _toolbar->hide(); +} + + void MachinaGUI::menu_view_refresh() { diff --git a/src/gui/MachinaGUI.hpp b/src/gui/MachinaGUI.hpp index a9ae5e5..ccf7557 100644 --- a/src/gui/MachinaGUI.hpp +++ b/src/gui/MachinaGUI.hpp @@ -22,21 +22,22 @@ #include #include #include +#include using namespace std; -namespace Machina { class Machine; } +namespace Machina { class Machine; class Engine; } class MachinaCanvas; class MachinaGUI { public: - MachinaGUI(SharedPtr machine); + MachinaGUI(SharedPtr engine); ~MachinaGUI(); boost::shared_ptr canvas() { return _canvas; } - boost::shared_ptr machine() { return _machine; } + boost::shared_ptr machine() { return _engine->machine(); } SharedPtr maid() { return _maid; } @@ -59,15 +60,20 @@ protected: void menu_file_save(); void menu_file_save_as(); void show_messages_toggled(); + void show_toolbar_toggled(); void menu_view_refresh(); void menu_help_about(); void menu_help_help(); void zoom(double z); void zoom_changed(); bool idle_callback(); + void update_toolbar(); void on_pane_position_changed(); void on_messages_expander_changed(); + + void quantize_changed(); + void tempo_changed(); bool _pane_closed; bool _update_pane_position; @@ -75,8 +81,8 @@ protected: bool _refresh; - boost::shared_ptr _canvas; - boost::shared_ptr _machine; + boost::shared_ptr _canvas; + boost::shared_ptr _engine; SharedPtr _maid; @@ -85,11 +91,13 @@ protected: Gtk::Window* _main_window; Gtk::Dialog* _help_dialog; Gtk::AboutDialog* _about_window; + Gtk::Toolbar* _toolbar; Gtk::MenuItem* _menu_file_open; Gtk::MenuItem* _menu_file_save; Gtk::MenuItem* _menu_file_save_as; Gtk::MenuItem* _menu_file_quit; Gtk::MenuItem* _menu_help_about; + Gtk::CheckMenuItem* _menu_view_toolbar; Gtk::CheckMenuItem* _menu_view_messages; Gtk::MenuItem* _menu_view_refresh; Gtk::MenuItem* _menu_help_help; @@ -97,6 +105,11 @@ protected: Gtk::TextView* _status_text; Gtk::Paned* _main_paned; Gtk::Expander* _messages_expander; + Gtk::RadioButton* _slave_radiobutton; + Gtk::RadioButton* _bpm_radiobutton; + Gtk::SpinButton* _bpm_spinbutton; + Gtk::CheckButton* _quantize_checkbutton; + Gtk::SpinButton* _quantize_spinbutton; Gtk::ToolButton* _zoom_normal_button; Gtk::ToolButton* _zoom_full_button; }; diff --git a/src/gui/machina.glade b/src/gui/machina.glade index b319dab..f255d9f 100644 --- a/src/gui/machina.glade +++ b/src/gui/machina.glade @@ -98,6 +98,17 @@ + + + True + _Toolbar + True + False + + + + + True @@ -175,16 +186,185 @@ - + True GTK_ORIENTATION_HORIZONTAL GTK_TOOLBAR_BOTH_HORIZ True True + + + True + True + True + False + + + + True + False + 0 + + + + True + False + True + Slave + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + True + BPM: + True + GTK_RELIEF_NORMAL + True + True + False + True + slave_radiobutton + + + 0 + False + False + + + + + + True + Set internal tempo + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 120 1 640 1 10 10 + + + 0 + True + True + + + + + + + False + False + + + + + + True + True + True + True + + + False + False + + + + + + True + True + True + False + + + + True + False + 0 + + + + True + False + True + Quantize: 1/ + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + False + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 1 1 99 1 4 4 + + + 0 + True + True + + + + + + + False + False + + + + + + True + True + True + True + + + False + False + + + True + Zoom to normal size gtk-zoom-100 True True @@ -199,6 +379,7 @@ True + Zoom to fit entire machine gtk-zoom-fit True True @@ -226,6 +407,8 @@ True + True + True True GTK_POLICY_ALWAYS GTK_POLICY_ALWAYS diff --git a/src/gui/main.cpp b/src/gui/main.cpp index 364fe17..d6c846e 100644 --- a/src/gui/main.cpp +++ b/src/gui/main.cpp @@ -15,15 +15,12 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -//#include "../../config.h" - #include #include #include #include "machina/Loader.hpp" #include "machina/JackDriver.hpp" -#include "machina/JackNodeFactory.hpp" #include "MachinaGUI.hpp" @@ -46,6 +43,7 @@ main(int argc, char** argv) driver->set_machine(m); driver->attach("machina"); + SharedPtr engine(new Engine(driver, m)); // Launch GUI try { @@ -53,7 +51,7 @@ main(int argc, char** argv) Gnome::Canvas::init(); Gtk::Main app(argc, argv); - MachinaGUI gui(m); + MachinaGUI gui(engine); app.run(*gui.window()); } catch (std::string msg) { -- cgit v1.2.1