19 #include <QButtonGroup>
22 #include <QGridLayout>
26 #include <QRadioButton>
27 #include <QRegExpValidator>
29 #include <QVBoxLayout>
34 QWidget* createSectionWidget(
const QString& text)
36 auto widget =
new QWidget;
37 auto layout =
new QVBoxLayout(widget);
38 layout->addSpacing(10);
39 auto label =
new QLabel(text);
40 QFont font = label->font();
43 layout->addWidget(label);
47 const QString separatorgroupid_setting_name()
49 const QString key =
"separatorgroup_id";
53 const QString customseparatortext_setting_name()
55 const QString key =
"customseparator_text";
65 auto layout =
new QVBoxLayout(
this);
67 layout->addStretch(1);
85 return std::make_unique<DefaultParser>(options);
111 if (settings.contains(separatorgroupid_setting_name())) {
112 int button_id = settings.value(separatorgroupid_setting_name()).toInt();
118 if (settings.contains(customseparatortext_setting_name()))
120 settings.value(customseparatortext_setting_name()).
toString());
135 auto grid_layout =
new QGridLayout;
150 for (
int col = 0; col < grid_layout->columnCount(); ++col)
151 grid_layout->setColumnStretch(col, 10);
152 grid_layout->setColumnStretch(0, 0);
159 int row = layout->rowCount();
160 layout->addWidget(createSectionWidget(text), row, 0, 1, 3, Qt::AlignLeft);
168 int row = layout->rowCount();
169 auto automaticRadio =
new QRadioButton;
170 automaticRadio->setChecked(
true);
171 automaticRadio->setText(
"Automatic");
172 automaticRadio->setToolTip(
"Try to guess column separator");
173 connect(automaticRadio, &QRadioButton::clicked, [
this](
auto) {
179 auto spaceRadio =
new QRadioButton;
180 spaceRadio->setText(
"Space");
181 spaceRadio->setToolTip(
"Use empty space as column separator");
182 connect(spaceRadio, &QRadioButton::clicked, [
this](
auto) {
188 auto commaRadio =
new QRadioButton;
189 commaRadio->setText(
"Comma");
190 commaRadio->setToolTip(
"Use comma as column separator");
191 connect(commaRadio, &QRadioButton::clicked, [
this](
auto) {
197 layout->addWidget(
new QLabel(
" "), row, 0, Qt::AlignLeft);
198 layout->addWidget(automaticRadio, row, 1, Qt::AlignLeft);
199 layout->addWidget(spaceRadio, row, 2, Qt::AlignLeft);
200 layout->addWidget(commaRadio, row, 3, Qt::AlignLeft);
201 group->addButton(automaticRadio,
AUTOMATIC);
202 group->addButton(spaceRadio,
SPACE);
203 group->addButton(commaRadio,
COMMA);
210 int row = layout->rowCount();
212 auto customRadio =
new QRadioButton;
215 customRadio->setText(
"Custom");
216 customRadio->setToolTip(
"Use given symbols as column separator");
217 auto on_custom_separator = [
this](
auto) {
221 connect(customRadio, &QRadioButton::clicked, on_custom_separator);
226 auto on_custom_lineedit = [
this, customRadio]() {
227 if (customRadio->isChecked())
234 layout->addWidget(
new QLabel(
" "), row, 0, Qt::AlignLeft);
235 layout->addWidget(customRadio, row, 1, Qt::AlignLeft);
237 group->addButton(customRadio,
CUSTOM);
244 auto startingWithRadio =
new QRadioButton;
245 auto startingFromLineEdit =
new QLineEdit;
248 int row = layout->rowCount();
249 startingWithRadio->setText(
"Starting with");
250 startingWithRadio->setAutoExclusive(
false);
251 startingWithRadio->setChecked(
true);
252 startingWithRadio->setToolTip(
"Ignore lines starting with a given character(s)");
253 auto on_startingfrom_radio = [
this, startingFromLineEdit](
auto checked) {
255 checked ? startingFromLineEdit->text().toStdString() : std::string();
258 connect(startingWithRadio, &QRadioButton::clicked, on_startingfrom_radio);
261 startingFromLineEdit->setText(
"#");
262 startingFromLineEdit->setToolTip(
"Ignore lines starting with a given character(s)");
263 auto on_startingfrom_lineedit = [
this, startingWithRadio, startingFromLineEdit]() {
264 if (startingWithRadio->isChecked())
268 connect(startingFromLineEdit, &QLineEdit::editingFinished, on_startingfrom_lineedit);
271 layout->addWidget(
new QLabel(
" "), row, 0, Qt::AlignLeft);
272 layout->addWidget(startingWithRadio, row, 1, Qt::AlignLeft);
273 layout->addWidget(startingFromLineEdit, row, 2, Qt::AlignLeft);
280 auto lineNumbersRadio =
new QRadioButton;
281 auto lineNumbersLineEdit =
new QLineEdit;
284 int row = layout->rowCount();
285 lineNumbersRadio->setAutoExclusive(
false);
286 lineNumbersRadio->setText(
"Line numbers");
287 lineNumbersRadio->setToolTip(
"Ignore lines with line numbers matching the pattern");
288 auto on_linenumbers_radio = [
this, lineNumbersLineEdit](
auto checked) {
290 checked ? lineNumbersLineEdit->text().toStdString() : std::string();
293 connect(lineNumbersRadio, &QRadioButton::clicked, on_linenumbers_radio);
296 lineNumbersLineEdit->setPlaceholderText(
"Example: 1-5,42");
297 lineNumbersLineEdit->setToolTip(
"Ignore lines with line numbers matching the pattern");
298 auto on_linenumbers_lineedit = [
this, lineNumbersRadio, lineNumbersLineEdit]() {
299 if (lineNumbersRadio->isChecked())
303 connect(lineNumbersLineEdit, &QLineEdit::editingFinished, on_linenumbers_lineedit);
306 layout->addWidget(
new QLabel(
" "), row, 0, Qt::AlignLeft);
307 layout->addWidget(lineNumbersRadio, row, 1, Qt::AlignLeft);
308 layout->addWidget(lineNumbersLineEdit, row, 2, Qt::AlignLeft);
311 auto validator =
new QRegExpValidator(QRegExp(
"^[0-9,-]*$"),
this);
312 lineNumbersLineEdit->setValidator(validator);
319 auto newCanvasRadio =
new QRadioButton;
320 auto existingCanvasRadio =
new QRadioButton;
324 newCanvasRadio->setText(
"New canvas");
325 newCanvasRadio->setChecked(
true);
326 newCanvasRadio->setToolTip(
"Data will be imported into the new canvas");
327 auto on_newcanvas_radio = [
this](
auto checked) {
331 connect(newCanvasRadio, &QRadioButton::clicked, on_newcanvas_radio);
333 existingCanvasRadio->setText(
"Existing canvas");
334 existingCanvasRadio->setToolTip(
"Data will be imported into existing canvas");
335 auto on_existingcanvas_radio = [
this](
auto checked) {
339 connect(existingCanvasRadio, &QRadioButton::clicked, on_existingcanvas_radio);
343 auto on_canvas_combo = [
this, existingCanvasRadio](
int index) {
344 if (existingCanvasRadio->isChecked())
348 static_cast<void (QComboBox::*)(
int)
>(&QComboBox::currentIndexChanged),
352 int row = layout->rowCount();
353 layout->addWidget(
new QLabel(
" "), row, 0, Qt::AlignLeft);
354 layout->addWidget(newCanvasRadio, row, 1, Qt::AlignLeft);
355 row = layout->rowCount();
356 layout->addWidget(
new QLabel(
" "), row, 0, Qt::AlignLeft);
357 layout->addWidget(existingCanvasRadio, row, 1, Qt::AlignLeft);
359 auto buttonGroup =
new QButtonGroup(
this);
360 buttonGroup->addButton(newCanvasRadio);
361 buttonGroup->addButton(existingCanvasRadio);
MVVM_VIEW_EXPORT int WidthOfLetterM()
Returns width of the letter 'M' deduced from current font metrics.
MVVM_VIEW_EXPORT int SystemPointSize()
Returns size in points of default system font.
std::string toString(PyObject *obj)
Converts PyObject into string, if possible, or throws exception.
const QString ParserPropertyGroupKey
Based on Qt example "codeeditor" Copyright (C) 2016 The Qt Company Ltd.
Parser options to process multi column ASCII files.
std::string m_skip_index_pattern
pattern denoting line to skip (i.e. '1,10-12,42')
std::string m_header_prefix
prefix denoting header line
std::string m_separator
column separator