summaryrefslogtreecommitdiffstats
path: root/kcontrol/locale/localenum.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kcontrol/locale/localenum.cpp')
-rw-r--r--kcontrol/locale/localenum.cpp194
1 files changed, 194 insertions, 0 deletions
diff --git a/kcontrol/locale/localenum.cpp b/kcontrol/locale/localenum.cpp
new file mode 100644
index 000000000..9e5445ded
--- /dev/null
+++ b/kcontrol/locale/localenum.cpp
@@ -0,0 +1,194 @@
+/*
+ * localenum.cpp
+ *
+ * Copyright (c) 1999-2003 Hans Petter Bieker <[email protected]>
+ *
+ * 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 <qlabel.h>
+#include <qlineedit.h>
+#include <qlayout.h>
+#include <qwhatsthis.h>
+#include <qregexp.h>
+
+#include <kdialog.h>
+#include <ksimpleconfig.h>
+#include <kstandarddirs.h>
+
+#include "toplevel.h"
+#include "localenum.h"
+#include "localenum.moc"
+
+KLocaleConfigNumber::KLocaleConfigNumber(KLocale *locale,
+ QWidget *parent, const char*name)
+ : QWidget(parent, name),
+ m_locale(locale)
+{
+ QGridLayout *lay = new QGridLayout(this, 5, 2,
+ KDialog::marginHint(),
+ KDialog::spacingHint());
+ lay->setAutoAdd(TRUE);
+
+ m_labDecSym = new QLabel(this, I18N_NOOP("&Decimal symbol:"));
+ m_edDecSym = new QLineEdit(this);
+ connect( m_edDecSym, SIGNAL( textChanged(const QString &) ),
+ this, SLOT( slotDecSymChanged(const QString &) ) );
+ m_labDecSym->setBuddy(m_edDecSym);
+
+ m_labThoSep = new QLabel(this, I18N_NOOP("Tho&usands separator:"));
+ m_edThoSep = new QLineEdit(this);
+ connect( m_edThoSep, SIGNAL( textChanged(const QString &) ),
+ this, SLOT( slotThoSepChanged(const QString &) ) );
+ m_labThoSep->setBuddy(m_edThoSep);
+
+ m_labMonPosSign = new QLabel(this, I18N_NOOP("Positive si&gn:"));
+ m_edMonPosSign = new QLineEdit(this);
+ connect( m_edMonPosSign, SIGNAL( textChanged(const QString &) ),
+ this, SLOT( slotMonPosSignChanged(const QString &) ) );
+ m_labMonPosSign->setBuddy(m_edMonPosSign);
+
+ m_labMonNegSign = new QLabel(this, I18N_NOOP("&Negative sign:"));
+ m_edMonNegSign = new QLineEdit(this);
+ connect( m_edMonNegSign, SIGNAL( textChanged(const QString &) ),
+ this, SLOT( slotMonNegSignChanged(const QString &) ) );
+ m_labMonNegSign->setBuddy(m_edMonNegSign);
+
+ lay->setColStretch(1, 1);
+
+ connect(this, SIGNAL(localeChanged()),
+ SLOT(slotLocaleChanged()));
+}
+
+KLocaleConfigNumber::~KLocaleConfigNumber()
+{
+}
+
+void KLocaleConfigNumber::save()
+{
+ // temperary use of our locale as the global locale
+ KLocale *lsave = KGlobal::_locale;
+ KGlobal::_locale = m_locale;
+
+ 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;
+
+ str = ent.readEntry("DecimalSymbol",
+ QString::fromLatin1("."));
+ config->deleteEntry("DecimalSymbol", false, true);
+ if (str != m_locale->decimalSymbol())
+ config->writeEntry("DecimalSymbol",
+ m_locale->decimalSymbol(), true, true);
+
+ str = ent.readEntry("ThousandsSeparator",
+ QString::fromLatin1(","));
+ config->deleteEntry("ThousandsSeparator", false, true);
+ str.replace(QString::fromLatin1("$0"), QString::null);
+ if (str != m_locale->thousandsSeparator())
+ config->writeEntry("ThousandsSeparator",
+ QString::fromLatin1("$0%1$0")
+ .arg(m_locale->thousandsSeparator()), true, true);
+
+ str = ent.readEntry("PositiveSign");
+ config->deleteEntry("PositiveSign", false, true);
+ if (str != m_locale->positiveSign())
+ config->writeEntry("PositiveSign", m_locale->positiveSign(), true, true);
+
+ str = ent.readEntry("NegativeSign", QString::fromLatin1("-"));
+ config->deleteEntry("NegativeSign", false, true);
+ if (str != m_locale->negativeSign())
+ config->writeEntry("NegativeSign", m_locale->negativeSign(), true, true);
+
+ // restore the old global locale
+ KGlobal::_locale = lsave;
+}
+
+void KLocaleConfigNumber::slotLocaleChanged()
+{
+ // #### load all settings here
+ m_edDecSym->setText( m_locale->decimalSymbol() );
+ m_edThoSep->setText( m_locale->thousandsSeparator() );
+ m_edMonPosSign->setText( m_locale->positiveSign() );
+ m_edMonNegSign->setText( m_locale->negativeSign() );
+}
+
+void KLocaleConfigNumber::slotDecSymChanged(const QString &t)
+{
+ m_locale->setDecimalSymbol(t);
+ emit localeChanged();
+}
+
+void KLocaleConfigNumber::slotThoSepChanged(const QString &t)
+{
+ m_locale->setThousandsSeparator(t);
+ emit localeChanged();
+}
+
+void KLocaleConfigNumber::slotMonPosSignChanged(const QString &t)
+{
+ m_locale->setPositiveSign(t);
+ emit localeChanged();
+}
+
+void KLocaleConfigNumber::slotMonNegSignChanged(const QString &t)
+{
+ m_locale->setNegativeSign(t);
+ emit localeChanged();
+}
+
+void KLocaleConfigNumber::slotTranslate()
+{
+ QString str;
+
+ str = m_locale->translate( "Here you can define the decimal separator used "
+ "to display numbers (i.e. a dot or a comma in "
+ "most countries).<p>"
+ "Note that the decimal separator used to "
+ "display monetary values has to be set "
+ "separately (see the 'Money' tab)." );
+ QWhatsThis::add( m_labDecSym, str );
+ QWhatsThis::add( m_edDecSym, str );
+
+ str = m_locale->translate( "Here you can define the thousands separator "
+ "used to display numbers.<p>"
+ "Note that the thousands separator used to "
+ "display monetary values has to be set "
+ "separately (see the 'Money' tab)." );
+ QWhatsThis::add( m_labThoSep, str );
+ QWhatsThis::add( m_edThoSep, str );
+
+ str = m_locale->translate( "Here you can specify text used to prefix "
+ "positive numbers. Most people leave this "
+ "blank." );
+ QWhatsThis::add( m_labMonPosSign, str );
+ QWhatsThis::add( m_edMonPosSign, str );
+
+ str = m_locale->translate( "Here you can specify text used to prefix "
+ "negative numbers. This should not be empty, so "
+ "you can distinguish positive and negative "
+ "numbers. It is normally set to minus (-)." );
+ QWhatsThis::add( m_labMonNegSign, str );
+ QWhatsThis::add( m_edMonNegSign, str );
+}