fix previous patch so it does not use puzzle-style i18n()
[konversation:xdarklights-konversation.git] / src / config / settingsdialog.cpp
1 /*
2     This program is free software; you can redistribute it and/or modify
3     it under the terms of the GNU General Public License as published by
4     the Free Software Foundation; either version 2 of the License, or
5     (at your option) any later version.
6 */
7
8 /*
9   Copyright (C) 2006 John Tapsell <johnflux@gmail.com>
10   Copyright (C) 2006 Eike Hein <hein@kde.org>
11 */
12
13 #include "settingsdialog.h"
14 #include "configdialog.h"
15 #include "preferences.h"
16 #include "ui_chatwindowappearance_config.h"
17 #include "connectionbehavior_config.h"
18 #include "highlight_config.h"
19 #include "warnings_config.h"
20 #include "ui_log_config.h"
21 #include "quickbuttons_config.h"
22 #include "autoreplace_config.h"
23 #include "ui_chatwindowbehaviour_config.h"
24 #include "ui_fontappearance_config.h"
25 #include "nicklistbehavior_config.h"
26 #include "tabs_config.h"
27 #include "ui_colorsappearance_config.h"
28 #include "ui_generalbehavior_configui.h"
29 #include "dcc_config.h"
30 #include "osd_config.h"
31 #include "theme_config.h"
32 #include "alias_config.h"
33 #include "ignore_config.h"
34 #include "watchednicknames_config.h"
35 #include "ui_tabnotifications_config.h"
36
37 #include <config-konversation.h>
38
39
40 KonviSettingsDialog::KonviSettingsDialog( QWidget *parent) :
41     KonviConfigDialog( parent, "settings", Preferences::self(), KPageDialog::Tree)
42 {
43   m_modified = false;
44   QWidget *w = 0;
45
46   KPageWidgetItem *interfaceGroup = new KPageWidgetItem(new QWidget(this), i18n("Interface"));
47   interfaceGroup->setIcon(KIcon("preferences-desktop-theme"));
48   KPageDialog::addPage(interfaceGroup);
49
50   KPageWidgetItem *behaviorGroup = new KPageWidgetItem(new QWidget(this), i18n("Behavior"));
51   behaviorGroup->setIcon(KIcon("configure"));
52   KPageDialog::addPage(behaviorGroup);
53
54   KPageWidgetItem *notificationGroup = new KPageWidgetItem(new QWidget(this), i18n("Notifications"));
55   notificationGroup->setIcon(KIcon("preferences-desktop-notification"));
56   KPageDialog::addPage(notificationGroup);
57
58   //Interface/Chat Window
59   Ui::ChatWindowAppearance_Config confChatWindowAppearance;
60   w = new QWidget();
61   confChatWindowAppearance.setupUi(w);
62   confChatWindowAppearance.kcfg_TimestampFormat->addItem("hh:mm");
63   confChatWindowAppearance.kcfg_TimestampFormat->addItem("hh:mm:ss");
64   confChatWindowAppearance.kcfg_TimestampFormat->addItem("h:m ap");
65   addPage(w, interfaceGroup, "view-list-text", i18n("Chat Window"));
66
67   //Interface/Themes
68   m_confThemeWdg = new Theme_Config( this, "Theme" );
69   addPage ( m_confThemeWdg, interfaceGroup, "preferences-desktop-icons", i18n("Nicklist Themes") );
70   m_pages.append(m_confThemeWdg);
71   connect(m_confThemeWdg, SIGNAL(modified()), this, SLOT(modifiedSlot()));
72
73   //Interface/Colors
74   Ui::ColorsAppearance_Config confColorsAppearance;
75   w = new QWidget();
76   confColorsAppearance.setupUi(w);
77   addPage(w, interfaceGroup, "preferences-desktop-color", i18n("Colors"));
78
79   //Interface/Fonts
80   Ui::FontAppearance_Config confFontAppearance;
81   w = new QWidget();
82   confFontAppearance.setupUi(w);
83   addPage(w, interfaceGroup, "preferences-desktop-font", i18n("Fonts"));
84
85   //Interface/Quick Buttons
86   m_confQuickButtonsWdg = new QuickButtons_Config( this, "QuickButtons" );
87   addPage ( m_confQuickButtonsWdg, interfaceGroup, "preferences-desktop-keyboard", i18n("Quick Buttons") );
88   m_pages.append(m_confQuickButtonsWdg);
89   connect(m_confQuickButtonsWdg, SIGNAL(modified()), this, SLOT(modifiedSlot()));
90
91   //Interface/Tabs
92   m_confTabBarWdg = new Tabs_Config( this, "TabBar" );
93   addPage ( m_confTabBarWdg, interfaceGroup, "tab-new", i18n("Tabs") );
94
95   //Behavior/General
96   Ui::GeneralBehavior_ConfigUI confGeneralBehavior;
97   w = new QWidget();
98   confGeneralBehavior.setupUi(w);
99   #ifdef HAVE_KSTATUSNOTIFIERITEM
100   confGeneralBehavior.kcfg_TrayNotifyBlink->setVisible(false);
101   confGeneralBehavior.horizontalLayout_2->removeItem(confGeneralBehavior.spacer51_2);
102   confGeneralBehavior.horizontalLayout_2->setEnabled(false);
103   #endif
104   addPage( w, behaviorGroup, "configure", i18n("General") );
105
106   //Behavior/Connection
107   ConnectionBehavior_Config* confConnectionBehavior = new ConnectionBehavior_Config(this);
108   confConnectionBehavior->setObjectName("ConnectionBehavior");
109   addPage(confConnectionBehavior, behaviorGroup, "network-connect", i18n("Connection"));
110   m_pages.append(confConnectionBehavior);
111
112   //Behaviour/Chat Window
113   Ui::ChatwindowBehaviour_Config confChatwindowBehaviour;
114   w = new QWidget();
115   confChatwindowBehaviour.setupUi(w);
116   int maximumScrollbackLines = confChatwindowBehaviour.kcfg_ScrollbackMax->maximum();
117   QString formattedScrollbackLimit = KGlobal::locale()->formatNumber(maximumScrollbackLines, 0);
118   confChatwindowBehaviour.kcfg_ScrollbackMax->setToolTip(i18np("Maximum scrollback limit: 1 line.", "Maximum scrollback limit: %1 lines."), formattedScrollbackLimit);
119   addPage(w, behaviorGroup, "view-list-text", i18n("Chat Window"));
120
121   //Behaviour/Nickname List
122   m_confNicklistBehaviorWdg = new NicklistBehavior_Config( this, "NicklistBehavior" );
123   addPage ( m_confNicklistBehaviorWdg, behaviorGroup, "preferences-contact-list", i18n("Nickname List") );
124   connect(m_confNicklistBehaviorWdg, SIGNAL(modified()), this, SLOT(modifiedSlot()));
125   m_pages.append(m_confNicklistBehaviorWdg);
126
127   //Behaviour/Command Aliases
128   m_confAliasWdg = new Alias_Config( this, "Alias" );
129   addPage ( m_confAliasWdg, behaviorGroup, "edit-rename", i18n("Command Aliases") );
130   m_pages.append(m_confAliasWdg);
131   connect(m_confAliasWdg, SIGNAL(modified()), this, SLOT(modifiedSlot()));
132
133   //Behaviour/Auto Replace
134   m_confAutoreplaceWdg = new Autoreplace_Config( this, "Autoreplace" );
135   addPage ( m_confAutoreplaceWdg, behaviorGroup, "edit-rename", i18n("Auto Replace") );
136   m_pages.append(m_confAutoreplaceWdg);
137   connect(m_confAutoreplaceWdg, SIGNAL(modified()), this, SLOT(modifiedSlot()));
138
139   //Behaviour/Ignore
140   m_confIgnoreWdg = new Ignore_Config(this, "Ignore");
141   addPage ( m_confIgnoreWdg, behaviorGroup, "process-stop", i18n("Ignore") );
142   connect(m_confIgnoreWdg, SIGNAL(modified()), this, SLOT(modifiedSlot()));
143   m_pages.append(m_confIgnoreWdg);
144
145   //Behaviour/Logging
146   Ui::Log_Config confLog;
147   w = new QWidget();
148   confLog.setupUi(w);
149   confLog.kcfg_LogfilePath->setMode(KFile::Directory | KFile::ExistingOnly | KFile::LocalOnly);
150   addPage(w, behaviorGroup, "text-plain", i18n("Logging"));
151
152   m_confDCCWdg = new DCC_Config( this, "DCC" );
153   addPage ( m_confDCCWdg, behaviorGroup, "arrow-right-double", i18n("DCC") );
154
155   //Notifications/Tab Bar
156   Ui::TabNotifications_Config confTabNotifications;
157   w = new QWidget();
158   confTabNotifications.setupUi(w);
159   addPage(w, notificationGroup, "tab-new", i18n("Tabs"));
160
161   //Notification/Highlighting
162   m_confHighlightWdg = new Highlight_Config( this, "Highlight" );
163   addPage ( m_confHighlightWdg, notificationGroup, "flag-red", i18n("Highlight") );
164   connect(m_confHighlightWdg, SIGNAL(modified()), this, SLOT(modifiedSlot()));
165   m_pages.append(m_confHighlightWdg);
166
167   //Notification/Watched Nicknames
168   m_confWatchedNicknamesWdg = new WatchedNicknames_Config( this, "WatchedNicknames" );
169   // remember index so we can open this page later from outside
170   m_watchedNicknamesPage = addPage ( m_confWatchedNicknamesWdg, notificationGroup, "edit-find-user", i18n("Watched Nicknames") );
171   connect(m_confWatchedNicknamesWdg, SIGNAL(modified()), this, SLOT(modifiedSlot()));
172   m_pages.append(m_confWatchedNicknamesWdg);
173
174   //Notification/On Screen Display
175   m_confOSDWdg = new OSD_Config( this, "OSD" );
176   addPage ( m_confOSDWdg, notificationGroup, "video-display", i18n("On Screen Display") );
177   //no modified connection needed - it's all kcfg widgets
178   m_pages.append(m_confOSDWdg);
179
180   //Notification/Warning Dialogs
181   m_confWarningsWdg = new Warnings_Config( this, "Warnings" );
182   addPage ( m_confWarningsWdg, notificationGroup, "dialog-warning", i18n("Warning Dialogs") );
183   m_pages.append(m_confWarningsWdg);
184   connect(m_confWarningsWdg, SIGNAL(modified()), this, SLOT(modifiedSlot()));
185 }
186
187 void KonviSettingsDialog::modifiedSlot()
188 {
189   // this is for the non KConfigXT parts to tell us, if the user actually changed
190   // something or went back to the old settings
191 // kDebug();
192   m_modified = false;
193   foreach (KonviSettingsPage *page, m_pages)
194   {
195     if (page->hasChanged())
196     {
197       m_modified = true;
198 //      kDebug() << "modified!";
199       break;
200     }
201   }
202   updateButtons();
203 }
204
205 KonviSettingsDialog::~KonviSettingsDialog()
206 {
207 }
208
209 void KonviSettingsDialog::updateSettings()
210 {
211   foreach (KonviSettingsPage *page, m_pages)
212   {
213     // this is for the non KConfigXT parts to update the UI (like quick buttons)
214     page->saveSettings();
215   }
216   m_modified = false;
217   emit settingsChanged();
218 }
219
220 void KonviSettingsDialog::updateWidgets()
221 {
222   foreach (KonviSettingsPage *page, m_pages)
223   {
224     page->loadSettings();
225   }
226   m_modified = false;
227 }
228
229 void KonviSettingsDialog::updateWidgetsDefault()
230 {
231   foreach (KonviSettingsPage *page, m_pages)
232   {
233     page->restorePageToDefaults();
234   }
235   m_modified = true;
236 }
237
238 void KonviSettingsDialog::openWatchedNicknamesPage()
239 {
240   // page index has been calculated in the constructor
241   setCurrentPage(m_watchedNicknamesPage);
242 }
243
244 // accessor method - will be used by KonviConfigDialog::updateButtons()
245 bool KonviSettingsDialog::hasChanged()
246 {
247   return m_modified;
248 }
249
250 // accessor method - will be used by KonviConfigDialog::updateButtons()
251 bool KonviSettingsDialog::isDefault()
252 {
253   return true;
254 }
255
256 #include "settingsdialog.moc"
257