diff --git a/src/asciireadersettings.cpp b/src/asciireadersettings.cpp --- a/src/asciireadersettings.cpp +++ b/src/asciireadersettings.cpp @@ -1,5 +1,5 @@ /* - Copyright © 2016 Hasan Yavuz Özderya + Copyright © 2017 Hasan Yavuz Özderya This file is part of serialplot. @@ -17,20 +17,35 @@ along with serialplot. If not, see . */ +#include +#include + #include "utils.h" #include "setting_defines.h" #include "asciireadersettings.h" #include "ui_asciireadersettings.h" -#include - AsciiReaderSettings::AsciiReaderSettings(QWidget *parent) : QWidget(parent), ui(new Ui::AsciiReaderSettings) { ui->setupUi(this); + auto validator = new QRegularExpressionValidator(QRegularExpression("[^\\d]?"), this); + ui->leDelimiter->setValidator(validator); + + connect(ui->rbComma, &QAbstractButton::toggled, + this, &AsciiReaderSettings::delimiterToggled); + connect(ui->rbSpace, &QAbstractButton::toggled, + this, &AsciiReaderSettings::delimiterToggled); + connect(ui->rbTab, &QAbstractButton::toggled, + this, &AsciiReaderSettings::delimiterToggled); + connect(ui->rbOtherDelimiter, &QAbstractButton::toggled, + this, &AsciiReaderSettings::delimiterToggled); + connect(ui->leDelimiter, &QLineEdit::textChanged, + this, &AsciiReaderSettings::customDelimiterChanged); + // Note: if directly connected we get a runtime warning on incompatible signal arguments connect(ui->spNumOfChannels, SELECT::OVERLOAD_OF(&QSpinBox::valueChanged), [this](int value) @@ -44,11 +59,51 @@ AsciiReaderSettings::~AsciiReaderSetting delete ui; } -unsigned AsciiReaderSettings::numOfChannels() +unsigned AsciiReaderSettings::numOfChannels() const { return ui->spNumOfChannels->value(); } +QChar AsciiReaderSettings::delimiter() const +{ + if (ui->rbComma->isChecked()) + { + return QChar(','); + } + else if (ui->rbSpace->isChecked()) + { + return QChar(' '); + } + else if (ui->rbTab->isChecked()) + { + return QChar('\t'); + } + else // rbOther + { + auto t = ui->leDelimiter->text(); + return t.isEmpty() ? QChar() : t.at(0); + } +} + +void AsciiReaderSettings::delimiterToggled(bool checked) +{ + if (!checked) return; + + auto d = delimiter(); + if (!d.isNull()) + { + emit delimiterChanged(d); + } +} + +void AsciiReaderSettings::customDelimiterChanged(const QString text) +{ + if (ui->rbOtherDelimiter->isChecked()) + { + if (!text.isEmpty()) emit delimiterChanged(text.at(0)); + } +} + void AsciiReaderSettings::saveSettings(QSettings* settings) { settings->beginGroup(SettingGroup_ASCII);