00001 #include "ParameterWidget.h" 00002 #include "ParameterWidget.moc" 00003 00004 #include <iostream> 00005 00006 ParameterWidget::ParameterWidget(const QString& name, QWidget *parent): 00007 QWidget(parent), 00008 m_name(name), 00009 m_mapper(this) 00010 { 00011 m_layout = new QGridLayout(this); 00012 m_layout->setSpacing(3); 00013 m_layout->setMargin(3); 00014 connect(&m_mapper, SIGNAL(mapped(const QString&)), this, SIGNAL(parameterChanged(const QString&))); 00015 } 00016 00017 void ParameterWidget::addDoubleParameter(const QString& name, const QString& description, double initialValue, double minValue, double maxValue, int decimals, double step){ 00018 ParameterPair pair; 00019 pair.description = new QLabel(description, this); 00020 QDoubleSpinBox *parameter = new QDoubleSpinBox(this); 00021 00022 parameter->setValue(initialValue); 00023 parameter->setMinimum(minValue); 00024 parameter->setMaximum(maxValue); 00025 parameter->setDecimals(decimals); 00026 parameter->setSingleStep(step); 00027 00028 pair.parameter = parameter; 00029 m_layout->addWidget(pair.description,m_layout->rowCount(), 0); 00030 m_layout->addWidget(pair.parameter,m_layout->rowCount() - 1, 1); 00031 00032 connect(pair.parameter, SIGNAL(valueChanged(double)), &m_mapper, SLOT(map())); 00033 m_mapper.setMapping(pair.parameter, name); 00034 m_parameterMap.insert(name, pair); 00035 } 00036 00037 void ParameterWidget::addIntParameter(const QString& name, const QString& description, int initialValue, int minValue, int maxValue, int step){ 00038 ParameterPair pair; 00039 pair.description = new QLabel(description, this); 00040 QSpinBox *parameter = new QSpinBox(this); 00041 00042 parameter->setValue(initialValue); 00043 parameter->setMinimum(minValue); 00044 parameter->setMaximum(maxValue); 00045 parameter->setSingleStep(step); 00046 00047 pair.parameter = parameter; 00048 m_layout->addWidget(pair.description,m_layout->rowCount(),0); 00049 m_layout->addWidget(pair.parameter,m_layout->rowCount() - 1,1); 00050 00051 connect(pair.parameter, SIGNAL(valueChanged(int)), &m_mapper, SLOT(map())); 00052 m_mapper.setMapping(pair.parameter, name); 00053 m_parameterMap.insert(name, pair); 00054 } 00055 00056 void ParameterWidget::addBoolParameter(const QString& name, const QString& description, bool initialValue){ 00057 ParameterPair pair; 00058 pair.description = new QLabel(description, this); 00059 QCheckBox *parameter = new QCheckBox(this); 00060 00061 parameter->setCheckState(initialValue ? Qt::Checked : Qt::Unchecked); 00062 00063 pair.parameter = parameter; 00064 m_layout->addWidget(pair.description,m_layout->rowCount(),0); 00065 m_layout->addWidget(pair.parameter,m_layout->rowCount() - 1,1); 00066 00067 connect(pair.parameter, SIGNAL(stateChanged(int)), &m_mapper, SLOT(map())); 00068 m_mapper.setMapping(pair.parameter, name); 00069 m_parameterMap.insert(name, pair); 00070 } 00071 00072 void ParameterWidget::addEnumParameter(const QString& name, const QString& description, QStringList& values, int initialValue){ 00073 ParameterPair pair; 00074 pair.description = new QLabel(description, this); 00075 QComboBox *parameter = new QComboBox(this); 00076 00077 parameter->insertItems(0, values); 00078 parameter->setInsertPolicy(QComboBox::NoInsert); 00079 parameter->setEditable(false); 00080 00081 pair.parameter = parameter; 00082 m_layout->addWidget(pair.description,m_layout->rowCount(),0); 00083 m_layout->addWidget(pair.parameter,m_layout->rowCount() - 1,1); 00084 00085 connect(pair.parameter, SIGNAL(activated(int)), &m_mapper, SLOT(map())); 00086 m_mapper.setMapping(pair.parameter, name); 00087 m_parameterMap.insert(name, pair); 00088 } 00089 00090 void ParameterWidget::insertEnumValue(const QString& name, const QString& value){ 00091 ParameterPair pair = m_parameterMap.value(name); 00092 QComboBox *parameter = dynamic_cast<QComboBox *>(pair.parameter); 00093 if(parameter){ 00094 parameter->addItem(value); 00095 } 00096 } 00097 00098 void ParameterWidget::removeEnumValue(const QString& name, const QString& value){ 00099 ParameterPair pair = m_parameterMap.value(name); 00100 QComboBox *parameter = dynamic_cast<QComboBox *>(pair.parameter); 00101 if(parameter){ 00102 int index = parameter->findText(value); 00103 if(index >= 0){ 00104 parameter->removeItem(index); 00105 } 00106 } 00107 } 00108 00109 void ParameterWidget::clearEnumParameter(const QString& name){ 00110 ParameterPair pair = m_parameterMap.value(name); 00111 QComboBox *parameter = dynamic_cast<QComboBox *>(pair.parameter); 00112 if(parameter){ 00113 while(parameter->count()) parameter->removeItem(0); 00114 } 00115 } 00116 00117 void ParameterWidget::removeParameter(QString& name){ 00118 ParameterPair pair = m_parameterMap.value(name); 00119 disconnect(pair.parameter, 0, &m_mapper, 0); 00120 delete pair.parameter; 00121 delete pair.description; 00122 m_parameterMap.remove(name); 00123 } 00124 00125 void ParameterWidget::clearParameterMap(){ 00126 for(QHash<QString, ParameterPair>::iterator it = m_parameterMap.begin(); it != m_parameterMap.end(); ++it){ 00127 ParameterPair pair = it.value(); 00128 delete pair.parameter; 00129 delete pair.description; 00130 } 00131 m_parameterMap.clear(); 00132 } 00133 00134 bool ParameterWidget::getDoubleValue(const QString& name, double& result) const{ 00135 ParameterPair pair = m_parameterMap.value(name); 00136 const QDoubleSpinBox *parameter = dynamic_cast<const QDoubleSpinBox *>(pair.parameter); 00137 if(parameter){ 00138 result = parameter->value(); 00139 } 00140 return parameter != NULL; 00141 } 00142 00143 bool ParameterWidget::getIntValue(const QString& name, int& result) const{ 00144 ParameterPair pair = m_parameterMap.value(name); 00145 const QSpinBox *parameter = dynamic_cast<const QSpinBox *>(pair.parameter); 00146 if(parameter){ 00147 result = parameter->value(); 00148 } 00149 return parameter != NULL; 00150 } 00151 00152 bool ParameterWidget::getBoolValue(const QString& name, bool& result) const{ 00153 ParameterPair pair = m_parameterMap.value(name); 00154 const QCheckBox *parameter = dynamic_cast<const QCheckBox *>(pair.parameter); 00155 if(parameter){ 00156 result = parameter->checkState() == Qt::Checked; 00157 } 00158 return parameter != NULL; 00159 } 00160 00161 bool ParameterWidget::getEnumValue(const QString& name, int& result) const{ 00162 ParameterPair pair = m_parameterMap.value(name); 00163 const QComboBox *parameter = dynamic_cast<const QComboBox *>(pair.parameter); 00164 if(parameter){ 00165 result = parameter->currentIndex(); 00166 } 00167 return parameter != NULL; 00168 } 00169 00170 void ParameterWidget::setDoubleValue(const QString& name, double value){ 00171 ParameterPair pair = m_parameterMap.value(name); 00172 QDoubleSpinBox *parameter = dynamic_cast<QDoubleSpinBox *>(pair.parameter); 00173 if(parameter){ 00174 parameter->setValue(value); 00175 } 00176 } 00177 00178 void ParameterWidget::setIntValue(const QString& name, int value){ 00179 ParameterPair pair = m_parameterMap.value(name); 00180 QSpinBox *parameter = dynamic_cast<QSpinBox *>(pair.parameter); 00181 if(parameter){ 00182 parameter->setValue(value); 00183 } 00184 } 00185 00186 void ParameterWidget::setBoolValue(const QString& name, bool value){ 00187 ParameterPair pair = m_parameterMap.value(name); 00188 QCheckBox *parameter = dynamic_cast<QCheckBox *>(pair.parameter); 00189 if(parameter){ 00190 parameter->setCheckState(value ? Qt::Checked : Qt::Unchecked); 00191 } 00192 } 00193 00194 void ParameterWidget::setEnumValue(const QString& name, int value){ 00195 ParameterPair pair = m_parameterMap.value(name); 00196 QComboBox *parameter = dynamic_cast<QComboBox *>(pair.parameter); 00197 if(parameter){ 00198 parameter->setCurrentIndex(value); 00199 } 00200 }