aboutsummaryrefslogtreecommitdiff
path: root/examples/GuiClient/mainDialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/GuiClient/mainDialog.cpp')
-rw-r--r--examples/GuiClient/mainDialog.cpp884
1 files changed, 0 insertions, 884 deletions
diff --git a/examples/GuiClient/mainDialog.cpp b/examples/GuiClient/mainDialog.cpp
deleted file mode 100644
index fa655cd0..00000000
--- a/examples/GuiClient/mainDialog.cpp
+++ /dev/null
@@ -1,884 +0,0 @@
-/*
- * Copyright (C) 2008-2014 The QXmpp developers
- *
- * Author:
- * Manjeet Dahiya
- *
- * Source:
- * https://github.com/qxmpp-project/qxmpp
- *
- * This file is a part of QXmpp library.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- */
-
-
-#include "mainDialog.h"
-#include "ui_mainDialog.h"
-
-#include "utils.h"
-#include "profileDialog.h"
-#include "aboutDialog.h"
-#include "chatDialog.h"
-
-#include "QXmppPresence.h"
-#include "QXmppMessage.h"
-#include "QXmppUtils.h"
-#include "QXmppVCardManager.h"
-
-#include <QMovie>
-#include <QCompleter>
-#include <QInputDialog>
-#include <QMessageBox>
-#include <QKeyEvent>
-
-
-mainDialog::mainDialog(QWidget *parent): QDialog(parent, Qt::Window),
- ui(new Ui::mainDialogClass), m_rosterItemModel(this),
- m_rosterItemSortFilterModel(this), m_vCardCache(&m_xmppClient),
- m_capabilitiesCache(&m_xmppClient), m_accountsCache(this),
-
-#ifndef QT_NO_SYSTEMTRAYICON
- m_trayIcon(this), m_trayIconMenu(this),
-#endif
-
- m_quitAction("Quit", this),
- m_signOutAction("Sign out", this),
- m_settingsMenu(0)
-{
- bool check;
- Q_UNUSED(check);
-
- ui->setupUi(this);
- createTrayIconAndMenu();
- createSettingsMenu();
-
- ui->pushButton_cancel->setDisabled(true);
- ui->label_throbber->setMovie(new QMovie(":/icons/resource/ajax-loader.gif"));
- ui->label_throbber->movie()->start();
- showSignInPage();
- loadAccounts();
-
- check = connect(ui->lineEdit_userName->completer(),
- SIGNAL(activated(QString)),
- this, SLOT(userNameCompleter_activated(QString)));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient.rosterManager(),
- SIGNAL(rosterReceived()),
- this, SLOT(rosterReceived()));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient.rosterManager(),
- SIGNAL(itemChanged(QString)),
- this, SLOT(rosterChanged(QString)));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient,
- SIGNAL(error(QXmppClient::Error)),
- this, SLOT(errorClient(QXmppClient::Error)));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient,
- SIGNAL(presenceReceived(QXmppPresence)),
- this, SLOT(presenceReceived(QXmppPresence)));
- Q_ASSERT(check);
-
- QXmppLogger::getLogger()->setLoggingType(QXmppLogger::SignalLogging);
-
-
- check = connect(&m_xmppClient.rosterManager(),
- SIGNAL(presenceChanged(QString,QString)),
- this, SLOT(presenceChanged(QString,QString)));
- Q_ASSERT(check);
-
- check = connect(ui->lineEdit_filter, SIGNAL(textChanged(QString)),
- this, SLOT(filterChanged(QString)));
- Q_ASSERT(check);
-
- check = connect(ui->listView, SIGNAL(showChatDialog(QString)),
- this, SLOT(showChatDialog(QString)));
- Q_ASSERT(check);
-
- check = connect(ui->listView, SIGNAL(showProfile(QString)),
- this, SLOT(showProfile(QString)));
- Q_ASSERT(check);
-
- check = connect(ui->listView, SIGNAL(removeContact(QString)),
- this, SLOT(action_removeContact(QString)));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient, SIGNAL(messageReceived(QXmppMessage)),
- SLOT(messageReceived(QXmppMessage)));
- Q_ASSERT(check);
-
- check = connect(ui->pushButton_signIn, SIGNAL(clicked(bool)), SLOT(signIn()));
- Q_ASSERT(check);
-
- check = connect(ui->pushButton_cancel, SIGNAL(clicked(bool)),
- SLOT(cancelSignIn()));
- Q_ASSERT(check);
-
- m_rosterItemSortFilterModel.setSourceModel(&m_rosterItemModel);
- ui->listView->setModel(&m_rosterItemSortFilterModel);
- m_rosterItemSortFilterModel.sort(0);
-
- rosterItemDelegate *delegate = new rosterItemDelegate();
- ui->listView->setItemDelegate(delegate);
- ui->listView->setFocus();
- ui->verticalLayout_3->insertWidget(0, &m_statusWidget);
-
- check = connect(&m_statusWidget, SIGNAL(statusTextChanged(QString)),
- SLOT(statusTextChanged(QString)));
- Q_ASSERT(check);
- check = connect(&m_statusWidget, SIGNAL(presenceTypeChanged(QXmppPresence::Type)),
- SLOT(presenceTypeChanged(QXmppPresence::Type)));
- Q_ASSERT(check);
- check = connect(&m_statusWidget,
- SIGNAL(presenceStatusTypeChanged(QXmppPresence::AvailableStatusType)),
- SLOT(presenceStatusTypeChanged(QXmppPresence::AvailableStatusType)));
- Q_ASSERT(check);
- check = connect(&m_statusWidget,
- SIGNAL(avatarChanged(QImage)),
- SLOT(avatarChanged(QImage)));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient, SIGNAL(connected()), SLOT(updateStatusWidget()));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient, SIGNAL(connected()), SLOT(showRosterPage()));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient, SIGNAL(connected()), SLOT(addAccountToCache()));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient, SIGNAL(disconnected()), SLOT(showSignInPageAfterUserDisconnection()));
- Q_ASSERT(check);
-
- check = connect(&m_xmppClient.vCardManager(),
- SIGNAL(vCardReceived(QXmppVCardIq)), &m_vCardCache,
- SLOT(vCardReceived(QXmppVCardIq)));
- Q_ASSERT(check);
-
- check = connect(&m_vCardCache,
- SIGNAL(vCardReadyToUse(QString)),
- SLOT(updateVCard(QString)));
- Q_ASSERT(check);
-
- check = connect(ui->pushButton_addContact, SIGNAL(clicked()), SLOT(action_addContact()));
- Q_ASSERT(check);
-
- check = connect(QXmppLogger::getLogger(),
- SIGNAL(message(QXmppLogger::MessageType,QString)),
- &m_consoleDlg,
- SLOT(message(QXmppLogger::MessageType,QString)));
- Q_ASSERT(check);
-
- check = connect(ui->pushButton_settings,
- SIGNAL(pressed()),
- SLOT(action_settingsPressed()));
- Q_ASSERT(check);
-}
-
-void mainDialog::rosterChanged(const QString& bareJid)
-{
- m_rosterItemModel.updateRosterEntry(bareJid, m_xmppClient.rosterManager().
- getRosterEntry(bareJid));
-
- // if available in cache, update it else based on presence it will request if not available
- if(m_vCardCache.isVCardAvailable(bareJid))
- updateVCard(bareJid);
-}
-
-void mainDialog::rosterReceived()
-{
- QStringList list = m_xmppClient.rosterManager().getRosterBareJids();
- QString bareJid;
- foreach(bareJid, list)
- rosterChanged(bareJid);
-}
-
-void mainDialog::presenceChanged(const QString& bareJid, const QString& resource)
-{
- if(bareJid == m_xmppClient.configuration().jidBare())
- return;
-
- if(!m_rosterItemModel.getRosterItemFromBareJid(bareJid))
- return;
-
- QString jid = bareJid + "/" + resource;
- QMap<QString, QXmppPresence> presences = m_xmppClient.rosterManager().
- getAllPresencesForBareJid(bareJid);
- m_rosterItemModel.updatePresence(bareJid, presences);
-
- QXmppPresence& pre = presences[resource];
-
- if(pre.type() == QXmppPresence::Available)
- {
- QString node = pre.capabilityNode();
- QString ver = pre.capabilityVer().toBase64();
- QStringList exts = pre.capabilityExt();
-
- QString nodeVer = node + "#" + ver;
- if(!m_capabilitiesCache.isCapabilityAvailable(nodeVer))
- m_capabilitiesCache.requestInfo(jid, nodeVer);
-
- foreach(QString ext, exts)
- {
- nodeVer = node + "#" + ext;
- if(!m_capabilitiesCache.isCapabilityAvailable(nodeVer))
- m_capabilitiesCache.requestInfo(jid, nodeVer);
- }
-
- switch(pre.vCardUpdateType())
- {
- case QXmppPresence::VCardUpdateNone:
- if(!m_vCardCache.isVCardAvailable(bareJid))
- m_vCardCache.requestVCard(bareJid);
- case QXmppPresence::VCardUpdateNotReady:
- break;
- case QXmppPresence::VCardUpdateNoPhoto:
- case QXmppPresence::VCardUpdateValidPhoto:
- if(m_vCardCache.getPhotoHash(bareJid) != pre.photoHash())
- m_vCardCache.requestVCard(bareJid);
- break;
- }
- }
-
-// QXmppPresence::Type presenceType = presences.begin().value().getType();
-
-// if(!m_vCardCache.isVCardAvailable(bareJid) &&
-// presenceType == QXmppPresence::Available)
-// {
-// m_rosterItemModel.updateAvatar(bareJid,
-// m_vCardCache.getVCard(bareJid).image);
-// }
-}
-
-void mainDialog::filterChanged(const QString& filter)
-{
- m_rosterItemSortFilterModel.setFilterRegExp(filter);
-
- // follow statement selects the first row
- ui->listView->selectionModel()->select(ui->listView->model()->index(0, 0),
- QItemSelectionModel::ClearAndSelect);
-}
-
-void mainDialog::keyPressEvent(QKeyEvent* event1)
-{
- if(ui->stackedWidget->currentIndex() == 0) // roster page
- {
- if(event1->matches(QKeySequence::Find) ||(
- event1->key() <= Qt::Key_9 && event1->key() >= Qt::Key_1) ||
- (event1->key() <= Qt::Key_Z && event1->key() >= Qt::Key_At) ||
- event1->key() == Qt::Key_Backspace)
- {
- ui->lineEdit_filter->setFocus();
- ui->lineEdit_filter->event(event1);
- }
- else if(event1->key() == Qt::Key_Escape)
- {
- ui->lineEdit_filter->clear();
- ui->listView->setFocus();
- }
- else if(event1->key() == Qt::Key_Up ||
- event1->key() == Qt::Key_Down ||
- event1->key() == Qt::Key_PageUp ||
- event1->key() == Qt::Key_PageDown)
- {
- ui->listView->setFocus();
- ui->listView->event(event1);
- }
- else if(event1->key() == Qt::Key_Return && ui->listView->hasFocus())
- {
- ui->listView->event(event1);
- }
- }
-
-// don't close on escape
- if(event1->key() == Qt::Key_Escape)
- {
- event1->ignore();
- return;
- }
-// FIXME: I'm not sure what this is supposed to do, but it does not compile.
-#if 0
- else if(minimize && e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_Period)
- {
- event1->ignore();
- return;
- }
-#endif
-// don't close on escape
-
- if(ui->stackedWidget->currentIndex() == 1) // sign in page
- {
- QDialog::keyPressEvent(event1);
- return;
- }
-}
-
-chatDialog* mainDialog::getChatDialog(const QString& bareJid)
-{
- if(!m_chatDlgsList.contains(bareJid))
- {
- m_chatDlgsList[bareJid] = new chatDialog();
- m_chatDlgsList[bareJid]->setBareJid(bareJid);
-
- if(!m_rosterItemModel.getRosterItemFromBareJid(bareJid))
- return 0;
-
- if(!m_rosterItemModel.getRosterItemFromBareJid(bareJid)->
- getName().isEmpty())
- m_chatDlgsList[bareJid]->setDisplayName(m_rosterItemModel.
- getRosterItemFromBareJid(bareJid)->getName());
- else
- m_chatDlgsList[bareJid]->setDisplayName(QXmppUtils::jidToUser(bareJid));
-
- m_chatDlgsList[bareJid]->setQXmppClient(&m_xmppClient);
- }
-
- return m_chatDlgsList[bareJid];
-}
-
-void mainDialog::showChatDialog(const QString& bareJid)
-{
- if(!bareJid.isEmpty())
- getChatDialog(bareJid)->show();
-}
-
-void mainDialog::messageReceived(const QXmppMessage& msg)
-{
- if (msg.body().isEmpty())
- return;
-
- chatDialog *dialog = getChatDialog(QXmppUtils::jidToBareJid(msg.from()));
- if (dialog) {
- dialog->show();
- dialog->messageReceived(msg.body());
- }
-}
-
-void mainDialog::statusTextChanged(const QString& status)
-{
- QXmppPresence presence = m_xmppClient.clientPresence();
- presence.setStatusText(status);
- addPhotoHash(presence);
- m_xmppClient.setClientPresence(presence);
-}
-
-void mainDialog::presenceTypeChanged(QXmppPresence::Type presenceType)
-{
- if(presenceType == QXmppPresence::Unavailable)
- {
- m_xmppClient.disconnectFromServer();
- }
- else if(presenceType == QXmppPresence::Available)
- {
- QXmppPresence newPresence = m_xmppClient.clientPresence();
- newPresence.setType(presenceType);
- newPresence.setAvailableStatusType(QXmppPresence::Online);
- addPhotoHash(newPresence);
- m_xmppClient.setClientPresence(newPresence);
- }
- m_statusWidget.setStatusText(
- presenceToStatusText(m_xmppClient.clientPresence()));
-}
-
-void mainDialog::presenceStatusTypeChanged(QXmppPresence::AvailableStatusType statusType)
-{
- QXmppPresence presence = m_xmppClient.clientPresence();
- presence.setType(QXmppPresence::Available);
- presence.setAvailableStatusType(statusType);
- addPhotoHash(presence);
- m_xmppClient.setClientPresence(presence);
- m_statusWidget.setStatusText(
- presenceToStatusText(m_xmppClient.clientPresence()));
-}
-
-void mainDialog::avatarChanged(const QImage& image)
-{
- QXmppVCardIq vcard;
- vcard.setType(QXmppIq::Set);
-
- QByteArray ba;
- QBuffer buffer(&ba);
- if(buffer.open(QIODevice::WriteOnly))
- {
- if(image.save(&buffer, "PNG"))
- {
- vcard.setPhoto(ba);
- m_xmppClient.sendPacket(vcard);
- m_statusWidget.setAvatar(image);
-
- m_vCardCache.getVCard(m_xmppClient.configuration().jidBare()) = vcard;
- // update photo hash
- QXmppPresence presence = m_xmppClient.clientPresence();
- addPhotoHash(presence);
- m_xmppClient.setClientPresence(presence);
- }
- }
-}
-
-void mainDialog::updateStatusWidget()
-{
- const QString bareJid = m_xmppClient.configuration().jidBare();
-
- // initialise status widget
- updateVCard(bareJid);
- m_statusWidget.setStatusText(presenceToStatusText(m_xmppClient.clientPresence()));
- m_statusWidget.setPresenceAndStatusType(m_xmppClient.clientPresence().type(),
- m_xmppClient.clientPresence().availableStatusType());
-
- // fetch own vCard
- m_vCardCache.requestVCard(bareJid);
-}
-
-void mainDialog::signIn()
-{
- ui->label_throbber->show();
- ui->pushButton_signIn->setDisabled(true);
- ui->pushButton_cancel->setDisabled(false);
- ui->lineEdit_userName->setDisabled(true);
- ui->lineEdit_password->setDisabled(true);
- ui->checkBox_rememberPasswd->setDisabled(true);
- showLoginStatusWithProgress("Connecting");
-
- QString bareJid = ui->lineEdit_userName->text();
- QString passwd = ui->lineEdit_password->text();
-
- m_xmppClient.configuration().setJid(bareJid);
- m_xmppClient.configuration().setPassword(passwd);
-
- m_rosterItemModel.clear();
-
- m_vCardCache.loadFromFile();
- m_capabilitiesCache.loadFromFile();
-
- startConnection();
-}
-
-void mainDialog::cancelSignIn()
-{
- if(!ui->checkBox_rememberPasswd->isChecked())
- ui->lineEdit_password->setText("");
-
- ui->label_throbber->hide();
- m_xmppClient.disconnectFromServer();
- showSignInPage();
- showLoginStatus("Sign in cancelled");
- addAccountToCache();
-}
-
-void mainDialog::showSignInPage()
-{
- ui->label_throbber->hide();
- ui->pushButton_signIn->setDisabled(false);
- ui->pushButton_cancel->setDisabled(true);
- ui->lineEdit_userName->setDisabled(false);
- ui->lineEdit_password->setDisabled(false);
- ui->checkBox_rememberPasswd->setDisabled(false);
- ui->stackedWidget->setCurrentIndex(1);
-}
-
-void mainDialog::showSignInPageAfterUserDisconnection()
-{
- if(!ui->checkBox_rememberPasswd->isChecked())
- ui->lineEdit_password->setText("");
-
- ui->label_throbber->hide();
-
- showLoginStatus("Disconnected");
- showSignInPage();
-}
-
-void mainDialog::showRosterPage()
-{
- ui->stackedWidget->setCurrentIndex(0);
-}
-
-void mainDialog::startConnection()
-{
-// m_xmppClient.setClientPresence(QXmppPresence());
- m_xmppClient.connectToServer(m_xmppClient.configuration());
-}
-
-void mainDialog::showLoginStatus(const QString& msg)
-{
- ui->label_status->setCustomText(msg, signInStatusLabel::None);
-}
-
-void mainDialog::showLoginStatusWithProgress(const QString& msg)
-{
- ui->label_status->setCustomText(msg, signInStatusLabel::WithProgressEllipsis);
-}
-
-void mainDialog::showLoginStatusWithCounter(const QString& msg, int time)
-{
- ui->label_status->setCustomText(msg, signInStatusLabel::CountDown, time);
-}
-
-void mainDialog::updateVCard(const QString& bareJid)
-{
- // determine full name
- const QXmppVCardIq vCard = m_vCardCache.getVCard(bareJid);
- QString fullName = vCard.fullName();
- if (fullName.isEmpty())
- fullName = bareJid;
-
- // determine avatar
- QImage avatar = m_vCardCache.getAvatar(bareJid);
- if (avatar.isNull())
- avatar = QImage(":/icons/resource/avatar.png");
-
- if (bareJid == m_xmppClient.configuration().jidBare()) {
- // update our own information
- m_statusWidget.setAvatar(avatar);
- m_statusWidget.setDisplayName(fullName);
- } else {
- // update roster information
- m_rosterItemModel.updateAvatar(bareJid, avatar);
- m_rosterItemModel.updateName(bareJid, fullName);
- }
-}
-
-void mainDialog::showProfile(const QString& bareJid)
-{
- if(bareJid.isEmpty())
- return;
-
- profileDialog dlg(this, bareJid, m_xmppClient, m_capabilitiesCache);
- dlg.setBareJid(bareJid);
- // TODO use original image
- if(!m_vCardCache.getAvatar(bareJid).isNull())
- dlg.setAvatar(m_vCardCache.getAvatar(bareJid));
- QStringList resources = m_xmppClient.rosterManager().getResources(bareJid);
-
- dlg.setFullName(m_vCardCache.getVCard(bareJid).fullName());
-
- if(m_vCardCache.getVCard(bareJid).fullName().isEmpty())
- dlg.setFullName(m_xmppClient.rosterManager().getRosterEntry(bareJid).name());
-
- dlg.exec();
-}
-
-void mainDialog::loadAccounts()
-{
- m_accountsCache.loadFromFile();
- QStringList list = m_accountsCache.getBareJids();
- QCompleter *completer = new QCompleter(list, this);
- completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
- completer->setCaseSensitivity(Qt::CaseInsensitive);
- ui->lineEdit_userName->setCompleter(completer);
-
- if(!list.isEmpty())
- {
- ui->lineEdit_userName->setText(list.last());
- QString passwd = m_accountsCache.getPassword(list.last());
- ui->lineEdit_password->setText(passwd);
- if(!passwd.isEmpty())
- ui->checkBox_rememberPasswd->setChecked(true);
- }
-}
-
-void mainDialog::userNameCompleter_activated(const QString& user)
-{
- QString passwd = m_accountsCache.getPassword(user);
- ui->lineEdit_password->setText(passwd);
- if(!passwd.isEmpty())
- ui->checkBox_rememberPasswd->setChecked(true);
-}
-
-void mainDialog::addAccountToCache()
-{
- QString bareJid = ui->lineEdit_userName->text();
- QString passwd = ui->lineEdit_password->text();
- if(!ui->checkBox_rememberPasswd->isChecked())
- passwd = "";
- m_accountsCache.addAccount(bareJid, passwd);
-}
-
-void mainDialog::action_signOut()
-{
- m_xmppClient.disconnectFromServer();
-
- // update widget
- m_statusWidget.setStatusText(
- presenceToStatusText(m_xmppClient.clientPresence()));
-}
-
-void mainDialog::action_quit()
-{
- m_xmppClient.disconnectFromServer();
- QApplication::quit();
-}
-
-void mainDialog::createTrayIconAndMenu()
-{
- bool check;
- Q_UNUSED(check);
-
- check = connect(&m_quitAction, SIGNAL(triggered()), SLOT(action_quit()));
- Q_ASSERT(check);
-
- check = connect(&m_signOutAction, SIGNAL(triggered()), SLOT(action_signOut()));
- Q_ASSERT(check);
-
-#ifndef QT_NO_SYSTEMTRAYICON
- m_trayIcon.setIcon(QIcon(":/icons/resource/icon.png"));
-
- check = connect(&m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
- SLOT(action_trayIconActivated(QSystemTrayIcon::ActivationReason)));
- Q_ASSERT(check);
-
- m_trayIconMenu.addAction(&m_signOutAction);
- m_trayIconMenu.addSeparator();
- m_trayIconMenu.addAction(&m_quitAction);
-
- m_trayIcon.setContextMenu(&m_trayIconMenu);
- m_trayIcon.show();
-#endif
-}
-
-void mainDialog::createSettingsMenu()
-{
- m_settingsMenu = new QMenu(ui->pushButton_settings);
-// ui->pushButton_settings->setMenu(m_settingsMenu);
-
- QAction* aboutDlg = new QAction("About", ui->pushButton_settings);
- connect(aboutDlg, SIGNAL(triggered()), SLOT(action_aboutDlg()));
- m_settingsMenu->addAction(aboutDlg);
-
- m_settingsMenu->addSeparator();
-
- QAction* showXml = new QAction("Show XML Console...", ui->pushButton_settings);
- connect(showXml, SIGNAL(triggered()), SLOT(action_showXml()));
- m_settingsMenu->addAction(showXml);
-
- QMenu* viewMenu = new QMenu("View", ui->pushButton_settings);
- m_settingsMenu->addMenu(viewMenu);
-
- QAction* showOfflineContacts = new QAction("Show offline contacts", ui->pushButton_settings);
- showOfflineContacts->setCheckable(true);
- showOfflineContacts->setChecked(true);
- connect(showOfflineContacts, SIGNAL(triggered(bool)),
- &m_rosterItemSortFilterModel, SLOT(setShowOfflineContacts(bool)));
- viewMenu->addAction(showOfflineContacts);
-
- QAction* sortByName = new QAction("Sort by name", ui->pushButton_settings);
- sortByName->setCheckable(true);
- sortByName->setChecked(false);
- connect(sortByName, SIGNAL(triggered(bool)),
- &m_rosterItemSortFilterModel, SLOT(sortByName(bool)));
- viewMenu->addAction(sortByName);
-
- m_settingsMenu->addSeparator();
- m_settingsMenu->addAction(&m_quitAction);
-}
-
-void mainDialog::closeEvent(QCloseEvent *event)
-{
- hide();
- event->ignore();
-}
-
-void mainDialog::action_trayIconActivated(QSystemTrayIcon::ActivationReason reason)
-{
- switch(reason)
- {
- case QSystemTrayIcon::Trigger:
- case QSystemTrayIcon::DoubleClick:
- show();
- break;
- default:
- ;
- }
-}
-
-void mainDialog::action_addContact()
-{
- bool ok;
- QString bareJid = QInputDialog::getText(this, "Add a jabber contact",
- "Contact ID:", QLineEdit::Normal, "", &ok);
-
- if(!ok)
- return;
-
- if(!isValidBareJid(bareJid))
- {
- QMessageBox::information(this, "Invalid ID", "Specified ID <I>"+bareJid + " </I> is invalid.");
- return;
- }
-
- if(ok && !bareJid.isEmpty())
- {
- QXmppPresence subscribe;
- subscribe.setTo(bareJid);
- subscribe.setType(QXmppPresence::Subscribe);
- m_xmppClient.sendPacket(subscribe);
- }
-}
-
-void mainDialog::presenceReceived(const QXmppPresence& presence)
-{
- QString from = presence.from();
-
- QString message;
- switch(presence.type())
- {
- case QXmppPresence::Subscribe:
- {
- message = "<B>%1</B> wants to subscribe";
-
- int retButton = QMessageBox::question(
- this, "Contact Subscription", message.arg(from),
- QMessageBox::Yes, QMessageBox::No);
-
- switch(retButton)
- {
- case QMessageBox::Yes:
- {
- QXmppPresence subscribed;
- subscribed.setTo(from);
- subscribed.setType(QXmppPresence::Subscribed);
- m_xmppClient.sendPacket(subscribed);
-
- // reciprocal subscription
- QXmppPresence subscribe;
- subscribe.setTo(from);
- subscribe.setType(QXmppPresence::Subscribe);
- m_xmppClient.sendPacket(subscribe);
- }
- break;
- case QMessageBox::No:
- {
- QXmppPresence unsubscribed;
- unsubscribed.setTo(from);
- unsubscribed.setType(QXmppPresence::Unsubscribed);
- m_xmppClient.sendPacket(unsubscribed);
- }
- break;
- default:
- break;
- }
-
- return;
- }
- break;
- case QXmppPresence::Subscribed:
- message = "<B>%1</B> accepted your request";
- break;
- case QXmppPresence::Unsubscribe:
- message = "<B>%1</B> unsubscribe";
- break;
- case QXmppPresence::Unsubscribed:
- message = "<B>%1</B> unsubscribed";
- break;
- default:
- return;
- break;
- }
-
- if(message.isEmpty())
- return;
-
- QMessageBox::information(this, "Contact Subscription", message.arg(from),
- QMessageBox::Ok);
-}
-
-void mainDialog::action_removeContact(const QString& bareJid)
-{
- if(!isValidBareJid(bareJid))
- return;
-
- int answer = QMessageBox::question(this, "Remove contact",
- QString("Do you want to remove the contact <I>%1</I>").arg(bareJid),
- QMessageBox::Yes, QMessageBox::No);
- if(answer == QMessageBox::Yes)
- {
- QXmppRosterIq remove;
- remove.setType(QXmppIq::Set);
- QXmppRosterIq::Item itemRemove;
- itemRemove.setSubscriptionType(QXmppRosterIq::Item::Remove);
- itemRemove.setBareJid(bareJid);
- remove.addItem(itemRemove);
- m_xmppClient.sendPacket(remove);
-
- m_rosterItemModel.removeRosterEntry(bareJid);
- }
-}
-
-void mainDialog::errorClient(QXmppClient::Error error)
-{
- ui->label_throbber->hide();
-
- showSignInPage();
-
- switch(error)
- {
- case QXmppClient::SocketError:
- showLoginStatus("Socket error");
- break;
- case QXmppClient::KeepAliveError:
- showLoginStatus("Keep alive error");
- break;
- case QXmppClient::XmppStreamError:
- switch(m_xmppClient.xmppStreamError())
- {
- case QXmppStanza::Error::NotAuthorized:
- showLoginStatus("Invalid password");
- break;
- default:
- showLoginStatus("Stream error");
- break;
- }
- break;
- default:
- break;
- }
-}
-
-void mainDialog::action_showXml()
-{
- m_consoleDlg.show();
-}
-
-void mainDialog::addPhotoHash(QXmppPresence& pre)
-{
- QString clientBareJid = m_xmppClient.configuration().jidBare();
-
- if(m_vCardCache.isVCardAvailable(clientBareJid))
- {
- QByteArray hash = m_vCardCache.getPhotoHash(clientBareJid);
- if(hash.isEmpty())
- pre.setVCardUpdateType(QXmppPresence::VCardUpdateNoPhoto);
- else
- pre.setVCardUpdateType(QXmppPresence::VCardUpdateValidPhoto);
- pre.setPhotoHash(hash);
- }
- else
- {
- pre.setVCardUpdateType(QXmppPresence::VCardUpdateNone);
- pre.setPhotoHash(QByteArray());
- }
-}
-
-void mainDialog::action_aboutDlg()
-{
- aboutDialog abtDlg(this);
- abtDlg.exec();
-}
-
-void mainDialog::action_settingsPressed()
-{
- m_settingsMenu->exec(ui->pushButton_settings->mapToGlobal(QPoint(0, ui->pushButton_settings->height())));
-}