19 #include <QFileDialog>
20 #include <QFormLayout>
23 #include <QMessageBox>
24 #include <QPushButton>
26 #include <QTableWidget>
27 #include <QVBoxLayout>
32 const QSize default_dialog_size(300, 400);
38 , m_tableWidget(nullptr)
39 , m_separatorField(nullptr)
40 , m_firstDataRowSpinBox(nullptr)
41 , m_lastDataRowSpinBox(nullptr)
42 , m_coordinateUnitsComboBox(nullptr)
43 , m_importButton(nullptr)
44 , m_cancelButton(nullptr)
45 , m_errorLabel(nullptr)
47 setWindowTitle(
"Data Importer");
48 setMinimumSize(default_dialog_size);
50 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
60 size_t lastRow =
m_data.size();
88 auto row = item->row();
89 auto col = item->column();
112 contextMenu.exec(globalPos);
124 "Data selected for importing does not look good!\n\n"
126 " 1. There are no repeated values in the coordinate column.\n"
127 " 2. The coordinate values are ascendingly sorted.\n"
128 " 3. Intensity and coordinate values are valid numbers.\n\n"
129 "Use the context menu of the table to manually discard some rows;\n"
130 "Alternatively, modify the file in an external editor.");
160 for (
auto units : available_units)
180 auto desiredVal = row + 1;
181 auto newMax = std::max(currentMax, desiredVal);
194 auto desiredVal = row + 1;
195 auto newMin = std::min(currentMin, desiredVal);
236 return Axes::Units::NBINS;
243 if (tmpstr.size() < 1) {
268 m_tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
269 connect(
m_tableWidget, &QTableWidget::customContextMenuRequested,
this,
289 connect(
m_cancelButton, &QPushButton::clicked,
this, [
this]() { reject(); });
331 auto layout =
new QVBoxLayout;
332 layout->setContentsMargins(0, 0, 0, 0);
335 auto separatorFieldLayout =
new QFormLayout;
339 auto tableLayout =
new QVBoxLayout;
340 tableLayout->setMargin(10);
341 tableLayout->addWidget(
new QLabel(
"Right click on the table to select what will be imported"));
343 tableLayout->addLayout(separatorFieldLayout);
344 tableLayout->addLayout(separatorFieldLayout);
348 auto rowControlsLayout =
new QFormLayout;
349 auto* rowControlsGroupBox =
new QGroupBox;
352 rowControlsLayout->setMargin(10);
353 rowControlsGroupBox->setTitle(tr(
"&Data rows:"));
354 rowControlsGroupBox->setLayout(rowControlsLayout);
357 auto unitSelectionLayout =
new QFormLayout;
359 unitSelectionLayout->setMargin(10);
362 auto buttonsLayout =
new QHBoxLayout;
367 auto controlsAndButtonsGrid =
new QGridLayout;
368 controlsAndButtonsGrid->setMargin(10);
369 controlsAndButtonsGrid->addItem(
new QSpacerItem(10000, 1), 1, 1, 2, 1);
370 controlsAndButtonsGrid->addWidget(rowControlsGroupBox, 1, 2, 1, 1, Qt::AlignRight);
371 controlsAndButtonsGrid->addLayout(unitSelectionLayout, 2, 2, Qt::AlignRight);
372 controlsAndButtonsGrid->addLayout(buttonsLayout, 3, 2, 1, 1, Qt::AlignRight);
375 layout->addLayout(separatorFieldLayout);
376 layout->addLayout(tableLayout);
377 layout->addLayout(controlsAndButtonsGrid);
Defines class DataSelector.
const std::map< Axes::Units, const char * > axisUnitLabel
DefinesStyleUtils namespace.
static void showErrorMessage(std::string message)
int intensityColumn() const
int coordinateColumn() const
std::set< int > selectedRows() const
void setLastRow(size_t row)
bool dataLooksGood() const
void discardRows(std::set< int > rows)
void setData(csv::DataArray data)
int selectedColumn() const
void setColumnAs(int col, csv::ColumnType type)
QList< QString > availableCoordinateUnits() const
void setFirstRow(size_t row)
bool isInsideTable(QPoint point)
void setColumnSlot(csv::ColumnType ct)
Axes::Units units() const
QLineEdit * m_separatorField
void populateUnitsComboBox()
void setColumnAs(csv::ColumnType coordOrInt)
QPushButton * m_importButton
QComboBox * m_coordinateUnitsComboBox
QSpinBox * m_firstDataRowSpinBox
void separatorChanged(char newSeparator)
DataSelector(csv::DataArray csvArray, QWidget *parent=nullptr)
QSpinBox * m_lastDataRowSpinBox
void onColumnRightClick(const QPoint &position)
QBoxLayout * createLayout()
QPushButton * m_cancelButton
CsvImportTable * m_tableWidget
Defines namespace Constants.
void setResizable(QDialog *dialog)
Make modal dialog resizable.
const QStringList UnitsLabels
std::vector< std::vector< std::string > > DataArray