Index: trunk/src/plug_import.h =================================================================== --- trunk/src/plug_import.h (revision 29535) +++ trunk/src/plug_import.h (revision 29536) @@ -56,6 +56,7 @@ /* Perform the import; return 0 on success */ int (*import)(pcb_plug_import_t *ctx, unsigned int aspects, const char **args, int numargs); + int ui_prio; /* priority for plugin listing on the user interface; 100 is highest (top), 0 is lowest */ unsigned single_arg:1; /* accepts only one arg in each ->import() call */ unsigned all_filenames:1; /* if set, all arguments are filenames */ unsigned ext_exec:1; /* if set, import will execute external commands specified by the user (dangerous) */ Index: trunk/src_plugins/import_calay/calay.c =================================================================== --- trunk/src_plugins/import_calay/calay.c (revision 29535) +++ trunk/src_plugins/import_calay/calay.c (revision 29536) @@ -282,6 +282,7 @@ import_calay.import = calay_import; import_calay.name = "calay"; import_calay.desc = "schamtics from calay"; + import_calay.ui_prio = 20; import_calay.single_arg = 1; import_calay.all_filenames = 1; import_calay.ext_exec = 0; Index: trunk/src_plugins/import_edif/import_edif.c =================================================================== --- trunk/src_plugins/import_edif/import_edif.c (revision 29535) +++ trunk/src_plugins/import_edif/import_edif.c (revision 29536) @@ -104,6 +104,7 @@ import_edif.import = edif_import; import_edif.name = "edif"; import_edif.desc = "EDIF netlist (flat)"; + import_edif.ui_prio = 50; import_edif.single_arg = 1; import_edif.all_filenames = 1; import_edif.ext_exec = 0; Index: trunk/src_plugins/import_fpcb_nl/fpcb_nl.c =================================================================== --- trunk/src_plugins/import_fpcb_nl/fpcb_nl.c (revision 29535) +++ trunk/src_plugins/import_fpcb_nl/fpcb_nl.c (revision 29536) @@ -246,6 +246,7 @@ import_fpcb_nl.import = fpcb_nl_import; import_fpcb_nl.name = "FreePCB/EasyCAD"; import_fpcb_nl.desc = "FreePCB/EasyCAD schematics"; + import_fpcb_nl.ui_prio = 50; import_fpcb_nl.single_arg = 1; import_fpcb_nl.all_filenames = 1; import_fpcb_nl.ext_exec = 0; Index: trunk/src_plugins/import_gnetlist/import_gnetlist.c =================================================================== --- trunk/src_plugins/import_gnetlist/import_gnetlist.c (revision 29535) +++ trunk/src_plugins/import_gnetlist/import_gnetlist.c (revision 29536) @@ -148,6 +148,7 @@ import_gnetlist.import = gnetlist_import; import_gnetlist.name = "gnetlist"; import_gnetlist.desc = "gEDA sch using gnetlist"; + import_gnetlist.ui_prio = 50; import_gnetlist.single_arg = 0; import_gnetlist.all_filenames = 1; import_gnetlist.ext_exec = 0; Index: trunk/src_plugins/import_ipcd356/ipcd356.c =================================================================== --- trunk/src_plugins/import_ipcd356/ipcd356.c (revision 29535) +++ trunk/src_plugins/import_ipcd356/ipcd356.c (revision 29536) @@ -504,6 +504,7 @@ import_ipcd356.import = ipcd356_import; import_ipcd356.name = "IPC-D-356"; import_ipcd356.desc = "nets and pads from an IPC-D-356 test file"; + import_ipcd356.ui_prio = 30; import_ipcd356.single_arg = 1; import_ipcd356.all_filenames = 1; import_ipcd356.ext_exec = 0; Index: trunk/src_plugins/import_ltspice/ltspice.c =================================================================== --- trunk/src_plugins/import_ltspice/ltspice.c (revision 29535) +++ trunk/src_plugins/import_ltspice/ltspice.c (revision 29536) @@ -397,6 +397,7 @@ import_ltspice.import = ltspice_import; import_ltspice.name = "LTSpice"; import_ltspice.desc = "schamtics from LTSpice"; + import_ltspice.ui_prio = 50; import_ltspice.single_arg = 1; import_ltspice.all_filenames = 1; import_ltspice.ext_exec = 0; Index: trunk/src_plugins/import_mentor_sch/mentor_sch.c =================================================================== --- trunk/src_plugins/import_mentor_sch/mentor_sch.c (revision 29535) +++ trunk/src_plugins/import_mentor_sch/mentor_sch.c (revision 29536) @@ -328,6 +328,7 @@ import_mentor_sch.import = mentor_sch_import; import_mentor_sch.name = "Mentor Graphics schematics"; import_mentor_sch.desc = "schamtics: Mentor Graphics Design Design Caputre"; + import_mentor_sch.ui_prio = 40; import_mentor_sch.single_arg = 1; import_mentor_sch.all_filenames = 1; import_mentor_sch.ext_exec = 0; Index: trunk/src_plugins/import_net_cmd/import_net_cmd.c =================================================================== --- trunk/src_plugins/import_net_cmd/import_net_cmd.c (revision 29535) +++ trunk/src_plugins/import_net_cmd/import_net_cmd.c (revision 29536) @@ -105,6 +105,7 @@ import_net_cmd.import = net_cmd_import; import_net_cmd.name = "cmd"; import_net_cmd.desc = "sch/netlist by command line"; + import_net_cmd.ui_prio = 90; import_net_cmd.single_arg = 0; import_net_cmd.all_filenames = 0; import_net_cmd.ext_exec = 1; Index: trunk/src_plugins/import_netlist/import_netlist.c =================================================================== --- trunk/src_plugins/import_netlist/import_netlist.c (revision 29535) +++ trunk/src_plugins/import_netlist/import_netlist.c (revision 29536) @@ -192,6 +192,7 @@ import_netlist.import = netlist_import; import_netlist.name = "gEDA"; import_netlist.desc = "gEDA/PCB netlist"; + import_netlist.ui_prio = 20; import_netlist.single_arg = 1; import_netlist.all_filenames = 1; import_netlist.ext_exec = 0; Index: trunk/src_plugins/import_sch2/import_sch.c =================================================================== --- trunk/src_plugins/import_sch2/import_sch.c (revision 29535) +++ trunk/src_plugins/import_sch2/import_sch.c (revision 29536) @@ -53,20 +53,38 @@ memset(ctx, 0, sizeof(isch_ctx_t)); /* reset all states to the initial - includes ctx->active = 0; */ } +static int isch_cmp(void *a_, void *b_) +{ + pcb_plug_import_t **a = a_, **b = b_; + + if ((*a)->ui_prio < (*b)->ui_prio) + return 1; + if ((*a)->ui_prio > (*b)->ui_prio) + return -1; + return strcmp((*a)->name, (*b)->name) > 0 ? 1 : -1; +} + static int do_dialog(void) { int len, n; - pcb_plug_import_t *p; + const pcb_plug_import_t *p, **pa; pcb_hid_dad_buttons_t clbtn[] = {{"Close", 0}, {NULL, 0}}; if (isch_ctx.active) return; /* do not open another */ - len = 1; /* for the NULL */ + len = 0; for(p = pcb_plug_import_chain; p != NULL; p = p->next) len++; - isch_ctx.inames = malloc(len * sizeof(char *)); + isch_ctx.inames = malloc((len+1) * sizeof(char *)); + pa = malloc(len * sizeof(pcb_plug_import_t *)); + for(n = 0, p = pcb_plug_import_chain; p != NULL; p = p->next, n++) - isch_ctx.inames[n] = pcb_strdup(p->name); + pa[n] = p; + + qsort(pa, len, sizeof(pcb_plug_import_t *), isch_cmp); + + for(n = 0; n < len; n++) + isch_ctx.inames[n] = pcb_strdup(pa[n]->name); isch_ctx.inames[n] = NULL; PCB_DAD_BEGIN_VBOX(isch_ctx.dlg); @@ -85,6 +103,8 @@ PCB_DAD_END(isch_ctx.dlg); PCB_DAD_END(isch_ctx.dlg); + free(pa); + /* set up the context */ isch_ctx.active = 1; Index: trunk/src_plugins/import_tinycad/tinycad.c =================================================================== --- trunk/src_plugins/import_tinycad/tinycad.c (revision 29535) +++ trunk/src_plugins/import_tinycad/tinycad.c (revision 29536) @@ -266,6 +266,7 @@ import_tinycad.import = tinycad_import; import_tinycad.name = "tinycad"; import_tinycad.desc = "schamtics from tinycad"; + import_tinycad.ui_prio = 50; import_tinycad.single_arg = 1; import_tinycad.all_filenames = 1; import_tinycad.ext_exec = 0; Index: trunk/src_plugins/io_kicad/read_net.c =================================================================== --- trunk/src_plugins/io_kicad/read_net.c (revision 29535) +++ trunk/src_plugins/io_kicad/read_net.c (revision 29536) @@ -298,6 +298,7 @@ import_eeschema.import = eeschema_import; import_eeschema.name = "KiCAD/eeschema"; import_eeschema.desc = "schamtics from KiCAD's eeschema"; + import_eeschema.ui_prio = 50; import_eeschema.single_arg = 1; import_eeschema.all_filenames = 1; import_eeschema.ext_exec = 0; Index: trunk/src_plugins/io_tedax/tnetlist.c =================================================================== --- trunk/src_plugins/io_tedax/tnetlist.c (revision 29535) +++ trunk/src_plugins/io_tedax/tnetlist.c (revision 29536) @@ -290,6 +290,7 @@ import_tedaxnet.import = tedaxnet_import; import_tedaxnet.name = "tEDAx netlist"; import_tedaxnet.desc = "netlist+footprints from tEDAx"; + import_tedaxnet.ui_prio = 100; import_tedaxnet.single_arg = 1; import_tedaxnet.all_filenames = 1; import_tedaxnet.ext_exec = 0;