push2: tweak layout APIs etc.
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 27 Sep 2016 19:31:17 +0000 (14:31 -0500)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 27 Sep 2016 19:59:32 +0000 (14:59 -0500)
libs/surfaces/push2/layout.cc
libs/surfaces/push2/layout.h
libs/surfaces/push2/mix.cc
libs/surfaces/push2/mix.h
libs/surfaces/push2/push2.cc
libs/surfaces/push2/scale.cc
libs/surfaces/push2/scale.h
libs/surfaces/push2/splash.cc
libs/surfaces/push2/splash.h
libs/surfaces/push2/track_mix.cc
libs/surfaces/push2/track_mix.h

index be5ff6fdafd97de9e99a833cecf1aed633d4ab7f..10ff7a877118382d86ca2d4b641013ba47745efd 100644 (file)
@@ -24,10 +24,11 @@ using namespace ARDOUR;
 using namespace ArdourSurface;
 using namespace ArdourCanvas;
 
-Push2Layout::Push2Layout (Push2& p, Session& s)
+Push2Layout::Push2Layout (Push2& p, Session& s, std::string const & name)
        : Container (p.canvas())
        , p2 (p)
        , session (s)
+       , _name (name)
 {
 }
 
index e655a6de8f6e5df2eb867be087b6ead01249542e..91970f5d53068fbc7eb0b992a1c99a77d68b9102 100644 (file)
@@ -46,7 +46,7 @@ class Push2;
 class Push2Layout : public sigc::trackable, public ArdourCanvas::Container
 {
   public:
-       Push2Layout (Push2& p, ARDOUR::Session& s);
+       Push2Layout (Push2& p, ARDOUR::Session& s, std::string const & name);
        virtual ~Push2Layout ();
 
        int display_width () const;
@@ -71,9 +71,12 @@ class Push2Layout : public sigc::trackable, public ArdourCanvas::Container
        virtual void update_meters () {}
        virtual void update_clocks () {}
 
+       std::string name() const { return _name; }
+
   protected:
        Push2& p2;
        ARDOUR::Session& session;
+       std::string _name;
 };
 
 } /* namespace */
index 847586f0e5d34d6e4e281ecc53505e8e65ca835c..1ec4868a6cbbb6164e3fa467470882b5853b75ef 100644 (file)
@@ -66,8 +66,8 @@ using namespace Glib;
 using namespace ArdourSurface;
 using namespace ArdourCanvas;
 
