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