fix for push2 code on Windows (no random())
[ardour.git] / libs / surfaces / push2 / push2.cc
index 77088587b43a7790ec8de33b85fd557c7fb85441..57160abee3269d04bc5ae74f6b9c2d7a6c3c9888 100644 (file)
 
 #include "pbd/i18n.h"
 
+#ifdef PLATFORM_WINDOWS
+#define random() rand()
+#endif
+
 using namespace ARDOUR;
 using namespace std;
 using namespace PBD;
@@ -75,50 +79,10 @@ register_enums ()
        vector<int> i;
        vector<string> s;
 
-       MusicalMode::Type mode;
 
 #define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
 #define REGISTER_CLASS_ENUM(t,e) i.push_back (t::e); s.push_back (#e)
 
-       REGISTER_CLASS_ENUM (MusicalMode,Dorian);
-       REGISTER_CLASS_ENUM (MusicalMode, IonianMajor);
-       REGISTER_CLASS_ENUM (MusicalMode, Minor);
-       REGISTER_CLASS_ENUM (MusicalMode, HarmonicMinor);
-       REGISTER_CLASS_ENUM (MusicalMode, MelodicMinorAscending);
-       REGISTER_CLASS_ENUM (MusicalMode, MelodicMinorDescending);
-       REGISTER_CLASS_ENUM (MusicalMode, Phrygian);
-       REGISTER_CLASS_ENUM (MusicalMode, Lydian);
-       REGISTER_CLASS_ENUM (MusicalMode, Mixolydian);
-       REGISTER_CLASS_ENUM (MusicalMode, Aeolian);
-       REGISTER_CLASS_ENUM (MusicalMode, Locrian);
-       REGISTER_CLASS_ENUM (MusicalMode, PentatonicMajor);
-       REGISTER_CLASS_ENUM (MusicalMode, PentatonicMinor);
-       REGISTER_CLASS_ENUM (MusicalMode, Chromatic);
-       REGISTER_CLASS_ENUM (MusicalMode, BluesScale);
-       REGISTER_CLASS_ENUM (MusicalMode, NeapolitanMinor);
-       REGISTER_CLASS_ENUM (MusicalMode, NeapolitanMajor);
-       REGISTER_CLASS_ENUM (MusicalMode, Oriental);
-       REGISTER_CLASS_ENUM (MusicalMode, DoubleHarmonic);
-       REGISTER_CLASS_ENUM (MusicalMode, Enigmatic);
-       REGISTER_CLASS_ENUM (MusicalMode, Hirajoshi);
-       REGISTER_CLASS_ENUM (MusicalMode, HungarianMinor);
-       REGISTER_CLASS_ENUM (MusicalMode, HungarianMajor);
-       REGISTER_CLASS_ENUM (MusicalMode, Kumoi);
-       REGISTER_CLASS_ENUM (MusicalMode, Iwato);
-       REGISTER_CLASS_ENUM (MusicalMode, Hindu);
-       REGISTER_CLASS_ENUM (MusicalMode, Spanish8Tone);
-       REGISTER_CLASS_ENUM (MusicalMode, Pelog);
-       REGISTER_CLASS_ENUM (MusicalMode, HungarianGypsy);
-       REGISTER_CLASS_ENUM (MusicalMode, Overtone);
-       REGISTER_CLASS_ENUM (MusicalMode, LeadingWholeTone);
-       REGISTER_CLASS_ENUM (MusicalMode, Arabian);
-       REGISTER_CLASS_ENUM (MusicalMode, Balinese);
-       REGISTER_CLASS_ENUM (MusicalMode, Gypsy);
-       REGISTER_CLASS_ENUM (MusicalMode, Mohammedan);
-       REGISTER_CLASS_ENUM (MusicalMode, Javanese);
-       REGISTER_CLASS_ENUM (MusicalMode, Persian);
-       REGISTER_CLASS_ENUM (MusicalMode, Algerian);
-       REGISTER (mode);
 }
 
 Push2::Push2 (ARDOUR::Session& s)
@@ -233,10 +197,10 @@ Push2::open ()
 
        try {
                _canvas = new Push2Canvas (*this, 960, 160);
-               mix_layout = new MixLayout (*this, *session);
-               scale_layout = new ScaleLayout (*this, *session);
-               track_mix_layout = new TrackMixLayout (*this, *session);
-               splash_layout = new SplashLayout (*this, *session);
+               mix_layout = new MixLayout (*this, *session, "globalmix");
+               scale_layout = new ScaleLayout (*this, *session, "scale");
+               track_mix_layout = new TrackMixLayout (*this, *session, "trackmix");
+               splash_layout = new SplashLayout (*this, *session, "splash");
        } catch (...) {
                error << _("Cannot construct Canvas for display") << endmsg;
                libusb_release_interface (handle, 0x00);
@@ -1712,20 +1676,26 @@ Push2::get_color (ColorName name)
 void
 Push2::set_current_layout (Push2Layout* layout)
 {
-       if (_current_layout) {
-               _current_layout->hide ();
-               _canvas->root()->remove (_current_layout);
-               _previous_layout = _current_layout;
-       }
+       if (layout && layout == _current_layout) {
+               _current_layout->show ();
+       } else {
+
+               if (_current_layout) {
+                       _current_layout->hide ();
+                       _canvas->root()->remove (_current_layout);
+                       _previous_layout = _current_layout;
+               }
 
-       _current_layout = layout;
+               _current_layout = layout;
+
+               if (_current_layout) {
+                       _canvas->root()->add (_current_layout);
+                       _current_layout->show ();
+               }
 
-       if (_current_layout) {
-               _canvas->root()->add (_current_layout);
-               _current_layout->show ();
-       }
 
-       _canvas->request_redraw ();
+               _canvas->request_redraw ();
+       }
 }
 
 void