static VisUIWidget *make_userinterface () { VisUIWidget *vbox; VisUIWidget *hbox1; VisUIWidget *hbox2; VisUIWidget *hbox3; VisUIWidget *label1; VisUIWidget *label2; VisUIWidget *label3; VisUIWidget *label4; VisUIWidget *checkbox1; VisUIWidget *checkbox2; VisUIWidget *numeric1; VisUIWidget *numeric2; VisUIWidget *numeric3; vbox = visual_ui_box_new (VISUAL_ORIENT_TYPE_VERTICAL); hbox1 = visual_ui_box_new (VISUAL_ORIENT_TYPE_HORIZONTAL); hbox2 = visual_ui_box_new (VISUAL_ORIENT_TYPE_HORIZONTAL); hbox3 = visual_ui_box_new (VISUAL_ORIENT_TYPE_HORIZONTAL); label1 = visual_ui_label_new (_("Show info for"), FALSE); label2 = visual_ui_label_new (_("seconds"), FALSE); label3 = visual_ui_label_new (_("cover art width"), FALSE); label4 = visual_ui_label_new (_("cover art height"), FALSE); checkbox1 = visual_ui_checkbox_new (_("Show song information"), TRUE); visual_ui_mutator_set_param (VISUAL_UI_MUTATOR (checkbox1), visual_param_container_get (__lv_paramcontainer, "songinfo show")); checkbox2 = visual_ui_checkbox_new (_("Show song information in plugins"), TRUE); visual_ui_mutator_set_param (VISUAL_UI_MUTATOR (checkbox2), visual_param_container_get (__lv_paramcontainer, "songinfo in plugin")); numeric1 = visual_ui_numeric_new (); visual_ui_mutator_set_param (VISUAL_UI_MUTATOR (numeric1), visual_param_container_get (__lv_paramcontainer, "songinfo timeout")); visual_ui_range_set_properties (VISUAL_UI_RANGE (numeric1), 1, 60, 1, 0); numeric2 = visual_ui_numeric_new (); visual_ui_mutator_set_param (VISUAL_UI_MUTATOR (numeric2), visual_param_container_get (__lv_paramcontainer, "songinfo cover size x")); visual_ui_range_set_properties (VISUAL_UI_RANGE (numeric2), 32, 256, 2, 0); numeric3 = visual_ui_numeric_new (); visual_ui_mutator_set_param (VISUAL_UI_MUTATOR (numeric3), visual_param_container_get (__lv_paramcontainer, "songinfo cover size y")); visual_ui_range_set_properties (VISUAL_UI_RANGE (numeric3), 32, 256, 2, 0); visual_ui_box_pack (VISUAL_UI_BOX (hbox1), label1); visual_ui_box_pack (VISUAL_UI_BOX (hbox1), numeric1); visual_ui_box_pack (VISUAL_UI_BOX (hbox1), label2); visual_ui_box_pack (VISUAL_UI_BOX (hbox2), label3); visual_ui_box_pack (VISUAL_UI_BOX (hbox2), numeric2); visual_ui_box_pack (VISUAL_UI_BOX (hbox3), label4); visual_ui_box_pack (VISUAL_UI_BOX (hbox3), numeric3); visual_ui_box_pack (VISUAL_UI_BOX (vbox), checkbox1); visual_ui_box_pack (VISUAL_UI_BOX (vbox), checkbox2); visual_ui_box_pack (VISUAL_UI_BOX (vbox), hbox1); visual_ui_box_pack (VISUAL_UI_BOX (vbox), hbox2); visual_ui_box_pack (VISUAL_UI_BOX (vbox), hbox3); return vbox; }
static VisUIWidget * check_widget(VisUIWidget * w, const char * name, bg_parameter_info_t * info) { VisUIWidget * ret = NULL; int i; int num_items; VisListEntry * list_entry; switch(w->type) { case VISUAL_WIDGET_TYPE_RANGE: /**< Range base widget: \a VisUIRange. */ case VISUAL_WIDGET_TYPE_ENTRY: /**< Entry box widget: \a VisUIEntry. */ case VISUAL_WIDGET_TYPE_MUTATOR: /**< Mutator base widget: \a VisUIMutator. */ case VISUAL_WIDGET_TYPE_NULL: /**< NULL widget */ case VISUAL_WIDGET_TYPE_WIDGET: /**< Base widget: \a VisUIWidget. */ case VISUAL_WIDGET_TYPE_LABEL: /**< Label widget: \a VisUILabel. */ case VISUAL_WIDGET_TYPE_IMAGE: /**< Image widget: \a VisUIImage. */ case VISUAL_WIDGET_TYPE_SEPARATOR: /**< Separator widget: \a VisUISeparator. */ case VISUAL_WIDGET_TYPE_COLORPALETTE:/**< Color palette widget: \a VisUIColorPalette. */ case VISUAL_WIDGET_TYPE_CHOICE: /**< Choice base widget: \a VisUIChoice. */ break; case VISUAL_WIDGET_TYPE_CONTAINER: /**< Container widget: \a VisUIContainer. */ case VISUAL_WIDGET_TYPE_FRAME: /**< Frame widget: \a VisUIFrame. */ /* Get child */ return check_widget(VISUAL_UI_CONTAINER(w)->child, name, info); break; case VISUAL_WIDGET_TYPE_BOX: /**< Box widget: \a VisUIBox. */ /* Get children */ list_entry = NULL; while(visual_list_next(&VISUAL_UI_BOX(w)->childs, &list_entry)) { if((ret = check_widget(list_entry->data, name, info))) return ret; } break; case VISUAL_WIDGET_TYPE_TABLE: /**< Table widget: \a VisUITable. */ /* Get children */ list_entry = NULL; while(visual_list_next(&VISUAL_UI_TABLE(w)->childs, &list_entry)) { if((ret = check_widget(((VisUITableEntry*)list_entry->data)->widget, name, info))) { return ret; } } break; case VISUAL_WIDGET_TYPE_NOTEBOOK: /**< Notebook widget: \a VisUINotebook. */ /* Get children */ /* Get children */ list_entry = NULL; while(visual_list_next(&VISUAL_UI_NOTEBOOK(w)->childs, &list_entry)) { if((ret = check_widget(list_entry->data, name, info))) return ret; } break; case VISUAL_WIDGET_TYPE_SLIDER: /**< Slider widget: \a VisUISlider. */ if(strcmp(name, VISUAL_UI_MUTATOR(w)->param->name)) return 0; if((VISUAL_UI_MUTATOR(w)->param->type == VISUAL_PARAM_ENTRY_TYPE_FLOAT) || (VISUAL_UI_MUTATOR(w)->param->type == VISUAL_PARAM_ENTRY_TYPE_DOUBLE)) { info->type = BG_PARAMETER_SLIDER_FLOAT; info->val_min.val_f = VISUAL_UI_RANGE(w)->min; info->val_max.val_f = VISUAL_UI_RANGE(w)->max; info->num_digits = VISUAL_UI_RANGE(w)->precision; if((VISUAL_UI_MUTATOR(w)->param->type == VISUAL_PARAM_ENTRY_TYPE_FLOAT)) info->val_default.val_f = VISUAL_UI_MUTATOR(w)->param->numeric.floating; else info->val_default.val_f = VISUAL_UI_MUTATOR(w)->param->numeric.doubleflt; } else { info->type = BG_PARAMETER_SLIDER_INT; info->val_min.val_i = (int)VISUAL_UI_RANGE(w)->min; info->val_max.val_i = (int)VISUAL_UI_RANGE(w)->max; info->val_default.val_i = VISUAL_UI_MUTATOR(w)->param->numeric.integer; } info->flags |= BG_PARAMETER_SYNC; ret = w; break; case VISUAL_WIDGET_TYPE_NUMERIC: /**< Numeric widget: \a VisUINumeric. */ if(strcmp(name, VISUAL_UI_MUTATOR(w)->param->name)) return 0; if((VISUAL_UI_MUTATOR(w)->param->type == VISUAL_PARAM_ENTRY_TYPE_FLOAT) || (VISUAL_UI_MUTATOR(w)->param->type == VISUAL_PARAM_ENTRY_TYPE_DOUBLE)) { info->type = BG_PARAMETER_FLOAT; info->val_min.val_f = VISUAL_UI_RANGE(w)->min; info->val_max.val_f = VISUAL_UI_RANGE(w)->max; info->num_digits = VISUAL_UI_RANGE(w)->precision; if((VISUAL_UI_MUTATOR(w)->param->type == VISUAL_PARAM_ENTRY_TYPE_FLOAT)) info->val_default.val_f = VISUAL_UI_MUTATOR(w)->param->numeric.floating; else info->val_default.val_f = VISUAL_UI_MUTATOR(w)->param->numeric.doubleflt; } else { info->type = BG_PARAMETER_INT; info->val_min.val_i = (int)VISUAL_UI_RANGE(w)->min; info->val_max.val_i = (int)VISUAL_UI_RANGE(w)->max; info->val_default.val_i = VISUAL_UI_MUTATOR(w)->param->numeric.integer; } info->flags |= BG_PARAMETER_SYNC; ret = w; break; case VISUAL_WIDGET_TYPE_COLOR: /**< Color widget: \a VisUIColor. */ case VISUAL_WIDGET_TYPE_COLORBUTTON: /**< Color button widget: \a VisUIColorButton. */ if(strcmp(name, VISUAL_UI_MUTATOR(w)->param->name)) return 0; info->type = BG_PARAMETER_COLOR_RGB; info->flags |= BG_PARAMETER_SYNC; info->val_default.val_color[0] = (float)VISUAL_UI_MUTATOR(w)->param->color.r / 255.0; info->val_default.val_color[1] = (float)VISUAL_UI_MUTATOR(w)->param->color.g / 255.0; info->val_default.val_color[2] = (float)VISUAL_UI_MUTATOR(w)->param->color.b / 255.0; ret = w; break; case VISUAL_WIDGET_TYPE_POPUP: /**< Popup widget: \a VisUIPopup. */ case VISUAL_WIDGET_TYPE_LIST: /**< List widget: \a VisUIList. */ case VISUAL_WIDGET_TYPE_RADIO: /**< Radio widget: \a VisUIRadio. */ if(strcmp(name, VISUAL_UI_MUTATOR(w)->param->name)) return 0; info->type = BG_PARAMETER_STRINGLIST; info->flags |= BG_PARAMETER_SYNC; num_items = 0; list_entry = NULL; while(visual_list_next(&VISUAL_UI_CHOICE(w)->choices.choices, &list_entry)) num_items++; info->multi_names_nc = calloc(num_items+1, sizeof(info->multi_names_nc)); list_entry = NULL; for(i = 0; i < num_items; i++) { visual_list_next(&VISUAL_UI_CHOICE(w)->choices.choices, &list_entry); info->multi_names_nc[i] = gavl_strdup(((VisUIChoiceEntry*)(list_entry->data))->name); /* Check if this is the current value */ // visual_param_entry_compare(((VisUIChoiceEntry*)(list_entry->data))->value, // VISUAL_UI_MUTATOR(w)->param) if(!i) { info->val_default.val_str = gavl_strdup(info->multi_names_nc[i]); } } ret = w; break; case VISUAL_WIDGET_TYPE_CHECKBOX: /**< Checkbox widget: \a VisUICheckbox. */ if(strcmp(name, VISUAL_UI_MUTATOR(w)->param->name)) return 0; info->type = BG_PARAMETER_CHECKBUTTON; info->flags |= BG_PARAMETER_SYNC; ret = w; break; } if(ret) info->help_string = gavl_strrep(info->help_string, w->tooltip); bg_parameter_info_set_const_ptrs(info); return ret; }