1
#include "opt_presence.h"
3
#include "iconwidget.h"
5
#include <qbuttongroup.h>
6
#include <qwhatsthis.h>
8
#include <qradiobutton.h>
10
#include <qlineedit.h>
12
#include <qtextedit.h>
13
#include <qinputdialog.h>
15
#include "opt_presence_auto.h"
16
#include "opt_presence_presets.h"
17
#include "opt_presence_misc.h"
19
//----------------------------------------------------------------------------
21
//----------------------------------------------------------------------------
23
OptionsTabPresence::OptionsTabPresence(QObject *parent)
24
: MetaOptionsTab(parent, "presence", "", tr("Presence"), tr("Configure the presence options"), "status/online")
26
addTab( new OptionsTabPresenceAuto(this) );
27
addTab( new OptionsTabPresencePresets(this) );
28
addTab( new OptionsTabPresenceMisc(this) );
31
//----------------------------------------------------------------------------
32
// OptionsTabPresenceAuto
33
//----------------------------------------------------------------------------
35
OptionsTabPresenceAuto::OptionsTabPresenceAuto(QObject *parent)
36
: OptionsTab(parent, "presence_auto", "presence", tr("Auto status"), tr("Configure your auto-idle status"))
41
QWidget *OptionsTabPresenceAuto::widget()
46
w = new PresenceAutoUI;
47
PresenceAutoUI *d = (PresenceAutoUI *)w;
49
QString s = tr("Makes Psi automatically set your status to \"away\" if your"
50
" computer is idle for the specified amount of time.");
51
QWhatsThis::add(d->ck_asAway, s);
52
QWhatsThis::add(d->sb_asAway, s);
53
s = tr("Makes Psi automatically set your status to \"extended away\" if your"
54
" computer is idle for the specified amount of time.");
55
QWhatsThis::add(d->ck_asXa, s);
56
QWhatsThis::add(d->sb_asXa, s);
57
s = tr("Makes Psi automatically set your status to \"offline\" if your"
58
" computer is idle for the specified amount of time."
59
" This will disconnect you from the Jabber server.");
60
QWhatsThis::add(d->ck_asOffline, s);
61
QWhatsThis::add(d->sb_asOffline, s);
63
QWhatsThis::add(d->te_asMessage,
64
tr("Specifies an extended message to use if you allow Psi"
65
" to set your status automatically. See options above."));
70
void OptionsTabPresenceAuto::applyOptions(Options *opt)
75
PresenceAutoUI *d = (PresenceAutoUI *)w;
76
opt->asAway = d->sb_asAway->value();
77
opt->asXa = d->sb_asXa->value();
78
opt->asOffline = d->sb_asOffline->value();
79
opt->use_asAway = d->ck_asAway->isChecked();
80
opt->use_asXa = d->ck_asXa->isChecked();
81
opt->use_asOffline = d->ck_asOffline->isChecked();
82
opt->asMessage = d->te_asMessage->text();
85
void OptionsTabPresenceAuto::restoreOptions(const Options *opt)
90
PresenceAutoUI *d = (PresenceAutoUI *)w;
91
d->sb_asAway->setMinValue(0);
92
d->sb_asAway->setValue( opt->asAway );
93
d->sb_asXa->setMinValue(0);
94
d->sb_asXa->setValue( opt->asXa );
95
d->sb_asOffline->setMinValue(0);
96
d->sb_asOffline->setValue( opt->asOffline );
97
/*if (opt->asAway <= 0 )
98
opt->use_asAway = FALSE;
100
opt->use_asXa = FALSE;
101
if(d->opt.asOffline <= 0)
102
opt->use_asOffline = FALSE;*/
103
d->ck_asAway->setChecked( opt->use_asAway );
104
d->ck_asXa->setChecked( opt->use_asXa );
105
d->ck_asOffline->setChecked( opt->use_asOffline );
106
d->te_asMessage->setText( opt->asMessage );
109
//----------------------------------------------------------------------------
110
// OptionsTabPresencePresets
111
//----------------------------------------------------------------------------
113
OptionsTabPresencePresets::OptionsTabPresencePresets(QObject *parent)
114
: OptionsTab(parent, "presence_presets", "presence", tr("Presets"), tr("Set up custom status presets"))
120
OptionsTabPresencePresets::~OptionsTabPresencePresets()
125
QWidget *OptionsTabPresencePresets::widget()
130
w = new PresencePresetsUI;
131
PresencePresetsUI *d = (PresencePresetsUI *)w;
133
d->pb_spNew->setEnabled(TRUE);
134
d->pb_spDelete->setEnabled(FALSE);
135
d->te_sp->setEnabled(FALSE);
136
connect(d->pb_spNew, SIGNAL(clicked()), SLOT(newStatusPreset()));
137
connect(d->pb_spDelete, SIGNAL(clicked()), SLOT(removeStatusPreset()));
138
connect(d->lb_sp, SIGNAL(highlighted(int)), SLOT(selectStatusPreset(int)));
139
connect(d->te_sp, SIGNAL(textChanged()), SLOT(changeStatusPreset()));
141
QWhatsThis::add(d->pb_spNew,
142
tr("Press this button to create a new status message preset."));
143
QWhatsThis::add(d->pb_spDelete,
144
tr("Press this button to delete a status message preset."));
145
QWhatsThis::add(d->lb_sp,
146
tr("Use this list to select a status message preset"
147
" to view or edit in the box to the right."));
148
QWhatsThis::add(d->te_sp,
149
tr("You may edit the message here for the currently selected"
150
" status message preset in the list to the left."));
155
void OptionsTabPresencePresets::setData(PsiCon *, QWidget *parentDialog)
157
parentWidget = parentDialog;
160
void OptionsTabPresencePresets::applyOptions(Options *opt)
168
void OptionsTabPresencePresets::restoreOptions(const Options *opt)
173
PresencePresetsUI *d = (PresencePresetsUI *)w;
176
d->lb_sp->insertStringList(o->sp.varsToStringList());
177
if(d->lb_sp->count() >= 1)
178
d->lb_sp->setSelected(0, TRUE);
181
void OptionsTabPresencePresets::selectStatusPreset(int x)
183
PresencePresetsUI *d = (PresencePresetsUI *)w;
186
disconnect(d->te_sp, SIGNAL(textChanged()), 0, 0);
188
d->pb_spDelete->setEnabled(false);
189
d->te_sp->setText("");
190
d->te_sp->setEnabled(false);
193
connect(d->te_sp, SIGNAL(textChanged()), SLOT(changeStatusPreset()));
197
d->pb_spDelete->setEnabled(true);
199
d->te_sp->setText( o->sp.get( d->lb_sp->text(x)) );
200
d->te_sp->setEnabled(true);
203
connect(d->te_sp, SIGNAL(textChanged()), SLOT(changeStatusPreset()));
206
void OptionsTabPresencePresets::newStatusPreset()
208
PresencePresetsUI *d = (PresencePresetsUI *)w;
214
text = QInputDialog::getText(
215
CAP(tr("New Status Preset")),
216
tr("Please enter a name for the new status preset:"),
217
QLineEdit::Normal, text, &ok, parentWidget);
222
QMessageBox::information(parentWidget, tr("Error"), tr("Can't create a blank preset!"));
223
else if(o->sp.findByKey(text) != o->sp.end())
224
QMessageBox::information(parentWidget, tr("Error"), tr("You already have a preset with that name!"));
230
d->lb_sp->insertItem(text);
231
d->lb_sp->setSelected(d->lb_sp->count()-1, TRUE);
232
d->te_sp->setFocus();
237
void OptionsTabPresencePresets::removeStatusPreset()
239
PresencePresetsUI *d = (PresencePresetsUI *)w;
240
int id = d->lb_sp->currentItem();
246
o->sp.unset(d->lb_sp->text(id));
247
d->lb_sp->removeItem(id);
249
// select a new entry if possible
250
if(d->lb_sp->count() == 0) {
251
selectStatusPreset(-1);
255
if(id >= (int)d->lb_sp->count())
256
id = d->lb_sp->count()-1;
258
d->lb_sp->setSelected(id, TRUE);
259
selectStatusPreset(id);
262
void OptionsTabPresencePresets::changeStatusPreset()
264
PresencePresetsUI *d = (PresencePresetsUI *)w;
265
int id = d->lb_sp->currentItem();
269
o->sp.set(d->lb_sp->text(id), d->te_sp->text());
273
//----------------------------------------------------------------------------
274
// OptionsTabPresenceMisc
275
//----------------------------------------------------------------------------
277
OptionsTabPresenceMisc::OptionsTabPresenceMisc(QObject *parent)
278
: OptionsTab(parent, "presence_misc", "presence", tr("Misc"), tr("Miscellaneous settings"))
283
QWidget *OptionsTabPresenceMisc::widget()
288
w = new PresenceMiscUI;
289
PresenceMiscUI *d = (PresenceMiscUI *)w;
291
QWhatsThis::add(d->ck_askOnline,
292
tr("Jabber allows you to put extended status messages on"
293
" all status types. Normally, Psi does not prompt you for"
294
" an extended message when you set your status to \"online\"."
295
" Check this option if you want to have this prompt."));
296
QWhatsThis::add(d->ck_rosterAnim,
297
tr("Makes Psi animate contact names in the main window when they come online."));
298
QWhatsThis::add(d->ck_autoVersion,
299
tr("Automatically sends iq:version query to contact when he becomes online. This allows you to determine what clien he is using to get online. Note: results in increased traffic."));
300
QWhatsThis::add(d->ck_autoVCardOnLogin,
301
tr("By default, Psi always checks your vCard on login. If you want to save some traffic, you can uncheck this option."));
306
void OptionsTabPresenceMisc::applyOptions(Options *opt)
311
PresenceMiscUI *d = (PresenceMiscUI *)w;
312
opt->askOnline = d->ck_askOnline->isChecked();
313
opt->rosterAnim = d->ck_rosterAnim->isChecked();
314
opt->autoVersion = d->ck_autoVersion->isChecked();
315
opt->autoVCardOnLogin = d->ck_autoVCardOnLogin->isChecked();
318
void OptionsTabPresenceMisc::restoreOptions(const Options *opt)
323
PresenceMiscUI *d = (PresenceMiscUI *)w;
324
d->ck_askOnline->setChecked( opt->askOnline );
325
d->ck_rosterAnim->setChecked( opt->rosterAnim );
326
d->ck_autoVersion->setChecked( opt->autoVersion );
327
d->ck_autoVCardOnLogin->setChecked( opt->autoVCardOnLogin );