File indexing completed on 2025-12-14 03:45:21

0001 /*
0002     File                 : BinaryOptionsWidget.cpp
0003     Project              : LabPlot
0004     Description          : widget providing options for the import of binary data
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2009-2017 Stefan Gerlach <stefan.gerlach@uni.kn>
0007     SPDX-FileCopyrightText: 2009 Alexander Semke <alexander.semke@web.de>
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #include "BinaryOptionsWidget.h"
0012 #include "backend/core/Settings.h"
0013 #include "backend/datasources/filters/BinaryFilter.h"
0014 
0015 #include <KConfigGroup>
0016 
0017 /*!
0018     \class BinaryOptionsWidget
0019     \brief Widget providing options for the import of binary data
0020 
0021     \ingroup kdefrontend
0022 */
0023 
0024 BinaryOptionsWidget::BinaryOptionsWidget(QWidget* parent)
0025     : QWidget(parent) {
0026     ui.setupUi(parent);
0027 
0028     ui.cbDataType->addItems(BinaryFilter::dataTypes());
0029     ui.cbByteOrder->addItem(i18n("Little endian"), QDataStream::LittleEndian);
0030     ui.cbByteOrder->addItem(i18n("Big endian"), QDataStream::BigEndian);
0031 
0032     const QString textDataTypeShort = i18n("This option determines the data type that the imported data while converting to numbers.");
0033 
0034     ui.lDataType->setToolTip(textDataTypeShort);
0035     ui.lDataType->setWhatsThis(textDataTypeShort);
0036     ui.cbDataType->setToolTip(textDataTypeShort);
0037     ui.cbDataType->setWhatsThis(textDataTypeShort);
0038 
0039     const QString textByteOrderShort = i18n("This option determines the byte order of the imported data when converting to numbers.");
0040     const QString textByteOrder = textByteOrderShort + QStringLiteral("<br><br>")
0041         + i18n("<table>"
0042                "<tr><td>little endian</td><td>typical byte order (endianness) on Intel x86 processors.</td></tr>"
0043                "<tr><td>big endian</td><td>typical byte order on Mainframes (IBM) and SPARC/PowerPC/Motorola processors.</td></tr>"
0044                "</table>");
0045 
0046     ui.lByteOrder->setToolTip(textByteOrderShort);
0047     ui.lByteOrder->setWhatsThis(textByteOrder);
0048     ui.cbByteOrder->setToolTip(textByteOrderShort);
0049     ui.cbByteOrder->setWhatsThis(textByteOrder);
0050 }
0051 
0052 void BinaryOptionsWidget::applyFilterSettings(BinaryFilter* filter) const {
0053     Q_ASSERT(filter);
0054 
0055     filter->setVectors(ui.niVectors->value());
0056     filter->setDataType((BinaryFilter::DataType)ui.cbDataType->currentIndex());
0057     filter->setByteOrder(static_cast<QDataStream::ByteOrder>(ui.cbByteOrder->currentData().toInt()));
0058     filter->setSkipBytes(ui.sbSkipBytes->value());
0059     filter->setSkipStartBytes(ui.sbSkipStartBytes->value());
0060     filter->setCreateIndexEnabled(ui.chbCreateIndex->isChecked());
0061 }
0062 
0063 void BinaryOptionsWidget::loadSettings() const {
0064     auto config = KConfig();
0065     loadConfigFromTemplate(config);
0066 }
0067 
0068 void BinaryOptionsWidget::saveSettings() const {
0069     auto config = KConfig();
0070     saveConfigAsTemplate(config);
0071 }
0072 
0073 void BinaryOptionsWidget::loadConfigFromTemplate(KConfig& config) const {
0074     auto group = config.group(QStringLiteral("ImportBinary"));
0075 
0076     ui.niVectors->setValue(group.readEntry("Vectors", "2").toInt());
0077     ui.cbDataType->setCurrentIndex(group.readEntry("DataType", 0));
0078     ui.cbByteOrder->setCurrentIndex(group.readEntry("ByteOrder", 0));
0079     ui.sbSkipStartBytes->setValue(group.readEntry("SkipStartBytes", 0));
0080     ui.sbSkipBytes->setValue(group.readEntry("SkipBytes", 0));
0081     ui.chbCreateIndex->setChecked(group.readEntry("CreateIndex", false));
0082 }
0083 
0084 void BinaryOptionsWidget::saveConfigAsTemplate(KConfig& config) const {
0085     auto group = config.group(QStringLiteral("ImportBinary"));
0086 
0087     group.writeEntry("Vectors", ui.niVectors->value());
0088     group.writeEntry("ByteOrder", ui.cbByteOrder->currentIndex());
0089     group.writeEntry("DataType", ui.cbDataType->currentIndex());
0090     group.writeEntry("SkipStartBytes", ui.sbSkipStartBytes->value());
0091     group.writeEntry("SkipBytes", ui.sbSkipBytes->value());
0092     group.writeEntry("CreateIndex", ui.chbCreateIndex->isChecked());
0093 }