Index: trunk/src_plugins/order/order.h =================================================================== --- trunk/src_plugins/order/order.h (revision 27478) +++ trunk/src_plugins/order/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: trunk/src_plugins/order/order_dlg.c =================================================================== --- trunk/src_plugins/order/order_dlg.c (revision 27478) +++ trunk/src_plugins/order/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); Index: trunk/src_plugins/order_pcbway/pcbway.c =================================================================== --- trunk/src_plugins/order_pcbway/pcbway.c (revision 27478) +++ trunk/src_plugins/order_pcbway/pcbway.c (revision 27479) @@ -46,6 +46,10 @@ #define CFG conf_order_pcbway.plugins.order_pcbway #define SERVER "http://api-partner.pcbway.com" +typedef struct pcbway_form_s { + vtp0_t fields; /* of pcb_order_field_t */ +} pcbway_form_t; + static int pcbway_cahce_update_(pcb_hidlib_t *hidlib, const char *url, const char *path, int update, pcb_wget_opts_t *wopts) { double mt, now = pcb_dtime(); @@ -218,6 +222,15 @@ return 0; } +static int pcbway_load_fields(pcb_order_imp_t *imp, order_ctx_t *octx) +{ + return 0; +} + +static void pcbway_free_fields(pcb_order_imp_t *imp, order_ctx_t *octx) +{ +} + static void pcbway_populate_dad(pcb_order_imp_t *imp, order_ctx_t *octx) { char *cachedir, *path; @@ -256,7 +269,10 @@ static pcb_order_imp_t pcbway = { "PCBWay", NULL, - pcbway_populate_dad + pcbway_load_fields, + pcbway_free_fields, + pcbway_populate_dad, + NULL };