From 4aed2c8219774f5d797760606b8489a92ddc5163 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kcontrol/locale/localemon.cpp | 330 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 330 insertions(+) create mode 100644 kcontrol/locale/localemon.cpp (limited to 'kcontrol/locale/localemon.cpp') diff --git a/kcontrol/locale/localemon.cpp b/kcontrol/locale/localemon.cpp new file mode 100644 index 000000000..504ce393c --- /dev/null +++ b/kcontrol/locale/localemon.cpp @@ -0,0 +1,330 @@ +/* + * localemon.cpp + * + * Copyright (c) 1999-2003 Hans Petter Bieker + * + * Requires the Qt widget libraries, available at no cost at + * http://www.troll.no/ + * + * This program 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 2 of the License, 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 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "toplevel.h" +#include "localemon.h" +#include "localemon.moc" + +KLocaleConfigMoney::KLocaleConfigMoney(KLocale *locale, + QWidget *parent, const char*name) + : QWidget(parent, name), + m_locale(locale) +{ + // Money + QGridLayout *lay = new QGridLayout(this, 6, 2, + KDialog::marginHint(), + KDialog::spacingHint()); + + m_labMonCurSym = new QLabel(this, I18N_NOOP("Currency symbol:")); + lay->addWidget(m_labMonCurSym, 0, 0); + m_edMonCurSym = new QLineEdit(this); + lay->addWidget(m_edMonCurSym, 0, 1); + connect( m_edMonCurSym, SIGNAL( textChanged(const QString &) ), + SLOT( slotMonCurSymChanged(const QString &) ) ); + + m_labMonDecSym = new QLabel(this, I18N_NOOP("Decimal symbol:")); + lay->addWidget(m_labMonDecSym, 1, 0); + m_edMonDecSym = new QLineEdit(this); + lay->addWidget(m_edMonDecSym, 1, 1); + connect( m_edMonDecSym, SIGNAL( textChanged(const QString &) ), + SLOT( slotMonDecSymChanged(const QString &) ) ); + + m_labMonThoSep = new QLabel(this, I18N_NOOP("Thousands separator:")); + lay->addWidget(m_labMonThoSep, 2, 0); + m_edMonThoSep = new QLineEdit(this); + lay->addWidget(m_edMonThoSep, 2, 1); + connect( m_edMonThoSep, SIGNAL( textChanged(const QString &) ), + SLOT( slotMonThoSepChanged(const QString &) ) ); + + m_labMonFraDig = new QLabel(this, I18N_NOOP("Fract digits:")); + lay->addWidget(m_labMonFraDig, 3, 0); + m_inMonFraDig = new KIntNumInput(this); + m_inMonFraDig->setRange(0, 10, 1, false); + lay->addWidget(m_inMonFraDig, 3, 1); + + connect( m_inMonFraDig, SIGNAL( valueChanged(int) ), + SLOT( slotMonFraDigChanged(int) ) ); + + QWidget *vbox = new QVBox(this); + lay->addMultiCellWidget(vbox, 4, 4, 0, 1); + QVGroupBox *vgrp; + vgrp = new QVGroupBox( vbox, I18N_NOOP("Positive") ); + m_chMonPosPreCurSym = new QCheckBox(vgrp, I18N_NOOP("Prefix currency symbol")); + connect( m_chMonPosPreCurSym, SIGNAL( clicked() ), + SLOT( slotMonPosPreCurSymChanged() ) ); + + QHBox *hbox; + hbox = new QHBox( vgrp ); + m_labMonPosMonSignPos = new QLabel(hbox, I18N_NOOP("Sign position:")); + m_cmbMonPosMonSignPos = new QComboBox(hbox, "signpos"); + connect( m_cmbMonPosMonSignPos, SIGNAL( activated(int) ), + SLOT( slotMonPosMonSignPosChanged(int) ) ); + + vgrp = new QVGroupBox( vbox, I18N_NOOP("Negative") ); + m_chMonNegPreCurSym = new QCheckBox(vgrp, I18N_NOOP("Prefix currency symbol")); + connect( m_chMonNegPreCurSym, SIGNAL( clicked() ), + SLOT( slotMonNegPreCurSymChanged() ) ); + + hbox = new QHBox( vgrp ); + m_labMonNegMonSignPos = new QLabel(hbox, I18N_NOOP("Sign position:")); + m_cmbMonNegMonSignPos = new QComboBox(hbox, "signpos"); + connect( m_cmbMonNegMonSignPos, SIGNAL( activated(int) ), + SLOT( slotMonNegMonSignPosChanged(int) ) ); + + // insert some items + int i = 5; + while (i--) + { + m_cmbMonPosMonSignPos->insertItem(QString::null); + m_cmbMonNegMonSignPos->insertItem(QString::null); + } + + lay->setColStretch(1, 1); + lay->addRowSpacing(5, 0); + + adjustSize(); +} + +KLocaleConfigMoney::~KLocaleConfigMoney() +{ +} + +void KLocaleConfigMoney::save() +{ + KConfig *config = KGlobal::config(); + KConfigGroupSaver saver(config, "Locale"); + + KSimpleConfig ent(locate("locale", + QString::fromLatin1("l10n/%1/entry.desktop") + .arg(m_locale->country())), true); + ent.setGroup("KCM Locale"); + + QString str; + int i; + bool b; + + str = ent.readEntry("CurrencySymbol", QString::fromLatin1("$")); + config->deleteEntry("CurrencySymbol", false, true); + if (str != m_locale->currencySymbol()) + config->writeEntry("CurrencySymbol", + m_locale->currencySymbol(), true, true); + + str = ent.readEntry("MonetaryDecimalSymbol", QString::fromLatin1(".")); + config->deleteEntry("MonetaryDecimalSymbol", false, true); + if (str != m_locale->monetaryDecimalSymbol()) + config->writeEntry("MonetaryDecimalSymbol", + m_locale->monetaryDecimalSymbol(), true, true); + + str = ent.readEntry("MonetaryThousandsSeparator", QString::fromLatin1(",")); + str.replace(QString::fromLatin1("$0"), QString::null); + config->deleteEntry("MonetaryThousandsSeparator", false, true); + if (str != m_locale->monetaryThousandsSeparator()) + config->writeEntry("MonetaryThousandsSeparator", + QString::fromLatin1("$0%1$0") + .arg(m_locale->monetaryThousandsSeparator()), + true, true); + + i = ent.readNumEntry("FracDigits", 2); + config->deleteEntry("FracDigits", false, true); + if (i != m_locale->fracDigits()) + config->writeEntry("FracDigits", m_locale->fracDigits(), true, true); + + b = ent.readBoolEntry("PositivePrefixCurrencySymbol", true); + config->deleteEntry("PositivePrefixCurrencySymbol", false, true); + if (b != m_locale->positivePrefixCurrencySymbol()) + config->writeEntry("PositivePrefixCurrencySymbol", + m_locale->positivePrefixCurrencySymbol(), true, true); + + b = ent.readBoolEntry("NegativePrefixCurrencySymbol", true); + config->deleteEntry("NegativePrefixCurrencySymbol", false, true); + if (b != m_locale->negativePrefixCurrencySymbol()) + config->writeEntry("NegativePrefixCurrencySymbol", + m_locale->negativePrefixCurrencySymbol(), true, true); + + i = ent.readNumEntry("PositiveMonetarySignPosition", + (int)KLocale::BeforeQuantityMoney); + config->deleteEntry("PositiveMonetarySignPosition", false, true); + if (i != m_locale->positiveMonetarySignPosition()) + config->writeEntry("PositiveMonetarySignPosition", + (int)m_locale->positiveMonetarySignPosition(), + true, true); + + i = ent.readNumEntry("NegativeMonetarySignPosition", + (int)KLocale::ParensAround); + config->deleteEntry("NegativeMonetarySignPosition", false, true); + if (i != m_locale->negativeMonetarySignPosition()) + config->writeEntry("NegativeMonetarySignPosition", + (int)m_locale->negativeMonetarySignPosition(), + true, true); + + config->sync(); +} + +void KLocaleConfigMoney::slotLocaleChanged() +{ + m_edMonCurSym->setText( m_locale->currencySymbol() ); + m_edMonDecSym->setText( m_locale->monetaryDecimalSymbol() ); + m_edMonThoSep->setText( m_locale->monetaryThousandsSeparator() ); + m_inMonFraDig->setValue( m_locale->fracDigits() ); + + m_chMonPosPreCurSym->setChecked( m_locale->positivePrefixCurrencySymbol() ); + m_chMonNegPreCurSym->setChecked( m_locale->negativePrefixCurrencySymbol() ); + m_cmbMonPosMonSignPos->setCurrentItem( m_locale->positiveMonetarySignPosition() ); + m_cmbMonNegMonSignPos->setCurrentItem( m_locale->negativeMonetarySignPosition() ); +} + +void KLocaleConfigMoney::slotMonCurSymChanged(const QString &t) +{ + m_locale->setCurrencySymbol(t); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonDecSymChanged(const QString &t) +{ + m_locale->setMonetaryDecimalSymbol(t); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonThoSepChanged(const QString &t) +{ + m_locale->setMonetaryThousandsSeparator(t); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonFraDigChanged(int value) +{ + m_locale->setFracDigits(value); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonPosPreCurSymChanged() +{ + m_locale->setPositivePrefixCurrencySymbol(m_chMonPosPreCurSym->isChecked()); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonNegPreCurSymChanged() +{ + m_locale->setNegativePrefixCurrencySymbol(m_chMonNegPreCurSym->isChecked()); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonPosMonSignPosChanged(int i) +{ + m_locale->setPositiveMonetarySignPosition((KLocale::SignPosition)i); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotMonNegMonSignPosChanged(int i) +{ + m_locale->setNegativeMonetarySignPosition((KLocale::SignPosition)i); + emit localeChanged(); +} + +void KLocaleConfigMoney::slotTranslate() +{ + QObjectList list; + list.append(m_cmbMonPosMonSignPos); + list.append(m_cmbMonNegMonSignPos); + + QComboBox *wc; + for (QObjectListIt li(list) ; (wc = (QComboBox *)li.current()) != 0; ++li) + { + wc->changeItem(m_locale->translate("Parentheses Around"), 0); + wc->changeItem(m_locale->translate("Before Quantity Money"), 1); + wc->changeItem(m_locale->translate("After Quantity Money"), 2); + wc->changeItem(m_locale->translate("Before Money"), 3); + wc->changeItem(m_locale->translate("After Money"), 4); + } + + QString str; + + str = m_locale->translate( "Here you can enter your usual currency " + "symbol, e.g. $ or DM." + "

Please note that the Euro symbol may not be " + "available on your system, depending on the " + "distribution you use." ); + QWhatsThis::add( m_labMonCurSym, str ); + QWhatsThis::add( m_edMonCurSym, str ); + str = m_locale->translate( "Here you can define the decimal separator used " + "to display monetary values." + "

Note that the decimal separator used to " + "display other numbers has to be defined " + "separately (see the 'Numbers' tab)." ); + QWhatsThis::add( m_labMonDecSym, str ); + QWhatsThis::add( m_edMonDecSym, str ); + + str = m_locale->translate( "Here you can define the thousands separator " + "used to display monetary values." + "

Note that the thousands separator used to " + "display other numbers has to be defined " + "separately (see the 'Numbers' tab)." ); + QWhatsThis::add( m_labMonThoSep, str ); + QWhatsThis::add( m_edMonThoSep, str ); + + str = m_locale->translate( "This determines the number of fract digits for " + "monetary values, i.e. the number of digits you " + "find behind the decimal separator. " + "Correct value is 2 for almost all people." ); + QWhatsThis::add( m_labMonFraDig, str ); + QWhatsThis::add( m_inMonFraDig, str ); + + str = m_locale->translate( "If this option is checked, the currency sign " + "will be prefixed (i.e. to the left of the " + "value) for all positive monetary values. If " + "not, it will be postfixed (i.e. to the right)." ); + QWhatsThis::add( m_chMonPosPreCurSym, str ); + + str = m_locale->translate( "If this option is checked, the currency sign " + "will be prefixed (i.e. to the left of the " + "value) for all negative monetary values. If " + "not, it will be postfixed (i.e. to the right)." ); + QWhatsThis::add( m_chMonNegPreCurSym, str ); + + str = m_locale->translate( "Here you can select how a positive sign will be " + "positioned. This only affects monetary values." ); + QWhatsThis::add( m_labMonPosMonSignPos, str ); + QWhatsThis::add( m_cmbMonPosMonSignPos, str ); + + str = m_locale->translate( "Here you can select how a negative sign will " + "be positioned. This only affects monetary " + "values." ); + QWhatsThis::add( m_labMonNegMonSignPos, str ); + QWhatsThis::add( m_cmbMonNegMonSignPos, str ); +} -- cgit v1.2.3