00001 #include "DescriptorChooserPresenter.h"
00002 #include "DescriptorChooserPresenter.moc"
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 DescriptorChooserPresenter::DescriptorChooserPresenter(ParameterWidget* chooser):
00035 m_chooser(chooser),
00036 m_currentDescriptorPresenter(NULL)
00037 {
00038 m_chooser->addEnumParameter("descriptor", "Type of descriptor");
00039 syncronize();
00040 reconnect();
00041 }
00042
00043
00044 void DescriptorChooserPresenter::insertDescriptor(const QString& name, DescriptorPresenter* descriptor){
00045 m_descriptorPresenterNames.push_back(name);
00046 m_descriptorPresenters.push_back(descriptor);
00047 m_chooser->insertEnumValue("descriptor", name);
00048 if(m_descriptorPresenters.size() == 1){
00049 m_currentDescriptorPresenter = descriptor;
00050 m_currentDescriptorPresenterIndex = 0;
00051 connect(m_currentDescriptorPresenter, SIGNAL(descriptorChanged()), this, SIGNAL(descriptorChanged()));
00052 m_currentDescriptorPresenter->activate();
00053 } else{
00054 descriptor->deactivate();
00055 m_currentDescriptorPresenter->activate();
00056 }
00057 }
00058
00059 void DescriptorChooserPresenter::setChooser(ParameterWidget* chooser){
00060 disconnect(m_chooser, 0, this, 0);
00061 m_chooser = chooser;
00062 m_chooser->clearParameterMap();
00063 m_chooser->addEnumParameter("descriptor", "Type of descriptor");
00064 syncronize();
00065 reconnect();
00066 }
00067
00068 void DescriptorChooserPresenter::changeParameter(const QString& name){
00069 if(!QString::compare(name, "descriptor")){
00070 int guiValue;
00071 bool valid = m_chooser->getEnumValue("descriptor", guiValue);
00072 if(valid) {changeDescriptor(guiValue);}
00073 }
00074 }
00075
00076 void DescriptorChooserPresenter::changeDescriptor(int descriptor){
00077 if(m_currentDescriptorPresenterIndex != descriptor){
00078 disconnect(m_currentDescriptorPresenter, SIGNAL(descriptorChanged()), this, SIGNAL(descriptorChanged()));
00079 m_currentDescriptorPresenter->deactivate();
00080 m_currentDescriptorPresenterIndex = descriptor;
00081 m_currentDescriptorPresenter = m_descriptorPresenters[m_currentDescriptorPresenterIndex];
00082 m_chooser->setEnumValue("descriptor", m_currentDescriptorPresenterIndex);
00083 m_currentDescriptorPresenter->activate();
00084 connect(m_currentDescriptorPresenter, SIGNAL(descriptorChanged()), this, SIGNAL(descriptorChanged()));
00085 emit descriptorChanged();
00086 }
00087 }
00088
00089
00090 void DescriptorChooserPresenter::syncronize(){
00091 if(m_descriptorPresenters.size()){
00092 m_chooser->clearEnumParameter("descriptor");
00093 for(int i = 0; i < m_descriptorPresenterNames.size(); i++){
00094 m_chooser->insertEnumValue("descriptor", m_descriptorPresenterNames[i]);
00095 }
00096 m_chooser->setEnumValue("descriptor", m_currentDescriptorPresenterIndex);
00097 m_currentDescriptorPresenter->activate();
00098 }
00099 }
00100
00101 void DescriptorChooserPresenter::reconnect(){
00102 connect(m_chooser, SIGNAL(parameterChanged(const QString&)), this, SLOT(changeParameter(const QString&)));
00103 }