1 /*
2 * This file is part of Licq, an instant messaging client for UNIX.
3 * Copyright (C) 2007-2010 Licq developers
4 *
5 * Licq is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Licq is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with Licq; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 #include "general.h"
21
22 #include "config.h"
23
24 #include <QCheckBox>
25 #include <QComboBox>
26 #include <QDir>
27 #include <QGridLayout>
28 #include <QGroupBox>
29 #include <QLabel>
30 #include <QRadioButton>
31 #include <QVBoxLayout>
32
33 #include <licq/daemon.h>
34
35 #include "config/general.h"
36 #include "core/gui-defines.h"
37 #include "widgets/fontedit.h"
38
39 #include "settingsdlg.h"
40
41 using namespace LicqQtGui;
42 /* TRANSLATOR LicqQtGui::Settings::General */
43
General(SettingsDlg * parent)44 Settings::General::General(SettingsDlg* parent)
45 : QObject(parent)
46 {
47 parent->addPage(SettingsDlg::DockingPage, createPageDocking(parent),
48 tr("Docking"), SettingsDlg::ContactListPage);
49 parent->addPage(SettingsDlg::FontsPage, createPageFonts(parent),
50 tr("Fonts"), SettingsDlg::ContactListPage);
51
52 load();
53 }
54
createPageDocking(QWidget * parent)55 QWidget* Settings::General::createPageDocking(QWidget* parent)
56 {
57 QWidget* w = new QWidget(parent);
58 QVBoxLayout* myPageDockingLayout = new QVBoxLayout(w);
59 myPageDockingLayout->setContentsMargins(0, 0, 0, 0);
60
61 myDockingBox = new QGroupBox(tr("Docking"));
62 myDockingLayout = new QGridLayout(myDockingBox);
63
64 myUseDockCheck = new QCheckBox(tr("Use dock icon"), myDockingBox);
65 myUseDockCheck->setToolTip(tr("Controls whether or not the dockable icon should be displayed."));
66 myDockingLayout->addWidget(myUseDockCheck, 0, 0);
67
68 myHiddenCheck = new QCheckBox(tr("Start hidden"));
69 myHiddenCheck->setToolTip(tr("Start main window hidden. Only the dock icon will be visible."));
70 myDockingLayout->addWidget(myHiddenCheck, 0, 1);
71
72 myDockDefaultRadio = new QRadioButton(tr("Default icon"));
73 myDockingLayout->addWidget(myDockDefaultRadio, 1, 0);
74
75 myDockFortyEightCheck = new QCheckBox(tr("64 x 48 dock icon"));
76 myDockFortyEightCheck->setToolTip(tr("Selects between the standard 64x64 icon used in the WindowMaker/Afterstep wharf\n"
77 "and a shorter 64x48 icon for use in the Gnome/KDE panel."));
78 myDockingLayout->addWidget(myDockFortyEightCheck, 1, 1);
79
80 myDockThemedRadio = new QRadioButton(tr("Themed icon"));
81 myDockingLayout->addWidget(myDockThemedRadio, 2, 0);
82
83 myDockTrayRadio = new QRadioButton(tr("Tray icon"));
84 myDockTrayRadio->setToolTip(tr("Uses the freedesktop.org standard to dock a small icon into the system tray.\n"
85 "Works with many different window managers."));
86 myDockingLayout->addWidget(myDockTrayRadio, 3, 0);
87
88 myDockTrayBlinkCheck = new QCheckBox(tr("Blink on events"));
89 myDockTrayBlinkCheck->setToolTip(tr("Make tray icon blink on unread incoming events."));
90 myDockingLayout->addWidget(myDockTrayBlinkCheck, 3, 1);
91
92 // TODO: Move this to Event pages when we get different kinds of popup
93 myTrayMsgOnlineNotify = new QCheckBox(tr("Show popup for Online notify"));
94 myTrayMsgOnlineNotify->setToolTip(tr("Show balloon popup message when contacts marked for online notify comes online."));
95 myDockingLayout->addWidget(myTrayMsgOnlineNotify, 4, 1);
96
97 myDockThemeCombo = new QComboBox();
98 // Set the currently available themes
99 QString szDockThemesDir = QString::fromLocal8Bit(Licq::gDaemon.shareDir().c_str()) + QTGUI_DIR + DOCK_DIR;
100 QDir d(szDockThemesDir);
101 d.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
102 myDockThemeCombo->addItems(d.entryList());
103 connect(myDockDefaultRadio, SIGNAL(toggled(bool)), myDockFortyEightCheck, SLOT(setEnabled(bool)));
104 connect(myDockThemedRadio, SIGNAL(toggled(bool)), myDockThemeCombo, SLOT(setEnabled(bool)));
105 connect(myDockTrayRadio, SIGNAL(toggled(bool)), myDockTrayBlinkCheck, SLOT(setEnabled(bool)));
106 connect(myDockTrayRadio, SIGNAL(toggled(bool)), myTrayMsgOnlineNotify, SLOT(setEnabled(bool)));
107 connect(myUseDockCheck, SIGNAL(toggled(bool)), SLOT(useDockToggled(bool)));
108 myDockingLayout->addWidget(myDockThemeCombo, 2, 1);
109
110
111 myPageDockingLayout->addWidget(myDockingBox);
112 myPageDockingLayout->addStretch(1);
113
114 return w;
115 }
116
createPageFonts(QWidget * parent)117 QWidget* Settings::General::createPageFonts(QWidget* parent)
118 {
119 QWidget* w = new QWidget(parent);
120 myPageFontsLayout = new QVBoxLayout(w);
121 myPageFontsLayout->setContentsMargins(0, 0, 0, 0);
122
123 myFontBox = new QGroupBox(tr("Fonts"));
124 myFontLayout = new QGridLayout(myFontBox);
125
126 // Standard font
127 myFontLabel = new QLabel(tr("General:"));
128 myFontLabel->setToolTip(tr("Used for normal text."));
129 myFontLayout->addWidget(myFontLabel, 0, 0);
130 myNormalFontEdit = new FontEdit();
131 myNormalFontEdit->setToolTip(myFontLabel->toolTip());
132 myFontLabel->setBuddy(myNormalFontEdit);
133 myFontLayout->addWidget(myNormalFontEdit, 0, 1);
134 connect(myNormalFontEdit, SIGNAL(fontSelected(const QFont&)), SLOT(normalFontChanged(const QFont&)));
135
136 // Edit font
137 myEditFontLabel = new QLabel(tr("Editing:"));
138 myEditFontLabel->setToolTip(tr("Used in message editor etc."));
139 myFontLayout->addWidget(myEditFontLabel, 1, 0);
140 myEditFontEdit = new FontEdit();
141 myEditFontEdit->setToolTip(myEditFontLabel->toolTip());
142 myEditFontLabel->setBuddy(myEditFontEdit);
143 myFontLayout->addWidget(myEditFontEdit, 1, 1);
144
145 // History font
146 myHistoryFontLabel = new QLabel(tr("History:"));
147 myHistoryFontLabel->setToolTip(tr("Used in message history."));
148 myFontLayout->addWidget(myHistoryFontLabel, 2, 0);
149 myHistoryFontEdit = new FontEdit();
150 myHistoryFontEdit->setToolTip(myHistoryFontLabel->toolTip());
151 myHistoryFontLabel->setBuddy(myHistoryFontEdit);
152 myFontLayout->addWidget(myHistoryFontEdit, 2, 1);
153
154 // Fixed font
155 myFixedFontLabel = new QLabel(tr("Fixed:"));
156 myFixedFontLabel->setToolTip(tr("Used in file editor and network log."));
157 myFontLayout->addWidget(myFixedFontLabel, 3, 0);
158 myFixedFontEdit = new FontEdit();
159 myFixedFontEdit->setToolTip(myFixedFontLabel->toolTip());
160 myFixedFontLabel->setBuddy(myFixedFontEdit);
161 myFontLayout->addWidget(myFixedFontEdit, 3, 1);
162
163 myPageFontsLayout->addWidget(myFontBox);
164 myPageFontsLayout->addStretch(1);
165
166 return w;
167 }
168
useDockToggled(bool useDock)169 void Settings::General::useDockToggled(bool useDock)
170 {
171 if (!useDock)
172 {
173 #ifndef USE_KDE
174 myDockThemeCombo->setEnabled(false);
175 myDockDefaultRadio->setEnabled(false);
176 myDockThemedRadio->setEnabled(false);
177 myDockTrayRadio->setEnabled(false);
178 myDockFortyEightCheck->setEnabled(false);
179 myDockTrayBlinkCheck->setEnabled(false);
180 myTrayMsgOnlineNotify->setEnabled(false);
181 #endif
182 myHiddenCheck->setEnabled(false);
183 myHiddenCheck->setChecked(false);
184 return;
185 }
186 else
187 {
188 myHiddenCheck->setEnabled(true);
189 }
190
191 // Turned on
192 #ifndef USE_KDE
193 myDockDefaultRadio->setEnabled(true);
194 myDockThemedRadio->setEnabled(true);
195 myDockTrayRadio->setEnabled(true);
196 if (myDockDefaultRadio->isChecked())
197 {
198 myDockFortyEightCheck->setEnabled(true);
199 myDockThemeCombo->setEnabled(false);
200 myDockTrayBlinkCheck->setEnabled(false);
201 myTrayMsgOnlineNotify->setEnabled(false);
202 }
203 else if (myDockThemedRadio->isChecked())
204 {
205 myDockFortyEightCheck->setEnabled(false);
206 myDockThemeCombo->setEnabled(true);
207 myDockTrayBlinkCheck->setEnabled(false);
208 myTrayMsgOnlineNotify->setEnabled(false);
209 }
210 else if (myDockTrayRadio->isChecked())
211 {
212 myDockFortyEightCheck->setEnabled(false);
213 myDockThemeCombo->setEnabled(false);
214 myDockTrayBlinkCheck->setEnabled(true);
215 myTrayMsgOnlineNotify->setEnabled(true);
216 }
217 else
218 myDockDefaultRadio->setChecked(true);
219 #endif
220 }
221
normalFontChanged(const QFont & font)222 void Settings::General::normalFontChanged(const QFont& font)
223 {
224 myEditFontEdit->setFont(font);
225 myHistoryFontEdit->setFont(font);
226 }
227
load()228 void Settings::General::load()
229 {
230 Config::General* generalConfig = Config::General::instance();
231
232 myHiddenCheck->setChecked(generalConfig->mainwinStartHidden());
233 myUseDockCheck->setChecked(generalConfig->dockMode() != Config::General::DockNone);
234 #ifndef USE_KDE
235 myDockDefaultRadio->setChecked(generalConfig->dockMode() == Config::General::DockDefault);
236 myDockFortyEightCheck->setChecked(generalConfig->defaultIconFortyEight());
237 myDockThemedRadio->setChecked(generalConfig->dockMode() == Config::General::DockThemed);
238 for (int i = 0; i < myDockThemeCombo->count(); ++i)
239 {
240 if (myDockThemeCombo->itemText(i) == generalConfig->themedIconTheme())
241 {
242 myDockThemeCombo->setCurrentIndex(i);
243 break;
244 }
245 }
246 #endif
247 myDockTrayRadio->setChecked(generalConfig->dockMode() == Config::General::DockTray);
248 myDockTrayBlinkCheck->setChecked(generalConfig->trayBlink());
249 myTrayMsgOnlineNotify->setChecked(generalConfig->trayMsgOnlineNotify());
250 useDockToggled(myUseDockCheck->isChecked());
251
252 myNormalFontEdit->setFont(QFont(generalConfig->normalFont()));
253 myEditFontEdit->setFont(QFont(generalConfig->editFont()));
254 myHistoryFontEdit->setFont(QFont(generalConfig->historyFont()));
255 myFixedFontEdit->setFont(QFont(generalConfig->fixedFont()));
256 }
257
apply()258 void Settings::General::apply()
259 {
260 Config::General* generalConfig = Config::General::instance();
261 generalConfig->blockUpdates(true);
262
263 generalConfig->setMainwinStartHidden(myHiddenCheck->isChecked());
264 Config::General::DockMode newDockMode = Config::General::DockNone;
265 if (myUseDockCheck->isChecked())
266 {
267 #ifdef USE_KDE
268 newDockMode = Config::General::DockTray;
269 #else
270 if (myDockDefaultRadio->isChecked())
271 newDockMode = Config::General::DockDefault;
272 else if (myDockThemedRadio->isChecked())
273 newDockMode = Config::General::DockThemed;
274 else if (myDockTrayRadio->isChecked())
275 newDockMode = Config::General::DockTray;
276 #endif
277 }
278 generalConfig->setDockMode(newDockMode);
279 #ifndef USE_KDE
280 generalConfig->setDefaultIconFortyEight(myDockFortyEightCheck->isChecked());
281 generalConfig->setThemedIconTheme(myDockThemeCombo->currentText());
282 #endif
283 generalConfig->setTrayBlink(myDockTrayBlinkCheck->isChecked());
284 generalConfig->setTrayMsgOnlineNotify(myTrayMsgOnlineNotify->isChecked());
285
286 if (myNormalFontEdit->font() == Config::General::instance()->defaultFont())
287 generalConfig->setNormalFont(QString::null);
288 else
289 generalConfig->setNormalFont(myNormalFontEdit->font().toString());
290
291 if (myEditFontEdit->font() == Config::General::instance()->defaultFont())
292 generalConfig->setEditFont(QString::null);
293 else
294 generalConfig->setEditFont(myEditFontEdit->font().toString());
295
296 if (myHistoryFontEdit->font() == Config::General::instance()->defaultFont())
297 generalConfig->setHistoryFont(QString::null);
298 else
299 generalConfig->setHistoryFont(myHistoryFontEdit->font().toString());
300
301 if (myFixedFontEdit->font() == Config::General::instance()->defaultFixedFont())
302 generalConfig->setFixedFont(QString::null);
303 else
304 generalConfig->setFixedFont(myFixedFontEdit->font().toString());
305
306 generalConfig->blockUpdates(false);
307 }
308