Browse Source

Mixer: Allow searching by category in plugin chooser.

tags/non-daw-v1.2.0
Jonathan Moore Liles 12 years ago
parent
commit
171975b26b
6 changed files with 91 additions and 16 deletions
  1. +3
    -1
      mixer/src/LADSPAInfo.C
  2. +2
    -1
      mixer/src/LADSPAInfo.h
  3. +58
    -5
      mixer/src/Plugin_Chooser.C
  4. +2
    -1
      mixer/src/Plugin_Chooser.H
  5. +11
    -7
      mixer/src/Plugin_Chooser_UI.fl
  6. +15
    -1
      mixer/src/Plugin_Module.C

+ 3
- 1
mixer/src/LADSPAInfo.C View File

@@ -383,7 +383,9 @@ LADSPAInfo::DescendGroup(string prefix,


pe.Depth = depth; pe.Depth = depth;
pe.UniqueID = pi->UniqueID; pe.UniqueID = pi->UniqueID;
pe.Name = prefix + name;
pe.Name = name;
pe.Category = prefix;
pe.Category = pe.Category.substr(0, pe.Category.size()-1);
plugins.push_back(pe); plugins.push_back(pe);
} }


+ 2
- 1
mixer/src/LADSPAInfo.h View File

@@ -90,6 +90,7 @@ public:
unsigned int Depth; unsigned int Depth;
unsigned long UniqueID; unsigned long UniqueID;
std::string Name; std::string Name;
std::string Category;


bool operator<(const PluginEntry& pe) bool operator<(const PluginEntry& pe)
{ {
@@ -107,7 +108,7 @@ public:
std::string Label; // Plugin label std::string Label; // Plugin label
std::string Name; // Plugin Name std::string Name; // Plugin Name
std::string Maker; std::string Maker;
unsigned int AudioInputs;
unsigned int AudioInputs;
unsigned int AudioOutputs; unsigned int AudioOutputs;
const LADSPA_Descriptor *Descriptor; // Descriptor, NULL const LADSPA_Descriptor *Descriptor; // Descriptor, NULL




+ 58
- 5
mixer/src/Plugin_Chooser.C View File

@@ -39,7 +39,7 @@ Plugin_Chooser::plugin_chooser ( int ninputs )


o->ui->inputs_input->value( ninputs ); o->ui->inputs_input->value( ninputs );


o->search( "", "", ninputs, 0, o->ui->favorites_button->value() );
o->search( "", "", "Any", ninputs, 0, o->ui->favorites_button->value() );


o->show(); o->show();
@@ -54,7 +54,7 @@ Plugin_Chooser::plugin_chooser ( int ninputs )
} }


void void
Plugin_Chooser::search ( const char *name, const char *author, int ninputs, int noutputs, bool favorites )
Plugin_Chooser::search ( const char *name, const char *author, const char *category, int ninputs, int noutputs, bool favorites )
{ {
_plugin_rows.clear(); _plugin_rows.clear();
@@ -77,6 +77,15 @@ Plugin_Chooser::search ( const char *name, const char *author, int ninputs, int


if ( favorites > 0 && ! p->favorite ) if ( favorites > 0 && ! p->favorite )
continue; continue;
if ( strcmp( category, "Any" ) )
{
if ( !p->category && strcmp( category, "Unclassified" ))
continue;
if (strncmp( p->category, category, strlen( category )))
continue;
}


_plugin_rows.push_back( p ); _plugin_rows.push_back( p );
} }
@@ -99,8 +108,16 @@ Plugin_Chooser::cb_handle ( Fl_Widget *w )
ui->favorites_button->value( !ui->all_button->value() ); ui->favorites_button->value( !ui->all_button->value() );
} }


{
search( ui->name_input->value(), ui->author_input->value(), ui->inputs_input->value(), ui->outputs_input->value(), ui->favorites_button->value() );
{
char picked[512];
ui->category_choice->item_pathname( picked, sizeof( picked ) );
search( ui->name_input->value(),
ui->author_input->value(),
picked[0] == '/' ? &picked[1] : picked,
ui->inputs_input->value(),
ui->outputs_input->value(),
ui->favorites_button->value() );
} }
} }


@@ -310,7 +327,37 @@ Plugin_Chooser::save_favorites ( void )
fclose( fp ); fclose( fp );
} }

void
Plugin_Chooser::load_categories ( void )
{
ui->category_choice->add( "Any" );

std::list<std::string> categories;

for ( std::list<Plugin_Module::Plugin_Info>::iterator i = _plugins.begin();
i != _plugins.end();
i++ )
{
if ( i->category )
{
categories.push_back(i->category);
}
}
categories.sort();


for ( std::list<std::string>::const_iterator i = categories.begin();
i != categories.end();
i++ )
{
ui->category_choice->add( i->c_str() );
}

ui->category_choice->value( 0 );
}

