瀏覽代碼

UI: Allow prop. view to be created via identifier

Allows a properties view control to be created only with an identifier
string instead of only being created with a pointer to an object.  This
way, we don't necessarily have to have an object for some arbitrary
settings we want the user to be able to modify.
jp9000 10 年之前
父節點
當前提交
baaa061344
共有 2 個文件被更改,包括 27 次插入2 次删除
  1. 23 2
      obs/properties-view.cpp
  2. 4 0
      obs/properties-view.hpp

+ 23 - 2
obs/properties-view.cpp

@@ -42,7 +42,13 @@ static inline long long color_to_int(QColor color)
 
 void OBSPropertiesView::ReloadProperties()
 {
-	properties.reset(reloadCallback(obj));
+	if (obj) {
+		properties.reset(reloadCallback(obj));
+	} else {
+		properties.reset(reloadCallback((void*)type.c_str()));
+		obs_properties_apply_settings(properties.get(), settings);
+	}
+
 	RefreshProperties();
 }
 
@@ -97,6 +103,19 @@ OBSPropertiesView::OBSPropertiesView(OBSData settings_, void *obj_,
 	ReloadProperties();
 }
 
+OBSPropertiesView::OBSPropertiesView(OBSData settings_, const char *type_,
+		PropertiesReloadCallback reloadCallback_, int minSize_)
+	: VScrollArea    (nullptr),
+	  properties     (nullptr, obs_properties_destroy),
+	  settings       (settings_),
+	  type           (type_),
+	  reloadCallback (reloadCallback_),
+	  minSize        (minSize_)
+{
+	setFrameShape(QFrame::NoFrame);
+	ReloadProperties();
+}
+
 void OBSPropertiesView::resizeEvent(QResizeEvent *event)
 {
 	emit PropertiesResized();
@@ -694,7 +713,9 @@ void WidgetInfo::ControlChanged()
 			return;
 	}
 
-	view->callback(view->obj, view->settings);
+	if (view->callback)
+		view->callback(view->obj, view->settings);
+
 	if (obs_property_modified(property, view->settings)) {
 		view->lastFocused = setting;
 		QMetaObject::invokeMethod(view, "RefreshProperties",

+ 4 - 0
obs/properties-view.hpp

@@ -59,6 +59,7 @@ private:
 	properties_t                             properties;
 	OBSData                                  settings;
 	void                                     *obj = nullptr;
+	std::string                              type;
 	PropertiesReloadCallback                 reloadCallback;
 	PropertiesUpdateCallback                 callback = nullptr;
 	int                                      minSize;
@@ -95,4 +96,7 @@ public:
 			PropertiesReloadCallback reloadCallback,
 			PropertiesUpdateCallback callback,
 			int minSize = 0);
+	OBSPropertiesView(OBSData settings, const char *type,
+			PropertiesReloadCallback reloadCallback,
+			int minSize = 0);
 };