26 #include <QApplication>
28 #include <QDialogButtonBox>
30 #include <QMessageBox>
31 #include <QPushButton>
34 #include <QVBoxLayout>
43 template <
typename T>
void invoke_and_catch(T method)
45 QApplication::setOverrideCursor(Qt::WaitCursor);
48 QApplication::restoreOverrideCursor();
49 }
catch (
const std::exception& ex) {
50 QApplication::restoreOverrideCursor();
54 QString(
"Exception was thrown while trying to load files\n\n%1").arg(ex.what());
55 msgBox.setText(message);
56 msgBox.setIcon(msgBox.Critical);
61 const QString dialogsize_key =
"dialogsize";
62 const QString splittersize_key =
"splittersize";
64 const QString dialogsize_setting_name()
69 const QString splittersize_setting_name()
76 std::string createImportDescription(
const QString& file_name,
const ColumnInfo& axis_info,
77 const ColumnInfo& intensity_info)
79 std::ostringstream ostr;
81 ostr <<
"columns: (" << axis_info.column <<
", " << intensity_info.column <<
")";
92 , m_splitter(new QSplitter)
99 auto button_box =
new QDialogButtonBox;
100 auto button = button_box->addButton(
"Import data", QDialogButtonBox::AcceptRole);
101 button->setAutoDefault(
false);
102 button->setDefault(
false);
104 button = button_box->addButton(
"Cancel", QDialogButtonBox::RejectRole);
105 button->setAutoDefault(
false);
106 button->setDefault(
false);
109 connect(button_box, &QDialogButtonBox::rejected,
this, &DataLoaderDialog::reject);
111 auto layout =
new QVBoxLayout(
this);
114 layout->addWidget(button_box);
117 setWindowTitle(
"Data import dialog");
165 if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)
167 QDialog::keyPressEvent(event);
182 auto update_raw_data = [
this]() {
186 invoke_and_catch(update_raw_data);
194 if (selected_files.empty()) {
199 auto data_to_parse =
m_dataHandler->textData(selected_files.back().toStdString());
203 parser->process(data_to_parse);
218 parser->process(data_to_parse);
219 auto parsed_text = parser->parsedData();
224 data.graph_description = createImportDescription(
name, axis_info, intensity_info);
236 if (settings.contains(dialogsize_setting_name()))
237 resize(settings.value(dialogsize_setting_name(), QSize(800, 600)).toSize());
239 if (settings.contains(splittersize_setting_name())) {
240 QStringList splitter_sizes = QStringList() <<
"400"
242 splitter_sizes = settings.value(splittersize_setting_name(), splitter_sizes).toStringList();
244 for (
auto num : splitter_sizes)
245 sizes.push_back(num.toInt());
255 settings.setValue(dialogsize_setting_name(), size());
257 QStringList splitter_sizes;
259 splitter_sizes.push_back(QString::number(x));
260 settings.setValue(splittersize_setting_name(), splitter_sizes);
Handles raw data during the life time of DataHandlerDialog.
LoaderSelectorPanel * m_selectorPanel
void readSettings()
Reads dialog settings.
std::vector< GraphImportData > m_graphImportData
void onLoadFilesRequest()
Loads ASCII data from all files in a list.
void keyPressEvent(QKeyEvent *event) override
Make dialog intact to enter-key to handle it by LoadSelectorPanel.
void onParseAllRequest()
Parse all string data and generate graph data.
int targetCanvasIndex() const
Returns index of target canvas for graph import.
void setTargetCanvas(const std::vector< std::string > &canvas_names, int current_index)
Set list of target canvas to define entr where to import.
LoaderPreviewPanel * m_previewPanel
QStringList fileNames() const
void writeSettings()
Writes dialog settings.
DataLoaderToolBar * m_toolBar
std::unique_ptr< DataHandler > m_dataHandler
std::vector< GraphImportData > graphImportData() const
Returns the result of whole parsing.
void initConnections()
Init interconnections of all widgets.
void onShowFilePreviewRequest()
Show content of selected file in text/table views.
void invokeFileSelectorDialog()
Invokes file selector dialog.
DataLoaderDialog(QWidget *parent=nullptr)
Panel with settings for DataLoaderDialog.
void showData(const ParserInterface *parser)
Sets raw text to the TextView.
std::vector< ColumnInfo > columnInfo() const
Panel with settings for DataLoaderDialog.
std::unique_ptr< ParserInterface > createParser() const
QStringList fileNames() const
void parserPropertyChanged()
QStringList selectedFileNames() const
void fileNamesChanged(const QStringList &file_names)
void setTargetCanvas(const QStringList &canvas_names, int current_index)
void fileSelectionChanged(const QStringList &file_names)
void onRemoveFileRequest()
int targetCanvasIndex() const
MVVM_VIEW_EXPORT QString WithTildeHomePath(const QString &path)
Returns a string where Linux path to the file is striped using '~/'.
MVVM_VIEW_EXPORT QStringList toStringList(const std::vector< std::string > &vec)
Converts vector of strings to QStringList.
MVVM_VIEW_EXPORT std::vector< std::string > fromStringList(const QStringList &string_list)
Converts vector of strings to QStringList.
QString const & name(EShape k)
const QString DataLoaderGroupKey
Constants for QSettings.
DAREFLCORE_EXPORT std::vector< std::pair< ColumnInfo, ColumnInfo > > CreateGraphInfoPairs(const std::vector< ColumnInfo > &column_info)
Pack ColumnInfo into pairs representing {AxisType, IntensityType}.
DAREFLCORE_EXPORT GraphImportData CreateData(const std::vector< std::vector< std::string >> &text_data, const ColumnInfo &axis, const ColumnInfo &intensity)
Creates structure from text data.
Based on Qt example "codeeditor" Copyright (C) 2016 The Qt Company Ltd.