diff --git a/libs/surfaces/faderport8/faderport8.cc b/libs/surfaces/faderport8/faderport8.cc index b77f3d2b00..53e7d3b64e 100644 --- a/libs/surfaces/faderport8/faderport8.cc +++ b/libs/surfaces/faderport8/faderport8.cc @@ -88,6 +88,17 @@ debug_2byte_msg (std::string const& msg, int b0, int b1) #endif } +bool +FaderPort8::ProcessorCtrl::operator< (const FaderPort8::ProcessorCtrl& other) const +{ + if (ac->desc().display_priority == other.ac->desc().display_priority) { + return ac->parameter () < other.ac->parameter (); + } + /* sort higher priority first */ + return ac->desc().display_priority > other.ac->desc().display_priority; +} + + FaderPort8::FaderPort8 (Session& s) #ifdef FADERPORT16 : ControlProtocol (s, _("PreSonus FaderPort16")) @@ -1178,7 +1189,7 @@ FaderPort8::assign_processor_ctrls () std::vector toggle_params; std::vector slider_params; - for ( std::list ::iterator i = _proc_params.begin(); i != _proc_params.end(); ++i) { + for (std::list::iterator i = _proc_params.begin(); i != _proc_params.end(); ++i) { if ((*i).ac->toggled()) { toggle_params.push_back (&(*i)); } else { @@ -1398,9 +1409,13 @@ FaderPort8::select_plugin (int num) if (n == "hidden") { continue; } + _proc_params.push_back (ProcessorCtrl (n, proc->automation_control (*i))); } + /* sort by display priority */ + _proc_params.sort (); + // TODO: open plugin GUI if (_proc_params.size() > 0) // display diff --git a/libs/surfaces/faderport8/faderport8.h b/libs/surfaces/faderport8/faderport8.h index 3328a08603..b963bd48e9 100644 --- a/libs/surfaces/faderport8/faderport8.h +++ b/libs/surfaces/faderport8/faderport8.h @@ -213,7 +213,10 @@ private: {} std::string name; boost::shared_ptr ac; + + inline bool operator< (const ProcessorCtrl& other) const; }; + std::list _proc_params; boost::weak_ptr _plugin_insert; bool _show_presets;