2015-01-15 17:07:43 +00:00
|
|
|
/*
|
|
|
|
* Copyright 2009 Matteo Agostinelli <agostinelli@gmail.com>
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Library General Public License as
|
|
|
|
* published by the Free Software Foundation; either version 2 or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program 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 Library General Public
|
|
|
|
* License along with this program; if not, write to the
|
|
|
|
* Free Software Foundation, Inc.,
|
|
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "qalculate_settings.h"
|
|
|
|
#include "qalculate_applet.h"
|
|
|
|
|
|
|
|
#include <KConfigGroup>
|
|
|
|
#include <KConfigDialog>
|
|
|
|
|
|
|
|
#include <QFormLayout>
|
|
|
|
#include <QCheckBox>
|
|
|
|
#include <QSpinBox>
|
|
|
|
#include <QLabel>
|
|
|
|
#include <QGroupBox>
|
|
|
|
|
|
|
|
#include <KComboBox>
|
|
|
|
|
|
|
|
|
2022-09-22 08:05:41 +03:00
|
|
|
QalculateSettings::QalculateSettings(QalculateApplet* applet)
|
|
|
|
: QObject(0),
|
|
|
|
m_applet(applet)
|
2015-01-15 17:07:43 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void QalculateSettings::readSettings()
|
|
|
|
{
|
|
|
|
KConfigGroup cfg = m_applet->config();
|
|
|
|
|
|
|
|
// load settings
|
|
|
|
m_convertToBestUnits = cfg.readEntry("convertToBestUnits", true);
|
|
|
|
m_structuring = cfg.readEntry("structuring", 1);
|
|
|
|
m_fractionDisplay = cfg.readEntry("fractionDisplay", 0);
|
|
|
|
m_angleUnit = cfg.readEntry("angleUnit", 1);
|
|
|
|
m_readPrecisionMode = cfg.readEntry("readPrecisionMode", 0);
|
|
|
|
m_indicateInfiniteSeries = cfg.readEntry("indicateInfiniteSeries", false);
|
|
|
|
m_useAllPrefixes = cfg.readEntry("useAllPrefixes", false);
|
|
|
|
m_useDenominatorPrefix = cfg.readEntry("useDenominatorPrefix", true);
|
|
|
|
m_negativeExponents = cfg.readEntry("negativeExponents", false);
|
|
|
|
m_updateExchangeRatesAtStartup = cfg.readEntry("updateExchangeRatesAtStartup", true);
|
|
|
|
m_copyToClipboard = cfg.readEntry("copyToClipboard", false);
|
|
|
|
m_resultsInline = cfg.readEntry("resultsInline", false);
|
|
|
|
m_rpn = cfg.readEntry("rpn", false);
|
|
|
|
m_preserveFormat = cfg.readEntry("preserveFormat", false);
|
|
|
|
m_liveEvaluation = cfg.readEntry("liveEvaluation", false);
|
|
|
|
m_base = cfg.readEntry("base", 10);
|
|
|
|
m_baseDisplay = cfg.readEntry("baseDisplay", 10);
|
|
|
|
m_minExp = cfg.readEntry("minExp", 0);
|
|
|
|
m_showBinary = cfg.readEntry("showBinary", false);
|
|
|
|
m_showOctal = cfg.readEntry("showOctal", false);
|
|
|
|
m_showDecimal = cfg.readEntry("showDecimal", false);
|
|
|
|
m_showHexadecimal = cfg.readEntry("showHexadecimal", false);
|
|
|
|
m_historyItems = cfg.readEntry("historyItems", QStringList());
|
|
|
|
}
|
|
|
|
|
|
|
|
void QalculateSettings::writeSettings()
|
|
|
|
{
|
|
|
|
KConfigGroup cfg = m_applet->config();
|
|
|
|
|
|
|
|
// write settings
|
|
|
|
cfg.writeEntry("convertToBestUnits", m_unitsCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("structuring", m_structuringCombo->currentIndex());
|
|
|
|
cfg.writeEntry("angleUnit", m_angleUnitCombo->currentIndex());
|
|
|
|
cfg.writeEntry("fractionDisplay", m_fractionCombo->currentIndex());
|
|
|
|
cfg.writeEntry("indicateInfiniteSeries", m_infiniteSeriesCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("useAllPrefixes", m_allPrefixesCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("useDenominatorPrefix", m_denominatorPrefixCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("negativeExponents", m_negativeExponentsCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("updateExchangeRatesAtStartup", m_exchangeRatesCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("copyToClipboard", m_copyToClipboardCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("resultsInline", m_resultsInlineCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("liveEvaluation", m_liveEvaluationCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("rpn", m_rpnCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("base", m_baseSpin->value());
|
|
|
|
cfg.writeEntry("baseDisplay", m_baseDisplaySpin->value());
|
|
|
|
cfg.writeEntry("minExp", m_minExpCombo->currentIndex());
|
|
|
|
cfg.writeEntry("showBinary", m_showBinaryCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("showOctal", m_showOctalCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("showDecimal", m_showDecimalCheck->checkState() == Qt::Checked);
|
|
|
|
cfg.writeEntry("showHexadecimal", m_showHexadecimalCheck->checkState() == Qt::Checked);
|
|
|
|
}
|
|
|
|
|
|
|
|
void QalculateSettings::createConfigurationInterface(KConfigDialog* parent)
|
|
|
|
{
|
|
|
|
m_configDialog = parent;
|
|
|
|
|
|
|
|
m_configDialog->setButtons(KDialog::Ok | KDialog::Cancel | KDialog::Apply);
|
|
|
|
connect(m_configDialog, SIGNAL(applyClicked()), this, SLOT(configAccepted()));
|
|
|
|
connect(m_configDialog, SIGNAL(okClicked()), this, SLOT(configAccepted()));
|
|
|
|
|
|
|
|
QWidget *page = new QWidget();
|
|
|
|
|
|
|
|
QFormLayout *layout = new QFormLayout(page);
|
|
|
|
// convert to best units
|
|
|
|
|
|
|
|
m_unitsCheck = new QCheckBox(i18n("Convert to &best units"), page);
|
|
|
|
m_unitsCheck->setCheckState(m_convertToBestUnits ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_unitsCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
m_copyToClipboardCheck = new QCheckBox(i18n("Copy result to clipboard"), page);
|
|
|
|
m_copyToClipboardCheck->setCheckState(m_copyToClipboard ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_copyToClipboardCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
m_resultsInlineCheck = new QCheckBox(i18n("Write results in input line edit"), page);
|
|
|
|
m_resultsInlineCheck->setCheckState(m_resultsInline ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_resultsInlineCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
m_liveEvaluationCheck = new QCheckBox(i18n("Live evaluation"), page);
|
|
|
|
m_liveEvaluationCheck->setCheckState(m_liveEvaluation ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_liveEvaluationCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
connect(m_liveEvaluationCheck, SIGNAL(stateChanged(int)), this, SLOT(checkValidity()));
|
|
|
|
m_rpnCheck = new QCheckBox(i18n("Enable reverse Polish notation"), page);
|
|
|
|
m_rpnCheck->setCheckState(m_rpn ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_rpnCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
m_baseSpin = new QSpinBox(page);
|
|
|
|
m_baseSpin->setValue(m_base);
|
|
|
|
m_baseSpin->setMinimum(2);
|
|
|
|
m_baseSpin->setMaximum(32);
|
|
|
|
connect(m_baseSpin, SIGNAL(valueChanged(int)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
m_baseDisplaySpin = new QSpinBox(page);
|
|
|
|
m_baseDisplaySpin->setValue(m_baseDisplay);
|
|
|
|
m_baseDisplaySpin->setMinimum(2);
|
|
|
|
m_baseDisplaySpin->setMaximum(32);
|
|
|
|
connect(m_baseDisplaySpin, SIGNAL(valueChanged(int)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
m_structuringCombo = new KComboBox(page);
|
|
|
|
m_structuringCombo->addItem(i18n("None"));
|
|
|
|
m_structuringCombo->addItem(i18n("Simplify"));
|
|
|
|
m_structuringCombo->addItem(i18n("Factorize"));
|
|
|
|
m_structuringCombo->setCurrentIndex(m_structuring);
|
|
|
|
connect(m_structuringCombo, SIGNAL(currentIndexChanged(int)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
m_angleUnitCombo = new KComboBox(page);
|
|
|
|
m_angleUnitCombo->addItem(i18n("None"));
|
|
|
|
m_angleUnitCombo->addItem(i18n("Radians"));
|
|
|
|
m_angleUnitCombo->addItem(i18n("Degrees"));
|
|
|
|
m_angleUnitCombo->addItem(i18n("Gradians"));
|
|
|
|
m_angleUnitCombo->setCurrentIndex(m_angleUnit);
|
|
|
|
connect(m_angleUnitCombo, SIGNAL(currentIndexChanged(int)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
layout->addRow(m_unitsCheck);
|
|
|
|
layout->addRow(m_copyToClipboardCheck);
|
|
|
|
layout->addRow(m_resultsInlineCheck);
|
|
|
|
layout->addRow(m_liveEvaluationCheck);
|
|
|
|
layout->addRow(m_rpnCheck);
|
|
|
|
layout->addRow(i18n("Structuring mode:"), m_structuringCombo);
|
|
|
|
layout->addRow(i18n("Angle unit:"), m_angleUnitCombo);
|
|
|
|
layout->addRow(i18n("Expression base:"), m_baseSpin);
|
|
|
|
layout->addRow(i18n("Result base:"), m_baseDisplaySpin);
|
|
|
|
|
|
|
|
m_configDialog->addPage(page, i18nc("Evaluation", "Evaluation Settings"), m_applet->icon());
|
|
|
|
|
|
|
|
QWidget *printPage = new QWidget();
|
|
|
|
|
|
|
|
QFormLayout *printLayout = new QFormLayout(printPage);
|
|
|
|
|
|
|
|
m_fractionCombo = new KComboBox(printPage);
|
|
|
|
m_fractionCombo->addItem(i18n("Decimal"));
|
|
|
|
m_fractionCombo->addItem(i18n("Exact"));
|
|
|
|
m_fractionCombo->addItem(i18n("Fractional"));
|
|
|
|
m_fractionCombo->addItem(i18n("Combined"));
|
|
|
|
m_fractionCombo->setCurrentIndex(m_fractionDisplay);
|
|
|
|
connect(m_fractionCombo, SIGNAL(currentIndexChanged(int)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
m_minExpCombo = new KComboBox(printPage);
|
|
|
|
m_minExpCombo->addItem(i18n("None"));
|
|
|
|
m_minExpCombo->addItem(i18n("Pure"));
|
|
|
|
m_minExpCombo->addItem(i18n("Scientific"));
|
|
|
|
m_minExpCombo->addItem(i18n("Precision"));
|
|
|
|
m_minExpCombo->addItem(i18n("Engineering"));
|
|
|
|
m_minExpCombo->setCurrentIndex(m_minExp);
|
|
|
|
connect(m_minExpCombo, SIGNAL(currentIndexChanged(int)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
m_infiniteSeriesCheck = new QCheckBox(i18n("Indicate infinite series"), printPage);
|
|
|
|
m_infiniteSeriesCheck->setCheckState(m_indicateInfiniteSeries ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_infiniteSeriesCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
m_allPrefixesCheck = new QCheckBox(i18n("Use all prefixes"), printPage);
|
|
|
|
m_allPrefixesCheck->setCheckState(m_useAllPrefixes ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_allPrefixesCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
m_denominatorPrefixCheck = new QCheckBox(i18n("Use denominator prefix"), printPage);
|
|
|
|
m_denominatorPrefixCheck->setCheckState(m_useDenominatorPrefix ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_denominatorPrefixCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
m_negativeExponentsCheck = new QCheckBox(i18n("Negative exponents"), printPage);
|
|
|
|
m_negativeExponentsCheck->setCheckState(m_negativeExponents ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_negativeExponentsCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
QGroupBox *showBasesBox = new QGroupBox(i18n("Show integers also in base:"), printPage);
|
|
|
|
QGridLayout *layoutBases = new QGridLayout(showBasesBox);
|
|
|
|
|
|
|
|
m_showBinaryCheck = new QCheckBox(i18n("Binary"), printPage);
|
|
|
|
m_showBinaryCheck->setCheckState(m_showBinary ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_showBinaryCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
m_showOctalCheck = new QCheckBox(i18n("Octal"), printPage);
|
|
|
|
m_showOctalCheck->setCheckState(m_showOctal ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_showOctalCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
m_showDecimalCheck = new QCheckBox(i18n("Decimal"), printPage);
|
|
|
|
m_showDecimalCheck->setCheckState(m_showDecimal ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_showDecimalCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
m_showHexadecimalCheck = new QCheckBox(i18n("Hexadecimal"), printPage);
|
|
|
|
m_showHexadecimalCheck->setCheckState(m_showHexadecimal ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_showHexadecimalCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
|
|
|
|
layoutBases->addWidget(m_showBinaryCheck, 0, 0);
|
|
|
|
layoutBases->addWidget(m_showOctalCheck, 1, 0);
|
|
|
|
layoutBases->addWidget(m_showDecimalCheck, 2, 0);
|
|
|
|
layoutBases->addWidget(m_showHexadecimalCheck, 3, 0);
|
|
|
|
|
|
|
|
printLayout->addRow(i18n("Number fraction format:"), m_fractionCombo);
|
|
|
|
printLayout->addRow(i18n("Numerical display:"), m_minExpCombo);
|
|
|
|
|
|
|
|
printLayout->addRow(m_infiniteSeriesCheck);
|
|
|
|
printLayout->addRow(m_allPrefixesCheck);
|
|
|
|
printLayout->addRow(m_denominatorPrefixCheck);
|
|
|
|
printLayout->addRow(m_negativeExponentsCheck);
|
|
|
|
printLayout->addRow(showBasesBox);
|
|
|
|
|
|
|
|
m_configDialog->addPage(printPage, i18nc("Print", "Print Settings"), m_applet->icon());
|
|
|
|
|
|
|
|
QWidget *currencyPage = new QWidget();
|
|
|
|
QFormLayout *currencyLayout = new QFormLayout(currencyPage);
|
|
|
|
|
|
|
|
m_exchangeRatesCheck = new QCheckBox(i18n("Update exchange rates at startup"), currencyPage);
|
|
|
|
m_exchangeRatesCheck->setCheckState(m_updateExchangeRatesAtStartup ? Qt::Checked : Qt::Unchecked);
|
|
|
|
connect(m_exchangeRatesCheck, SIGNAL(toggled(bool)), parent, SLOT(settingsModified()));
|
|
|
|
currencyLayout->addRow(m_exchangeRatesCheck);
|
|
|
|
|
|
|
|
m_configDialog->addPage(currencyPage, i18nc("Currency", "Currency Settings"), m_applet->icon());
|
|
|
|
}
|
|
|
|
|
|
|
|
void QalculateSettings::configAccepted()
|
|
|
|
{
|
|
|
|
writeSettings();
|
|
|
|
readSettings();
|
|
|
|
emit accepted();
|
|
|
|
}
|
|
|
|
|
|
|
|
void QalculateSettings::checkValidity()
|
|
|
|
{
|
|
|
|
if (m_liveEvaluationCheck->checkState() == Qt::Checked) {
|
|
|
|
m_resultsInlineCheck->setCheckState(Qt::Unchecked);
|
|
|
|
m_resultsInlineCheck->setEnabled(false);
|
|
|
|
} else {
|
|
|
|
m_resultsInlineCheck->setEnabled(true);
|
|
|
|
m_resultsInlineCheck->setCheckState(m_resultsInline ? Qt::Checked : Qt::Unchecked);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void QalculateSettings::setHistoryItems(QStringList items)
|
|
|
|
{
|
|
|
|
m_historyItems = items;
|
|
|
|
KConfigGroup cfg = m_applet->config();
|
|
|
|
cfg.writeEntry("historyItems", m_historyItems);
|
|
|
|
cfg.sync();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|