remove unused member
[ardour.git] / libs / surfaces / faderport8 / faderport8.h
index 64b5b4deccb54ab5f7b7ef28e654a818a0f1c86a..3328a0860310d0ca7b7c6b35bca4f20cd7b3ec76 100644 (file)
@@ -1,25 +1,28 @@
 /*
  * Copyright (C) 2017 Robin Gareus <robin@gareus.org>
- * Copyright (C) 2015 Paul Davis
  *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
 #ifndef ardour_surface_faderport8_h
 #define ardour_surface_faderport8_h
 
+// allow to undo "mute clear", "solo clear"
+// eventually this should use some libardour mixer history/undo
+#define FP8_MUTESOLO_UNDO
+
 #include <list>
 #include <map>
 #include <glibmm/threads.h>
@@ -27,6 +30,7 @@
 #define ABSTRACT_UI_EXPORTS
 #include "pbd/abstract_ui.h"
 #include "pbd/properties.h"
+#include "pbd/controllable.h"
 
 #include "ardour/types.h"
 #include "ardour/async_midi_port.h"
@@ -45,9 +49,10 @@ namespace ARDOUR {
        class Bundle;
        class Session;
        class Processor;
+       class PluginInsert;
 }
 
-namespace ArdourSurface {
+namespace ArdourSurface { namespace FP_NAMESPACE {
 
 struct FaderPort8Request : public BaseUI::BaseRequestObject
 {
@@ -83,7 +88,17 @@ public:
        std::string get_button_action (FP8Controls::ButtonId, bool);
        FP8Controls const& control () const { return  _ctrls; }
 
-       int stop ();
+       void set_clock_mode (uint32_t m) { _clock_mode = m; }
+       void set_scribble_mode (uint32_t m) { _scribble_mode = m; }
+       void set_two_line_text (bool yn) { _two_line_text = yn; }
+       void set_auto_pluginui (bool yn) { _auto_pluginui = yn; }
+
+       uint32_t clock_mode () const { return _clock_mode; }
+       uint32_t scribble_mode () const { return _scribble_mode; }
+       bool twolinetext () const { return _two_line_text; }
+       bool auto_pluginui () const { return _auto_pluginui; }
+
+       void stop ();
        void do_request (FaderPort8Request*);
        void thread_init ();
 
@@ -100,7 +115,7 @@ private:
        void stop_midi_handling ();
 
        /* I/O Ports */
-       PBD::ScopedConnection port_connection;
+       PBD::ScopedConnectionList port_connections;
        boost::shared_ptr<ARDOUR::AsyncMIDIPort> _input_port;
        boost::shared_ptr<ARDOUR::AsyncMIDIPort> _output_port;
        boost::shared_ptr<ARDOUR::Bundle>        _input_bundle;
@@ -108,7 +123,8 @@ private:
 
        bool midi_input_handler (Glib::IOCondition ioc, boost::weak_ptr<ARDOUR::AsyncMIDIPort> port);
 
