push2: save and restore push2 pad state, etc.
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 7 Jul 2016 20:28:15 +0000 (16:28 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 27 Sep 2016 19:59:30 +0000 (14:59 -0500)
libs/surfaces/push2/gui.cc
libs/surfaces/push2/push2.cc
libs/surfaces/push2/push2.h

index 0c417276c4de69cd241303fbdd88e6234734fa57..e0ddb53e19350f2298f93d041535ceba1d5ed7ab 100644 (file)
@@ -84,7 +84,7 @@ P2GUI::P2GUI (Push2& p)
        , action_table (5, 4)
        , ignore_active_change (false)
        , pad_table (8, 8)
-       , root_note_octave_adjustment (3, 0, 10, 1, 1)
+       , root_note_octave_adjustment (p2.root_octave(), 0, 10, 1, 1)
        , root_note_octave (root_note_octave_adjustment)
        , root_note_octave_label (_("Octave"))
        , root_note_label (_("Root"))
@@ -139,11 +139,11 @@ P2GUI::P2GUI (Push2& p)
 
        root_note_selector.set_model (build_note_columns());
        root_note_selector.pack_start (note_columns.name);
-       root_note_selector.set_active (0);
+       root_note_selector.set_active (p2.scale_root());
 
        mode_selector.set_model (build_mode_columns());
        mode_selector.pack_start (mode_columns.name);
-       mode_selector.set_active (0);
+       mode_selector.set_active ((int) p2.mode());
 
        mode_packer.set_border_width (12);
        mode_packer.set_spacings (12);
@@ -157,6 +157,7 @@ P2GUI::P2GUI (Push2& p)
        mode_packer.attach (mode_label, 0, 1, 2, 3, AttachOptions (FILL|EXPAND), SHRINK);
        mode_packer.attach (mode_selector, 1, 2, 2, 3, AttachOptions (FILL|EXPAND), SHRINK);
 
+       inkey_button.set_active (p2.in_key());
        mode_packer.attach (inkey_button, 1, 2, 3, 4, AttachOptions (FILL|EXPAND), SHRINK);
 
        pad_notebook.append_page (pad_table, _("Pad Layout"));
index d5672fe886558321bbc27e1b4d6ce568561e5a4d..ffbdef4e9da38ba1b6b416492510883db51de6d3 100644 (file)
@@ -126,10 +126,10 @@ Push2::Push2 (ARDOUR::Session& s)
        , bank_start (0)
        , connection_state (ConnectionState (0))
        , gui (0)
-       , mode (MusicalMode::IonianMajor)
-       , scale_root (36)
-       , root_octave (3)
-       , in_key (true)
+       , _mode (MusicalMode::IonianMajor)
+       , _scale_root (0)
+       , _root_octave (3)
+       , _in_key (true)
        , octave_shift (0)
 {
        context = Cairo::Context::create (frame_buffer);
@@ -651,7 +651,7 @@ Push2::set_active (bool yn)
 
                init_buttons (true);
                init_touch_strip ();
-               set_pad_scale (scale_root, root_octave, mode, in_key);
+               set_pad_scale (_scale_root, _root_octave, _mode, _in_key);
                switch_bank (0);
                splash ();
 
@@ -1114,10 +1114,10 @@ Push2::get_state()
        child->add_child_nocopy (_async_out->get_state());
        node.add_child_nocopy (*child);
 
-       node.add_property ("root", to_string (scale_root, std::dec));
-       node.add_property ("root_octave", to_string (root_octave, std::dec));
-       node.add_property ("in_key", in_key ? X_("yes") : X_("no"));
-       node.add_property ("mode", enum_2_string (mode));
+       node.add_property (X_("root"), to_string (_scale_root, std::dec));
+       node.add_property (X_("root_octave"), to_string (_root_octave, std::dec));
+       node.add_property (X_("in_key"), _in_key ? X_("yes") : X_("no"));
+       node.add_property (X_("mode"), enum_2_string (_mode));
 
        return node;
 }
@@ -1149,6 +1149,24 @@ Push2::set_state (const XMLNode & node, int version)
                }
        }
 
+       XMLProperty const* prop;
+
+       if ((prop = node.property (X_("root"))) != 0) {
+               _scale_root = atoi (prop->value());
+       }
+
+       if ((prop = node.property (X_("root_octave"))) != 0) {
+               _root_octave = atoi (prop->value());
+       }
+
+       if ((prop = node.property (X_("in_key"))) != 0) {
+               _in_key = string_is_affirmative (prop->value());
+       }
+
+       if ((prop = node.property (X_("mode"))) != 0) {
+               _mode = (MusicalMode::Type) string_2_enum (prop->value(), _mode);
+       }
+
        return retval;
 }
 
@@ -1737,7 +1755,7 @@ Push2::pad_note (int row, int col) const
 void
 Push2::set_pad_scale (int root, int octave, MusicalMode::Type mode, bool inkey)
 {
-       cerr << "reset pad to r = " << root << " o = " << octave << " m = " << mode << endl;
+       cerr << "reset pad to r = " << root << " o = " << octave << " m = " << mode << " ik " << inkey << endl;
 
        MusicalMode m (mode);
        vector<float>::iterator interval;
@@ -1803,6 +1821,7 @@ Push2::set_pad_scale (int root, int octave, MusicalMode::Type mode, bool inkey)
 
                                        if ((notenum % 12) == original_root) {
                                                pad->set_color (LED::Green);
+                                               cerr << "Green!\n";
                                                pad->perma_color = LED::Green;
                                        } else {
                                                pad->set_color (LED::White);
@@ -1866,8 +1885,8 @@ Push2::set_pad_scale (int root, int octave, MusicalMode::Type mode, bool inkey)
 
        /* store state */
 
-       scale_root = root;
-       root_octave = octave;
-       in_key = inkey;
-       mode = mode;
+       _scale_root = original_root;
+       _root_octave = octave;
+       _in_key = inkey;
+       _mode = mode;
 }
index e39c07e76c92b43c1d92fd6cfca106445bb44601..d92bf89755bacca520a438131ee865f6c4fbd88d 100644 (file)
@@ -100,7 +100,12 @@ class Push2 : public ARDOUR::ControlProtocol
 
        void set_pad_scale (int root, int octave, MusicalMode::Type mode, bool inkey);
 
-   private:
+       MusicalMode::Type mode() const { return  _mode; }
+       int scale_root() const { return _scale_root; }
+       int root_octave() const { return _root_octave; }
+       bool in_key() const { return _in_key; }
+
+  private:
        libusb_device_handle *handle;
        uint8_t   frame_header[16];
        uint16_t* device_frame_buffer;
@@ -514,10 +519,10 @@ class Push2 : public ARDOUR::ControlProtocol
        std::map<int,int> pad_map;
        void build_pad_table();
 
-       MusicalMode::Type mode;
-       int scale_root;
-       int root_octave;
-       bool in_key;
+       MusicalMode::Type _mode;
+       int _scale_root;
+       int _root_octave;
+       bool _in_key;
 
        int octave_shift;
 };