Browse Source

UI: Put context combo box operations in functions

This allows the ability to use these functions elsewhere without having
to duplicate the code or subclass from the ComboSelectToolbar class.
jp9000 5 years ago
parent
commit
ab2f3edb2b
1 changed files with 35 additions and 21 deletions
  1. 35 21
      UI/context-bar-controls.cpp

+ 35 - 21
UI/context-bar-controls.cpp

@@ -107,13 +107,10 @@ static void SetComboItemDisabled(QComboBox *c, int idx)
 	item->setFlags(Qt::NoItemFlags);
 }
 
-void ComboSelectToolbar::Init()
+void UpdateSourceComboToolbarProperties(QComboBox *combo, OBSSource source,
+					obs_properties_t *props,
+					const char *prop_name, bool is_int)
 {
-	OBSSource source = GetSource();
-	if (!source) {
-		return;
-	}
-
 	std::string cur_id;
 
 	obs_data_t *settings = obs_source_get_settings(source);
@@ -124,25 +121,35 @@ void ComboSelectToolbar::Init()
 	}
 	obs_data_release(settings);
 
-	ui->device->blockSignals(true);
+	combo->blockSignals(true);
 
-	obs_property_t *p = obs_properties_get(props.get(), prop_name);
-	int cur_idx = FillPropertyCombo(ui->device, p, cur_id, is_int);
+	obs_property_t *p = obs_properties_get(props, prop_name);
+	int cur_idx = FillPropertyCombo(combo, p, cur_id, is_int);
 
 	if (cur_idx == -1 || obs_property_list_item_disabled(p, cur_idx)) {
 		if (cur_idx == -1) {
-			ui->device->insertItem(
+			combo->insertItem(
 				0,
 				QTStr("Basic.Settings.Audio.UnknownAudioDevice"));
 			cur_idx = 0;
 		}
 
-		SetComboItemDisabled(ui->device, cur_idx);
-	} else {
-		ui->device->setCurrentIndex(cur_idx);
+		SetComboItemDisabled(combo, cur_idx);
+	}
+
+	combo->setCurrentIndex(cur_idx);
+	combo->blockSignals(false);
+}
+
+void ComboSelectToolbar::Init()
+{
+	OBSSource source = GetSource();
+	if (!source) {
+		return;
 	}
 
-	ui->device->blockSignals(false);
+	UpdateSourceComboToolbarProperties(ui->device, source, props.get(),
+					   prop_name, is_int);
 }
 
 void ComboSelectToolbar::UpdateActivateButtonName()
@@ -151,14 +158,10 @@ void ComboSelectToolbar::UpdateActivateButtonName()
 	ui->activateButton->setText(obs_property_description(p));
 }
 
-void ComboSelectToolbar::on_device_currentIndexChanged(int idx)
+void UpdateSourceComboToolbarValue(QComboBox *combo, OBSSource source, int idx,
+				   const char *prop_name, bool is_int)
 {
-	OBSSource source = GetSource();
-	if (idx == -1 || !source) {
-		return;
-	}
-
-	QString id = ui->device->itemData(idx).toString();
+	QString id = combo->itemData(idx).toString();
 
 	obs_data_t *settings = obs_data_create();
 	if (is_int) {
@@ -170,6 +173,17 @@ void ComboSelectToolbar::on_device_currentIndexChanged(int idx)
 	obs_data_release(settings);
 }
 
+void ComboSelectToolbar::on_device_currentIndexChanged(int idx)
+{
+	OBSSource source = GetSource();
+	if (idx == -1 || !source) {
+		return;
+	}
+
+	UpdateSourceComboToolbarValue(ui->device, source, idx, prop_name,
+				      is_int);
+}
+
 void ComboSelectToolbar::on_activateButton_clicked()
 {
 	OBSSource source = GetSource();