Index: order.h =================================================================== --- order.h (revision 27478) +++ order.h (revision 27479) @@ -44,7 +44,10 @@ struct pcb_order_imp_s { const char *name; int (*enabled)(pcb_order_imp_t *imp); /* returns 1 if the plugin is enabled */ + int (*load_fields)(pcb_order_imp_t *imp, order_ctx_t *octx); + void (*free_fields)(pcb_order_imp_t *imp, order_ctx_t *octx); void (*populate_dad)(pcb_order_imp_t *imp, order_ctx_t *octx); + void *odata; /* implementation-specific data of the current order */ }; extern vtp0_t pcb_order_imps; /* of (pcb_order_imp_t *) items */ @@ -51,4 +54,14 @@ void pcb_order_reg(const pcb_order_imp_t *imp); +/* Generic field handling */ +typedef struct pcb_order_field_s { + pcb_hid_attr_type_t type; + pcb_hid_attr_val_t val; + char **enum_vals; + int wid; /* widget id, if any */ + char name[1]; /* dynamic length */ +} pcb_order_field_t; + + #endif Index: order_dlg.c =================================================================== --- order_dlg.c (revision 27478) +++ order_dlg.c (revision 27479) @@ -35,10 +35,15 @@ PCB_DAD_COMPFLAG(order_ctx.dlg, PCB_HATF_EXPFILL | PCB_HATF_LEFT_TAB); for(n = 0; n < pcb_order_imps.used; n++) { imp = pcb_order_imps.array[n]; - PCB_DAD_BEGIN_VBOX(order_ctx.dlg); - PCB_DAD_COMPFLAG(order_ctx.dlg, PCB_HATF_EXPFILL); - imp->populate_dad(pcb_order_imps.array[n], &order_ctx); - PCB_DAD_END(order_ctx.dlg); + if (imp->load_fields(pcb_order_imps.array[n], &order_ctx) == 0) { + PCB_DAD_BEGIN_VBOX(order_ctx.dlg); + PCB_DAD_COMPFLAG(order_ctx.dlg, PCB_HATF_EXPFILL); + + imp->populate_dad(pcb_order_imps.array[n], &order_ctx); + PCB_DAD_END(order_ctx.dlg); + } + else + PCB_DAD_LABEL(order_ctx.dlg, "Failed to determine form fields"); } PCB_DAD_END(order_ctx.dlg);