Browse Source

UI: Add support for buttons in properties view.

jp9000 11 years ago
parent
commit
90f0bd6887
2 changed files with 29 additions and 5 deletions
  1. 27 5
      obs/properties-view.cpp
  2. 2 0
      obs/properties-view.hpp

+ 27 - 5
obs/properties-view.cpp

@@ -5,6 +5,7 @@
 #include <QSpinBox>
 #include <QDoubleSpinBox>
 #include <QComboBox>
+#include <QPushButton>
 #include "qt-wrappers.hpp"
 #include "properties-view.hpp"
 #include <string>
@@ -167,6 +168,9 @@ QWidget *OBSPropertiesView::AddList(obs_property_t prop)
 	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);
@@ -186,11 +190,9 @@ QWidget *OBSPropertiesView::AddList(obs_property_t prop)
 			idx      = combo->findData(QT_UTF8(val));
 	}
 
-	if (type == OBS_COMBO_TYPE_EDITABLE) {
-		combo->setEditable(true);
+	if (type == OBS_COMBO_TYPE_EDITABLE)
 		return NewWidget(prop, combo,
-				SLOT(editTextChanged(const QString &)));
-	}
+				SIGNAL(editTextChanged(const QString &)));
 
 	if (idx != -1)
 		combo->setCurrentIndex(idx);
@@ -207,6 +209,16 @@ QWidget *OBSPropertiesView::AddList(obs_property_t prop)
 	return combo;
 }
 
+QWidget *OBSPropertiesView::AddButton(obs_property_t prop)
+{
+	const char *name = obs_property_name(prop);
+	const char *desc = obs_property_description(prop);
+
+	QPushButton *button = new QPushButton(QT_UTF8(desc));
+	button->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
+	return NewWidget(prop, button, SIGNAL(clicked()));
+}
+
 void OBSPropertiesView::AddProperty(obs_property_t property,
 		QFormLayout *layout)
 {
@@ -242,6 +254,9 @@ void OBSPropertiesView::AddProperty(obs_property_t property,
 	case OBS_PROPERTY_COLOR:
 		/* TODO */
 		break;
+	case OBS_PROPERTY_BUTTON:
+		widget = AddButton(property);
+		break;
 	}
 
 	if (!widget)
@@ -251,7 +266,8 @@ void OBSPropertiesView::AddProperty(obs_property_t property,
 		widget->setEnabled(false);
 
 	QLabel *label = nullptr;
-	if (type != OBS_PROPERTY_BOOL)
+	if (type != OBS_PROPERTY_BOOL &&
+	    type != OBS_PROPERTY_BUTTON)
 		label = new QLabel(QT_UTF8(obs_property_description(property)));
 
 	if (label && minSize) {
@@ -338,6 +354,11 @@ void WidgetInfo::ColorChanged(const char *setting)
 	UNUSED_PARAMETER(setting);
 }
 
+void WidgetInfo::ButtonClicked()
+{
+	obs_property_button_clicked(property, view->obj);
+}
+
 void WidgetInfo::ControlChanged()
 {
 	const char        *setting = obs_property_name(property);
@@ -352,6 +373,7 @@ void WidgetInfo::ControlChanged()
 	case OBS_PROPERTY_PATH:    PathChanged(setting); break;
 	case OBS_PROPERTY_LIST:    ListChanged(setting); break;
 	case OBS_PROPERTY_COLOR:   ColorChanged(setting); break;
+	case OBS_PROPERTY_BUTTON:  ButtonClicked(); return;
 	}
 
 	view->callback(view->obj, view->settings);

+ 2 - 0
obs/properties-view.hpp

@@ -27,6 +27,7 @@ private:
 	void PathChanged(const char *setting);
 	void ListChanged(const char *setting);
 	void ColorChanged(const char *setting);
+	void ButtonClicked();
 
 public:
 	inline WidgetInfo(OBSPropertiesView *view_, obs_property_t prop,
@@ -65,6 +66,7 @@ private:
 	QWidget *AddInt(obs_property_t prop);
 	QWidget *AddFloat(obs_property_t prop);
 	QWidget *AddList(obs_property_t prop);
+	QWidget *AddButton(obs_property_t prop);
 
 	void AddProperty(obs_property_t property, QFormLayout *layout);