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);
@@ -58,6 +113,25 @@ void AsciiReaderSettings::saveSettings(Q
if (numOfChannelsSetting == "0") numOfChannelsSetting = "auto";
settings->setValue(SG_ASCII_NumOfChannels, numOfChannelsSetting);
+ // save delimiter
+ QString delimiterS;
+ if (ui->rbOtherDelimiter->isChecked())
+ {
+ delimiterS = "other";
+ }
+ else if (ui->rbTab->isChecked())
+ {
+ // Note: \t is not correctly loaded
+ delimiterS = "TAB";
+ }
+ else
+ {
+ delimiterS = delimiter();
+ }
+
+ settings->setValue(SG_ASCII_Delimiter, delimiterS);
+ settings->setValue(SG_ASCII_CustomDelimiter, ui->leDelimiter->text());
+
settings->endGroup();
}
@@ -83,5 +157,26 @@ void AsciiReaderSettings::loadSettings(Q
}
}
+ // load delimiter
+ auto delimiterS = settings->value(SG_ASCII_Delimiter, delimiter()).toString();
+ auto customDelimiter = settings->value(SG_ASCII_CustomDelimiter, delimiter()).toString();
+ if (!customDelimiter.isEmpty()) ui->leDelimiter->setText(customDelimiter);
+ if (delimiterS == ",")
+ {
+ ui->rbComma->setChecked(true);
+ }
+ else if (delimiterS == " ")
+ {
+ ui->rbSpace->setChecked(true);
+ }
+ else if (delimiterS == "TAB")
+ {
+ ui->rbTab->setChecked(true);
+ }
+ else
+ {
+ ui->rbOtherDelimiter->setChecked(true);
+ }
+
settings->endGroup();
}