// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void DataContainerReader::dataCheck() { // Sync the file proxy and cached proxy if the time stamps are different QFileInfo fi(getInputFile()); if (getInputFile() == getLastFileRead() && getLastRead() < fi.lastModified()) { syncProxies(); } QString ss; if (getInputFile().isEmpty() == true) { ss = QObject::tr("The input file must be set"); setErrorCondition(-387); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } else if (fi.exists() == false) { ss = QObject::tr("The input file does not exist"); setErrorCondition(-388); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } if(getErrorCondition()) { // something has gone wrong and errors were logged alread so just return return; } DataContainerArray::Pointer dca = getDataContainerArray(); // Create a new DataContainerArray to read the file data into DataContainerArray::Pointer tempDCA = DataContainerArray::New(); // Read either the structure or all the data depending on the preflight status readData(getInPreflight(), m_InputFileDataContainerArrayProxy, tempDCA); QList<DataContainer::Pointer>& tempContainers = tempDCA->getDataContainers(); QListIterator<DataContainer::Pointer> iter(tempContainers); while (iter.hasNext()) { DataContainer::Pointer container = iter.next(); if (getOverwriteExistingDataContainers() == true ) { if (dca->doesDataContainerExist(container->getName()) == true) { dca->removeDataContainer(container->getName()); } dca->addDataContainer(container); } else { if (dca->doesDataContainerExist(container->getName()) == true) { ss = QObject::tr("The input file has a DataContainer with a name (%1) that already exists in the current DataContainerArray structure").arg(container->getName()); setErrorCondition(-390); notifyErrorMessage(getHumanLabel(), ss, getErrorCondition()); } else { dca->addDataContainer(container); } } } QMap<QString, IDataContainerBundle::Pointer> bundles = tempDCA->getDataContainerBundles(); dca->setDataContainerBundles(bundles); }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void PhaseTypeSelectionWidget::populateComboBoxes() { // std::cout << "void PhaseTypeSelectionWidget::populateComboBoxesWithSelection()" << std::endl; // Now get the DataContainerArray from the Filter instance // We are going to use this to get all the current DataContainers DataContainerArray::Pointer dca = getFilter()->getDataContainerArray(); if(NULL == dca.get()) { return; } // Grab what is currently selected QString curDcName = dataContainerCombo->currentText(); QString curAmName = attributeMatrixCombo->currentText(); // Check to see if we have any DataContainers to actually populate drop downs with. if(dca->getDataContainers().size() == 0) { dataContainerCombo->clear(); attributeMatrixCombo->clear(); return; } // Cache the DataContainerArray Structure for our use during all the selections m_DcaProxy = DataContainerArrayProxy(dca.get()); // Populate the DataContainerArray Combo Box with all the DataContainers QList<DataContainerProxy> dcList = m_DcaProxy.dataContainers.values(); QListIterator<DataContainerProxy> iter(dcList); dataContainerCombo->clear(); while(iter.hasNext() ) { DataContainerProxy dc = iter.next(); dataContainerCombo->addItem(dc.name); } // Get what is in the filter PhaseTypeSelectionFilterParameter* p = dynamic_cast<PhaseTypeSelectionFilterParameter*>(getFilterParameter()); QVariant qvSelectedPath = getFilter()->property(p->getAttributeMatrixPathProperty().toLatin1().constData()); DataArrayPath selectedPath = qvSelectedPath.value<DataArrayPath>(); QString filtDcName = selectedPath.getDataContainerName(); QString filtAmName = selectedPath.getAttributeMatrixName(); QString dcName; QString amName; // If EVERYTHING is empty, then try the default value if(filtDcName.isEmpty() && filtAmName.isEmpty() && curDcName.isEmpty() && curAmName.isEmpty() ) { DataArrayPath daPath = getFilterParameter()->getDefaultValue().value<DataArrayPath>(); dcName = daPath.getDataContainerName(); amName = daPath.getAttributeMatrixName(); } else { // Now to figure out which one of these to use. If this is the first time through then what we picked up from the // gui will be empty strings because nothing is there. If there is something in the filter then we should use that. // If there is something in both of them and they are NOT equal then we have a problem. Use the flag m_DidCausePreflight // to determine if the change from the GUI should over ride the filter or vice versa. there is a potential that in future // versions that something else is driving DREAM3D and pushing the changes to the filter and we need to reflect those // changes in the GUI, like a testing script? dcName = checkStringValues(curDcName, filtDcName); if( !dca->doesDataContainerExist(dcName) ) { dcName = ""; } amName = checkStringValues(curAmName, filtAmName); if( !dca->doesAttributeMatrixExist(DataArrayPath(dcName, amName, "") ) ) { amName = ""; } } bool didBlock = false; if (!dataContainerCombo->signalsBlocked()) { didBlock = true; } dataContainerCombo->blockSignals(true); int dcIndex = dataContainerCombo->findText(dcName); dataContainerCombo->setCurrentIndex(dcIndex); populateAttributeMatrixList(); if(didBlock) { dataContainerCombo->blockSignals(false); didBlock = false; } if(!attributeMatrixCombo->signalsBlocked()) { didBlock = true; } attributeMatrixCombo->blockSignals(true); if (dcIndex < 0) { attributeMatrixCombo->setCurrentIndex(-1); } else { int amIndex = attributeMatrixCombo->findText(amName); attributeMatrixCombo->setCurrentIndex(amIndex); } if(didBlock) { attributeMatrixCombo->blockSignals(false); didBlock = false; } }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void DataArraySelectionWidget::populateComboBoxes() { //qDebug() << "-----------------------------------------------"; //qDebug() << getFilter()->getHumanLabel() << " " << getFilterParameter()->getHumanLabel() << " DataArraySelectionWidget::populateComboBoxes()"; // Now get the DataContainerArray from the Filter instance // We are going to use this to get all the current DataContainers DataContainerArray::Pointer dca = getFilter()->getDataContainerArray(); if(NULL == dca.get()) { return; } //qDebug() << getFilter()->getHumanLabel() << " " << getFilterParameter()->getHumanLabel(); // Grab what is currently selected QString curDcName = dataContainerCombo->currentText(); QString curAmName = attributeMatrixCombo->currentText(); QString curDaName = attributeArrayCombo->currentText(); //qDebug() << "Current ComboBox Value: " << curDcName << "::" << curAmName << "::" << curDaName; // Check to see if we have any DataContainers to actually populate drop downs with. if(dca->getDataContainers().size() == 0) { dataContainerCombo->clear(); attributeMatrixCombo->clear(); attributeArrayCombo->clear(); return; } // Cache the DataContainerArray Structure for our use during all the selections m_DcaProxy = DataContainerArrayProxy(dca.get()); // Populate the DataContainerArray Combo Box with all the DataContainers QList<DataContainerProxy> dcList = m_DcaProxy.dataContainers.values(); QListIterator<DataContainerProxy> iter(dcList); dataContainerCombo->clear(); while(iter.hasNext() ) { DataContainerProxy dc = iter.next(); dataContainerCombo->addItem(dc.name); // if(dataContainerCombo->findText(dc.name) == -1 ) // { // int index = dataContainerCombo->currentIndex(); // dataContainerCombo->addItem(dc.name); // dataContainerCombo->setCurrentIndex(index); // } } // Get what is in the filter DataArrayPath selectedPath = getFilter()->property(PROPERTY_NAME_AS_CHAR).value<DataArrayPath>(); // Split the path up to make sure we have a valid path separated by the "|" character QString filtDcName = selectedPath.getDataContainerName(); QString filtAmName = selectedPath.getAttributeMatrixName(); QString filtDaName = selectedPath.getDataArrayName(); QString dcName; QString amName; QString daName; // If EVERYTHING is empty, then try the default value if(filtDcName.isEmpty() && filtAmName.isEmpty() && filtDaName.isEmpty() && curDcName.isEmpty() && curAmName.isEmpty() && curDaName.isEmpty() ) { DataArrayPath daPath = getFilterParameter()->getDefaultValue().value<DataArrayPath>(); dcName = daPath.getDataContainerName(); amName = daPath.getAttributeMatrixName(); daName = daPath.getDataArrayName(); } else { // Now to figure out which one of these to use. If this is the first time through then what we picked up from the // gui will be empty strings because nothing is there. If there is something in the filter then we should use that. // If there is something in both of them and they are NOT equal then we have a problem. Use the flag m_DidCausePreflight // to determine if the change from the GUI should over ride the filter or vice versa. there is a potential that in future // versions that something else is driving DREAM3D and pushing the changes to the filter and we need to reflect those // changes in the GUI, like a testing script? dcName = checkStringValues(curDcName, filtDcName); if( !dca->doesDataContainerExist(dcName) ) { dcName = ""; } amName = checkStringValues(curAmName, filtAmName); if ( !dca->doesAttributeMatrixExist(DataArrayPath(dcName, amName, "") ) ) { amName = ""; } daName = checkStringValues(curDaName, filtDaName); if ( !dca->doesAttributeArrayExist(DataArrayPath(dcName, amName, daName) )) { daName = ""; } } bool didBlock = false; if (!dataContainerCombo->signalsBlocked()) { didBlock = true; } dataContainerCombo->blockSignals(true); int dcIndex = dataContainerCombo->findText(dcName); dataContainerCombo->setCurrentIndex(dcIndex); populateAttributeMatrixList(); if(didBlock) { dataContainerCombo->blockSignals(false); didBlock = false; } if(!attributeMatrixCombo->signalsBlocked()) { didBlock = true; } attributeMatrixCombo->blockSignals(true); int amIndex = -1; if (dcIndex < 0) { attributeMatrixCombo->setCurrentIndex(-1); attributeArrayCombo->setCurrentIndex(-1); } else { amIndex = attributeMatrixCombo->findText(amName); attributeMatrixCombo->setCurrentIndex(amIndex); populateAttributeArrayList(); } if(didBlock) { attributeMatrixCombo->blockSignals(false); didBlock = false; } if(!attributeArrayCombo->signalsBlocked()) { didBlock = true; } attributeArrayCombo->blockSignals(true); if (amIndex < 0) { attributeArrayCombo->setCurrentIndex(-1); } else { int daIndex = attributeArrayCombo->findText(daName); // The DataArray Name was empty, lets instantiate the filter and get the default value and try that if (daIndex < 0) { QVariant var = getFilterParameter()->getDefaultValue(); DataArrayPath path = var.value<DataArrayPath>(); daName = path.getDataArrayName(); // Pick up the DataArray Name from a Default instantiation of the filter daIndex = attributeArrayCombo->findText(daName); } attributeArrayCombo->setCurrentIndex(daIndex); // we set the selection but we are NOT triggering anything so we should } if(didBlock) { attributeArrayCombo->blockSignals(false); didBlock = false; }// not be triggering an infinte recursion of preflights }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void AttributeMatrixCreationWidget::populateComboBoxes() { // std::cout << "void AttributeMatrixCreationWidget::populateComboBoxesWithSelection()" << std::endl; // Now get the DataContainerArray from the Filter instance // We are going to use this to get all the current DataContainers DataContainerArray::Pointer dca = getFilter()->getDataContainerArray(); if (NULL == dca.get()) { return; } // Check to see if we have any DataContainers to actually populate drop downs with. if (dca->getDataContainers().size() == 0) { return; } // Cache the DataContainerArray Structure for our use during all the selections m_DcaProxy = DataContainerArrayProxy(dca.get()); // Populate the DataContainer ComboBox FilterPararameterWidgetUtils::PopulateDataContainerComboBox<AttributeMatrixCreationFilterParameter>(getFilter(), getFilterParameter(), dataContainerCombo, m_DcaProxy); // Grab what is currently selected QString curDcName = dataContainerCombo->currentText(); QString curAmName = attributeMatrixName->text(); // Get what is in the filter DataArrayPath selectedPath = getFilter()->property(PROPERTY_NAME_AS_CHAR).value<DataArrayPath>(); // Split the path up to make sure we have a valid path separated by the "|" character QString filtDcName = selectedPath.getDataContainerName(); QString filtAmName = selectedPath.getAttributeMatrixName(); // Now to figure out which one of these to use. If this is the first time through then what we picked up from the // gui will be empty strings because nothing is there. If there is something in the filter then we should use that. // If there is something in both of them and they are NOT equal then we have a problem. Use the flag m_DidCausePreflight // to determine if the change from the GUI should over ride the filter or vice versa. there is a potential that in future // versions that something else is driving SIMPLView and pushing the changes to the filter and we need to reflect those // changes in the GUI, like a testing script? QString dcName = checkStringValues(curDcName, filtDcName); if (!dca->doesDataContainerExist(dcName)) { dcName = ""; } bool didBlock = false; if (!dataContainerCombo->signalsBlocked()) { didBlock = true; } dataContainerCombo->blockSignals(true); int dcIndex = dataContainerCombo->findText(dcName); dataContainerCombo->setCurrentIndex(dcIndex); if (didBlock) { dataContainerCombo->blockSignals(false); didBlock = false; } if (!attributeMatrixName->signalsBlocked()) { didBlock = true; } attributeMatrixName->blockSignals(true); QString amName = checkStringValues(curAmName, filtAmName); attributeMatrixName->setText(amName); if (didBlock) { attributeMatrixName->blockSignals(false); didBlock = false; } }
// ----------------------------------------------------------------------------- // // ----------------------------------------------------------------------------- void DataContainerSelectionWidget::populateComboBoxes() { // std::cout << "void DataContainerSelectionWidget::populateComboBoxesWithSelection()" << std::endl; // Now get the DataContainerArray from the Filter instance // We are going to use this to get all the current DataContainers DataContainerArray::Pointer dca = getFilter()->getDataContainerArray(); if(NULL == dca.get()) { return; } // Check to see if we have any DataContainers to actually populate drop downs with. if(dca->getDataContainers().size() == 0) { return; } // Cache the DataContainerArray Structure for our use during all the selections m_DcaProxy = DataContainerArrayProxy(dca.get()); // Populate the DataContainerArray Combo Box with all the DataContainers QList<DataContainerProxy> dcList = m_DcaProxy.dataContainers.values(); QListIterator<DataContainerProxy> iter(dcList); dataContainerCombo->clear(); while(iter.hasNext() ) { DataContainerProxy dc = iter.next(); dataContainerCombo->addItem(dc.name); // if(dataContainerCombo->findText(dc.name) == -1 ) // { // int index = dataContainerCombo->currentIndex(); // dataContainerCombo->addItem(dc.name); // dataContainerCombo->setCurrentIndex(index); // } } //remove items in the combo that are NOT in the Data Container Array // int count = dataContainerCombo->count(); // for(int i = count - 1; i >= 0; i--) // { // QString str0 = dataContainerCombo->itemText(i); // iter.toFront(); // bool boo = false; // while(iter.hasNext() ) // { // DataContainerProxy dc = iter.next(); // if(dc.name.compare(str0) == 0) // { // boo = true; // found in the list // } // } // if(boo == false) // { // dataContainerCombo->removeItem(i); // } // } // Grab what is currently selected QString curDcName = dataContainerCombo->currentText(); // Get what is in the filter QString filtDcName; QString filtAmName; QVariant qvSelectedPath = getFilter()->property(PROPERTY_NAME_AS_CHAR); if( QString("QString").compare(qvSelectedPath.typeName()) == 0 ) { filtDcName = qvSelectedPath.toString(); } else if( QString("DataArrayPath").compare(qvSelectedPath.typeName()) == 0 ) { DataArrayPath selectedPath = qvSelectedPath.value<DataArrayPath>(); filtDcName = selectedPath.getDataContainerName(); filtAmName = selectedPath.getAttributeMatrixName(); } // Now to figure out which one of these to use. If this is the first time through then what we picked up from the // gui will be empty strings because nothing is there. If there is something in the filter then we should use that. // If there is something in both of them and they are NOT equal then we have a problem. Use the flag m_DidCausePreflight // to determine if the change from the GUI should over ride the filter or vice versa. there is a potential that in future // versions that something else is driving DREAM3D and pushing the changes to the filter and we need to reflect those // changes in the GUI, like a testing script? QString dcName = checkStringValues(curDcName, filtDcName); if( !dca->doesDataContainerExist(dcName) ) { dcName = ""; } bool didBlock = false; if (!dataContainerCombo->signalsBlocked()) { didBlock = true; } dataContainerCombo->blockSignals(true); int dcIndex = dataContainerCombo->findText(dcName); if(dcIndex < 0 && dcName.isEmpty() == false) { dataContainerCombo->addItem(dcName); } else { dataContainerCombo->setCurrentIndex(dcIndex); } if(didBlock) { dataContainerCombo->blockSignals(false); didBlock = false; } }