diff --git a/GUI/coregui/Models/IntensityDataItem.cpp b/GUI/coregui/Models/IntensityDataItem.cpp index ad59b4efc202129257f189cf1deb3f56298137c5..9d525e02d1901e59a1cd87d1e1ef511b3d4139a1 100644 --- a/GUI/coregui/Models/IntensityDataItem.cpp +++ b/GUI/coregui/Models/IntensityDataItem.cpp @@ -35,13 +35,14 @@ const QString IntensityDataItem::P_PROPERTY_PANEL_FLAG = "Property Panel Flag"; const QString IntensityDataItem::P_XAXIS = "x-axis"; const QString IntensityDataItem::P_YAXIS = "y-axis"; const QString IntensityDataItem::P_ZAXIS = "color-axis"; +const QString IntensityDataItem::P_FILE_NAME = "FileName"; const QString IntensityDataItem::T_MASKS = "Mask tag"; IntensityDataItem::IntensityDataItem() : SessionItem(Constants::IntensityDataType) { - setItemName(Constants::IntensityDataType); +// setItemName(Constants::IntensityDataType); ComboProperty units; addProperty(P_AXES_UNITS, units.getVariant())->setVisible(false); @@ -71,6 +72,9 @@ IntensityDataItem::IntensityDataItem() item = addGroupProperty(P_ZAXIS, Constants::AmplitudeAxisType); item->getItem(BasicAxisItem::P_NBINS)->setVisible(false); + // name of the file used to serialize given IntensityDataItem + addProperty(P_FILE_NAME, QStringLiteral("undefined"))->setVisible(false); + registerTag(T_MASKS, 0, -1, QStringList() << Constants::MaskContainerType); setDefaultTag(T_MASKS); } @@ -197,14 +201,6 @@ void IntensityDataItem::setZAxisLocked(bool state) return getItem(P_ZAXIS)->setItemValue(AmplitudeAxisItem::P_LOCK_MIN_MAX, state); } -//! Sets the name of intensity data item from proposed name. This name will be used to save file -//! on disk, so special characters should be removed. -void IntensityDataItem::setNameFromProposed(const QString &proposed_name) -{ - QString valid_name = GUIHelpers::getValidFileName(proposed_name); - setItemName(QString("data_%1_%2.int").arg(valid_name, QString::number(0))); -} - QString IntensityDataItem::getSelectedAxesUnits() const { ComboProperty combo= getItemValue(IntensityDataItem::P_AXES_UNITS) diff --git a/GUI/coregui/Models/IntensityDataItem.h b/GUI/coregui/Models/IntensityDataItem.h index 6e008c7423b3cfd4c87a8d90d08f2d474929b8df..83f7472f33a7339b57a3060ec8b0eeeb5f77404d 100644 --- a/GUI/coregui/Models/IntensityDataItem.h +++ b/GUI/coregui/Models/IntensityDataItem.h @@ -38,8 +38,10 @@ public: static const QString P_XAXIS; static const QString P_YAXIS; static const QString P_ZAXIS; + static const QString P_FILE_NAME; static const QString T_MASKS; + explicit IntensityDataItem(); virtual ~IntensityDataItem(); @@ -77,7 +79,7 @@ public: bool isZAxisLocked() const; void setZAxisLocked(bool state); - void setNameFromProposed(const QString &proposed_name); +// void setNameFromProposed(const QString &proposed_name); virtual QString getSelectedAxesUnits() const; diff --git a/GUI/coregui/Models/JobResultsPresenter.cpp b/GUI/coregui/Models/JobResultsPresenter.cpp index 8b2758e28ff19bf13709f68cfb57879e7d83500a..570e1e6c78618f16823799b456d976be18a79fa0 100644 --- a/GUI/coregui/Models/JobResultsPresenter.cpp +++ b/GUI/coregui/Models/JobResultsPresenter.cpp @@ -103,8 +103,11 @@ void JobResultsPresenter::updateDataAxes(IntensityDataItem *intensityItem, void JobResultsPresenter::saveIntensityData(JobItem *jobItem, const QString &projectDir) { IntensityDataItem *dataItem = jobItem->getIntensityDataItem(); - if (dataItem && dataItem->getOutputData()) { - QString filename = projectDir + QStringLiteral("/") + dataItem->itemName(); + + if(dataItem && dataItem->getOutputData()) { + + QString filename = projectDir + QStringLiteral("/") + + dataItem->getItemValue(IntensityDataItem::P_FILE_NAME).toString(); std::unique_ptr<OutputData<double>> dataToSave( createDetectorMap(jobItem->getInstrumentItem(), IDetector2D::DEFAULT)); diff --git a/GUI/coregui/Models/RealDataModel.cpp b/GUI/coregui/Models/RealDataModel.cpp index 27d8c6228787d8b5574cc185022bdcb8c383d2a9..8f8da6d5c7c47acee94055ee24ec27e1909c02f9 100644 --- a/GUI/coregui/Models/RealDataModel.cpp +++ b/GUI/coregui/Models/RealDataModel.cpp @@ -15,6 +15,10 @@ // ************************************************************************** // #include "RealDataModel.h" +#include "JobResultsPresenter.h" +#include "RealDataItem.h" +#include "IntensityDataItem.h" +#include "IntensityDataIOFactory.h" RealDataModel::RealDataModel(QObject *parent) : SessionModel(SessionXML::RealDataModelTag, parent) @@ -22,3 +26,38 @@ RealDataModel::RealDataModel(QObject *parent) setObjectName(SessionXML::RealDataModelTag); } +//Qt::ItemFlags RealDataModel::flags(const QModelIndex &index) const +//{ +// Qt::ItemFlags result_flags = SessionModel::flags(index); +// result_flags |= Qt::ItemIsEditable; +// return result_flags; +//} + + +//! Loads OutputData from the projectDir to JobItem + +void RealDataModel::loadNonXMLData(const QString &projectDir) +{ +// for (int i = 0; i < rowCount(QModelIndex()); ++i) { +// JobItem *jobItem = getJobItemForIndex(index(i, 0, QModelIndex())); +// JobResultsPresenter::loadIntensityData(jobItem, projectDir); +// } + +} + +//! Saves JobItem's OutputData to the projectDir + +void RealDataModel::saveNonXMLData(const QString &projectDir) +{ + for (int i = 0; i < rowCount(QModelIndex()); ++i) { + SessionItem *realDataItem = itemForIndex(index(i, 0, QModelIndex())); + Q_ASSERT(realDataItem); + if(IntensityDataItem *intensityItem = dynamic_cast<IntensityDataItem *>( + realDataItem->getItem(RealDataItem::T_INTENSITY_DATA))) { + QString filename = projectDir + QStringLiteral("/") + + intensityItem->getItemValue(IntensityDataItem::P_FILE_NAME).toString(); + IntensityDataIOFactory::writeOutputData( + *intensityItem->getOutputData(), filename.toStdString()); + } + } +} diff --git a/GUI/coregui/Models/RealDataModel.h b/GUI/coregui/Models/RealDataModel.h index 1e26edf0ee3ba679ba710c0cee9273d01461910e..1d368c28ca8700d822d75c38e5dc0864567efde2 100644 --- a/GUI/coregui/Models/RealDataModel.h +++ b/GUI/coregui/Models/RealDataModel.h @@ -19,12 +19,18 @@ #include "SessionModel.h" +//! The RealDataModel class is a model to store all imported RealDataItem's. + class BA_CORE_API_ RealDataModel : public SessionModel { Q_OBJECT public: explicit RealDataModel(QObject *parent = 0); +// Qt::ItemFlags flags(const QModelIndex &index) const; + + void loadNonXMLData(const QString &projectDir); + void saveNonXMLData(const QString &projectDir); }; diff --git a/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp b/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp index 3790edad240ee5105cce28cb57d894c6d46eae58..e766c4f4cd32de997d167738f7f8e3e1df03f35f 100644 --- a/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp +++ b/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.cpp @@ -29,7 +29,7 @@ const QString filter_string = "Intensity File (*.int *.int.gz *.tif *.tif.gz *.t "Other (*)"; } -OutputData<double> *ImportDataAssistant::importData() +OutputData<double> *ImportDataAssistant::importData(QString &baseNameOfLoadedFile) { QString dirname = AppSvc::projectManager()->userImportDir(); QString fileName = QFileDialog::getOpenFileName(0, @@ -38,6 +38,9 @@ OutputData<double> *ImportDataAssistant::importData() if(fileName.isEmpty()) return nullptr; + QFileInfo info(fileName); + baseNameOfLoadedFile = info.baseName(); + QString newImportDir = GUIHelpers::fileDir(fileName); if(newImportDir != dirname) AppSvc::projectManager()->setImportDir(newImportDir); diff --git a/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.h b/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.h index 2665ec60b73c13b52dc59d77d2a356f810f1146c..6685384224a70933bf80eb223b1fcb6ff96af00e 100644 --- a/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.h +++ b/GUI/coregui/Views/ImportDataWidgets/ImportDataAssistant.h @@ -26,7 +26,7 @@ template <class T> class OutputData; class BA_CORE_API_ ImportDataAssistant { public: - OutputData<double> *importData(); + OutputData<double> *importData(class QString &baseNameOfLoadedFile); }; diff --git a/GUI/coregui/Views/ImportDataWidgets/ImportDataToolBar.cpp b/GUI/coregui/Views/ImportDataWidgets/ImportDataToolBar.cpp index bc29b4b0a66e5d5ce6c9aaf7421667255ac65e18..fc21a131a5c0093db5f2a4d55fa0f5f2e97e9b46 100644 --- a/GUI/coregui/Views/ImportDataWidgets/ImportDataToolBar.cpp +++ b/GUI/coregui/Views/ImportDataWidgets/ImportDataToolBar.cpp @@ -72,12 +72,16 @@ void ImportDataToolBar::onImportDataAction() qDebug() << "ImportDataToolBar::onImportDataAction()"; Q_ASSERT(m_model); ImportDataAssistant assistant; - if(OutputData<double> *data = assistant.importData()) { + QString baseNameOfImportedFile; + if(OutputData<double> *data = assistant.importData(baseNameOfImportedFile)) { SessionItem *realDataItem = m_model->insertNewItem(Constants::RealDataType); - IntensityDataItem *intensityDataItem = dynamic_cast<IntensityDataItem *>(m_model->insertNewItem(Constants::IntensityDataType, realDataItem->index())); + realDataItem->setItemName(baseNameOfImportedFile); + IntensityDataItem *intensityDataItem = dynamic_cast<IntensityDataItem *>( + m_model->insertNewItem(Constants::IntensityDataType, realDataItem->index())); intensityDataItem->setOutputData(data); m_selectionModel->clearSelection(); m_selectionModel->select(realDataItem->index(), QItemSelectionModel::Select); + qDebug() << "baseNameOfImportedFile" << baseNameOfImportedFile; } } diff --git a/GUI/coregui/mainwindow/projectdocument.cpp b/GUI/coregui/mainwindow/projectdocument.cpp index 79f3a56c513e7909b56e6ffb6749f3766183bf36..ea5eb0c479fa9b451797c9f31d108aff978b5dcb 100644 --- a/GUI/coregui/mainwindow/projectdocument.cpp +++ b/GUI/coregui/mainwindow/projectdocument.cpp @@ -30,6 +30,7 @@ #include "MessageContainer.h" #include "GUIHelpers.h" #include "JobResultsPresenter.h" +#include "GUIHelpers.h" #include <QFile> #include <QTextStream> #include <QFileInfo> @@ -282,14 +283,16 @@ void ProjectDocument::reviseOutputData() if (dataItem) { // handling case when user has renamed jobItem and we have to clean previous // *.int file - QString filename = getProjectDir() + "/" + dataItem->itemName(); + QString filename = getProjectDir() + QStringLiteral("/") + + dataItem->getItemValue(IntensityDataItem::P_FILE_NAME).toString(); QFile fin(filename); if (fin.exists()) { fin.remove(); } // making new name of *.int file from jobItem name - dataItem->setNameFromProposed(jobItem->itemName()); + QString newFileName = GUIHelpers::getIntensityFileName(QString("data_%1").arg(jobItem->itemName())); + dataItem->setItemValue(IntensityDataItem::P_FILE_NAME, newFileName); } } } diff --git a/GUI/coregui/utils/GUIHelpers.cpp b/GUI/coregui/utils/GUIHelpers.cpp index 0d97479e734213a94c442647239c1647c680a07f..7e5e6709f3a30805935ea973e092f728513ef2d5 100644 --- a/GUI/coregui/utils/GUIHelpers.cpp +++ b/GUI/coregui/utils/GUIHelpers.cpp @@ -152,6 +152,12 @@ QString getValidFileName(const QString &proposed_name) return result; } +QString getIntensityFileName(const QString &proposed_name) +{ + QString valid_name = GUIHelpers::getValidFileName(proposed_name); + return QString("%1_%2.int.gz").arg(valid_name, QString::number(0)); +} + //! parses version string into 3 numbers, returns true in the case of success bool parseVersion(const QString &version, int &major_num, int &minor_num, int &patch_num) { @@ -195,4 +201,5 @@ QString fileDir(const QString &fileName) return QString(); } + } // namespace GUIHelpers diff --git a/GUI/coregui/utils/GUIHelpers.h b/GUI/coregui/utils/GUIHelpers.h index 241ce0e17d3c0da9155393bea8e2dc3e9b951b9e..cb08cc3fc81e8fff66c8b697cccc7685805da73d 100644 --- a/GUI/coregui/utils/GUIHelpers.h +++ b/GUI/coregui/utils/GUIHelpers.h @@ -57,6 +57,9 @@ BA_CORE_API_ QString getBornAgainVersionString(); BA_CORE_API_ QString getValidFileName(const QString &proposed_name); +BA_CORE_API_ QString getIntensityFileName(const QString &proposed_name); + + BA_CORE_API_ QString fileDir(const QString &fileName); BA_CORE_API_ bool parseVersion(const QString &version, int &major_num, int &minor_num, int &patch_num);