23 #include "cfgappearance.h"    24 #include "ui_cfgappearance.h"    26 #include "gui/helpers/playersdiagram.h"    27 #include "configuration/doomseekerconfig.h"    28 #include <QColorDialog>    29 #include <QSystemTrayIcon>    30 #include "ip2c/ip2c.h"    31 #include "localization.h"    35 DClass<CFGAppearance> : 
public Ui::CFGAppearance
    40                 bool bDrawGridInServerTable;
    41                 bool bMarkServersWithBuddies;
    42                 QString buddyServersColor;
    43                 QString customServersColor;
    44                 QString lanServersColor;
    49         SavedState savedState;
    51         void resetSavedState()
    53                 savedState.bDrawGridInServerTable = gConfig.doomseeker.bDrawGridInServerTable;
    54                 savedState.bMarkServersWithBuddies = gConfig.doomseeker.bMarkServersWithBuddies;
    55                 savedState.buddyServersColor = gConfig.doomseeker.buddyServersColor;
    56                 savedState.customServersColor = gConfig.doomseeker.customServersColor;
    57                 savedState.lanServersColor = gConfig.doomseeker.lanServersColor;
    58                 savedState.slotStyle = gConfig.doomseeker.slotStyle;
    67         set_reject(&CFGAppearance::reject_);
    69         d->readingSettings = 
false;
    70         d->translationRestartNotifierWidget->setVisible(
false);
    73 CFGAppearance::~CFGAppearance()
    77 void CFGAppearance::dynamicAppearanceChange()
    79         if (!d->readingSettings)
    81                 saveDynamicSettings();
    82                 emit appearanceChanged();
    86 void CFGAppearance::initLanguagesList()
    91                 const QString& translationName = obj.
localeName;
    95                         displayName = tr(
"Use system language");
    98                 if (!flagName.isEmpty())
    99                         flag = IP2C::instance()->flag(flagName);
   101                 d->cboLanguage->addItem(flag, displayName, translationName);
   105 void CFGAppearance::initSlotStyles(
const QString &selected)
   107         QList<PlayersDiagramStyle> styles = PlayersDiagram::availableSlotStyles();
   108         d->slotStyle->clear();
   111                 d->slotStyle->addItem(style.displayName, style.name);
   112                 if (style.name == selected)
   114                         d->slotStyle->setCurrentIndex(d->slotStyle->count() - 1);
   119 void CFGAppearance::reject_()
   122         gConfig.doomseeker.bDrawGridInServerTable = d->savedState.bDrawGridInServerTable;
   123         gConfig.doomseeker.bMarkServersWithBuddies = d->savedState.bMarkServersWithBuddies;
   124         gConfig.doomseeker.buddyServersColor = d->savedState.buddyServersColor;
   125         gConfig.doomseeker.customServersColor = d->savedState.customServersColor;
   126         gConfig.doomseeker.lanServersColor = d->savedState.lanServersColor;
   127         gConfig.doomseeker.slotStyle = d->savedState.slotStyle;
   132         d->readingSettings = 
true;
   136         d->resetSavedState();
   139         if (d->cboLanguage->count() == 0)
   143         initSlotStyles(gConfig.doomseeker.slotStyle);
   145         d->btnCustomServersColor->setColorHtml(gConfig.doomseeker.customServersColor);
   146         d->btnBuddyServersColor->setColorHtml(gConfig.doomseeker.buddyServersColor);
   147         d->btnLanServersColor->setColorHtml(gConfig.doomseeker.lanServersColor);
   148         d->cbMarkServersWithBuddies->setChecked(gConfig.doomseeker.bMarkServersWithBuddies);
   153         if (!QSystemTrayIcon::isSystemTrayAvailable())
   155                 gConfig.doomseeker.bUseTrayIcon = 
false;
   156                 gConfig.doomseeker.bCloseToTrayIcon = 
