kde-workspace/kcontrol/locale/kcmlocale.h
Ivailo Monev 362a853846 generic: drop currency and monetary support
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
2022-09-24 14:51:14 +03:00

415 lines
15 KiB
C++

/* This file is part of the KDE libraries
* Copyright 2010 John Layt <john@layt.net>
*
* This library 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 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef KCMLOCALE_H
#define KCMLOCALE_H
#include <KCModule>
#include <KSharedConfig>
#include <KConfigGroup>
#include <KLocale>
#include <QListWidgetItem>
#include <QCheckBox>
#include <QMap>
class KPushButton;
class KComboBox;
class KIntNumInput;
QT_BEGIN_NAMESPACE
class Ui_KCMLocaleWidget;
QT_END_NAMESPACE
/**
* @short A KCM to configure locale settings
*
* This module is for changing the User's Locale settings, which may override their Group and
* Country defaults.
*
* The settings hierarchy is as follows:
* - User settings from kdeglobals
* - Group settings from $KDEDIRS
* - Country settings from l10n
* - C default settings from l10n
*
* The settings that apply to the User are a merger of all these.
*
* This may be restricted by Kiosk Group settings locking the user from updating some/all settings.
*
* The KCM starts by loading the fully merged settings including the User settings
* In KCM terms, to Reload is to load the fully merged settings including the User settings
* In KCM terms, to reset to Defaults is to remove the User settings only.
* The user can also reset to Default each individual setting.
*/
class KCMLocale : public KCModule
{
Q_OBJECT
public:
KCMLocale(QWidget *parent, const QVariantList &);
virtual ~KCMLocale();
virtual void load();
virtual void save();
virtual void defaults();
virtual QString quickHelp() const;
private:
//Common load/save utilities
// Initialise the different settings groups
void initSettings();
void initCountrySettings( const QString &countryCode );
void initCalendarSettings();
// Merge the different settings groups into the effective settings
void mergeSettings();
void mergeCalendarSettings();
// Copy the supported settings between settings groups
void copySettings( KConfigGroup *fromGroup, KConfigGroup *toGroup,
KConfig::WriteConfigFlags flags = KConfig::Normal );
void copyCalendarSettings( KConfigGroup *fromGroup, KConfigGroup *toGroup,
KConfig::WriteConfigFlags flags = KConfig::Normal );
void copySetting( KConfigGroup *fromGroup, KConfigGroup *toGroup, const QString &key,
KConfig::WriteConfigFlags flags = KConfig::Normal );
// Enable / Disable an item in the gui
void enableItemWidgets( const QString &itemKey, KConfigGroup *userSettings,
KConfigGroup *kcmSettings, KConfigGroup *defaultSettings,
QWidget *itemWidget, KPushButton *itemDefaultButton );
// Set the item value in the required settings groups
void setItemValue( const QString &itemKey, const QString &itemValue,
KConfigGroup *userSettings, KConfigGroup *kcmSettings, KConfigGroup *defaultSettings );
// Set an item: set the item value, enable the widgets, set the changed flag, don't update the widget
void setItem( const QString &itemKey, const QString &itemValue,
QWidget *itemWidget, KPushButton *itemDefaultButton );
void setItem( const QString &itemKey, int itemValue,
QWidget *itemWidget, KPushButton *itemDefaultButton );
void setItem( const QString &itemKey, bool itemValue,
QWidget *itemWidget, KPushButton *itemDefaultButton );
void setCalendarItem( const QString &itemKey, const QString &itemValue,
QWidget *itemWidget, KPushButton *itemDefaultButton );
void setCalendarItem( const QString &itemKey, int itemValue,
QWidget *itemWidget, KPushButton *itemDefaultButton );
void setCalendarItem( const QString &itemKey, bool itemValue,
QWidget *itemWidget, KPushButton *itemDefaultButton );
// Set an item: set the item value, enable the widgets, set the changed flag, update the widget
void setComboItem( const QString &itemKey, const QString &itemValue,
KComboBox *itemCombo, KPushButton *itemDefaultButton );
void setComboItem( const QString &itemKey, int itemValue,
KComboBox *itemCombo, KPushButton *itemDefaultButton );
void setEditComboItem( const QString &itemKey, const QString &itemValue,
KComboBox *itemCombo, KPushButton *itemDefaultButton );
void setIntItem( const QString &itemKey, int itemValue,
KIntNumInput *itemInput, KPushButton *itemDefaultButton );
void setCheckItem( const QString &itemKey, bool itemValue,
QCheckBox *itemCheck, KPushButton *itemDefaultButton );
// Check if the chaged flag needs to be set
void checkIfChanged();
//Common init utilities
void initSeparatorCombo( KComboBox *separatorCombo );
void initWeekDayCombo( KComboBox *dayCombo );
void initDigitSetCombo( KComboBox *digitSetCombo );
void initDigitGroupingCombo( KComboBox *digitGroupingCombo, const QString &digitGroupingKey);
void insertDigitGroupingItem( KComboBox *digitGroupingCombo,
KSharedConfigPtr groupingConfig, KConfigGroup *groupingSettings,
const QString &digitGroupingKey, const QString &digitGroupingFormat);
void initAllWidgets();
void initSettingsWidgets();
void initResetButtons();
void initTabs();
void initSample();
//Country tab
void initCountry();
void setCountry( const QString &newValue );
void initCountryDivision();
void setCountryDivision( const QString &newValue );
//Translations/Languages tab
void initTranslations();
void setTranslations( const QString &newValue );
//Numeric tab
void initNumericDigitGrouping();
void setNumericDigitGrouping( const QString &newValue );
void initNumericThousandsSeparator();
void setNumericThousandsSeparator( const QString &newValue );
void initNumericDecimalSymbol();
void setNumericDecimalSymbol( const QString &newValue );
void initNumericDecimalPlaces();
void setNumericDecimalPlaces( int newValue );
void initNumericPositiveSign();
void setNumericPositiveSign( const QString &newValue );
void initNumericNegativeSign();
void setNumericNegativeSign( const QString &newValue );
void initNumericDigitSet();
void setNumericDigitSet( int newValue );
//Calendar Tab
void initCalendarSystem();
void setCalendarSystem( const QString &newValue );
void initUseCommonEra();
void setUseCommonEra( bool newValue );
void initShortYearWindow();
void setShortYearWindow( int newValue );
void initWeekNumberSystem();
void setWeekNumberSystem( int newValue );
void initWeekStartDay();
void setWeekStartDay( int newValue );
void initWorkingWeekStartDay();
void setWorkingWeekStartDay( int newValue );
void initWorkingWeekEndDay();
void setWorkingWeekEndDay( int newValue );
void initWeekDayOfPray();
void setWeekDayOfPray( int newValue );
//Date/Time tab
void initTimeFormat();
void setTimeFormat( const QString &newValue );
void initAmPmSymbols();
void setAmPmPeriods( const QString &amValue, const QString &pmValue );
void initDateFormat();
void setDateFormat( const QString &newValue );
void initShortDateFormat();
void setShortDateFormat( const QString &newValue );
void initMonthNamePossessive();
void setMonthNamePossessive( bool newValue );
void initDateTimeDigitSet();
void setDateTimeDigitSet( int newValue );
//Other Tab
void initPageSize();
void setPageSize( int newValue );
void initMeasureSystem();
void setMeasureSystem( int newValue );
void initBinaryUnitDialect();
void setBinaryUnitDialect( int newValue );
private Q_SLOTS:
void updateSample();
//Country tab
void defaultCountry();
void changedCountryIndex( int index );
void defaultCountryDivision();
void changedCountryDivisionIndex( int index );
//Translations/Languages tab
void defaultTranslations();
void changedTranslations();
void changedTranslationsAvailable( QListWidgetItem * item );
void changedTranslationsSelected( QListWidgetItem * item );
//Numeric tab
void defaultNumericDigitGrouping();
void changedNumericDigitGroupingIndex( int index );
void defaultNumericThousandsSeparator();
void changedNumericThousandsSeparator( const QString &newValue );
void defaultNumericDecimalSymbol();
void changedNumericDecimalSymbol( const QString &newValue );
void defaultNumericDecimalPlaces();
void changedNumericDecimalPlaces( int newValue );
void defaultNumericPositiveSign();
void changedNumericPositiveSign( const QString &newValue );
void defaultNumericNegativeSign();
void changedNumericNegativeSign( const QString &newValue );
void defaultNumericDigitSet();
void changedNumericDigitSetIndex( int index );
//Calendar Tab
void defaultCalendarSystem();
void changedCalendarSystemIndex( int index );
void defaultUseCommonEra();
void changedUseCommonEra( bool newValue );
void defaultShortYearWindow();
void changedShortYearWindow( int newValue );
void defaultWeekNumberSystem();
void changedWeekNumberSystemIndex( int index );
void defaultWeekStartDay();
void changedWeekStartDayIndex( int index );
void defaultWorkingWeekStartDay();
void changedWorkingWeekStartDayIndex( int index );
void defaultWorkingWeekEndDay();
void changedWorkingWeekEndDayIndex( int index );
void defaultWeekDayOfPray();
void changedWeekDayOfPrayIndex( int index );
//Date/Time tab
void defaultTimeFormat();
void changedTimeFormat( const QString &newValue );
void defaultAmSymbol();
void changedAmSymbol( const QString &newValue );
void defaultPmSymbol();
void changedPmSymbol( const QString &newValue );
void defaultDateFormat();
void changedDateFormat( const QString &newValue );
void defaultShortDateFormat();
void changedShortDateFormat( const QString &newValue );
void defaultMonthNamePossessive();
void changedMonthNamePossessive( bool newValue );
void defaultDateTimeDigitSet();
void changedDateTimeDigitSetIndex( int index );
//Other Tab
void defaultPageSize();
void changedPageSizeIndex( int index );
void defaultMeasureSystem();
void changedMeasureSystemIndex( int index );
void defaultBinaryUnitDialect();
void changedBinaryUnitDialectIndex( int index );
private:
// Date/Time format map utilities
QString posixToUserDate( const QString &posixFormat ) const;
QString posixToUserTime( const QString &posixFormat ) const;
QString posixToUser( const QString &posixFormat, const QMap<QString, QString> &map ) const;
QString userToPosixDate( const QString &userFormat ) const;
QString userToPosixTime( const QString &userFormat ) const;
QString userToPosix( const QString &userFormat, const QMap<QString, QString> &map ) const;
// Day Period utilities
QString dayPeriodText( const QString &dayPeriod );
QString amPeriod( const QString &longName, const QString &shortName, const QString &narrowName );
QString pmPeriod( const QString &longName, const QString &shortName, const QString &narrowName );
// The current User settings from .kde/share/config/kdeglobals
// This gets updated with the users changes in the kcm and saved when requested
KSharedConfigPtr m_userConfig;
KConfigGroup m_userSettings;
KConfigGroup m_userCalendarSettings;
// The kcm config/settings, a merger of C, Country, Group and User settings
// This is used to build the displayed settings and to initialise the sample locale, but never saved
KSharedConfigPtr m_kcmConfig;
KConfigGroup m_kcmSettings;
KConfigGroup m_kcmCalendarSettings;
// The currently saved user config/settings
// This is used to check if anything has changed, but never saved
KSharedConfigPtr m_currentConfig;
KConfigGroup m_currentSettings;
KConfigGroup m_currentCalendarSettings;
// The KCM Default settings, a merger of C, Country, and Group, i.e. excluding User
KSharedConfigPtr m_defaultConfig;
KConfigGroup m_defaultSettings;
KConfigGroup m_defaultCalendarSettings;
// The current Group settings, i.e. does NOT include the User or Country settings
KSharedConfigPtr m_groupConfig;
KConfigGroup m_groupSettings;
KConfigGroup m_groupCalendarSettings;
// The Country Locale config from l10n/<country>/entry.desktop
KSharedConfigPtr m_countryConfig;
KConfigGroup m_countrySettings;
KConfigGroup m_countryCalendarSettings;
// The default C Locale config/settings from l10n/C/entry.desktop
KSharedConfigPtr m_cConfig;
KConfigGroup m_cSettings;
KConfigGroup m_cCalendarSettings;
QMap<QString, QString> m_dateFormatMap;
QMap<QString, QString> m_timeFormatMap;
// The system country, not the KDE one
QString m_systemCountry;
// NOTE: we need to mantain our own language list instead of using KLocale's
// because KLocale does not add a language if there is no translation
// for the current application so it would not be possible to set
// a language which has no systemsettings/kcontrol module translation
// The list of translations used in the kcm, is users list plus us_EN
QStringList m_kcmTranslations;
// The currently saved list of user translations, used to check if value changed
QString m_currentTranslations;
// The currently installed translations, used to check if users translations are valid
QStringList m_installedTranslations;
// The locale we use when displaying the sample output, not used for anything else
KLocale *m_kcmLocale;
// The locale for the current defaults, needed for am/pm as the defaults are hard coded in KLocale
KLocale *m_defaultLocale;
Ui_KCMLocaleWidget *m_ui;
};
#endif //KCMLOCALE_H