38
39
#include "userlist.h"
39
40
#include "jidutil.h"
40
41
#include "textutil.h"
42
#include "xmpp_tasks.h"
45
#define MCMDCHAT "http://psi-im.org/ids/mcmd#chatmain"
49
class PsiChatDlg::ChatDlgMCmdProvider : public QObject, public MCmdProviderIface {
52
ChatDlgMCmdProvider(PsiChatDlg *dlg) : dlg_(dlg) {};
54
virtual bool mCmdTryStateTransit(MCmdStateIface *oldstate, QStringList command, MCmdStateIface *&newstate, QStringList &preset) {
56
if (oldstate->getName() == MCMDCHAT) {
58
if (command.count() > 0) cmd = command[0].lower();
59
if (cmd == "version") {
60
JT_ClientVersion *version = new JT_ClientVersion(dlg_->account()->client()->rootTask());
61
connect(version, SIGNAL(finished()), SLOT(version_finished()));
63
//qDebug() << "querying: " << dlg_->jid().full();
64
version->get(dlg_->jid());
67
} else if (cmd == "clear") {
70
} else if (cmd == "vcard") {
73
} else if (cmd == "auth") {
74
if (command.count() == 2) {
75
if (command[1].lower() == "request") {
80
} else if (cmd == "compact") {
81
if (command.count() == 2) {
82
QString sub = command[1].lower();
84
dlg_->smallChat_ = true;
85
} else if ("off" == sub) {
86
dlg_->smallChat_ = false;
88
dlg_->appendSysMsg("usage: compact {on,off}");
91
dlg_->smallChat_ = !dlg_->smallChat_;
95
} else if (!cmd.isEmpty()) {
104
virtual QStringList mCmdTryCompleteCommand(MCmdStateIface *state, QString query, QStringList partcommand, int item) {
105
Q_UNUSED(partcommand);
107
if (state->getName() == MCMDCHAT) {
109
all << "version" << "clear" << "vcard" << "auth" << "compact";
113
foreach(QString cmd, all) {
114
if (cmd.startsWith(query)) {
121
virtual void mCmdSiteDestroyed() {};
122
virtual ~ChatDlgMCmdProvider() {};
126
void version_finished() {
127
JT_ClientVersion *version = qobject_cast<JT_ClientVersion*>(sender());
129
dlg_->appendSysMsg("Error in version getter!");
132
dlg_->appendSysMsg(QString("Version response: N: %2 V: %3 OS: %4")
133
.arg(version->name(), version->version(), version->os()));
42
142
PsiChatDlg::PsiChatDlg(const Jid& jid, PsiAccount* pa, TabManager* tabManager)
43
: ChatDlg(jid, pa, tabManager)
143
: ChatDlg(jid, pa, tabManager), mCmdManager_(&mCmdSite_), tabCompletion(&mCmdManager_)
45
145
connect(account()->psi(), SIGNAL(accountCountChanged()), this, SLOT(updateIdentityVisibility()));
146
mCmdManager_.registerProvider(new ChatDlgMCmdProvider(this));
48
149
void PsiChatDlg::initUi()
88
189
ui_.splitter->setSizes(list);
90
191
smallChat_ = PsiOptions::instance()->getOption("options.ui.chat.use-small-chats").toBool();
193
act_mini_cmd_ = new QAction(this);
194
act_mini_cmd_->setText(tr("Input command..."));
195
connect(act_mini_cmd_, SIGNAL(activated()), SLOT(doMiniCmd()));
196
addAction(act_mini_cmd_);
198
ui_.mini_prompt->hide();
93
202
void PsiChatDlg::updateCountVisibility()
164
276
void PsiChatDlg::initToolButtons()
166
act_clear_ = new IconAction(tr("Clear chat window"), "psi/clearChat", tr("Clear chat window"), 0, this);
278
act_clear_ = new IconAction(tr("Clear Chat Window"), "psi/clearChat", tr("Clear Chat Window"), 0, this);
167
279
connect(act_clear_, SIGNAL(activated()), SLOT(doClearButton()));
169
281
connect(account()->psi()->iconSelectPopup(), SIGNAL(textSelected(QString)), this, SLOT(addEmoticon(QString)));
170
act_icon_ = new IconAction(tr("Select icon"), "psi/smile", tr("Select icon"), 0, this);
282
act_icon_ = new IconAction(tr("Select Icon"), "psi/smile", tr("Select Icon"), 0, this);
171
283
act_icon_->setMenu(account()->psi()->iconSelectPopup());
172
284
ui_.tb_emoticons->setMenu(account()->psi()->iconSelectPopup());
175
287
connect(act_voice_, SIGNAL(activated()), SLOT(doVoice()));
176
288
act_voice_->setEnabled(false);
178
act_file_ = new IconAction(tr("Send file"), "psi/upload", tr("Send file"), 0, this);
290
act_file_ = new IconAction(tr("Send File"), "psi/upload", tr("Send File"), 0, this);
179
291
connect(act_file_, SIGNAL(activated()), SLOT(doFile()));
181
act_pgp_ = new IconAction(tr("Toggle encryption"), "psi/cryptoNo", tr("Toggle encryption"), 0, this, 0, true);
293
act_pgp_ = new IconAction(tr("Toggle Encryption"), "psi/cryptoNo", tr("Toggle Encryption"), 0, this, 0, true);
182
294
ui_.tb_pgp->setDefaultAction(act_pgp_);
184
act_info_ = new IconAction(tr("User info"), "psi/vCard", tr("User info"), 0, this);
296
act_info_ = new IconAction(tr("User Info"), "psi/vCard", tr("User Info"), 0, this);
185
297
connect(act_info_, SIGNAL(activated()), SLOT(doInfo()));
187
act_history_ = new IconAction(tr("Message history"), "psi/history", tr("Message history"), 0, this);
299
act_history_ = new IconAction(tr("Message History"), "psi/history", tr("Message History"), 0, this);
188
300
connect(act_history_, SIGNAL(activated()), SLOT(doHistory()));
190
act_compact_ = new IconAction(tr("Toggle Compact/Full size"), "psi/compact", tr("Toggle Compact/Full size"), 0, this);
302
act_compact_ = new IconAction(tr("Toggle Compact/Full Size"), "psi/compact", tr("Toggle Compact/Full Size"), 0, this);
191
303
connect(act_compact_, SIGNAL(activated()), SLOT(toggleSmallChat()));
194
306
void PsiChatDlg::initToolBar()
196
ui_.toolbar->setWindowTitle(tr("Chat toolbar"));
308
ui_.toolbar->setWindowTitle(tr("Chat Toolbar"));
197
309
ui_.toolbar->setIconSize(QSize(16, 16));
198
310
ui_.toolbar->addAction(act_clear_);
199
311
ui_.toolbar->addWidget(new StretchWidget(ui_.toolbar));
263
375
if (jid().resource().isEmpty())
264
376
j = JIDUtil::toString(u->jid(), true);
266
j = JIDUtil::toString(u->jid().userHost(), false) + '/' + jid().resource();
378
j = JIDUtil::toString(u->jid().bare(), false) + '/' + jid().resource();
268
380
if (!u->name().isEmpty())
269
381
name = u->name() + QString(" <%1>").arg(j);
453
565
connect(chatEdit(), SIGNAL(textChanged()), this, SLOT(updateCounter()));
454
566
chatEdit()->installEventFilter(this);
568
mCmdSite_.setInput(chatEdit());
569
mCmdSite_.setPrompt(ui_.mini_prompt);
570
tabCompletion.setTextEdit(chatEdit());
574
void PsiChatDlg::doSend() {
575
tabCompletion.reset();
576
if (mCmdSite_.isActive()) {
577
QString str = chatEdit()->text();
578
if (!mCmdManager_.processCommand(str)) {
579
appendSysMsg(tr("Error: Can not parse command: ") + str);
457
586
void PsiChatDlg::updateLastMsgTime(QDateTime t)
463
592
chatView()->appendText(QString("<font color=\"%1\">*** %2</font>").arg(color).arg(t.date().toString(Qt::ISODate)));
596
void PsiChatDlg::doMiniCmd()
598
mCmdManager_.open(new MCmdSimpleState(MCMDCHAT, tr("Command>")), QStringList() );
602
bool PsiChatDlg::eventFilter( QObject *obj, QEvent *ev ) {
603
if ( obj == chatEdit() && ev->type() == QEvent::KeyPress ) {
604
QKeyEvent *e = (QKeyEvent *)ev;
606
if ( e->key() == Qt::Key_Tab ) {
607
tabCompletion.tryComplete();
611
tabCompletion.reset();
615
return ChatDlg::eventFilter( obj, ev );
619
#include "psichatdlg.moc"