29 #include <QApplication>
30 #include <QFileDialog>
31 #include <QItemSelectionModel>
37 #include <QVBoxLayout>
41 , m_itemTree(new QTreeView)
44 , m_import2dDataAction(new QAction(this))
45 , m_import1dDataAction(new QAction(this))
46 , m_renameDataAction(new QAction(this))
47 , m_removeDataAction(new QAction(this))
48 , m_rotateDataAction(new QAction(this))
50 setMinimumSize(128, 600);
51 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
52 setWindowTitle(
"RealDataSelectorWidget");
98 toolBar->setMinimumSize(toolBar->minimumHeight(), toolBar->minimumHeight());
99 toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
110 m_itemTree->setContextMenuPolicy(Qt::CustomContextMenu);
113 auto splitter =
new QSplitter;
114 splitter->setOrientation(Qt::Vertical);
117 splitter->setChildrenCollapsible(
true);
119 auto mainLayout =
new QVBoxLayout;
120 mainLayout->setMargin(0);
121 mainLayout->setSpacing(0);
122 mainLayout->setContentsMargins(0, 0, 0, 0);
123 mainLayout->addWidget(toolBar);
124 mainLayout->addWidget(splitter);
125 setLayout(mainLayout);
127 connect(
m_itemTree, &QTreeView::customContextMenuRequested,
this,
135 return QSize(200, 400);
140 return QSize(128, 200);
153 connect(
m_itemTree->selectionModel(), &QItemSelectionModel::selectionChanged,
this,
164 m_itemTree->selectionModel()->clearSelection();
167 m_itemTree->selectionModel()->setCurrentIndex(index, QItemSelectionModel::SelectCurrent);
172 return m_itemTree->selectionModel()->currentIndex();
188 menu.setToolTipsVisible(
true);
190 if (realDataItemAtPoint !=
nullptr) {
193 if (realDataItemAtPoint->isIntensityData())
205 QMap<QString, AbstractDataLoader*> loaderOfFilter;
207 QString selectedFilter;
209 filters =
"Intensity File (*.int *.gz *.tif *.tiff *.txt *.csv);;"
214 const QString filter =
216 +
" (*.txt *.csv *.dat)";
217 loaderOfFilter[filter] = loader;
219 if (!filters.isEmpty())
223 filters +=
";;Other (*.*)";
228 QStringList fileNames = QFileDialog::getOpenFileNames(Q_NULLPTR,
"Open Intensity Files",
229 dirname, filters, &selectedFilter);
231 if (fileNames.isEmpty())
235 if (newImportDir != dirname)
243 for (
const auto& fileName : fileNames) {
244 QFileInfo info(fileName);
245 auto baseNameOfLoadedFile = info.baseName();
251 realDataItem->
setName(baseNameOfLoadedFile);
252 realDataItem->setOutputData(data.release());
255 }
else if (ndim == 1) {
257 realDataItem->
setName(baseNameOfLoadedFile);
258 realDataItem->setNativeFileName(fileName);
261 loaderOfFilter.value(selectedFilter,
nullptr);
263 if (errorText.isEmpty())
269 QString(
"The file '%1' could not be imported.")
270 .arg(QDir::toNativeSeparators(fileName)),
296 const QString title(
"Rotate data");
297 const QString message(
"Rotation will break the link between the data and the instrument. "
298 "Detector masks or projections, if they exist, will be removed.");
300 "Do you wish to rotate the data?",
"Yes, please rotate",
301 "No, cancel data rotation"))
305 QApplication::setOverrideCursor(Qt::WaitCursor);
307 QApplication::restoreOverrideCursor();
Defines class DataLoaders1D.
Defines namespace DataUtils.
Defines class GUIHelpers functions.
Defines class MainWindow.
Defines class ProjectManager.
Defines ImportDataUtils namespace.
Defines class QREDataLoader.
Defines class RealDataItem.
Defines class RealDataModel.
Defines class RealDataTreeModel.
Base class for all data loaders (classes which can import real data)
static ProjectManager * projectManager()
static DataLoaders1D & instance()
The one and only instance.
static MainWindow * instance()
Returns the one and only instance of this class.
void setRecentlyUsedImportFilter1D(const QString &filter)
QString recentlyUsedImportFilter2D() const
void setRecentlyUsedImportFilter2D(const QString &filter)
void setImportDir(const QString &dirname)
Sets user import directory in system settings.
QString userImportDir() const
Returns directory name which was used by the user to import files.
QString recentlyUsedImportFilter1D() const
The RealDataItem class represents intensity data imported from file and intended for fitting.
bool isIntensityData() const
void setName(const QString &name)
The RealDataModel class is a model to store all imported RealDataItem's.
Tree model for real data item selection. Used for the tree in the import view.
QModelIndex indexForItem(RealDataItem *item) const
void setRealDataModel(RealDataModel *model)
RealDataItem * insertIntensityDataItem()
RealDataItem * topMostItem() const
The topmost visible item. Can be null of course.
RealDataItem * insertSpecularDataItem()
RealDataItem * itemForIndex(const QModelIndex &index) const
void removeItem(RealDataItem *item)
void warning(QWidget *parent, const QString &title, const QString &text, const QString &detailedText)
QString fileDir(const QString &fileName)
Returns file directory from the full file path.
bool question(QWidget *parent, const QString &title, const QString &text, const QString &detailedText, const QString &yesText, const QString &noText)
QString Import1dData(RealDataItem *realDataItem, const AbstractDataLoader *selectedLoader)
Import 1D data into the given item.
std::unique_ptr< OutputData< double > > Import2dData(const QString &baseNameOfLoadedFile)