- for(int i = 0; i < plugins.size(); i++)
- {
- PresetsDBPlugin *plugin = plugins.get(i);
- if(!strcasecmp(plugin->title, plugin_title))
- {
- if(number < plugin->keyframes.size())
- {
- return plugin->keyframes.get(number)->title;
- }
- else
- {
- printf("PresetsDB::get_preset_title %d buffer overrun\n", __LINE__);
+ PresetsDBPlugin *plugin = 0;
+ for( int i=0; !plugin && i<plugins.size(); ++i ) {
+ if( !strcasecmp(plugins[i]->title, plugin_title) )
+ plugin = plugins[i];
+ }
+
+ if( plugin ) {
+ int done = 0;
+ int total_presets = plugin->get_total_presets(0);
+ while( !done ) {
+ done = 1;
+ for( int i=0; i<total_presets-1; ++i ) {
+ PresetsDBKeyframe *keyframe1 = plugin->keyframes[i];
+ PresetsDBKeyframe *keyframe2 = plugin->keyframes[i+1];
+
+ if( (keyframe2->is_factory && !keyframe1->is_factory) ||
+ (keyframe2->is_factory == keyframe1->is_factory &&
+ strcmp(keyframe2->title, keyframe1->title) < 0) ) {
+ plugin->keyframes.set(i, keyframe2);
+ plugin->keyframes.set(i + 1, keyframe1);
+ done = 0;
+ }