false;
   157                 d->gboUseTrayIcon->setEnabled(
false);
   160         d->gboUseTrayIcon->setChecked(gConfig.doomseeker.bUseTrayIcon);
   162         d->cbCloseToTrayIcon->setChecked(gConfig.doomseeker.bCloseToTrayIcon);
   164         d->cbColorizeConsole->setChecked(gConfig.doomseeker.bColorizeServerConsole);
   165         d->cbDrawGridInServerTable->setChecked(gConfig.doomseeker.bDrawGridInServerTable);
   167         d->cbHidePasswords->setChecked(gConfig.doomseeker.bHidePasswords);
   169         d->cbLookupHosts->setChecked(gConfig.doomseeker.bLookupHosts);
   175         d->cbBotsNotPlayers->setChecked(gConfig.doomseeker.bBotsAreNotPlayers);
   178         const QString &localization = gConfig.doomseeker.localization;
   180                 Localization::get()->localizations, localization);
   181         int idxLanguage = -1;
   182         if (bestMatchedLocalization.isValid())
   183                 idxLanguage = d->cboLanguage->findData(bestMatchedLocalization.
localeName);
   184         if (idxLanguage >= 0)
   186                 d->cboLanguage->setCurrentIndex(idxLanguage);
   191                 QString name = gConfig.doomseeker.localization;
   192                 const QPixmap& icon = IP2C::instance()->flagUnknown;
   193                 QString str = tr(
"Unknown language definition \"%1\"").arg(name);
   194                 d->cboLanguage->addItem(icon, str, name);
   195                 d->cboLanguage->setCurrentIndex(d->cboLanguage->count() - 1);
   198         d->readingSettings = 
false;
   203         saveDynamicSettings();
   205         gConfig.doomseeker.bUseTrayIcon = d->gboUseTrayIcon->isChecked();
   206         gConfig.doomseeker.bCloseToTrayIcon = d->cbCloseToTrayIcon->isChecked();
   207         gConfig.doomseeker.bColorizeServerConsole = d->cbColorizeConsole->isChecked();
   208         gConfig.doomseeker.bBotsAreNotPlayers = d->cbBotsNotPlayers->isChecked();
   209         gConfig.doomseeker.bHidePasswords = d->cbHidePasswords->isChecked();
   210         gConfig.doomseeker.bLookupHosts = d->cbLookupHosts->isChecked();
   211         QString localization = d->cboLanguage->itemData(d->cboLanguage->currentIndex()).toString();
   212         if (localization != gConfig.doomseeker.localization)
   216                 LocalizationInfo previousLocalization = Localization::get()->currentLocalization();
   218                 gConfig.doomseeker.localization = localization;
   219                 gLog << tr(
"Loading translation \"%1\"").arg(localization);
   220                 Localization::get()->loadTranslation(localization);
   221                 if (Localization::get()->currentLocalization() != previousLocalization)
   223                         gLog << tr(
"Program needs to be restarted to fully apply the translation");
   224                         emit restartNeeded();
   228         d->resetSavedState();
   229         emit appearanceChanged();
   232 void CFGAppearance::saveDynamicSettings()
   234         gConfig.doomseeker.bDrawGridInServerTable = d->cbDrawGridInServerTable->isChecked();
   235         gConfig.doomseeker.bMarkServersWithBuddies = d->cbMarkServersWithBuddies->isChecked();
   236         gConfig.doomseeker.buddyServersColor = d->btnBuddyServersColor->colorHtml();
   237         gConfig.doomseeker.customServersColor = d->btnCustomServersColor->colorHtml();
   238         gConfig.doomseeker.lanServersColor = d->btnLanServersColor->colorHtml();
   239         gConfig.doomseeker.slotStyle = d->slotStyle->itemData(d->slotStyle->currentIndex()).toString();
   242 void CFGAppearance::setVisibilityOfLanguageChangeNotificationIfNeeded()
   244         QString chosenLocalization = d->cboLanguage->itemData(d->cboLanguage->currentIndex()).toString();
   245         bool switchingToOsLocaleWhichIsAlsoTheCurrentLocale = 
false;
   248                 switchingToOsLocaleWhichIsAlsoTheCurrentLocale = 
   249                         Localization::get()->isCurrentlyLoaded(QLocale::system().name());
   251         d->translationRestartNotifierWidget->setVisible(
   252                 !Localization::get()->isCurrentlyLoaded(chosenLocalization) &&
   253                 !switchingToOsLocaleWhichIsAlsoTheCurrentLocale);
 void readSettings()
Reimplement this to read settings from config into widgets. 
 
QString localeName
Compliant with language_country standard. See QLocale::name() 
 
QString niceName
Name that will be displayed to user. 
 
void saveSettings()
Reimplement this to write settings to config from widgets. 
 
QString countryCodeName
The same as code used for country flags in IP2C. 
 
static const LocalizationInfo SYSTEM_FOLLOW
 
Base class for configuration pages.