-MixLayout::MixLayout (Push2& p, Session& s)
-       : Push2Layout (p, s)
+MixLayout::MixLayout (Push2& p, Session & s, std::string const & name)
+       : Push2Layout (p, s, name)
        , bank_start (0)
        , vpot_mode (Volume)
 {
index 836709d9295b69966dbad5937d029c1e5869d836..c3d12cea49a3aa65c134971b0bccd70f16336c2f 100644 (file)
@@ -40,7 +40,7 @@ class LevelMeter;
 class MixLayout : public Push2Layout
 {
    public:
-       MixLayout (Push2& p, ARDOUR::Session&);
+       MixLayout (Push2& p, ARDOUR::Session&, std::string const &);
        ~MixLayout ();
 
        void render (ArdourCanvas::Rect const &, Cairo::RefPtr<Cairo::Context>) const;
index f7606fa641c713ac7e173a3783488f876334ff11..47bff25580dbe74137c523a3b9d505e1ac8f512e 100644 (file)
@@ -233,10 +233,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);
index 659d800e5de4616f95e9252d6e78b417101160ad..005efca3c1834411d843d202ed79d2ce54cef0f8 100644 (file)
@@ -38,8 +38,8 @@ using namespace ArdourCanvas;
 
 static double unselected_root_alpha = 0.5;
 
-ScaleLayout::ScaleLayout (Push2& p, Session& s)
-       : Push2Layout (p, s)
+ScaleLayout::ScaleLayout (Push2& p, Session & s, std::string const & name)
+       : Push2Layout (p, s, name)
        , last_vpot (-1)
        , vpot_delta_cnt (0)
        , root_button (0)
index 9f229b40919ae0cf2bb05e15f13c5e6b78e96497..b039fb43489cb5520a75ad603142eb56971325e4 100644 (file)
@@ -36,7 +36,7 @@ namespace ArdourSurface {
 class ScaleLayout : public Push2Layout
 {
    public:
-       ScaleLayout (Push2& p, ARDOUR::Session&);
+       ScaleLayout (Push2& p, ARDOUR::Session&, std::string const &);
        ~ScaleLayout ();
 
        void render (ArdourCanvas::Rect const &, Cairo::RefPtr<Cairo::Context>) const;
index 8b25e6eac6bd3ea0e8cf8fc24735a3e1aac1612d..0c3e36d9fcb2d3d9227aa8c2b49caffdc96a3bdc 100644 (file)
@@ -35,8 +35,8 @@ using namespace std;
 using namespace ArdourSurface;
 using namespace ArdourCanvas;
 
-SplashLayout::SplashLayout (Push2& p, Session& s)
-       : Push2Layout (p, s)
+SplashLayout::SplashLayout (Push2& p, Session& s, std::string const & name)
+       : Push2Layout (p, s, name)
 {
        std::string splash_file;
 
index e587cd234492f41cf8fa358ea8d81b6e834617f9..b68a0e6566f6d0bcc6f3afc64497002fe7693244 100644 (file)
@@ -33,7 +33,7 @@ namespace ArdourSurface {
 class SplashLayout : public Push2Layout
 {
    public:
-       SplashLayout (Push2& p, ARDOUR::Session&);
+       SplashLayout (Push2& p, ARDOUR::Session&, std::string const &);
        ~SplashLayout ();
 
        void render (ArdourCanvas::Rect const &, Cairo::RefPtr<Cairo::Context>) const;
index 50688a008f5307b517165c10d7b0df72cd587563..85cbf4697c8cac47fbfa2e15019a99200f36e7d1 100644 (file)
@@ -71,8 +71,8 @@ using namespace Glib;
 using namespace ArdourSurface;
 using namespace ArdourCanvas;
 
-TrackMixLayout::TrackMixLayout (Push2& p, Session& s)
-       : Push2Layout (p, s)
+TrackMixLayout::TrackMixLayout (Push2& p, Session & s, std::string const & name)
+       : Push2Layout (p, s, name)
 {
        Pango::FontDescription fd ("Sans 10");
 
@@ -169,11 +169,8 @@ TrackMixLayout::~TrackMixLayout ()
 void
 TrackMixLayout::selection_changed ()
 {
-       if (!parent()) {
-               return;
-       }
-
        boost::shared_ptr<Stripable> s = ControlProtocol::first_selected_stripable();
+
        if (s) {
                set_stripable (s);
        }
@@ -192,7 +189,7 @@ TrackMixLayout::show ()
                p2.write (b->state_msg());
        }
 
-       selection_changed ();
+       show_state ();
 
        Container::show ();
 }
@@ -200,7 +197,7 @@ TrackMixLayout::show ()
 void
 TrackMixLayout::hide ()
 {
-       set_stripable (boost::shared_ptr<Stripable>());
+
 }
 
 void
@@ -225,23 +222,31 @@ TrackMixLayout::button_lower (uint32_t n)
 
        switch (n) {
        case 0:
-               stripable->mute_control()->set_value (!stripable->mute_control()->get_value(), PBD::Controllable::UseGroup);
+               if (stripable->mute_control()) {
+                       stripable->mute_control()->set_value (!stripable->mute_control()->get_value(), PBD::Controllable::UseGroup);
+               }
                break;
        case 1:
-               stripable->solo_control()->set_value (!stripable->solo_control()->get_value(), PBD::Controllable::UseGroup);
+               if (stripable->solo_control()) {
+                       stripable->solo_control()->set_value (!stripable->solo_control()->get_value(), PBD::Controllable::UseGroup);
+               }
                break;
        case 2:
-               stripable->rec_enable_control()->set_value (!stripable->rec_enable_control()->get_value(), PBD::Controllable::UseGroup);
+               if (stripable->rec_enable_control()) {
+                       stripable->rec_enable_control()->set_value (!stripable->rec_enable_control()->get_value(), PBD::Controllable::UseGroup);
+               }
                break;
        case 3:
-               mc = stripable->monitoring_control()->monitoring_choice();
-               switch (mc) {
-               case MonitorInput:
-                       stripable->monitoring_control()->set_value (MonitorAuto, PBD::Controllable::UseGroup);
-                       break;
-               default:
-                       stripable->monitoring_control()->set_value (MonitorInput, PBD::Controllable::UseGroup);
-                       break;
+               if (stripable->monitor_control()) {
+                       mc = stripable->monitoring_control()->monitoring_choice();
+                       switch (mc) {
+                       case MonitorInput:
+                               stripable->monitoring_control()->set_value (MonitorAuto, PBD::Controllable::UseGroup);
+                               break;
+                       default:
+                               stripable->monitoring_control()->set_value (MonitorInput, PBD::Controllable::UseGroup);
+                               break;
+                       }
                }
                break;
        case 4:
@@ -256,10 +261,14 @@ TrackMixLayout::button_lower (uint32_t n)
                }
                break;
        case 5:
-               stripable->solo_isolate_control()->set_value (!stripable->solo_isolate_control()->get_value(), PBD::Controllable::UseGroup);
+               if (stripable->solo_isolate_control()) {
+                       stripable->solo_isolate_control()->set_value (!stripable->solo_isolate_control()->get_value(), PBD::Controllable::UseGroup);
+               }
                break;
        case 6:
-               stripable->solo_safe_control()->set_value (!stripable->solo_safe_control()->get_value(), PBD::Controllable::UseGroup);
+               if (stripable->solo_safe_control()) {
+                       stripable->solo_safe_control()->set_value (!stripable->solo_safe_control()->get_value(), PBD::Controllable::UseGroup);
+               }
                break;
        case 7:
                /* nothing here */
@@ -434,6 +443,28 @@ TrackMixLayout::monitoring_change ()
        p2.write (b2->state_msg());
 }
 
+void
+TrackMixLayout::show_state ()
+{
+       if (!parent()) {
+               return;
+       }
+
+       if (stripable) {
+               name_changed ();
+               color_changed ();
+               solo_mute_change ();
+               rec_enable_change ();
+               solo_iso_change ();
+               solo_safe_change ();
+               monitoring_change ();
+
+               meter->set_meter (stripable->peak_meter ().get());
+       } else {
+               meter->set_meter (0);
+       }
+}
+
 void
 TrackMixLayout::set_stripable (boost::shared_ptr<Stripable> s)
 {
@@ -471,19 +502,9 @@ TrackMixLayout::set_stripable (boost::shared_ptr<Stripable> s)
                knobs[5]->set_controllable (boost::shared_ptr<AutomationControl>());
                knobs[6]->set_controllable (boost::shared_ptr<AutomationControl>());
                knobs[7]->set_controllable (boost::shared_ptr<AutomationControl>());
-
-               name_changed ();
-               color_changed ();
-               solo_mute_change ();
-               rec_enable_change ();
-               solo_iso_change ();
-               solo_safe_change ();
-               monitoring_change ();
-
-               meter->set_meter (stripable->peak_meter ().get());
-       } else {
-               meter->set_meter (0);
        }
+
+       show_state ();
 }
 
 void
@@ -497,10 +518,16 @@ void
 TrackMixLayout::name_changed ()
 {
        if (stripable) {
-               /* poor-man's right justification */
-               char buf[92];
-               snprintf (buf, sizeof (buf), "%*s", (int) sizeof (buf) - 1, stripable->name().c_str());
-               name_text->set (buf);
+
+               name_text->set (stripable->name());
+
+               /* right justify */
+
+               Duple pos;
+               pos.y = name_text->position().y;
+               pos.x = display_width() - 10 - name_text->width();
+
+               name_text->set_position (pos);
        }
 }
 
index 417c394f95d848b05e4641d287ccbf03aa232755..ec945f4cab47533ef6027499ab83d6f44d2237f4 100644 (file)
@@ -43,7 +43,7 @@ class LevelMeter;
 class TrackMixLayout : public Push2Layout
 {
    public:
-       TrackMixLayout (Push2& p, ARDOUR::Session&);
+       TrackMixLayout (Push2& p, ARDOUR::Session&, std::string const &);
        ~TrackMixLayout ();
 
        void set_stripable (boost::shared_ptr<ARDOUR::Stripable>);
@@ -63,6 +63,8 @@ class TrackMixLayout : public Push2Layout
        void update_meters ();
        void update_clocks ();
 
+       boost::shared_ptr<ARDOUR::Stripable> current_stripable() const { return stripable; }
+
    private:
        boost::shared_ptr<ARDOUR::Stripable> stripable;
        PBD::ScopedConnectionList stripable_connections;
@@ -84,6 +86,7 @@ class TrackMixLayout : public Push2Layout
 
        PBD::ScopedConnection selection_connection;
        void selection_changed ();
+       void show_state ();
 
        void drop_stripable ();
        void name_changed ();