Ver Fonte

libobs: Add properties list boolean format

gxalpha há 2 anos atrás
pai
commit
f049962bb2

+ 17 - 6
UI/properties-view.cpp

@@ -520,6 +520,9 @@ static void AddComboItem(QComboBox *combo, obs_property_t *prop,
 
 	} else if (format == OBS_COMBO_FORMAT_STRING) {
 		var = QByteArray(obs_property_list_item_string(prop, idx));
+	} else if (format == OBS_COMBO_FORMAT_BOOL) {
+		bool val = obs_property_list_item_bool(prop, idx);
+		var = QVariant::fromValue<bool>(val);
 	}
 
 	combo->addItem(QT_UTF8(name), var);
@@ -542,7 +545,8 @@ static void AddComboItem(QComboBox *combo, obs_property_t *prop,
 
 template<long long get_int(obs_data_t *, const char *),
 	 double get_double(obs_data_t *, const char *),
-	 const char *get_string(obs_data_t *, const char *)>
+	 const char *get_string(obs_data_t *, const char *),
+	 bool get_bool(obs_data_t *, const char *)>
 static QVariant from_obs_data(obs_data_t *data, const char *name,
 			      obs_combo_format format)
 {
@@ -553,6 +557,8 @@ static QVariant from_obs_data(obs_data_t *data, const char *name,
 		return QVariant::fromValue(get_double(data, name));
 	case OBS_COMBO_FORMAT_STRING:
 		return QByteArray(get_string(data, name));
+	case OBS_COMBO_FORMAT_BOOL:
+		return QVariant::fromValue(get_bool(data, name));
 	default:
 		return QVariant();
 	}
@@ -562,16 +568,17 @@ static QVariant from_obs_data(obs_data_t *data, const char *name,
 			      obs_combo_format format)
 {
 	return from_obs_data<obs_data_get_int, obs_data_get_double,
-			     obs_data_get_string>(data, name, format);
+			     obs_data_get_string, obs_data_get_bool>(data, name,
+								     format);
 }
 
 static QVariant from_obs_data_autoselect(obs_data_t *data, const char *name,
 					 obs_combo_format format)
 {
-	return from_obs_data<obs_data_get_autoselect_int,
-			     obs_data_get_autoselect_double,
-			     obs_data_get_autoselect_string>(data, name,
-							     format);
+	return from_obs_data<
+		obs_data_get_autoselect_int, obs_data_get_autoselect_double,
+		obs_data_get_autoselect_string, obs_data_get_autoselect_bool>(
+		data, name, format);
 }
 
 QWidget *OBSPropertiesView::AddList(obs_property_t *prop, bool &warning)
@@ -1801,6 +1808,10 @@ void WidgetInfo::ListChanged(const char *setting)
 		obs_data_set_string(view->settings, setting,
 				    data.toByteArray().constData());
 		break;
+	case OBS_COMBO_FORMAT_BOOL:
+		obs_data_set_bool(view->settings, setting,
+				  data.value<double>());
+		break;
 	}
 }
 

+ 1 - 0
docs/sphinx/reference-properties.rst

@@ -202,6 +202,7 @@ Property Object Functions
                           - **OBS_COMBO_FORMAT_FLOAT** - Floating point
                             list
                           - **OBS_COMBO_FORMAT_STRING** - String list
+                          - **OBS_COMBO_FORMAT_BOOL** - Boolean list
 
    :return:               The property
 

+ 28 - 0
libobs/obs-properties.c

@@ -44,6 +44,7 @@ struct list_item {
 		char *str;
 		long long ll;
 		double d;
+		bool b;
 	};
 };
 
