29
29
#include "mucjoindlg.h"
30
30
#include "psicontactlist.h"
35
class MUCJoinDlg::Private
42
AccountsComboBox *cb_ident;
48
MUCJoinDlg::MUCJoinDlg(PsiCon *psi, PsiAccount *pa)
32
MUCJoinDlg::MUCJoinDlg(PsiCon* psi, PsiAccount* pa)
51
35
setAttribute(Qt::WA_DeleteOnClose);
57
d->psi->dialogRegister(this);
59
ck_history->setChecked(true);
40
controller_->dialogRegister(this);
41
ui_.ck_history->setChecked(true);
42
ui_.ck_history->hide();
43
joinButton_ = ui_.buttonBox->addButton(tr("&Join"), QDialogButtonBox::AcceptRole);
44
joinButton_->setDefault(true);
61
46
updateIdentity(pa);
63
d->cb_ident = d->psi->accountsComboBox(this,true);
64
connect(d->cb_ident, SIGNAL(activated(PsiAccount *)), SLOT(updateIdentity(PsiAccount *)));
65
d->cb_ident->setAccount(pa);
66
replaceWidget(lb_ident, d->cb_ident);
68
connect(d->psi, SIGNAL(accountCountChanged()), this, SLOT(updateIdentityVisibility()));
48
ui_.cb_ident->setController(controller_);
49
ui_.cb_ident->setOnlineOnly(true);
50
connect(ui_.cb_ident, SIGNAL(activated(PsiAccount *)), SLOT(updateIdentity(PsiAccount *)));
51
ui_.cb_ident->setAccount(pa);
53
connect(controller_, SIGNAL(accountCountChanged()), this, SLOT(updateIdentityVisibility()));
69
54
updateIdentityVisibility();
71
d->rl = d->psi->recentGCList();
72
for(QStringList::ConstIterator it = d->rl.begin(); it != d->rl.end(); ++it) {
74
QString s = tr("%1 on %2").arg(j.resource()).arg(JIDUtil::toString(j,false));
75
cb_recent->insertItem(s);
56
foreach(QString j, controller_->recentGCList()) {
58
QString s = tr("%1 on %2").arg(jid.resource()).arg(JIDUtil::toString(jid, false));
59
ui_.cb_recent->addItem(s);
60
ui_.cb_recent->setItemData(ui_.cb_recent->count()-1, QVariant(j));
78
63
setWindowTitle(CAP(caption()));
79
pb_join->setDefault(true);
80
connect(pb_close, SIGNAL(clicked()), SLOT(close()));
81
connect(pb_join, SIGNAL(clicked()), SLOT(doJoin()));
82
connect(cb_recent, SIGNAL(activated(int)), SLOT(recent_activated(int)));
84
cb_recent->setEnabled(false);
64
connect(ui_.cb_recent, SIGNAL(activated(int)), SLOT(recent_activated(int)));
65
if (!ui_.cb_recent->count()) {
66
ui_.cb_recent->setEnabled(false);
67
ui_.le_host->setFocus();
88
70
recent_activated(0);
73
setWidgetsEnabled(true);
91
77
MUCJoinDlg::~MUCJoinDlg()
94
d->psi->dialogUnregister(this);
96
d->pa->dialogUnregister(this);
80
controller_->dialogUnregister(this);
82
account_->dialogUnregister(this);
100
/*void MUCJoinDlg::closeEvent(QCloseEvent *e)
106
85
void MUCJoinDlg::done(int r)
108
if(d->busy->isActive()) {
87
if (ui_.busy->isActive()) {
109
88
//int n = QMessageBox::information(0, tr("Warning"), tr("Are you sure you want to cancel joining groupchat?"), tr("&Yes"), tr("&No"));
112
d->pa->groupChatLeave(d->jid.host(), d->jid.user());
91
account_->groupChatLeave(jid_.host(), jid_.user());
117
96
void MUCJoinDlg::updateIdentity(PsiAccount *pa)
120
disconnect(d->pa, SIGNAL(disconnected()), this, SLOT(pa_disconnected()));
123
pb_join->setEnabled(d->pa);
99
disconnect(account_, SIGNAL(disconnected()), this, SLOT(pa_disconnected()));
102
joinButton_->setEnabled(account_);
130
connect(d->pa, SIGNAL(disconnected()), this, SLOT(pa_disconnected()));
109
connect(account_, SIGNAL(disconnected()), this, SLOT(pa_disconnected()));
133
112
void MUCJoinDlg::updateIdentityVisibility()
135
bool visible = d->psi->contactList()->enabledAccounts().count() > 1;
136
d->cb_ident->setVisible(visible);
137
lb_identity->setVisible(visible);
114
bool visible = controller_->contactList()->enabledAccounts().count() > 1;
115
ui_.cb_ident->setVisible(visible);
116
ui_.lb_identity->setVisible(visible);
140
119
void MUCJoinDlg::pa_disconnected()
142
if(d->busy->isActive()) {
121
if (ui_.busy->isActive()) {
147
126
void MUCJoinDlg::recent_activated(int x)
152
for(QStringList::ConstIterator it = d->rl.begin(); it != d->rl.end(); ++it) {
128
Jid jid(ui_.cb_recent->itemData(x).toString());
129
if (jid.full().isEmpty())
164
le_host->setText(j.host());
165
le_room->setText(j.user());
166
le_nick->setText(j.resource());
132
ui_.le_host->setText(jid.host());
133
ui_.le_room->setText(jid.user());
134
ui_.le_nick->setText(jid.resource());
169
137
void MUCJoinDlg::doJoin()
171
if(!d->pa || !d->pa->checkConnected(this))
139
if (!account_ || !account_->checkConnected(this))
174
QString host = le_host->text();
175
QString room = le_room->text();
176
QString nick = le_nick->text();
177
QString pass = le_pass->text();
142
QString host = ui_.le_host->text();
143
QString room = ui_.le_room->text();
144
QString nick = ui_.le_nick->text();
145
QString pass = ui_.le_pass->text();
179
if(host.isEmpty() || room.isEmpty() || nick.isEmpty()) {
147
if (host.isEmpty() || room.isEmpty() || nick.isEmpty()) {
180
148
QMessageBox::information(this, tr("Error"), tr("You must fill out the fields in order to join."));
184
152
Jid j = room + '@' + host + '/' + nick;
186
154
QMessageBox::information(this, tr("Error"), tr("You entered an invalid room name."));
190
if(!d->pa->groupChatJoin(host, room, nick, pass, !ck_history->isChecked())) {
158
if (!account_->groupChatJoin(host, room, nick, pass, !ui_.ck_history->isChecked())) {
191
159
QMessageBox::information(this, tr("Error"), tr("You are in or joining this room already!"));
195
d->psi->dialogUnregister(this);
196
d->jid = room + '@' + host + '/' + nick;
197
d->pa->dialogRegister(this, d->jid);
203
void MUCJoinDlg::disableWidgets()
205
d->cb_ident->setEnabled(false);
206
cb_recent->setEnabled(false);
207
gb_info->setEnabled(false);
208
pb_join->setEnabled(false);
211
void MUCJoinDlg::enableWidgets()
213
d->cb_ident->setEnabled(true);
215
cb_recent->setEnabled(true);
216
gb_info->setEnabled(true);
217
pb_join->setEnabled(true);
163
controller_->dialogUnregister(this);
164
jid_ = room + '@' + host + '/' + nick;
165
account_->dialogRegister(this, jid_);
167
setWidgetsEnabled(false);
171
void MUCJoinDlg::setWidgetsEnabled(bool enabled)
173
ui_.cb_ident->setEnabled(enabled);
174
ui_.cb_recent->setEnabled(enabled && ui_.cb_recent->count() > 0);
175
ui_.gb_info->setEnabled(enabled);
176
joinButton_->setEnabled(enabled);
220
179
void MUCJoinDlg::joined()
222
d->psi->recentGCAdd(d->jid.full());
181
controller_->recentGCAdd(jid_.full());
225
184
closeDialogs(this);