1
/****************************************************************************
2
** optionsdlg.cpp - the preferences dialog
3
** Copyright (C) 2001, 2002 Justin Karneges
5
** This program is free software; you can redistribute it and/or
6
** modify it under the terms of the GNU General Public License
7
** as published by the Free Software Foundation; either version 2
8
** of the License, or (at your option) any later version.
10
** This program 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.
15
** You should have received a copy of the GNU General Public License
16
** along with this program; if not, write to the Free Software
17
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
19
****************************************************************************/
21
// default cvlist font? "Helvetica,10,5,50,0,0,0,0,0"
23
#include"optionsdlg.h"
27
#include<qcolordialog.h>
28
#include<qfontdialog.h>
33
#include<qinputdialog.h>
35
#include<qfiledialog.h>
43
static OptionsDlg *options_ptr = 0;
45
OptionsDlg::OptionsDlg(const Options &_opt, QWidget *parent, const char *name)
46
:OptionsUI(parent, name, FALSE, WDestructiveClose)
50
setCaption(CAP(tr("Options")));
56
ck_useleft->setChecked(opt.useleft);
57
ck_singleclick->setChecked(opt.singleclick);
59
bg_defAct = new QButtonGroup;
60
bg_defAct->setRadioButtonExclusive(TRUE);
61
bg_defAct->insert(rb_defActMsg, 0);
62
bg_defAct->insert(rb_defActChat, 1);
63
bg_defAct->setButton(opt.defaultAction);
67
ck_alwaysOnTop->setEnabled(FALSE);
69
ck_alwaysOnTop->setChecked(opt.alwaysOnTop);
72
bg_delChats = new QButtonGroup;
73
bg_delChats->setRadioButtonExclusive(TRUE);
74
bg_delChats->insert(rb_delChatsClose, 0);
75
bg_delChats->insert(rb_delChatsHour, 1);
76
bg_delChats->insert(rb_delChatsDay, 2);
77
bg_delChats->insert(rb_delChatsNever, 3);
78
bg_delChats->setButton(opt.delChats);
80
ck_keepSizes->setChecked(opt.keepSizes);
84
cb_link->insertItem(tr("Windows Default Browser/Mail"));
87
cb_link->insertItem(tr("KDE Default Browser/Mail"));
90
cb_link->insertItem(tr("MacOS Default Browser/Mail"));
92
#if !defined(Q_WS_MAC)
93
cb_link->insertItem(tr("Custom"));
95
connect(cb_link, SIGNAL(activated(int)), this, SLOT(selectBrowser(int)));
96
cb_link->setCurrentItem(opt.browser);
97
selectBrowser(opt.browser);
98
le_linkBrowser->setText(opt.customBrowser);
99
le_linkMailer->setText(opt.customMailer);
102
ck_docklet->setChecked(opt.useDock);
103
ck_dockDCstyle->setChecked(opt.dockDCstyle);
104
connect(ck_docklet, SIGNAL(toggled(bool)), ck_dockDCstyle, SLOT(setEnabled(bool)));
105
if(!ck_docklet->isChecked())
106
ck_dockDCstyle->setEnabled(FALSE);
109
gb_docking->setEnabled(FALSE);
112
// Look and Feel : Colors
113
bg_color = new QButtonGroup;
114
bg_color->insert(pb_cOnline, 0);
115
bg_color->insert(pb_cOffline, 1);
116
bg_color->insert(pb_cAway, 2);
117
bg_color->insert(pb_cDND, 3);
118
bg_color->insert(pb_cGroupFore, 4);
119
bg_color->insert(pb_cGroupBack, 5);
120
bg_color->insert(pb_cListBack, 6);
121
for(n = 0; n < 7; ++n) {
122
showColor((QPushButton *)bg_color->find(n), opt.color[n]);
124
connect(bg_color, SIGNAL(clicked(int)), this, SLOT(chooseColor(int)));
126
// Look and Feel : Fonts
127
le_font[0] = le_fRoster;
128
le_font[1] = le_fMessage;
129
le_font[2] = le_fChat;
130
for(n = 0; n < 3; ++n) {
131
le_font[n]->setText(opt.font[n]);
133
bg_font = new QButtonGroup;
134
bg_font->insert(pb_fRoster, 0);
135
bg_font->insert(pb_fMessage, 1);
136
bg_font->insert(pb_fChat, 2);
137
connect(bg_font, SIGNAL(clicked(int)), this, SLOT(chooseFont(int)));
139
// Look and Feel : Icon Set
140
QStringList descriptions;
141
getPsiIconSets(iconsets, descriptions);
142
cb_iconset->insertStringList(descriptions);
143
n = qstringlistmatch(iconsets, opt.iconset);
144
cb_iconset->setCurrentItem(n);
145
connect(cb_iconset, SIGNAL(activated(int)), this, SLOT(selectIconSet(int)));
148
ck_popupMsgs->setChecked(opt.popupMsgs);
149
ck_popupChats->setChecked(opt.popupChats);
150
ck_raise->setChecked(opt.raise);
151
cb_incomingAs->setCurrentItem(opt.incomingAs);
154
cb_outgoingAs->setCurrentItem(opt.outgoingAs);
157
bg_alerts->setButton(opt.alertStyle);
158
connect(bg_alerts, SIGNAL(clicked(int)), this, SLOT(selectAlertStyle(int)));
161
ck_ignoreHeadline->setChecked(opt.ignoreHeadline);
162
ck_scrollTo->setChecked(opt.scrollTo);
165
ck_askOnline->setChecked(opt.askOnline);
166
ck_rosterAnim->setChecked(opt.rosterAnim);
168
// Presence : Auto Status
169
sb_asAway->setMinValue(0);
170
sb_asAway->setValue(opt.asAway);
171
sb_asXa->setMinValue(0);
172
sb_asXa->setValue(opt.asXa);
173
sb_asOffline->setMinValue(0);
174
sb_asOffline->setValue(opt.asOffline);
175
if(!Idle::isSupported())
176
gb_autoStatus->setEnabled(FALSE);
178
// Presence : Status Presets
179
pb_spNew->setEnabled(TRUE);
180
pb_spDelete->setEnabled(FALSE);
181
te_sp->setEnabled(FALSE);
182
connect(pb_spNew, SIGNAL(clicked()), this, SLOT(newStatusPreset()));
183
connect(pb_spDelete, SIGNAL(clicked()), this, SLOT(removeStatusPreset()));
184
connect(te_sp, SIGNAL(textChanged()), this, SLOT(changeStatusPreset()));
185
connect(lb_sp, SIGNAL(highlighted(int)), this, SLOT(selectStatusPreset(int)));
186
lb_sp->insertStringList(opt.sp.varsToStringList());
187
if(lb_sp->count() >= 1)
188
lb_sp->setSelected(0, TRUE);
190
// Sound : Preferences
191
#if defined(Q_WS_WIN)
192
lb_player->setEnabled(FALSE);
193
le_player->setText(tr("Windows Sound"));
194
le_player->setEnabled(FALSE);
195
#elif defined(Q_WS_MAC)
196
lb_player->setEnabled(FALSE);
197
le_player->setText(tr("MacOS Sound"));
198
le_player->setEnabled(FALSE);
200
le_player->setText(opt.player);
202
ck_noAwaySound->setChecked(opt.noAwaySound);
205
le_oe[0] = le_oeMessage;
206
le_oe[1] = le_oeChat1;
207
le_oe[2] = le_oeChat2;
208
le_oe[3] = le_oeSystem;
209
le_oe[4] = le_oeOnline;
210
le_oe[5] = le_oeOffline;
211
le_oe[6] = le_oeSend;
212
for(n = 0; n < 7; ++n)
213
le_oe[n]->setText(opt.onevent[n]);
214
bg_oe = new QButtonGroup;
215
bg_oe->insert(pb_oeMessage, 0);
216
bg_oe->insert(pb_oeChat1, 1);
217
bg_oe->insert(pb_oeChat2, 2);
218
bg_oe->insert(pb_oeSystem, 3);
219
bg_oe->insert(pb_oeOnline, 4);
220
bg_oe->insert(pb_oeOffline, 5);
221
bg_oe->insert(pb_oeSend, 6);
222
connect(bg_oe, SIGNAL(clicked(int)), this, SLOT(chooseOnEvent(int)));
224
connect(pb_soundReset, SIGNAL(clicked()), this, SLOT(soundReset()));
226
connect(buttonApply, SIGNAL(clicked()), this, SLOT(apply()));
227
buttonApply->setEnabled(FALSE);
234
OptionsDlg::~OptionsDlg()
244
/* static */ OptionsDlg *OptionsDlg::find()
249
void OptionsDlg::accept()
256
void OptionsDlg::doApplyOptions()
258
opt.useleft = ck_useleft->isChecked();
259
opt.singleclick = ck_singleclick->isChecked();
260
opt.defaultAction = bg_defAct->id(bg_defAct->selected());
261
opt.delChats = bg_delChats->id(bg_delChats->selected());
262
opt.browser = cb_link->currentItem();
263
opt.alwaysOnTop = ck_alwaysOnTop->isChecked();
264
opt.rosterAnim = ck_rosterAnim->isChecked();
266
opt.useDock = ck_docklet->isChecked();
267
opt.dockDCstyle = ck_dockDCstyle->isChecked();
269
opt.customBrowser = le_linkBrowser->text();
270
opt.customMailer = le_linkMailer->text();
272
opt.popupMsgs = ck_popupMsgs->isChecked();
273
opt.popupChats = ck_popupChats->isChecked();
274
opt.raise = ck_raise->isChecked();
275
opt.incomingAs = cb_incomingAs->currentItem();
276
opt.outgoingAs = cb_outgoingAs->currentItem();
278
opt.askOnline = ck_askOnline->isChecked();
280
opt.asAway = sb_asAway->value();
281
opt.asXa = sb_asXa->value();
282
opt.asOffline = sb_asOffline->value();
284
opt.player = le_player->text();
285
opt.noAwaySound = ck_noAwaySound->isChecked();
287
opt.keepSizes = ck_keepSizes->isChecked();
288
opt.ignoreHeadline = ck_ignoreHeadline->isChecked();
289
opt.scrollTo = ck_scrollTo->isChecked();
291
// restore the default sizes
293
opt.sizeEventDlg = EventDlg::defaultSize();
294
opt.sizeChatDlg = ChatDlg::defaultSize();
297
for(int n = 0; n < 7; ++n)
298
opt.onevent[n] = le_oe[n]->text();
303
void OptionsDlg::showColor(QPushButton *pb, QColor c)
310
void OptionsDlg::chooseFont(int x)
314
font.fromString(opt.font[x]);
316
opt.font[x] = QFontDialog::getFont(&ok, font, this).toString();
317
le_font[x]->setText(opt.font[x]);
323
void OptionsDlg::chooseColor(int x)
325
QColor c = opt.color[x];
327
c = QColorDialog::getColor(c, this);
330
showColor((QPushButton *)bg_color->find(x), opt.color[x]);
336
void OptionsDlg::selectIconSet(int x)
338
opt.iconset = qstringlistlookup(iconsets, x);
341
void OptionsDlg::selectAlertStyle(int x)
346
void OptionsDlg::selectStatusPreset(int x)
349
pb_spDelete->setEnabled(FALSE);
352
te_sp->setEnabled(FALSE);
359
pb_spDelete->setEnabled(TRUE);
361
te_sp->setText(opt.sp.get(lb_sp->text(x)));
362
te_sp->setEnabled(TRUE);
367
void OptionsDlg::newStatusPreset()
373
text = QInputDialog::getText(
374
CAP(tr("New Status Preset")),
375
tr("Please enter a name for the new status preset:"),
376
QLineEdit::Normal, text, &ok, this);
381
QMessageBox::information(this, tr("Error"), tr("Can't create a blank preset!"));
382
else if(opt.sp.findByKey(text) != opt.sp.end())
383
QMessageBox::information(this, tr("Error"), tr("You already have a preset with that name!"));
388
opt.sp.set(text, "");
389
lb_sp->insertItem(text);
390
lb_sp->setSelected(lb_sp->count()-1, TRUE);
396
void OptionsDlg::removeStatusPreset()
398
int id = lb_sp->currentItem();
404
opt.sp.unset(lb_sp->text(id));
405
lb_sp->removeItem(id);
407
// select a new entry if possible
408
if(lb_sp->count() == 0) {
409
selectStatusPreset(-1);
413
if(id >= (int)lb_sp->count())
414
id = lb_sp->count()-1;
416
lb_sp->setSelected(id, TRUE);
417
selectStatusPreset(id);
420
void OptionsDlg::changeStatusPreset()
422
int id = lb_sp->currentItem();
426
opt.sp.set(lb_sp->text(id), te_sp->text());
430
void OptionsDlg::chooseOnEvent(int x)
432
QString str = QFileDialog::getOpenFileName(QDir::homeDirPath(), "Sound (*.wav)", this, "", "Choose a sound file");
434
le_oe[x]->setText(str);
439
void OptionsDlg::soundReset()
441
opt.onevent[eMessage] = g.pathBase + "/sound/chat2.wav";
442
opt.onevent[eChat1] = g.pathBase + "/sound/chat1.wav";
443
opt.onevent[eChat2] = g.pathBase + "/sound/chat2.wav";
444
opt.onevent[eSystem] = g.pathBase + "/sound/chat2.wav";
445
opt.onevent[eOnline] = g.pathBase + "/sound/online.wav";
446
opt.onevent[eOffline] = g.pathBase + "/sound/offline.wav";
447
opt.onevent[eSend] = g.pathBase + "/sound/send.wav";
449
for(int n = 0; n < 7; ++n)
450
le_oe[n]->setText(opt.onevent[n]);
455
void OptionsDlg::dataChanged()
461
buttonApply->setEnabled(TRUE);
464
void OptionsDlg::apply()
469
buttonApply->setEnabled(FALSE);
472
void OptionsDlg::selectBrowser(int x)
474
bool enableCustom = TRUE;
478
enableCustom = FALSE;
482
enableCustom = FALSE;
486
enableCustom = FALSE;
489
gb_linkCustom->setEnabled(enableCustom);