@@ -1149,6 +1150,8 @@ static size_t add_item(struct list_data *data, const char *name,
 		item.ll = *(const long long *)val;
 	else if (data->format == OBS_COMBO_FORMAT_FLOAT)
 		item.d = *(const double *)val;
+	else if (data->format == OBS_COMBO_FORMAT_BOOL)
+		item.b = *(const bool *)val;
 	else
 		item.str = bstrdup(val);
 
@@ -1165,6 +1168,8 @@ static void insert_item(struct list_data *data, size_t idx, const char *name,
 		item.ll = *(const long long *)val;
 	else if (data->format == OBS_COMBO_FORMAT_FLOAT)
 		item.d = *(const double *)val;
+	else if (data->format == OBS_COMBO_FORMAT_BOOL)
+		item.b = *(const bool *)val;
 	else
 		item.str = bstrdup(val);
 
@@ -1198,6 +1203,14 @@ size_t obs_property_list_add_float(obs_property_t *p, const char *name,
 	return 0;
 }
 
+size_t obs_property_list_add_bool(obs_property_t *p, const char *name, bool val)
+{
+	struct list_data *data = get_list_data(p);
+	if (data && data->format == OBS_COMBO_FORMAT_BOOL)
+		return add_item(data, name, &val);
+	return 0;
+}
+
 void obs_property_list_insert_string(obs_property_t *p, size_t idx,
 				     const char *name, const char *val)
 {
@@ -1222,6 +1235,14 @@ void obs_property_list_insert_float(obs_property_t *p, size_t idx,
 		insert_item(data, idx, name, &val);
 }
 
+void obs_property_list_insert_bool(obs_property_t *p, size_t idx,
+				   const char *name, bool val)
+{
+	struct list_data *data = get_list_data(p);
+	if (data && data->format == OBS_COMBO_FORMAT_BOOL)
+		insert_item(data, idx, name, &val);
+}
+
 void obs_property_list_item_remove(obs_property_t *p, size_t idx)
 {
 	struct list_data *data = get_list_data(p);
@@ -1279,6 +1300,13 @@ double obs_property_list_item_float(obs_property_t *p, size_t idx)
 	return (data && idx < data->items.num) ? data->items.array[idx].d : 0.0;
 }
 
+bool obs_property_list_item_bool(obs_property_t *p, size_t idx)
+{
+	struct list_data *data = get_list_fmt_data(p, OBS_COMBO_FORMAT_BOOL);
+	return (data && idx < data->items.num) ? data->items.array[idx].d
+					       : false;
+}
+
 enum obs_editable_list_type obs_property_editable_list_type(obs_property_t *p)
 {
 	struct editable_list_data *data =

+ 6 - 0
libobs/obs-properties.h

@@ -64,6 +64,7 @@ enum obs_combo_format {
 	OBS_COMBO_FORMAT_INT,
 	OBS_COMBO_FORMAT_FLOAT,
 	OBS_COMBO_FORMAT_STRING,
+	OBS_COMBO_FORMAT_BOOL,
 };
 
 enum obs_combo_type {
@@ -364,6 +365,8 @@ EXPORT size_t obs_property_list_add_int(obs_property_t *p, const char *name,
 					long long val);
 EXPORT size_t obs_property_list_add_float(obs_property_t *p, const char *name,
 					  double val);
+EXPORT size_t obs_property_list_add_bool(obs_property_t *p, const char *name,
+					 bool val);
 
 EXPORT void obs_property_list_insert_string(obs_property_t *p, size_t idx,
 					    const char *name, const char *val);
@@ -371,6 +374,8 @@ EXPORT void obs_property_list_insert_int(obs_property_t *p, size_t idx,
 					 const char *name, long long val);
 EXPORT void obs_property_list_insert_float(obs_property_t *p, size_t idx,
 					   const char *name, double val);
+EXPORT void obs_property_list_insert_bool(obs_property_t *p, size_t idx,
+					  const char *name, bool val);
 
 EXPORT void obs_property_list_item_disable(obs_property_t *p, size_t idx,
 					   bool disabled);
@@ -383,6 +388,7 @@ EXPORT const char *obs_property_list_item_name(obs_property_t *p, size_t idx);
 EXPORT const char *obs_property_list_item_string(obs_property_t *p, size_t idx);
 EXPORT long long obs_property_list_item_int(obs_property_t *p, size_t idx);
 EXPORT double obs_property_list_item_float(obs_property_t *p, size_t idx);
+EXPORT bool obs_property_list_item_bool(obs_property_t *p, size_t idx);
 
 EXPORT enum obs_editable_list_type
 obs_property_editable_list_type(obs_property_t *p);