From 1ac900a0b97ceed2b9451f573f3c08ea002c2d87 Mon Sep 17 00:00:00 2001 From: Manjeet Dahiya Date: Fri, 10 Sep 2010 04:40:10 +0000 Subject: add software version details to the profileDialog --- examples/GuiClient/mainDialog.cpp | 22 +++++--------- examples/GuiClient/profileDialog.cpp | 59 ++++++++++++++++++++++++++++++++++-- examples/GuiClient/profileDialog.h | 17 +++++++++-- examples/GuiClient/profileDialog.ui | 37 +++++++++++++++------- 4 files changed, 105 insertions(+), 30 deletions(-) (limited to 'examples/GuiClient') diff --git a/examples/GuiClient/mainDialog.cpp b/examples/GuiClient/mainDialog.cpp index 35705e89..a24440d7 100644 --- a/examples/GuiClient/mainDialog.cpp +++ b/examples/GuiClient/mainDialog.cpp @@ -33,6 +33,8 @@ #include "QXmppVCardManager.h" #include "QXmppLogger.h" #include "QXmppVCardIq.h" +#include "QXmppRosterManager.h" +#include "QXmppRosterIq.h" #include "profileDialog.h" @@ -452,26 +454,16 @@ void mainDialog::showProfile(const QString& bareJid) if(bareJid.isEmpty()) return; - profileDialog dlg(this); + profileDialog dlg(this, bareJid, m_xmppClient); dlg.setBareJid(bareJid); - dlg.setAvatar(m_vCardManager.getVCard(bareJid).imageOriginal); + if(!m_vCardManager.getVCard(bareJid).imageOriginal.isNull()) + dlg.setAvatar(m_vCardManager.getVCard(bareJid).imageOriginal); QStringList resources = m_xmppClient.rosterManager().getResources(bareJid); dlg.setFullName(m_vCardManager.getVCard(bareJid).fullName); - QString statusText; - for(int i = 0; i < resources.count(); ++i) - { - QString resource = resources.at(i); - statusText += ""+ resource+ ""; - statusText += "
"; - QXmppPresence presence = m_xmppClient.rosterManager().getPresence(bareJid, resource); - statusText += presenceToStatusText(presence); - - if(i < resources.count() - 1) // skip for the last item - statusText += "

"; - } - dlg.setStatusText(statusText); + if(m_vCardManager.getVCard(bareJid).fullName.isEmpty()) + dlg.setFullName(m_xmppClient.rosterManager().getRosterEntry(bareJid).name()); dlg.exec(); } diff --git a/examples/GuiClient/profileDialog.cpp b/examples/GuiClient/profileDialog.cpp index 79d51d7f..1826fc27 100644 --- a/examples/GuiClient/profileDialog.cpp +++ b/examples/GuiClient/profileDialog.cpp @@ -1,11 +1,29 @@ #include "profileDialog.h" #include "ui_profileDialog.h" +#include "utils.h" -profileDialog::profileDialog(QWidget *parent) : +#include "QXmppClient.h" +#include "QXmppVersionIq.h" +#include "QXmppVersionManager.h" +#include "QXmppRosterManager.h" +#include "QXmppUtils.h" + +profileDialog::profileDialog(QWidget *parent, const QString& bareJid, QXmppClient& client) : QDialog(parent, Qt::WindowTitleHint|Qt::WindowSystemMenuHint), - ui(new Ui::profileDialog) + ui(new Ui::profileDialog), m_bareJid(bareJid), m_xmppClient(client) { ui->setupUi(this); + + bool check = connect(&m_xmppClient.versionManager(), SIGNAL(versionReceived(const QXmppVersionIq&)), + SLOT(versionReceived(const QXmppVersionIq&))); + Q_ASSERT(check); + + QStringList resources = m_xmppClient.rosterManager().getResources(bareJid); + foreach(QString resource, resources) + { + m_xmppClient.versionManager().requestVersion(bareJid + "/" + resource); + } + updateText(); } profileDialog::~profileDialog() @@ -26,6 +44,11 @@ void profileDialog::setBareJid(const QString& bareJid) void profileDialog::setFullName(const QString& fullName) { + if(fullName.isEmpty()) + ui->label_fullName->hide(); + else + ui->label_fullName->show(); + ui->label_fullName->setText(fullName); } @@ -33,3 +56,35 @@ void profileDialog::setStatusText(const QString& status) { ui->label_status->setText(status); } + +void profileDialog::versionReceived(const QXmppVersionIq& ver) +{ + m_versions[jidToResource(ver.from())] = ver; + if(ver.type() == QXmppIq::Result) + updateText(); +} + +void profileDialog::updateText() +{ + QStringList resources = m_xmppClient.rosterManager().getResources(m_bareJid); + QString statusText; + for(int i = 0; i < resources.count(); ++i) + { + QString resource = resources.at(i); + statusText += "Resource: " + resource; + statusText += "
"; + QXmppPresence presence = m_xmppClient.rosterManager().getPresence(m_bareJid, resource); + statusText += "Status: " + presenceToStatusText(presence); + statusText += "
"; + if(m_versions.contains(resource)) + statusText += "Software: " + QString("%1 %2 %3"). + arg(m_versions[resource].name()). + arg(m_versions[resource].version()). + arg(m_versions[resource].os()); + + if(i < resources.count() - 1) // skip for the last item + statusText += "

"; + } + setStatusText(statusText); +} + diff --git a/examples/GuiClient/profileDialog.h b/examples/GuiClient/profileDialog.h index ddcdd876..57718202 100644 --- a/examples/GuiClient/profileDialog.h +++ b/examples/GuiClient/profileDialog.h @@ -2,27 +2,40 @@ #define PROFILEDIALOG_H #include +#include namespace Ui { class profileDialog; } +class QXmppClient; +class QXmppVersionIq; + class profileDialog : public QDialog { Q_OBJECT public: - explicit profileDialog(QWidget *parent = 0); + explicit profileDialog(QWidget *parent, const QString& bareJid, QXmppClient& client); + ~profileDialog(); + void setClientRef(QXmppClient& m_xmppClient); void setAvatar(const QImage&); void setBareJid(const QString&); void setFullName(const QString&); void setStatusText(const QString&); - ~profileDialog(); +private slots: + void versionReceived(const QXmppVersionIq&); + +private: + void updateText(); private: Ui::profileDialog *ui; + QString m_bareJid; + QXmppClient& m_xmppClient; // reference to the active QXmppClient (No ownership) + QMap m_versions; }; #endif // PROFILEDIALOG_H diff --git a/examples/GuiClient/profileDialog.ui b/examples/GuiClient/profileDialog.ui index 8efe5e39..b21428a9 100644 --- a/examples/GuiClient/profileDialog.ui +++ b/examples/GuiClient/profileDialog.ui @@ -6,7 +6,7 @@ 0 0 - 238 + 297 174 @@ -42,7 +42,16 @@ - TextLabel + + + + :/icons/resource/avatar.png + + + true + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop @@ -108,18 +117,24 @@ - - - Qt::Horizontal - - - QDialogButtonBox::Close - - + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + - + + + buttonBox -- cgit v1.2.3