~ubuntu-branches/ubuntu/jaunty/psi/jaunty

« back to all changes in this revision

Viewing changes to src/options/opt_presence.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jan Niehusmann
  • Date: 2005-01-10 17:41:43 UTC
  • mfrom: (1.2.1 upstream) (2.1.2 hoary)
  • Revision ID: james.westby@ubuntu.com-20050110174143-ltocv5zapl6blf5d
Tags: 0.9.3-1
* New upstream release
* Cleaned up debian/rules (some things are done by upstream Makefiles now)
* Fixed some lintian warnings:
  - removed executable bit from some .png files
  - moved psi.desktop to /usr/share/applications
* Updated menu files

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "opt_presence.h"
 
2
#include "common.h"
 
3
#include "iconwidget.h"
 
4
 
 
5
#include <qbuttongroup.h>
 
6
#include <qwhatsthis.h>
 
7
#include <qcheckbox.h>
 
8
#include <qradiobutton.h>
 
9
#include <qcombobox.h>
 
10
#include <qlineedit.h>
 
11
#include <qspinbox.h>
 
12
#include <qtextedit.h>
 
13
#include <qinputdialog.h>
 
14
 
 
15
#include "opt_presence_auto.h"
 
16
#include "opt_presence_presets.h"
 
17
#include "opt_presence_misc.h"
 
18
 
 
19
//----------------------------------------------------------------------------
 
20
// OptionsTabPresence
 
21
//----------------------------------------------------------------------------
 
22
 
 
23
OptionsTabPresence::OptionsTabPresence(QObject *parent)
 
24
: MetaOptionsTab(parent, "presence", "", tr("Presence"), tr("Configure the presence options"), "status/online")
 
25
{
 
26
        addTab( new OptionsTabPresenceAuto(this) );
 
27
        addTab( new OptionsTabPresencePresets(this) );
 
28
        addTab( new OptionsTabPresenceMisc(this) );
 
29
}
 
30
 
 
31
//----------------------------------------------------------------------------
 
32
// OptionsTabPresenceAuto
 
33
//----------------------------------------------------------------------------
 
34
 
 
35
OptionsTabPresenceAuto::OptionsTabPresenceAuto(QObject *parent)
 
36
: OptionsTab(parent, "presence_auto", "presence", tr("Auto status"), tr("Configure your auto-idle status"))
 
37
{
 
38
        w = 0;
 
39
}
 
40
 
 
41
QWidget *OptionsTabPresenceAuto::widget()
 
42
{
 
43
        if ( w )
 
44
                return 0;
 
45
 
 
46
        w = new PresenceAutoUI;
 
47
        PresenceAutoUI *d = (PresenceAutoUI *)w;
 
48
 
 
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);
 
62
 
 
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."));
 
66
 
 
67
        return w;
 
68
}
 
69
 
 
70
void OptionsTabPresenceAuto::applyOptions(Options *opt)
 
71
{
 
72
        if ( !w )
 
73
                return;
 
74
 
 
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();
 
83
}
 
84
 
 
85
void OptionsTabPresenceAuto::restoreOptions(const Options *opt)
 
86
{
 
87
        if ( !w )
 
88
                return;
 
89
 
 
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;
 
99
        if (opt->asXa <= 0 )
 
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 );
 
107
}
 
108
 
 
109
//----------------------------------------------------------------------------
 
110
// OptionsTabPresencePresets
 
111
//----------------------------------------------------------------------------
 
112
 
 
113
OptionsTabPresencePresets::OptionsTabPresencePresets(QObject *parent)
 
114
: OptionsTab(parent, "presence_presets", "presence", tr("Presets"), tr("Set up custom status presets"))
 
115
{
 
116
        w = 0;
 
117
        o = new Options;
 
118
}
 
119
 
 
120
OptionsTabPresencePresets::~OptionsTabPresencePresets()
 
121
{
 
122
        delete o;
 
123
}
 
124
 
 
125
QWidget *OptionsTabPresencePresets::widget()
 
126
{
 
127
        if ( w )
 
128
                return 0;
 
129
 
 
130
        w = new PresencePresetsUI;
 
131
        PresencePresetsUI *d = (PresencePresetsUI *)w;
 
132
 
 
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()));
 
140
 
 
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."));
 
151
 
 
152
        return w;
 
153
}
 
154
 
 
155
void OptionsTabPresencePresets::setData(PsiCon *, QWidget *parentDialog)
 
156
{
 
157
        parentWidget = parentDialog;
 
158
}
 
159
 
 
160
void OptionsTabPresencePresets::applyOptions(Options *opt)
 
161
{
 
162
        if ( !w )
 
163
                return;
 
164
 
 
165
        opt->sp = o->sp;
 
166
}
 
167
 
 
168
void OptionsTabPresencePresets::restoreOptions(const Options *opt)
 
