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.