-       bool connection_handler (boost::weak_ptr<ARDOUR::Port>, std::string name1, boost::weak_ptr<ARDOUR::Port>, std::string name2, bool yn);
+       bool connection_handler (std::string name1, std::string name2);
+       void engine_reset ();
 
        enum ConnectionState {
                InputConnected = 0x1,
@@ -136,22 +152,30 @@ private:
        void notify_stripable_added_or_removed ();
        void notify_fader_mode_changed ();
        void filter_stripables (ARDOUR::StripableList& strips) const;
-       void assign_stripables ();
+       void assign_stripables (bool select_only = false);
        void set_periodic_display_mode (FP8Strip::DisplayMode);
 
-       void assign_strips (bool reset_bank);
+       void assign_strips ();
        void bank (bool down, bool page);
        void move_selected_into_view ();
+       void select_prev_next (bool next);
 
        void assign_sends ();
        void spill_plugins ();
        void assign_processor_ctrls ();
+       bool assign_plugin_presets (boost::shared_ptr<ARDOUR::PluginInsert>);
        void build_well_known_processor_ctrls (boost::shared_ptr<ARDOUR::Stripable>, bool);
+       void preset_changed ();
        void select_plugin (int num);
+       void select_plugin_preset (size_t num);
 
+       void toggle_preset_param_mode ();
        void bank_param (bool down, bool page);
        /* bank offsets */
-       int _channel_off;
+       int  get_channel_off (FP8Types::MixMode m) const { return _channel_off [m]; }
+       void set_channel_off (FP8Types::MixMode m, int off) {_channel_off [m] = off ; }
+
+       int _channel_off[FP8Types::MixModeMax + 1];
        int _plugin_off;
        int _parameter_off;
 
@@ -172,12 +196,14 @@ private:
        void drop_ctrl_connections ();
 
        void select_strip (boost::weak_ptr<ARDOUR::Stripable>);
+
        void notify_pi_property_changed (const PBD::PropertyChange&);
        void notify_stripable_property_changed (boost::weak_ptr<ARDOUR::Stripable>, const PBD::PropertyChange&);
-       void gui_track_selection_changed ();
+       void stripable_selection_changed ();
+       void subscribe_to_strip_signals ();
 
        PBD::ScopedConnection selection_connection;
-       PBD::ScopedConnectionList automation_state_connections;
+       PBD::ScopedConnectionList route_state_connections;
        PBD::ScopedConnectionList modechange_connections;
        /* **************************************************************************/
        struct ProcessorCtrl {
@@ -189,13 +215,23 @@ private:
                boost::shared_ptr<ARDOUR::AutomationControl> ac;
        };
        std::list <ProcessorCtrl> _proc_params;
+       boost::weak_ptr<ARDOUR::PluginInsert> _plugin_insert;
+       bool _show_presets;
+       int _showing_well_known;
        /* **************************************************************************/
 
        /* periodic updates, parameter poll */
        sigc::connection _periodic_connection;
        bool periodic ();
        std::string _timecode;
+       std::string _musical_time;
        std::string const& timecode () const { return _timecode; }
+       std::string const& musical_time () const { return _musical_time; }
+
+       int _timer_divider;
+
+       bool show_meters () const { return _scribble_mode & 1; }
+       bool show_panner () const { return _scribble_mode & 2; }
 
        /* sync button blink -- the FP's blink mode does not work */
        sigc::connection _blink_connection;
@@ -205,9 +241,9 @@ private:
        /* shift key */
        sigc::connection _shift_connection;
        bool _shift_lock;
-       bool _shift_pressed;
+       int _shift_pressed;
        bool shift_timeout () { _shift_lock = true; return false; }
-       bool shift_mod () const { return _shift_lock | _shift_pressed; }
+       bool shift_mod () const { return _shift_lock || (_shift_pressed > 0); }
 
        /* GUI */
        void build_gui ();
@@ -229,7 +265,8 @@ private:
        void notify_history_changed ();
        void notify_solo_changed ();
        void notify_mute_changed ();
-       void notify_automation_mode_changed ();
+       void notify_route_state_changed ();
+       void notify_plugin_active_changed ();
 
        /* actions */
        PBD::ScopedConnectionList button_connections;
@@ -238,7 +275,14 @@ private:
        void button_record ();
        void button_loop ();
        void button_metronom ();
+       void button_bypass ();
+       void button_open ();
+       void button_link ();
+       void button_lock ();
        void button_varispeed (bool);
+#ifdef FP8_MUTESOLO_UNDO
+       void button_solo_clear ();
+#endif
        void button_mute_clear ();
        void button_arm (bool);
        void button_arm_all ();
@@ -246,11 +290,44 @@ private:
        void button_prev_next (bool);
        void button_action (const std::string& group, const std::string& item);
 
+       void button_chanlock (); /* FP2 only */
+       void button_flip (); /* FP2 only */
+
        void button_encoder ();
        void button_parameter ();
        void encoder_navigate (bool, int);
        void encoder_parameter (bool, int);
 
+       /* mute undo history */
+#ifdef FP8_MUTESOLO_UNDO
+       std::vector <boost::weak_ptr<ARDOUR::AutomationControl> > _mute_state;
+       std::vector <boost::weak_ptr<ARDOUR::AutomationControl> > _solo_state;
+#endif
+
+       /* Encoder handlers */
+       void handle_encoder_pan (int steps);
+       void handle_encoder_link (int steps);
+
+       /* Control Link */
+       void stop_link ();
+       void start_link ();
+       void lock_link ();
+       void unlock_link (bool drop = false);
+       void nofity_focus_control (boost::weak_ptr<PBD::Controllable>);
+       PBD::ScopedConnection link_connection;
+       PBD::ScopedConnection link_locked_connection;
+       boost::weak_ptr<PBD::Controllable> _link_control;
+       bool _link_enabled;
+       bool _link_locked; // can only be true if _link_enabled
+
+       bool _chan_locked; /* FP2 only */
+
+       /* user prefs */
+       uint32_t _clock_mode;
+       uint32_t _scribble_mode;
+       bool     _two_line_text;
+       bool     _auto_pluginui;
+
        /* user bound actions */
        void button_user (bool, FP8Controls::ButtonId);
 
@@ -329,6 +406,6 @@ private:
        UserActionMap _user_action_map;
 };
 
-} /* namespace */
+} /* namespace */
 
 #endif /* ardour_surface_faderport8_h */