23 #include "cfgappearance.h" 24 #include "ui_cfgappearance.h" 26 #include "configuration/doomseekerconfig.h" 27 #include "gui/helpers/playersdiagram.h" 28 #include "ip2c/ip2c.h" 29 #include "localization.h" 32 #include <QColorDialog> 33 #include <QSystemTrayIcon> 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()
90 const QString &flagName = obj.countryCodeName;
91 const QString &translationName = obj.localeName;
93 QString displayName = obj.niceName;
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)
113 d->slotStyle->setCurrentIndex(d->slotStyle->count() - 1);
117 void CFGAppearance::reject_()
120 gConfig.doomseeker.bDrawGridInServerTable = d->savedState.bDrawGridInServerTable;
121 gConfig.doomseeker.bMarkServersWithBuddies = d->savedState.bMarkServersWithBuddies;
122 gConfig.doomseeker.buddyServersColor = d->savedState.buddyServersColor;
123 gConfig.doomseeker.customServersColor = d->savedState.customServersColor;
124 gConfig.doomseeker.lanServersColor = d->savedState.lanServersColor;
125 gConfig.doomseeker.slotStyle = d->savedState.slotStyle;
130 d->readingSettings =
true;
134 d->resetSavedState();
137 if (d->cboLanguage->count() == 0)
139 initSlotStyles(gConfig.doomseeker.slotStyle);
141 d->btnCustomServersColor->setColorHtml(gConfig.doomseeker.customServersColor);
142 d->btnBuddyServersColor->setColorHtml(gConfig.doomseeker.buddyServersColor);
143 d->btnLanServersColor->setColorHtml(gConfig.doomseeker.lanServersColor);
144 d->cbMarkServersWithBuddies->setChecked(gConfig.doomseeker.bMarkServersWithBuddies);
149 if (!QSystemTrayIcon::isSystemTrayAvailable())
151 gConfig.doomseeker.bUseTrayIcon =
false;
152 gConfig.doomseeker.bCloseToTrayIcon =
false;
153 d->gboUseTrayIcon->setEnabled(
false);
156 d->gboUseTrayIcon->setChecked(gConfig.doomseeker.bUseTrayIcon);
158 d->cbCloseToTrayIcon->setChecked(gConfig.doomseeker.bCloseToTrayIcon);
160 d->cbColorizeConsole->setChecked(gConfig.doomseeker.bColorizeServerConsole);
161 d->cbDrawGridInServerTable->setChecked(gConfig.doomseeker.bDrawGridInServerTable);
163 d->cbHidePasswords->setChecked(gConfig.doomseeker.bHidePasswords);
165 d->cbLookupHosts->setChecked(gConfig.doomseeker.bLookupHosts);
171 d->cbBotsNotPlayers->setChecked(gConfig.doomseeker.bBotsAreNotPlayers);
174 const QString &localization = gConfig.doomseeker.localization;
176 Localization::get()->localizations, localization);
177 int idxLanguage = -1;
178 if (bestMatchedLocalization.isValid())
179 idxLanguage = d->cboLanguage->findData(bestMatchedLocalization.
localeName);
180 if (idxLanguage >= 0)
181 d->cboLanguage->setCurrentIndex(idxLanguage);
185 QString name = gConfig.doomseeker.localization;
186 const QPixmap &icon = IP2C::instance()->flagUnknown;
187 QString str = tr(
"Unknown language definition \"%1\"").arg(name);
188 d->cboLanguage->addItem(icon, str, name);
189 d->cboLanguage->setCurrentIndex(d->cboLanguage->count() - 1);
192 d->readingSettings =
false;
197 saveDynamicSettings();
199 gConfig.doomseeker.bUseTrayIcon = d->gboUseTrayIcon->isChecked();
200 gConfig.doomseeker.bCloseToTrayIcon = d->cbCloseToTrayIcon->isChecked();
201 gConfig.doomseeker.bColorizeServerConsole = d->cbColorizeConsole->isChecked();
202 gConfig.doomseeker.bBotsAreNotPlayers = d->cbBotsNotPlayers->isChecked();
203 gConfig.doomseeker.bHidePasswords = d->cbHidePasswords->isChecked();
204 gConfig.doomseeker.bLookupHosts = d->cbLookupHosts->isChecked();
205 QString localization = d->cboLanguage->itemData(d->cboLanguage->currentIndex()).toString();
206 if (localization != gConfig.doomseeker.localization)
210 LocalizationInfo previousLocalization = Localization::get()->currentLocalization();
212 gConfig.doomseeker.localization = localization;
213 gLog << tr(
"Loading translation \"%1\"").arg(localization);
214 Localization::get()->loadTranslation(localization);
215 if (Localization::get()->currentLocalization() != previousLocalization)
217 gLog << tr(
"Program needs to be restarted to fully apply the translation");
218 emit restartNeeded();
222 d->resetSavedState();
223 emit appearanceChanged();
226 void CFGAppearance::saveDynamicSettings()
228 gConfig.doomseeker.bDrawGridInServerTable = d->cbDrawGridInServerTable->isChecked();
229 gConfig.doomseeker.bMarkServersWithBuddies = d->cbMarkServersWithBuddies->isChecked();
230 gConfig.doomseeker.buddyServersColor = d->btnBuddyServersColor->colorHtml();
231 gConfig.doomseeker.customServersColor = d->btnCustomServersColor->colorHtml();
232 gConfig.doomseeker.lanServersColor = d->btnLanServersColor->colorHtml();
233 gConfig.doomseeker.slotStyle = d->slotStyle->itemData(d->slotStyle->currentIndex()).toString();
236 void CFGAppearance::setVisibilityOfLanguageChangeNotificationIfNeeded()
238 QString chosenLocalization = d->cboLanguage->itemData(d->cboLanguage->currentIndex()).toString();
239 bool switchingToOsLocaleWhichIsAlsoTheCurrentLocale =
false;
242 switchingToOsLocaleWhichIsAlsoTheCurrentLocale =
243 Localization::get()->isCurrentlyLoaded(QLocale::system().name());
245 d->translationRestartNotifierWidget->setVisible(
246 !Localization::get()->isCurrentlyLoaded(chosenLocalization) &&
247 !switchingToOsLocaleWhichIsAlsoTheCurrentLocale);
void saveSettings() override
Reimplement this to write settings to config from widgets.
QString localeName
Compliant with language_country standard. See QLocale::name()
void readSettings() override
Reimplement this to read settings from config into widgets.
static const LocalizationInfo SYSTEM_FOLLOW
Base class for configuration pages.