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 }