Sort Lua scripts case-insensitive and expose sort-struct
authorRobin Gareus <robin@gareus.org>
Thu, 18 Jul 2019 13:49:48 +0000 (15:49 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 18 Jul 2019 13:52:29 +0000 (15:52 +0200)
libs/ardour/ardour/luascripting.h
libs/ardour/luascripting.cc

index 7570ff1bc84716100090f85ae71d2f96d75fef50..6b99ac1c61d67a80ad68a546323a24ec77fbff08 100644 (file)
@@ -123,6 +123,10 @@ public:
        static std::string get_factory_bytecode (const std::string&, const std::string& ffn = "factory", const std::string& fp = "f");
        static std::string user_script_dir ();
 
+       struct Sorter {
+               bool operator() (LuaScriptInfoPtr const a, LuaScriptInfoPtr const b) const;
+       };
+
 private:
        static LuaScripting* _instance; // singleton
        LuaScripting ();
index e748fb656e792752bbb0792bb0f7eca2b2fd3ee0..2d56a608ea8e66e3c6c75836f34854d4e219e6ff 100644 (file)
@@ -28,6 +28,7 @@
 #include "ardour/luascripting.h"
 #include "ardour/lua_script_params.h"
 #include "ardour/search_paths.h"
+#include "ardour/utils.h"
 
 #include "lua/luastate.h"
 #include "LuaBridge/LuaBridge.h"
@@ -104,11 +105,10 @@ LuaScripting::refresh (bool run_scan)
        }
 }
 
-struct ScriptSorter {
-       bool operator () (LuaScriptInfoPtr a, LuaScriptInfoPtr b) {
-               return a->name < b->name;
-       }
-};
+bool
+LuaScripting::Sorter::operator() (LuaScriptInfoPtr const a, LuaScriptInfoPtr const b) const {
+       return ARDOUR::cmp_nocase_utf8 (a->name, b->name) < 0;
+}
 
 LuaScriptInfoPtr
 LuaScripting::script_info (const std::string &script) {
@@ -166,13 +166,13 @@ LuaScripting::scan ()
                }
        }
 
-       std::sort (_sl_dsp->begin(), _sl_dsp->end(), ScriptSorter());
-       std::sort (_sl_session->begin(), _sl_session->end(), ScriptSorter());
-       std::sort (_sl_hook->begin(), _sl_hook->end(), ScriptSorter());
-       std::sort (_sl_action->begin(), _sl_action->end(), ScriptSorter());
-       std::sort (_sl_snippet->begin(), _sl_snippet->end(), ScriptSorter());
-       std::sort (_sl_setup->begin(), _sl_setup->end(), ScriptSorter());
-       std::sort (_sl_tracks->begin(), _sl_tracks->end(), ScriptSorter());
+       std::sort (_sl_dsp->begin(), _sl_dsp->end(), Sorter());
+       std::sort (_sl_session->begin(), _sl_session->end(), Sorter());
+       std::sort (_sl_hook->begin(), _sl_hook->end(), Sorter());
+       std::sort (_sl_action->begin(), _sl_action->end(), Sorter());
+       std::sort (_sl_snippet->begin(), _sl_snippet->end(), Sorter());
+       std::sort (_sl_setup->begin(), _sl_setup->end(), Sorter());
+       std::sort (_sl_tracks->begin(), _sl_tracks->end(), Sorter());
 
        scripts_changed (); /* EMIT SIGNAL */
 }