diff --git a/Code/ApplicationEngine/otbWrapperInputImageListParameter.h b/Code/ApplicationEngine/otbWrapperInputImageListParameter.h index 66d471dbf01ba0d240fe641784c3a79d8d09734f..65e55d37804b9552b2b329a3831023026a2f39b7 100644 --- a/Code/ApplicationEngine/otbWrapperInputImageListParameter.h +++ b/Code/ApplicationEngine/otbWrapperInputImageListParameter.h @@ -81,6 +81,22 @@ public: this->Modified(); } + /** Set one specific stored image filename. */ + void SetNthFileName( const unsigned int id, const std::string & filename ) + { + if( m_ReaderList->Size()<id ) + { + itkExceptionMacro(<< "No image "<<id<<". Only "<<m_ReaderList->Size()<<" images available."); + } + + ImageFileReaderType::Pointer reader = ImageFileReaderType::New(); + reader->SetFileName(filename); + reader->UpdateOutputInformation(); + m_ReaderList->SetNthElement(id, reader); + m_ImageList->SetNthElement(id, reader->GetOutput()); + } + + /** Get the stored image filename list */ std::vector<std::string> GetFileNameList() const { diff --git a/Code/Wrappers/QtWidget/CMakeLists.txt b/Code/Wrappers/QtWidget/CMakeLists.txt index caa56b259bda0ccb7321a2dd3dcd187d69c92f98..e5d8b49c97b6bf1c8d4a2ef3fa70c09e07d0c697 100644 --- a/Code/Wrappers/QtWidget/CMakeLists.txt +++ b/Code/Wrappers/QtWidget/CMakeLists.txt @@ -8,6 +8,7 @@ set( WrappersQtWidget_MOC_HDR otbWrapperQtWidgetStringParameter.h otbWrapperQtWidgetChoiceParameter.h otbWrapperQtWidgetInputImageParameter.h + otbWrapperQtWidgetInputImageListParameter.h otbWrapperQtWidgetOutputImageParameter.h otbWrapperQtWidgetParameterGroup.h otbWrapperQtWidgetParameterLabel.h @@ -16,8 +17,9 @@ set( WrappersQtWidget_MOC_HDR otbWrapperQtWidgetView.h otbWrapperQtWidgetProgressReport.h otbWrapperQtWidgetListViewParameter.h + otbQtFileSelectionWidget.h itkQtProgressBar.h - ) + ) QT4_WRAP_CPP(WrappersQtWidget_MOC_SRC ${WrappersQtWidget_MOC_HDR}) diff --git a/Code/Wrappers/QtWidget/otbQtFileSelectionWidget.cxx b/Code/Wrappers/QtWidget/otbQtFileSelectionWidget.cxx new file mode 100644 index 0000000000000000000000000000000000000000..7da73be75d321023c9c308f9794133c2336802cc --- /dev/null +++ b/Code/Wrappers/QtWidget/otbQtFileSelectionWidget.cxx @@ -0,0 +1,118 @@ +/*========================================================================= + + Program: ORFEO Toolbox + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. + See OTBCopyright.txt for details. + + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include "otbQtFileSelectionWidget.h" + +namespace otb +{ +namespace Wrapper +{ + +QtFileSelectionWidget::QtFileSelectionWidget() + : QWidget(), m_Index(0), m_AsValue(false) +{ + m_InputList = InputImageListParameter::New(); + this->DoCreateWidget(); +} + +QtFileSelectionWidget::QtFileSelectionWidget( InputImageListParameter * il ) + : QWidget(), m_Index(0), m_AsValue(false) +{ + m_InputList = il; + this->DoCreateWidget(); +} + +QtFileSelectionWidget::~QtFileSelectionWidget() +{ +} + +void QtFileSelectionWidget::DoUpdateGUI() +{ + +} + +void QtFileSelectionWidget::DoCreateWidget() +{ + unsigned int sp = 2; + // Set up input text edit + m_HLayout = new QHBoxLayout; + m_HLayout->setSpacing(sp); + m_HLayout->setContentsMargins(sp, sp, sp, sp); + + m_Checkbox = new QCheckBox(); + m_HLayout->addWidget(m_Checkbox); + + m_Input = new QLineEdit; + + //connect( m_Input, SIGNAL(textChanged(const QString&)), this, SLOT(SetFileName(const QString&)) ); + //connect( m_Input, SIGNAL(textChanged(const QString&)), GetModel(), SLOT(NotifyUpdate()) ); + + m_HLayout->addWidget(m_Input); + + // Set up input text edit + m_Button = new QPushButton; + m_Button->setText("..."); + m_Button->setToolTip("Select file..."); + m_Button->setMaximumWidth(m_Button->width()); + connect( m_Button, SIGNAL(clicked()), this, SLOT(SelectFile()) ); + m_HLayout->addWidget(m_Button); + + this->setLayout(m_HLayout); +} + +void QtFileSelectionWidget::SelectFile() +{ + std::cout<<this<<std::endl; + QFileDialog fileDialog; + fileDialog.setConfirmOverwrite(true); + fileDialog.setFileMode(QFileDialog::ExistingFile); + fileDialog.setNameFilter("Raster files (*)"); + + if (fileDialog.exec()) + { + //this->SetFileName(fileDialog.selectedFiles().at(0)); + QString filemane(fileDialog.selectedFiles().at(0)); + m_Input->setText(filemane); + + if( m_AsValue == false ) + { + m_InputList->AddFromFileName(filemane.toStdString()); + m_Index = m_InputList->GetImageList()->Size()-1; + m_AsValue = true; + } + else + { + m_InputList->SetNthFileName( m_Index, filemane.toStdString()); + } + + } +} + +/* +void QtFileSelectionWidget::SetFileName(const QString& value) +{ + // save value + m_InputImageParam->SetFromFileName(value.toStdString()); + + // notify of value change + QString key( QString::fromStdString(m_InputImageParam->GetKey()) ); + emit ParameterChanged(key); +} +*/ + +} +} diff --git a/Code/Wrappers/QtWidget/otbQtFileSelectionWidget.h b/Code/Wrappers/QtWidget/otbQtFileSelectionWidget.h new file mode 100644 index 0000000000000000000000000000000000000000..bc79bd28bc6c6b246f070df39e16fd7e98eb35b6 --- /dev/null +++ b/Code/Wrappers/QtWidget/otbQtFileSelectionWidget.h @@ -0,0 +1,83 @@ +/*========================================================================= + + Program: ORFEO Toolbox + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. + See OTBCopyright.txt for details. + + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __otbQtFileSelectionWidget_h +#define __otbQtFileSelectionWidget_h + +#include <QtGui> +#include "otbWrapperInputImageListParameter.h" +#include "otbWrapperQtWidgetParameterBase.h" + + +namespace otb +{ +namespace Wrapper +{ + +/** \class + * \brief + */ +class QtFileSelectionWidget : public QWidget +{ + Q_OBJECT +public: + QtFileSelectionWidget(); + QtFileSelectionWidget( InputImageListParameter * il ); + virtual ~QtFileSelectionWidget(); + + InputImageListParameter * GetInputList() + { + return m_InputList; + } + + void SetInputList(InputImageListParameter * il) + { + m_InputList = il; + } + + unsigned int GetIndex() + { + return m_Index; + } + +protected slots: + //void SetFileName( const QString& value ); + void SelectFile(); + +private: + QtFileSelectionWidget(const QtFileSelectionWidget&); //purposely not implemented + void operator=(const QtFileSelectionWidget&); //purposely not implemented + + virtual void DoCreateWidget(); + + virtual void DoUpdateGUI(); + + + QHBoxLayout * m_HLayout; + QLineEdit* m_Input; + QPushButton * m_Button; + QCheckBox * m_Checkbox; + InputImageListParameter::Pointer m_InputList; + unsigned int m_Index; + bool m_AsValue; +}; + + +} +} + +#endif diff --git a/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageListParameter.cxx b/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageListParameter.cxx new file mode 100644 index 0000000000000000000000000000000000000000..7fd76b8b25ad40e3817ceca50520152c10c803e7 --- /dev/null +++ b/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageListParameter.cxx @@ -0,0 +1,238 @@ +/*========================================================================= + + Program: ORFEO Toolbox + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. + See OTBCopyright.txt for details. + + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include "otbWrapperQtWidgetInputImageListParameter.h" +#include "otbQtFileSelectionWidget.h" + +namespace otb +{ +namespace Wrapper +{ + +QtWidgetInputImageListParameter::QtWidgetInputImageListParameter(InputImageListParameter* param, QtWidgetModel* m) +: QtWidgetParameterBase(m), + m_InputImageListParam(param)/*, + m_FileSelectionList()*/ +{ +} + +QtWidgetInputImageListParameter::~QtWidgetInputImageListParameter() +{ +} + +void QtWidgetInputImageListParameter::DoUpdateGUI() +{ + +} + +void QtWidgetInputImageListParameter::DoCreateWidget() +{ + //m_FileSelectionList.clear(); + const unsigned int sp = 2; + // Global layout + m_HLayout = new QHBoxLayout; + m_HLayout->setSpacing(sp); + m_HLayout->setContentsMargins(sp, sp, sp, sp); + + // Button layout + m_ButtonLayout = new QVBoxLayout; + m_ButtonLayout->setSpacing(sp); + m_ButtonLayout->setContentsMargins(sp, sp, sp, sp); + + m_AddSupLayout = new QHBoxLayout; + m_AddSupLayout->setSpacing(sp); + m_AddSupLayout->setContentsMargins(sp, sp, sp, sp); + + m_UpDownLayout = new QHBoxLayout; + m_UpDownLayout->setSpacing(sp); + m_UpDownLayout->setContentsMargins(sp, sp, sp, sp); + + // Add file button + m_AddButton = new QPushButton; + m_AddButton->setText("+"); + m_AddButton->setToolTip("Add a file selector..."); + m_AddButton->setMaximumWidth(m_AddButton->width()); + connect( m_AddButton, SIGNAL(clicked()), this, SLOT(AddFile()) ); + m_AddSupLayout->addWidget(m_AddButton); + + // Supress file button + m_SupButton = new QPushButton; + m_SupButton->setText("-"); + m_SupButton->setToolTip("Supress the selected file..."); + m_SupButton->setMaximumWidth(m_SupButton->width()); + connect( m_SupButton, SIGNAL(clicked()), this, SLOT(SupressFile()) ); + m_AddSupLayout->addWidget(m_SupButton); + m_ButtonLayout->addLayout(m_AddSupLayout); + + // Up file edit + m_UpButton = new QPushButton; + m_UpButton->setText("Up"); + m_UpButton->setToolTip("Up the selected file in the list..."); + m_UpButton->setMaximumWidth(m_UpButton->width()); + connect( m_UpButton, SIGNAL(clicked()), this, SLOT(UpFile()) ); + m_UpDownLayout->addWidget(m_UpButton); + + // Down file edit + m_DownButton = new QPushButton; + m_DownButton->setText("Down"); + m_DownButton->setToolTip("Down the selected file in the list..."); + m_DownButton->setMaximumWidth(m_DownButton->width()); + connect( m_DownButton, SIGNAL(clicked()), this, SLOT(DownFile()) ); + m_UpDownLayout->addWidget(m_DownButton); + m_ButtonLayout->addLayout(m_UpDownLayout); + + // Erase file edit + m_EraseButton = new QPushButton; + m_EraseButton->setText("Erase"); + m_EraseButton->setToolTip("Erase the selected file of the list..."); + m_EraseButton->setMaximumWidth(m_EraseButton->width()); + connect( m_EraseButton, SIGNAL(clicked()), this, SLOT(EraseFile()) ); + m_ButtonLayout->addWidget(m_EraseButton); + + m_FileLayout = new QVBoxLayout(); +/* + QtFileSelectionWidget * fileSelection = new QtFileSelectionWidget(); + m_FileLayout->addWidget( fileSelection ); +QtFileSelectionWidget * fileSelection1 = new QtFileSelectionWidget(); + m_FileLayout->addWidget( fileSelection1 ); +QtFileSelectionWidget * fileSelection2 = new QtFileSelectionWidget(); + m_FileLayout->addWidget( fileSelection2 ); +QtFileSelectionWidget * fileSelection3 = new QtFileSelectionWidget(); + m_FileLayout->addWidget( fileSelection3 ); +QtFileSelectionWidget * fileSelection4 = new QtFileSelectionWidget(); + m_FileLayout->addWidget( fileSelection4 ); +QtFileSelectionWidget * fileSelection5 = new QtFileSelectionWidget(); + m_FileLayout->addWidget( fileSelection5 ); +QtFileSelectionWidget * fileSelection6 = new QtFileSelectionWidget(); + m_FileLayout->addWidget( fileSelection6 ); +*/ + QLineEdit * fileSelection = new QLineEdit(); + m_FileLayout->addWidget( fileSelection ); + QGroupBox *mainGroup = new QGroupBox(); + mainGroup->setLayout(m_FileLayout); + m_Scroll = new QScrollArea(); + //m_Scroll->setLayout(m_FileLayout); + m_Scroll->setWidget(mainGroup); + m_Scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);//ScrollBarAlwaysOn); + m_Scroll->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);//ScrollBarAlwaysOn); + + QVBoxLayout *scrollLayout = new QVBoxLayout(); + scrollLayout->addWidget(m_Scroll); + + + //m_HLayout->addWidget(m_Scroll); + m_HLayout->addLayout(scrollLayout); + m_HLayout->addLayout(m_ButtonLayout); + + m_HLayout->addStretch(); + + this->setLayout(m_HLayout); +} + +void QtWidgetInputImageListParameter::SelectFile() +{ + QFileDialog fileDialog; + fileDialog.setConfirmOverwrite(true); + fileDialog.setFileMode(QFileDialog::ExistingFile); + fileDialog.setNameFilter("Raster files (*)"); + + if (fileDialog.exec()) + { + //this->SetFileName(fileDialog.selectedFiles().at(0)); + //m_Input->setText(fileDialog.selectedFiles().at(0)); + } +} + + +void +QtWidgetInputImageListParameter::UpFile() +{ + std::cout<<"upupup"<<std::endl; +} +void +QtWidgetInputImageListParameter::DownFile() +{ + std::cout<<"downdowndown"<<std::endl; +} +void +QtWidgetInputImageListParameter::AddFile() +{ + //QtFileSelectionWidget * fileSelection = new + //QtFileSelectionWidget(); + QLineEdit * fileSelection = new QLineEdit(); + //std::cout<< fileSelection->height()<<std::endl; + //fileSelection->setMinimumHeight( 20 );//fileSelection->height() / 2 ); + //std::cout<<fileSelection->minimumHeight()<<std::endl; + + m_FileLayout->addWidget( fileSelection ); + m_FileLayout->update(); + m_Scroll->update(); + m_HLayout->update(); + this->update(); +} + +void +QtWidgetInputImageListParameter::SupressFile() +{ + std::cout<<"supsupsup"<<std::endl; +} +void +QtWidgetInputImageListParameter::EraseFile() +{ + //m_HLayout->removeItem( m_FileLayout ); + m_HLayout->removeWidget( m_Scroll ); + m_HLayout->update(); + + m_FileLayout = new QVBoxLayout(); + //QtFileSelectionWidget * fileSelection = new QtFileSelectionWidget(); + QLineEdit * fileSelection = new QLineEdit(); + m_FileLayout->addWidget( fileSelection ); + + QGroupBox *mainGroup = new QGroupBox(); + mainGroup->setLayout(m_FileLayout); + m_Scroll = new QScrollArea(); + //m_Scroll->setLayout(m_FileLayout); + m_Scroll->setWidget(mainGroup); + m_Scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);//ScrollBarAlwaysOn); + m_Scroll->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);//ScrollBarAlwaysOn) +/* + m_Scroll = new QScrollArea(); + m_Scroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);//AsNeeded); + m_Scroll->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + m_Scroll->setLayout(m_FileLayout); +*/ + + m_HLayout->insertWidget(0, m_Scroll); + m_HLayout->update(); + //m_HLayout->takeAt(2) = m_Scroll; + std::cout<<"cleancleanclean"<<std::endl; +} +/* +void QtWidgetInputImageListParameter::SetFileName(const QString& value) +{ + // save value + m_InputImageParam->SetFromFileName(value.toStdString()); + + // notify of value change + QString key( QString::fromStdString(m_InputImageParam->GetKey()) ); + emit ParameterChanged(key); +} +*/ + + +} +} diff --git a/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageListParameter.h b/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageListParameter.h new file mode 100644 index 0000000000000000000000000000000000000000..2eaf4274f06e7727afe1568d839659058421deec --- /dev/null +++ b/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageListParameter.h @@ -0,0 +1,79 @@ +/*========================================================================= + + Program: ORFEO Toolbox + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. + See OTBCopyright.txt for details. + + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __otbWrapperQtWidgetInputImageListParameter_h +#define __otbWrapperQtWidgetInputImageListParameter_h + +#include <QtGui> +#include "otbWrapperInputImageListParameter.h" +#include "otbWrapperQtWidgetParameterBase.h" + + +namespace otb +{ +namespace Wrapper +{ + +/** \class + * \brief + */ +class QtWidgetInputImageListParameter : public QtWidgetParameterBase +{ + Q_OBJECT +public: + QtWidgetInputImageListParameter(InputImageListParameter*, QtWidgetModel*); + virtual ~QtWidgetInputImageListParameter(); + +protected slots: + //void SetFileName( const QString& value ); + virtual void SelectFile(); + virtual void UpFile(); + virtual void DownFile(); + virtual void AddFile(); + virtual void SupressFile(); + virtual void EraseFile(); + + +private: + QtWidgetInputImageListParameter(const QtWidgetInputImageListParameter&); //purposely not implemented + void operator=(const QtWidgetInputImageListParameter&); //purposely not implemented + + virtual void DoCreateWidget(); + + virtual void DoUpdateGUI(); + + InputImageListParameter::Pointer m_InputImageListParam; + + QHBoxLayout * m_HLayout; + QVBoxLayout * m_FileLayout; + QVBoxLayout * m_ButtonLayout; + QHBoxLayout * m_AddSupLayout; + QHBoxLayout * m_UpDownLayout; + QPushButton * m_SupButton; + QPushButton * m_AddButton; + QPushButton * m_EraseButton; + QPushButton * m_UpButton; + QPushButton * m_DownButton; + QScrollArea * m_Scroll; + //std::vector<QtFileSelectionWidget *> m_FileSelectionList; +}; + + +} +} + +#endif diff --git a/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageParameter.cxx b/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageParameter.cxx index 5bcfcb0a1066f4243205bf4aa7b6b119f70dba27..23c6d03eb8b990ce6e5249caa925e6efde75aacd 100644 --- a/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageParameter.cxx +++ b/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageParameter.cxx @@ -70,7 +70,7 @@ void QtWidgetInputImageParameter::SelectFile() if (fileDialog.exec()) { - //this->SetFileName(fileDialog.selectedFiles().at(0)); + this->SetFileName(fileDialog.selectedFiles().at(0)); m_Input->setText(fileDialog.selectedFiles().at(0)); } } diff --git a/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageParameter.h b/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageParameter.h index 7b078027f2de8cbafc31a7a6b0826a5edb95d2c2..24b95f4ef06e45eae9380806d8bfdb2a98e7c251 100644 --- a/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageParameter.h +++ b/Code/Wrappers/QtWidget/otbWrapperQtWidgetInputImageParameter.h @@ -50,6 +50,7 @@ private: virtual void DoUpdateGUI(); + InputImageParameter::Pointer m_InputImageParam; QHBoxLayout * m_HLayout; diff --git a/Code/Wrappers/QtWidget/otbWrapperQtWidgetParameterFactory.cxx b/Code/Wrappers/QtWidget/otbWrapperQtWidgetParameterFactory.cxx index ef12ec08a1bce372485a80307b9b07fddbc32fcb..45b6a38811b6354ecb05478a14e4e8d2db2837a2 100644 --- a/Code/Wrappers/QtWidget/otbWrapperQtWidgetParameterFactory.cxx +++ b/Code/Wrappers/QtWidget/otbWrapperQtWidgetParameterFactory.cxx @@ -29,6 +29,7 @@ #include "otbWrapperQtWidgetChoiceParameter.h" #include "otbWrapperQtWidgetListViewParameter.h" #include "otbWrapperQtWidgetInputImageParameter.h" +#include "otbWrapperQtWidgetInputImageListParameter.h" #include "otbWrapperQtWidgetOutputImageParameter.h" #include "otbWrapperQtWidgetParameterGroup.h" @@ -80,16 +81,17 @@ QtWidgetParameterFactory::CreateQtWidget( Parameter* param, QtWidgetModel* model } if (0) {} - CREATEWIDGET(EmptyParameter, QtWidgetEmptyParameter) - CREATEWIDGET(IntParameter, QtWidgetIntParameter) - CREATEWIDGET(FloatParameter, QtWidgetFloatParameter) - CREATEWIDGET(StringParameter, QtWidgetStringParameter) - CREATEWIDGET(ChoiceParameter, QtWidgetChoiceParameter) - CREATEWIDGET(ListViewParameter, QtWidgetListViewParameter) - CREATEWIDGET(InputImageParameter, QtWidgetInputImageParameter) - CREATEWIDGET(OutputImageParameter, QtWidgetOutputImageParameter) - CREATEWIDGET(EmptyParameter, QtWidgetEmptyParameter) - CREATEWIDGET(ParameterGroup, QtWidgetParameterGroup) + CREATEWIDGET(EmptyParameter, QtWidgetEmptyParameter) + CREATEWIDGET(IntParameter, QtWidgetIntParameter) + CREATEWIDGET(FloatParameter, QtWidgetFloatParameter) + CREATEWIDGET(StringParameter, QtWidgetStringParameter) + CREATEWIDGET(ChoiceParameter, QtWidgetChoiceParameter) + CREATEWIDGET(ListViewParameter, QtWidgetListViewParameter) + CREATEWIDGET(InputImageParameter, QtWidgetInputImageParameter) + CREATEWIDGET(InputImageListParameter, QtWidgetInputImageListParameter) + CREATEWIDGET(OutputImageParameter, QtWidgetOutputImageParameter) + CREATEWIDGET(EmptyParameter, QtWidgetEmptyParameter) + CREATEWIDGET(ParameterGroup, QtWidgetParameterGroup) #undef CREATEWIDGET