From a96b70b1c92b7f2622ebeff9d34c92ba089997f1 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 5 Dec 2007 23:45:51 +0000 Subject: Working mutation operators. git-svn-id: http://svn.drobilla.net/lad/machina@952 a436a847-0d15-0410-975c-d299462d15a1 --- src/gui/MachinaCanvas.cpp | 2 +- src/gui/MachinaCanvas.hpp | 6 +- src/gui/MachinaGUI.cpp | 77 ++++++++++++++-- src/gui/MachinaGUI.hpp | 13 ++- src/gui/machina.glade | 218 ++++++++++++++++++++++++++++++---------------- 5 files changed, 226 insertions(+), 90 deletions(-) (limited to 'src/gui') diff --git a/src/gui/MachinaCanvas.cpp b/src/gui/MachinaCanvas.cpp index 8ed9e40..fb6ae94 100644 --- a/src/gui/MachinaCanvas.cpp +++ b/src/gui/MachinaCanvas.cpp @@ -117,7 +117,7 @@ MachinaCanvas::connect_node(boost::shared_ptr src, boost::shared_ptr head) { SharedPtr edge(new Machina::Edge(src->node(), head->node())); - src->node()->add_outgoing_edge(edge); + src->node()->add_edge(edge); boost::shared_ptr c(new EdgeView(shared_from_this(), src, head, edge)); diff --git a/src/gui/MachinaCanvas.hpp b/src/gui/MachinaCanvas.hpp index 631957e..211ebd7 100644 --- a/src/gui/MachinaCanvas.hpp +++ b/src/gui/MachinaCanvas.hpp @@ -15,8 +15,8 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef PATCHAGEPATCHBAYAREA_H -#define PATCHAGEPATCHBAYAREA_H +#ifndef MACHINA_CANVAS_HPP_H +#define MACHINA_CANVAS_HPP_H #include #include @@ -59,4 +59,4 @@ private: }; -#endif // PATCHAGEPATCHBAYAREA_H +#endif // MACHINA_CANVAS_HPP_H diff --git a/src/gui/MachinaGUI.cpp b/src/gui/MachinaGUI.cpp index 6c94211..3749d3a 100644 --- a/src/gui/MachinaGUI.cpp +++ b/src/gui/MachinaGUI.cpp @@ -61,8 +61,7 @@ MachinaGUI::MachinaGUI(SharedPtr engine) xml->get_widget("help_about_menuitem", _menu_help_about); xml->get_widget("help_help_menuitem", _menu_help_help); xml->get_widget("canvas_scrolledwindow", _canvas_scrolledwindow); - xml->get_widget("slave_radiobutton", _slave_radiobutton); - xml->get_widget("bpm_radiobutton", _bpm_radiobutton); + xml->get_widget("clock_checkbutton", _clock_checkbutton); xml->get_widget("bpm_spinbutton", _bpm_spinbutton); xml->get_widget("quantize_checkbutton", _quantize_checkbutton); xml->get_widget("quantize_spinbutton", _quantize_spinbutton); @@ -72,6 +71,11 @@ MachinaGUI::MachinaGUI(SharedPtr engine) xml->get_widget("zoom_normal_but", _zoom_normal_button); xml->get_widget("zoom_full_but", _zoom_full_button); xml->get_widget("arrange_but", _arrange_button); + xml->get_widget("mutate_but", _mutate_button); + xml->get_widget("compress_but", _compress_button); + xml->get_widget("add_node_but", _add_node_button); + xml->get_widget("remove_node_but", _remove_node_button); + xml->get_widget("adjust_node_but", _adjust_node_button); xml->get_widget("add_edge_but", _add_edge_button); xml->get_widget("remove_edge_but", _remove_edge_button); xml->get_widget("adjust_edge_but", _adjust_edge_button); @@ -117,17 +121,23 @@ MachinaGUI::MachinaGUI(SharedPtr engine) 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( + _clock_checkbutton->signal_toggled().connect( sigc::mem_fun(this, &MachinaGUI::tempo_changed)); _quantize_checkbutton->signal_toggled().connect( sigc::mem_fun(this, &MachinaGUI::quantize_changed)); _quantize_spinbutton->signal_changed().connect( sigc::mem_fun(this, &MachinaGUI::quantize_changed)); + _mutate_button->signal_clicked().connect( + sigc::mem_fun(this, &MachinaGUI::mutate)); + _compress_button->signal_clicked().connect( + sigc::mem_fun(this, &MachinaGUI::compress)); + _add_node_button->signal_clicked().connect( + sigc::mem_fun(this, &MachinaGUI::add_node)); + _remove_node_button->signal_clicked().connect( + sigc::mem_fun(this, &MachinaGUI::remove_node)); + _adjust_node_button->signal_clicked().connect( + sigc::mem_fun(this, &MachinaGUI::adjust_node)); _add_edge_button->signal_clicked().connect( sigc::mem_fun(this, &MachinaGUI::add_edge)); _remove_edge_button->signal_clicked().connect( @@ -141,7 +151,7 @@ MachinaGUI::MachinaGUI(SharedPtr engine) _main_window->present(); - _bpm_radiobutton->set_active(true); + _clock_checkbutton->set_active(true); _quantize_checkbutton->set_active(false); update_toolbar(); @@ -211,11 +221,59 @@ MachinaGUI::arrange() _canvas->arrange(_menu_view_time_edges->get_active()); } + +void +MachinaGUI::mutate() +{ + switch (rand() % 7) { + case 0: compress(); break; + case 1: add_node(); break; + case 2: remove_node(); break; + case 3: adjust_node(); break; + case 4: add_edge(); break; + case 5: remove_edge(); break; + case 6: adjust_edge(); default: break; + } +} + + +void +MachinaGUI::compress() +{ + Mutation::Compress::mutate(*_engine->machine().get()); + _canvas->build(_engine->machine()); +} + + +void +MachinaGUI::add_node() +{ + Mutation::AddNode::mutate(*_engine->machine().get()); + _canvas->build(_engine->machine()); +} + + +void +MachinaGUI::remove_node() +{ + Mutation::RemoveNode::mutate(*_engine->machine().get()); + _canvas->build(_engine->machine()); +} + + +void +MachinaGUI::adjust_node() +{ + Mutation::AdjustNode::mutate(*_engine->machine().get()); + idle_callback(); // update nodes +} + void MachinaGUI::add_edge() { Mutation::AddEdge::mutate(*_engine->machine().get()); + _canvas->build(_engine->machine()); } @@ -223,6 +281,7 @@ void MachinaGUI::remove_edge() { Mutation::RemoveEdge::mutate(*_engine->machine().get()); + _canvas->build(_engine->machine()); } @@ -239,7 +298,7 @@ MachinaGUI::update_toolbar() { _record_button->set_active(_engine->driver()->recording()); _play_button->set_active(_engine->machine()->is_activated()); - _bpm_spinbutton->set_sensitive(_bpm_radiobutton->get_active()); + _bpm_spinbutton->set_sensitive(_clock_checkbutton->get_active()); _quantize_spinbutton->set_sensitive(_quantize_checkbutton->get_active()); } diff --git a/src/gui/MachinaGUI.hpp b/src/gui/MachinaGUI.hpp index cc1eee3..c82cd01 100644 --- a/src/gui/MachinaGUI.hpp +++ b/src/gui/MachinaGUI.hpp @@ -63,6 +63,11 @@ protected: void menu_help_about(); void menu_help_help(); void arrange(); + void mutate(); + void compress(); + void add_node(); + void remove_node(); + void adjust_node(); void add_edge(); void remove_edge(); void adjust_edge(); @@ -108,8 +113,7 @@ protected: Gtk::ScrolledWindow* _canvas_scrolledwindow; Gtk::TextView* _status_text; Gtk::Expander* _messages_expander; - Gtk::RadioButton* _slave_radiobutton; - Gtk::RadioButton* _bpm_radiobutton; + Gtk::CheckButton* _clock_checkbutton; Gtk::SpinButton* _bpm_spinbutton; Gtk::CheckButton* _quantize_checkbutton; Gtk::SpinButton* _quantize_spinbutton; @@ -119,6 +123,11 @@ protected: Gtk::ToolButton* _zoom_normal_button; Gtk::ToolButton* _zoom_full_button; Gtk::ToolButton* _arrange_button; + Gtk::ToolButton* _mutate_button; + Gtk::ToolButton* _compress_button; + Gtk::ToolButton* _add_node_button; + Gtk::ToolButton* _remove_node_button; + Gtk::ToolButton* _adjust_node_button; Gtk::ToolButton* _add_edge_button; Gtk::ToolButton* _remove_edge_button; Gtk::ToolButton* _adjust_edge_button; diff --git a/src/gui/machina.glade b/src/gui/machina.glade index 11f3e7c..2153908 100644 --- a/src/gui/machina.glade +++ b/src/gui/machina.glade @@ -213,7 +213,7 @@ True - GTK_TOOLBAR_BOTH_HORIZ + GTK_TOOLBAR_ICONS False @@ -259,71 +259,40 @@ True - + True - 4 - 6 - + True - False True - Slave to JACK transport - Slave - True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Internal clock 0 + True True + + + + True + True + Set internal tempo + 120 1 640 1 10 10 + 1 + - False - False + 1 - + True - - - True - True - Use internal tempo - True - 0 - True - True - slave_radiobutton - - - False - False - - - - - True - True - Set internal tempo - 120 1 640 1 10 10 - 1 - - - 1 - - - - - True - BPM - - - False - False - 2 - - + BPM - 1 + False + False + 2 @@ -354,8 +323,8 @@ True True - Quantize recording - Quantize: 1/ + Quantize recording (beats) + 1/ True 0 True @@ -430,16 +399,115 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + GTK_TOOLBAR_ICONS False GTK_ICON_SIZE_SMALL_TOOLBAR True + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + False + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Random mutation + gtk-dialog-warning + + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Compress (merge identical nodes) + gtk-convert + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + False + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Create node + Add Node + gtk-new + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Delete node + Delete Node + gtk-delete + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Adjust node + Adjust Node + gtk-edit + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + False + False + + True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Add random edge + Add edge Add Edge - gtk-add + gtk-connect False @@ -449,9 +517,9 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Remove random edge + Remove edge Remove Edge - gtk-remove + gtk-disconnect False @@ -461,9 +529,9 @@ True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Adjust random edge probability - Mutate Edge Probabililty - gtk-edit + Adjust edge + Adjust Edge + gtk-select-color False @@ -614,58 +682,58 @@ Selector nodes are shown in green. 4 8 - + True True - True - 1 0 999999 1 10 10 + 60 0 127 1 10 10 1 - 2 True 1 2 - 1 - 2 - + True 0 - Duration: + Note: - 1 - 2 GTK_FILL - + True 0 - Note: + Duration: + 1 + 2 GTK_FILL - + True True - 60 0 127 1 10 10 + True + 1 0 999999 1 10 10 1 + 2 True 1 2 + 1 + 2 -- cgit v1.2.1