Index: trunk/src_plugins/ar_extern/dlg_extroute.c =================================================================== --- trunk/src_plugins/ar_extern/dlg_extroute.c (revision 32369) +++ trunk/src_plugins/ar_extern/dlg_extroute.c (revision 32370) @@ -31,6 +31,7 @@ typedef struct { RND_DAD_DECL_NOINIT(dlg) int active; /* already open - allow only one instance */ + vts0_t tabs; int whatever; } ar_ctx_t; @@ -38,8 +39,10 @@ static void ar_close_cb(void *caller_data, rnd_hid_attr_ev_t ev) { + long n; ar_ctx_t *ctx = caller_data; RND_DAD_FREE(ctx->dlg); + vts0_uninit(&ctx->tabs); memset(ctx, 0, sizeof(ar_ctx_t)); /* reset all states to the initial - includes ctx->active = 0; */ } @@ -46,17 +49,75 @@ static void extroute_gui(pcb_board_t *pcb) { rnd_hid_dad_buttons_t clbtn[] = {{"Close", 0}, {NULL, 0}}; + long an, mn; if (ar_ctx.active) return; /* do not open another */ - printf("GUI!\n"); extroute_query_conf(pcb); + for(an = 0; an < router_apis.used; an++) { + router_api_t *a = router_apis.array[an]; + for(mn = 0; mn < a->num_methods; mn++) + vts0_append(&ar_ctx.tabs, a->methods[mn].name); + } + RND_DAD_BEGIN_VBOX(ar_ctx.dlg); - RND_DAD_LABEL(ar_ctx.dlg, "woops\n"); + RND_DAD_BEGIN_TABBED(ar_ctx.dlg, ar_ctx.tabs.array); + RND_DAD_COMPFLAG(ar_ctx.dlg, RND_HATF_LEFT_TAB|RND_HATF_EXPFILL); + for(an = 0; an < router_apis.used; an++) { + router_api_t *a = router_apis.array[an]; + for(mn = 0; mn < a->num_methods; mn++) { + router_method_t *m = &a->methods[mn]; + char *title; + rnd_export_opt_t *cfg; - + RND_DAD_BEGIN_VBOX(ar_ctx.dlg); + if (m->len > 10) + RND_DAD_COMPFLAG(ar_ctx.dlg, RND_HATF_SCROLL); + + title = rnd_concat(m->router->name, " / ", m->name, NULL); + RND_DAD_LABEL(ar_ctx.dlg, title); + RND_DAD_LABEL(ar_ctx.dlg, m->desc); + free(title); + + for(cfg = m->confkeys; cfg->name != NULL; cfg++) { + RND_DAD_BEGIN_HBOX(ar_ctx.dlg); + switch(cfg->type) { + case RND_HATT_BOOL: + RND_DAD_BOOL(ar_ctx.dlg); + RND_DAD_DEFAULT_NUM(ar_ctx.dlg, cfg->default_val.lng); + break; + case RND_HATT_INTEGER: + RND_DAD_INTEGER(ar_ctx.dlg); + RND_DAD_MINMAX(ar_ctx.dlg, cfg->min_val, cfg->max_val); + RND_DAD_DEFAULT_NUM(ar_ctx.dlg, cfg->default_val.lng); + break; + case RND_HATT_REAL: + RND_DAD_REAL(ar_ctx.dlg); + RND_DAD_MINMAX(ar_ctx.dlg, cfg->min_val, cfg->max_val); + RND_DAD_DEFAULT_NUM(ar_ctx.dlg, cfg->default_val.dbl); + break; + case RND_HATT_COORD: + RND_DAD_COORD(ar_ctx.dlg); + RND_DAD_MINMAX(ar_ctx.dlg, cfg->min_val, cfg->max_val); + RND_DAD_DEFAULT_NUM(ar_ctx.dlg, cfg->default_val.crd); + break; + case RND_HATT_STRING: + RND_DAD_STRING(ar_ctx.dlg); + RND_DAD_DEFAULT_PTR(ar_ctx.dlg, cfg->default_val.str); + break; + default: + break; + } + RND_DAD_LABEL(ar_ctx.dlg, cfg->name); + RND_DAD_END(ar_ctx.dlg); + } + RND_DAD_END(ar_ctx.dlg); + } + } + RND_DAD_END(ar_ctx.dlg); + RND_DAD_BEGIN_HBOX(ar_ctx.dlg); RND_DAD_BUTTON(ar_ctx.dlg, "Route"); RND_DAD_BUTTON(ar_ctx.dlg, "Re-route");