QWidget *OBSPropertiesView::AddList(obs_property_t prop) { const char *name = obs_property_name(prop); QComboBox *combo = new QComboBox(); obs_combo_type type = obs_property_list_type(prop); obs_combo_format format = obs_property_list_format(prop); size_t count = obs_property_list_item_count(prop); int idx = -1; for (size_t i = 0; i < count; i++) AddComboItem(combo, prop, format, i); if (type == OBS_COMBO_TYPE_EDITABLE) combo->setEditable(true); if (format == OBS_COMBO_FORMAT_INT) { int val = (int)obs_data_getint(settings, name); string valString = to_string(val); idx = combo->findData(QT_UTF8(valString.c_str())); } else if (format == OBS_COMBO_FORMAT_FLOAT) { double val = obs_data_getdouble(settings, name); string valString = to_string(val); idx = combo->findData(QT_UTF8(valString.c_str())); } else if (format == OBS_COMBO_FORMAT_STRING) { const char *val = obs_data_getstring(settings, name); if (type == OBS_COMBO_TYPE_EDITABLE) combo->lineEdit()->setText(val); else idx = combo->findData(QT_UTF8(val)); } if (type == OBS_COMBO_TYPE_EDITABLE) return NewWidget(prop, combo, SIGNAL(editTextChanged(const QString &))); if (idx != -1) combo->setCurrentIndex(idx); WidgetInfo *info = new WidgetInfo(this, prop, combo); connect(combo, SIGNAL(currentIndexChanged(int)), info, SLOT(ControlChanged())); children.push_back(std::move(unique_ptr<WidgetInfo>(info))); /* trigger a settings update if the index was not found */ if (idx == -1) info->ControlChanged(); return combo; }
QWidget *OBSPropertiesView::AddList(obs_property_t *prop, bool &warning) { const char *name = obs_property_name(prop); QComboBox *combo = new QComboBox(); obs_combo_type type = obs_property_list_type(prop); obs_combo_format format = obs_property_list_format(prop); size_t count = obs_property_list_item_count(prop); int idx = -1; for (size_t i = 0; i < count; i++) AddComboItem(combo, prop, format, i); if (type == OBS_COMBO_TYPE_EDITABLE) combo->setEditable(true); string value = from_obs_data(settings, name, format); if (format == OBS_COMBO_FORMAT_STRING && type == OBS_COMBO_TYPE_EDITABLE) combo->lineEdit()->setText(QT_UTF8(value.c_str())); else idx = combo->findData(QT_UTF8(value.c_str())); if (type == OBS_COMBO_TYPE_EDITABLE) return NewWidget(prop, combo, SIGNAL(editTextChanged(const QString &))); if (idx != -1) combo->setCurrentIndex(idx); if (obs_data_has_autoselect_value(settings, name)) { string autoselect = from_obs_data_autoselect(settings, name, format); int id = combo->findData(QT_UTF8(autoselect.c_str())); if (id != -1 && id != idx) { QString actual = combo->itemText(id); QString selected = combo->itemText(idx); QString combined = QTStr( "Basic.PropertiesWindow.AutoSelectFormat"); combo->setItemText(idx, combined.arg(selected).arg(actual)); } } QAbstractItemModel *model = combo->model(); warning = idx != -1 && model->flags(model->index(idx, 0)) == Qt::NoItemFlags; WidgetInfo *info = new WidgetInfo(this, prop, combo); connect(combo, SIGNAL(currentIndexChanged(int)), info, SLOT(ControlChanged())); children.push_back(std::move(unique_ptr<WidgetInfo>(info))); /* trigger a settings update if the index was not found */ if (idx == -1) info->ControlChanged(); return combo; }