169
{
 
170
        if ( !w )
 
171
                return;
 
172
 
 
173
        PresencePresetsUI *d = (PresencePresetsUI *)w;
 
174
 
 
175
        o->sp = opt->sp;
 
176
        d->lb_sp->insertStringList(o->sp.varsToStringList());
 
177
        if(d->lb_sp->count() >= 1)
 
178
                d->lb_sp->setSelected(0, TRUE);
 
179
}
 
180
 
 
181
void OptionsTabPresencePresets::selectStatusPreset(int x)
 
182
{
 
183
        PresencePresetsUI *d = (PresencePresetsUI *)w;
 
184
 
 
185
        //noDirty = TRUE;
 
186
        disconnect(d->te_sp, SIGNAL(textChanged()), 0, 0);
 
187
        if ( x == -1 ) {
 
188
                d->pb_spDelete->setEnabled(false);
 
189
                d->te_sp->setText("");
 
190
                d->te_sp->setEnabled(false);
 
191
 
 
192
                //noDirty = FALSE;
 
193
                connect(d->te_sp, SIGNAL(textChanged()), SLOT(changeStatusPreset()));
 
194
                return;
 
195
        }
 
196
 
 
197
        d->pb_spDelete->setEnabled(true);
 
198
 
 
199
        d->te_sp->setText( o->sp.get( d->lb_sp->text(x)) );
 
200
        d->te_sp->setEnabled(true);
 
201
 
 
202
        //noDirty = FALSE;
 
203
        connect(d->te_sp, SIGNAL(textChanged()), SLOT(changeStatusPreset()));
 
204
}
 
205
 
 
206
void OptionsTabPresencePresets::newStatusPreset()
 
207
{
 
208
        PresencePresetsUI *d = (PresencePresetsUI *)w;
 
209
 
 
210
        QString text;
 
211
 
 
212
        while(1) {
 
213
                bool ok = FALSE;
 
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);
 
218
                if(!ok)
 
219
                        return;
 
220
 
 
221
                if(text.isEmpty())
 
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!"));
 
225
                else
 
226
                        break;
 
227
        }
 
228
 
 
229
        o->sp.set(text, "");
 
230
        d->lb_sp->insertItem(text);
 
231
        d->lb_sp->setSelected(d->lb_sp->count()-1, TRUE);
 
232
        d->te_sp->setFocus();
 
233
 
 
234
        emit dataChanged();
 
235
}
 
236
 
 
237
void OptionsTabPresencePresets::removeStatusPreset()
 
238
{
 
239
        PresencePresetsUI *d = (PresencePresetsUI *)w;
 
240
        int id = d->lb_sp->currentItem();
 
241
        if(id == -1)
 
242
                return;
 
243
 
 
244
        emit dataChanged();
 
245
 
 
246
        o->sp.unset(d->lb_sp->text(id));
 
247
        d->lb_sp->removeItem(id);
 
248
 
 
249
        // select a new entry if possible
 
250
        if(d->lb_sp->count() == 0) {
 
251
                selectStatusPreset(-1);
 
252
                return;
 
253
        }
 
254
 
 
255
        if(id >= (int)d->lb_sp->count())
 
256
                id = d->lb_sp->count()-1;
 
257
 
 
258
        d->lb_sp->setSelected(id, TRUE);
 
259
        selectStatusPreset(id);
 
260
}
 
261
 
 
262
void OptionsTabPresencePresets::changeStatusPreset()
 
263
{
 
264
        PresencePresetsUI *d = (PresencePresetsUI *)w;
 
265
        int id = d->lb_sp->currentItem();
 
266
        if(id == -1)
 
267
                return;
 
268
 
 
269
        o->sp.set(d->lb_sp->text(id), d->te_sp->text());
 
270
        emit dataChanged();
 
271
}
 
272
 
 
273
//----------------------------------------------------------------------------
 
274
// OptionsTabPresenceMisc
 
275
//----------------------------------------------------------------------------
 
276
 
 
277
OptionsTabPresenceMisc::OptionsTabPresenceMisc(QObject *parent)
 
278
: OptionsTab(parent, "presence_misc", "presence", tr("Misc"), tr("Miscellaneous settings"))
 
279
{
 
280
        w = 0;
 
281
}
 
282
 
 
283
QWidget *OptionsTabPresenceMisc::widget()
 
284
{
 
285
        if ( w )
 
286
                return 0;
 
287
 
 
288
        w = new PresenceMiscUI;
 
289
        PresenceMiscUI *d = (PresenceMiscUI *)w;
 
290
 
 
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."));
 
302
 
 
303
        return w;
 
304
}
 
305
 
 
306
void OptionsTabPresenceMisc::applyOptions(Options *opt)
 
307
{
 
308
        if ( !w )
 
309
                return;
 
310
 
 
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();
 
316
}
 
317
 
 
318
void OptionsTabPresenceMisc::restoreOptions(const Options *opt)
 
319
{
 
320
        if ( !w )
 
321
                return;
 
322
 
 
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 );
 
328
}