1 #include "parametercombobox.h"
2 #include "ignoreWheelWhenNotFocused.h"
3 
ParameterComboBox(QWidget * parent,ParameterObject * parameterobject,DescLoD descriptionLoD)4 ParameterComboBox::ParameterComboBox(QWidget *parent, ParameterObject *parameterobject, DescLoD descriptionLoD)
5 	: ParameterVirtualWidget(parent, parameterobject, descriptionLoD)
6 {
7 	setValue();
8 	connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onChanged(int)));
9 
10 	IgnoreWheelWhenNotFocused *ignoreWheelWhenNotFocused = new IgnoreWheelWhenNotFocused(this);
11 	comboBox->installEventFilter(ignoreWheelWhenNotFocused);
12 }
13 
onChanged(int idx)14 void ParameterComboBox::onChanged(int idx)
15 {
16 	if(!this->suppressUpdate){
17 		if (object->dvt == Value::Type::STRING) {
18 			const std::string v = comboBox->itemData(idx).toString().toStdString();
19 			object->value = Value(v);
20 		} else {
21 			const double v = comboBox->itemData(idx).toDouble();
22 			object->value = Value(v);
23 		}
24 		emit changed();
25 	}
26 }
27 
setValue()28 void ParameterComboBox::setValue()
29 {
30 	this->suppressUpdate=true;
31 	this->stackedWidgetBelow->setCurrentWidget(this->pageComboBox);
32 	this->pageComboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
33 	this->stackedWidgetRight->hide();
34 	comboBox->clear();
35 	for (const auto &textData : object->values.toVector()) {
36 		QString text, data;
37 		if (textData.toVector().size() > 1) {
38 			text = QString::fromStdString(textData.toVector()[1].toString());
39 			data = QString::fromStdString(textData.toVector()[0].toString());
40 		} else {
41 			text = QString::fromStdString(textData.toString());
42 			data = text;
43 		}
44 		comboBox->addItem(text, QVariant(data));
45 	}
46 	QString defaultData = QString::fromStdString(object->value.toString());
47 	int idx = comboBox->findData(QVariant(defaultData));
48 	if (idx >= 0) {
49 		comboBox->setCurrentIndex(idx);
50 	}
51 	this->suppressUpdate=false;
52 }
53