Files @ 11522eba8b9b
Branch filter:

Location: tempo-plotter/src/dataformatpanel.cpp - annotation

Hasan Yavuz ÖZDERYA
modify scrollzoomer so that it tries to maintain zoom window when buffer size changes
bdc33b5c53c6
a9a5e414ab54
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
ecd02467c397
797666010f26
bdc33b5c53c6
bdc33b5c53c6
938f730ccdfe
bdc33b5c53c6
94b1aaec4e69
bdc33b5c53c6
ecd02467c397
94b1aaec4e69
94b1aaec4e69
94b1aaec4e69
94b1aaec4e69
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
7c5d07725a0a
151c8a6430b7
bdc33b5c53c6
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
bdc33b5c53c6
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
bdc33b5c53c6
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
bdc33b5c53c6
1bb06061a415
1bb06061a415
1bb06061a415
1bb06061a415
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
94b1aaec4e69
bdc33b5c53c6
94b1aaec4e69
94b1aaec4e69
94b1aaec4e69
94b1aaec4e69
94b1aaec4e69
68f79a7c6762
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
9c7f8589ff84
ecd02467c397
fdf5f056db8f
bdc33b5c53c6
bdc33b5c53c6
326761aef909
bdc33b5c53c6
326761aef909
bdc33b5c53c6
7c5d07725a0a
9cf16854ec82
7c5d07725a0a
bdc33b5c53c6
bdc33b5c53c6
bdc33b5c53c6
7c5d07725a0a
7c5d07725a0a
bdc33b5c53c6
a91f37cb7784
a91f37cb7784
a91f37cb7784
a91f37cb7784
a91f37cb7784
e0c6c43cbcf5
e0c6c43cbcf5
326761aef909
326761aef909
326761aef909
326761aef909
326761aef909
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
ecd02467c397
9c7f8589ff84
9c7f8589ff84
ecd02467c397
94b1aaec4e69
ecd02467c397
938f730ccdfe
151c8a6430b7
a9a5e414ab54
151c8a6430b7
151c8a6430b7
a9a5e414ab54
a9a5e414ab54
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
326761aef909
938f730ccdfe
326761aef909
326761aef909
938f730ccdfe
938f730ccdfe
938f730ccdfe
326761aef909
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
3da4b5482573
3da4b5482573
3da4b5482573
5b3f4916ebcf
a9d626540c2c
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
938f730ccdfe
3da4b5482573
3da4b5482573
3da4b5482573
5b3f4916ebcf
a9d626540c2c
938f730ccdfe
/*
  Copyright © 2019 Hasan Yavuz Özderya

  This file is part of serialplot.

  serialplot is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  serialplot is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with serialplot.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "dataformatpanel.h"
#include "ui_dataformatpanel.h"

#include <QRadioButton>
#include <QtDebug>

#include "utils.h"
#include "setting_defines.h"

DataFormatPanel::DataFormatPanel(QSerialPort* port, QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DataFormatPanel),
    bsReader(port, this),
    asciiReader(port, this),
    framedReader(port, this),
    demoReader(port, this)
{
    ui->setupUi(this);

    serialPort = port;
    paused = false;
    readerBeforeDemo = nullptr;
    _bytesRead = 0;

    // initalize default reader
    currentReader = &bsReader;
    bsReader.enable();
    ui->rbBinary->setChecked(true);
    ui->horizontalLayout->addWidget(bsReader.settingsWidget(), 1);

    // initalize reader selection buttons
    connect(ui->rbBinary, &QRadioButton::toggled, [this](bool checked)
            {
                if (checked) selectReader(&bsReader);
            });

    connect(ui->rbAscii, &QRadioButton::toggled, [this](bool checked)
            {
                if (checked) selectReader(&asciiReader);
            });

    connect(ui->rbFramed, &QRadioButton::toggled, [this](bool checked)
            {
                if (checked) selectReader(&framedReader);
            });
}

DataFormatPanel::~DataFormatPanel()
{
    delete ui;
}

unsigned DataFormatPanel::numChannels() const
{
    return currentReader->numChannels();
}

Source* DataFormatPanel::activeSource()
{
    return currentReader;
}

void DataFormatPanel::pause(bool enabled)
{
    paused = enabled;
    currentReader->pause(enabled);
    demoReader.pause(enabled);
}

void DataFormatPanel::enableDemo(bool demoEnabled)
{
    if (demoEnabled)
    {
        readerBeforeDemo = currentReader;
        demoReader.setNumChannels(readerBeforeDemo->numChannels());
        selectReader(&demoReader);
    }
    else
    {
        Q_ASSERT(readerBeforeDemo != nullptr);
        selectReader(readerBeforeDemo);
    }

    // disable/enable reader selection buttons during/after demo
    ui->rbAscii->setDisabled(demoEnabled);
    ui->rbBinary->setDisabled(demoEnabled);
    ui->rbFramed->setDisabled(demoEnabled);
}

bool DataFormatPanel::isDemoEnabled() const
{
    return currentReader == &demoReader;
}

void DataFormatPanel::selectReader(AbstractReader* reader)
{
    currentReader->enable(false);
    reader->enable();

    // re-connect signals
    disconnect(currentReader, 0, this, 0);

    // switch the settings widget
    ui->horizontalLayout->removeWidget(currentReader->settingsWidget());
    currentReader->settingsWidget()->hide();
    ui->horizontalLayout->addWidget(reader->settingsWidget(), 1);
    reader->settingsWidget()->show();

    reader->pause(paused);

    currentReader = reader;
    emit sourceChanged(currentReader);
}

uint64_t DataFormatPanel::bytesRead()
{
    _bytesRead += currentReader->getBytesRead();
    return _bytesRead;
}

void DataFormatPanel::saveSettings(QSettings* settings)
{
    settings->beginGroup(SettingGroup_DataFormat);

    // save selected data format (current reader)
    QString format;
    AbstractReader* selectedReader = isDemoEnabled() ? readerBeforeDemo : currentReader;
    if (selectedReader == &bsReader)
    {
        format = "binary";
    }
    else if (selectedReader == &asciiReader)
    {
        format = "ascii";
    }
    else // framed reader
    {
        format = "custom";
    }
    settings->setValue(SG_DataFormat_Format, format);

    settings->endGroup();

    // save reader settings
    bsReader.saveSettings(settings);
    asciiReader.saveSettings(settings);
    framedReader.saveSettings(settings);
}

void DataFormatPanel::loadSettings(QSettings* settings)
{
    settings->beginGroup(SettingGroup_DataFormat);

    // load selected format
    QString format = settings->value(
        SG_DataFormat_Format, QString()).toString();

    if (format == "binary")
    {
        selectReader(&bsReader);
        ui->rbBinary->setChecked(true);
    }
    else if (format == "ascii")
    {
        selectReader(&asciiReader);
        ui->rbAscii->setChecked(true);
    }
    else if (format == "custom")
    {
        selectReader(&framedReader);
        ui->rbFramed->setChecked(true);
    } // else current selection stays

    settings->endGroup();

    // load reader settings
    bsReader.loadSettings(settings);
    asciiReader.loadSettings(settings);
    framedReader.loadSettings(settings);
}