static int combobox_numindex(lua_State*L) { lua_combobox combobox; luaA_to(L,lua_combobox,&combobox,1); int key = lua_tointeger(L,2); int length = dt_bauhaus_combobox_length(combobox->widget); if(lua_gettop(L) > 2) { if(key <= 0 || key > length +1) { return luaL_error(L,"Invalid index for combobox : %d\n",key); } else if(key == length +1) { const char * string = luaL_checkstring(L,3); dt_bauhaus_combobox_add(combobox->widget,string); } else if(lua_isnil(L,3)){ dt_bauhaus_combobox_remove_at(combobox->widget,key-1); } else { const char * string = luaL_checkstring(L,3); dt_bauhaus_combobox_remove_at(combobox->widget,key-1); dt_bauhaus_combobox_insert(combobox->widget,string,key-1); } return 0; } if(key <= 0 || key > length) { return luaL_error(L,"Invalid index for combo box : %d\n",key); } else if (key > length) { lua_pushnil(L); return 1; } const GList *labels = dt_bauhaus_combobox_get_labels(combobox->widget); lua_pushstring(L,g_list_nth_data((GList*)labels,key-1)); return 1; }
static int combobox_len(lua_State*L) { lua_combobox combobox; luaA_to(L,lua_combobox,&combobox,1); lua_pushinteger(L,dt_bauhaus_combobox_length(combobox->widget)); return 1; }
static int value_member(lua_State*L) { lua_combobox combobox; luaA_to(L,lua_combobox,&combobox,1); int length = dt_bauhaus_combobox_length(combobox->widget); if(lua_gettop(L) > 2) { if(lua_isnil(L,3)) { dt_bauhaus_combobox_set(combobox->widget,-1); } else if(lua_isnumber(L,3)) { int index = lua_tointeger(L,3) ; if(index < 1 || index > length) { return luaL_error(L,"Invalid index for combo box : %d\n",index); } dt_bauhaus_combobox_set(combobox->widget,index -1); } else if(lua_isstring(L,3)&& dt_bauhaus_combobox_get_editable(combobox->widget)) { const char * string = lua_tostring(L,3); dt_bauhaus_combobox_set_text(combobox->widget,string); } else { return luaL_error(L,"Invalid type for combo box value\n"); } return 0; } lua_pushstring(L,dt_bauhaus_combobox_get_text(combobox->widget)); return 1; }
void gui_update(struct dt_iop_module_t *self) { dt_iop_module_t *module = (dt_iop_module_t *)self; dt_iop_colorchecker_gui_data_t *g = (dt_iop_colorchecker_gui_data_t *)self->gui_data; dt_iop_colorchecker_params_t *p = (dt_iop_colorchecker_params_t *)module->params; if(g->patch >= p->num_patches || g->patch < 0) return; if(dt_bauhaus_combobox_length(g->combobox_patch) != p->num_patches) { dt_bauhaus_combobox_clear(g->combobox_patch); char cboxentry[1024]; for(int k=0;k<p->num_patches;k++) { snprintf(cboxentry, sizeof(cboxentry), _("patch #%d"), k); dt_bauhaus_combobox_add(g->combobox_patch, cboxentry); } if(p->num_patches <= 24) dtgtk_drawing_area_set_aspect_ratio(g->area, 2.0/3.0); else dtgtk_drawing_area_set_aspect_ratio(g->area, 1.0); } dt_bauhaus_slider_set(g->scale_L, p->target_L[g->patch] - p->source_L[g->patch]); dt_bauhaus_slider_set(g->scale_a, p->target_a[g->patch] - p->source_a[g->patch]); dt_bauhaus_slider_set(g->scale_b, p->target_b[g->patch] - p->source_b[g->patch]); const float Cin = sqrtf( p->source_a[g->patch]*p->source_a[g->patch] + p->source_b[g->patch]*p->source_b[g->patch]); const float Cout = sqrtf( p->target_a[g->patch]*p->target_a[g->patch]+ p->target_b[g->patch]*p->target_b[g->patch]); dt_bauhaus_slider_set(g->scale_C, Cout-Cin); if(g->patch != g->drawn_patch) gtk_widget_queue_draw(g->area); }
static int selected_member(lua_State*L) { lua_combobox combobox; luaA_to(L,lua_combobox,&combobox,1); int length = dt_bauhaus_combobox_length(combobox->widget); if(lua_gettop(L) > 2) { if(lua_isnil(L,3)) { dt_bauhaus_combobox_set(combobox->widget,-1); } else if(lua_isnumber(L,3)) { int index = lua_tointeger(L,3) ; if(index < 0 || index > length) { return luaL_error(L,"Invalid index for combo box : %d\n",index); } dt_bauhaus_combobox_set(combobox->widget,index -1); } else { return luaL_error(L,"Invalid type for combo box selected\n"); } return 0; } lua_pushinteger(L,dt_bauhaus_combobox_get(combobox->widget) + 1); return 1; }