Plugin_Chooser::Plugin_Chooser ( int X,int Y,int W,int H, const char *L ) Plugin_Chooser::Plugin_Chooser ( int X,int Y,int W,int H, const char *L )
: Fl_Double_Window ( X,Y,W,H,L ) : Fl_Double_Window ( X,Y,W,H,L )
{ {
@@ -343,6 +390,10 @@ Plugin_Chooser::Plugin_Chooser ( int X,int Y,int W,int H, const char *L )
o->all_button->callback( &Plugin_Chooser::cb_handle, this ); o->all_button->callback( &Plugin_Chooser::cb_handle, this );
o->all_button->when( FL_WHEN_CHANGED ); o->all_button->when( FL_WHEN_CHANGED );



o->category_choice->callback( &Plugin_Chooser::cb_handle, this );
o->category_choice->when( FL_WHEN_CHANGED );

{ {
Plugin_Table *o = new Plugin_Table(ui->table->x(),ui->table->y(),ui->table->w(),ui->table->h() ); Plugin_Table *o = new Plugin_Table(ui->table->x(),ui->table->y(),ui->table->w(),ui->table->h() );
ui->table_group->add(o); ui->table_group->add(o);
@@ -375,6 +426,8 @@ Plugin_Chooser::Plugin_Chooser ( int X,int Y,int W,int H, const char *L )
end(); end();


load_categories();

if ( load_favorites() ) if ( load_favorites() )
{ {
ui->all_button->value(0); ui->all_button->value(0);


+ 2
- 1
mixer/src/Plugin_Chooser.H View File

@@ -35,7 +35,7 @@ class Plugin_Chooser : public Fl_Double_Window
static void cb_table ( Fl_Widget *w, void *v ); static void cb_table ( Fl_Widget *w, void *v );
void cb_table ( Fl_Widget *w ); void cb_table ( Fl_Widget *w );


void search ( const char *name, const char *author, int ninputs, int noutputs, bool favorites );
void search ( const char *name, const char *author, const char *category, int ninputs, int noutputs, bool favorites );


unsigned long _value; unsigned long _value;
@@ -43,6 +43,7 @@ class Plugin_Chooser : public Fl_Double_Window


void save_favorites ( void ); void save_favorites ( void );


void load_categories ( void );
public: public:


unsigned long value ( void ) const { return _value; } unsigned long value ( void ) const { return _value; }


+ 11
- 7
mixer/src/Plugin_Chooser_UI.fl View File

@@ -9,8 +9,8 @@ decl {\#include <FL/Fl_Table_Row.H>} {public global
} }


widget_class Plugin_Chooser_UI { widget_class Plugin_Chooser_UI {
label {Plugin Selector} open selected
xywh {821 343 735 500} type Double resizable size_range {740 0 740 0} visible
label {Plugin Selector} open
xywh {823 366 735 500} type Double resizable size_range {740 0 740 0} visible
} { } {
Fl_Group {} {open Fl_Group {} {open
xywh {10 5 155 20} xywh {10 5 155 20}
@@ -24,26 +24,30 @@ widget_class Plugin_Chooser_UI {
xywh {65 5 100 20} type Radio down_box ROUND_DOWN_BOX xywh {65 5 100 20} type Radio down_box ROUND_DOWN_BOX
} }
} }
Fl_Group {} {open
Fl_Group {} {open selected
xywh {5 29 725 77} box UP_FRAME xywh {5 29 725 77} box UP_FRAME
code0 {o->resizable(0);} code0 {o->resizable(0);}
} { } {
Fl_Input name_input { Fl_Input name_input {
label {Name:} label {Name:}
xywh {65 38 555 24} labelsize 12 textsize 13
xywh {75 38 300 24} labelsize 12 textsize 13
} }
Fl_Input author_input { Fl_Input author_input {
label {Author:} label {Author:}
xywh {65 72 415 24} labelsize 12 textsize 13
xywh {435 39 210 22} labelsize 12 textsize 13
} }
Fl_Value_Input outputs_input { Fl_Value_Input outputs_input {
label {Outputs:} label {Outputs:}
xywh {693 70 30 26} labelsize 12
xywh {693 70 30 24} labelsize 12
} }
Fl_Value_Input inputs_input { Fl_Value_Input inputs_input {
label {Inputs:} label {Inputs:}
xywh {693 39 30 24} labelsize 12 xywh {693 39 30 24} labelsize 12
} }
Fl_Choice category_choice {
label {Category:} open
xywh {75 70 405 24} down_box BORDER_BOX labelsize 12 textsize 12
} {}
} }
Fl_Group table_group {open Fl_Group table_group {open
xywh {5 115 725 380} resizable xywh {5 115 725 380} resizable
@@ -54,7 +58,7 @@ widget_class Plugin_Chooser_UI {
} }
Fl_Choice type_choice { Fl_Choice type_choice {
label {Type:} open label {Type:} open
xywh {520 135 100 28} down_box BORDER_BOX labelsize 12 hide
xywh {530 70 95 24} down_box BORDER_BOX labelsize 12 textsize 12
} { } {
MenuItem {} { MenuItem {} {
label LADSPA label LADSPA


+ 15
- 1
mixer/src/Plugin_Module.C View File

@@ -291,12 +291,26 @@ Plugin_Module::get_all_plugins ( void )
pi.name = i->Name.c_str(); pi.name = i->Name.c_str();
pi.audio_inputs = i->AudioInputs; pi.audio_inputs = i->AudioInputs;
pi.audio_outputs = i->AudioOutputs; pi.audio_outputs = i->AudioOutputs;
pi.category = "Unclassified";
pr.push_back( pi ); pr.push_back( pi );
} }


pr.sort(); pr.sort();


const std::vector<LADSPAInfo::PluginEntry> pe = ladspainfo->GetMenuList();
for (std::vector<LADSPAInfo::PluginEntry>::const_iterator i= pe.begin();
i !=pe.end(); i++ )
{
for ( std::list<Plugin_Info>::iterator j = pr.begin(); j != pr.end(); j++ )
{
if ( j->id == i->UniqueID )
{
j->category = i->Category.c_str();
}
}
}

return pr; return pr;
} }




Loading…
Cancel
Save