From da88f5f0bb5e73bc69bf7ed3962691622b1ae4f9 Mon Sep 17 00:00:00 2001 From: Manjeet Dahiya Date: Wed, 8 Sep 2010 09:23:18 +0000 Subject: add Gui Client example --- examples/GuiClient/statusWidget.cpp | 130 ++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 examples/GuiClient/statusWidget.cpp (limited to 'examples/GuiClient/statusWidget.cpp') diff --git a/examples/GuiClient/statusWidget.cpp b/examples/GuiClient/statusWidget.cpp new file mode 100644 index 00000000..0ad1ead6 --- /dev/null +++ b/examples/GuiClient/statusWidget.cpp @@ -0,0 +1,130 @@ +#include "statusWidget.h" +#include +#include +#include + +statusWidget::statusWidget(QWidget* parent) +{ + setupUi(this); + QMenu* menu = new QMenu(this); + menu->addAction(actionAvailable); + menu->addAction(actionBusy); + menu->addAction(actionAway); +// menu->addAction(actionInvisible); + menu->addSeparator(); + menu->addAction(actionSign_out); + toolButton_userName->setMenu(menu); + + bool check = connect(statusTextWidgetObject, SIGNAL(statusTextChanged(const QString&)), SIGNAL(statusTextChanged(const QString&))); + Q_ASSERT(check); + + check = connect(actionAvailable, SIGNAL(triggered()), SLOT(presenceMenuTriggered())); + Q_ASSERT(check); + check = connect(actionBusy, SIGNAL(triggered()), SLOT(presenceMenuTriggered())); + Q_ASSERT(check); + check = connect(actionAway, SIGNAL(triggered()), SLOT(presenceMenuTriggered())); + Q_ASSERT(check); + check = connect(actionInvisible, SIGNAL(triggered()), SLOT(presenceMenuTriggered())); + Q_ASSERT(check); + check = connect(actionSign_out, SIGNAL(triggered()), SLOT(presenceMenuTriggered())); + Q_ASSERT(check); + + check = connect(pushButton_avatar, SIGNAL(clicked()), SLOT(avatarSelection())); + Q_ASSERT(check); +} + +void statusWidget::setStatusText(const QString& statusText) +{ + statusTextWidgetObject->setStatusText(statusText); +} + +void statusWidget::presenceMenuTriggered() +{ + QString icon = "green"; + QAction* action = qobject_cast(sender()); + if(action == actionAvailable) + { + emit presenceTypeChanged(QXmppPresence::Available); + icon = "green"; + } + else if(action == actionBusy) + { + emit presenceStatusTypeChanged(QXmppPresence::Status::DND); + icon = "red"; + } + else if(action == actionAway) + { + emit presenceStatusTypeChanged(QXmppPresence::Status::Away); + icon = "orange"; + } + else if(action == actionInvisible) + { + emit presenceStatusTypeChanged(QXmppPresence::Status::Invisible); + icon = "gray"; + } + else if(action == actionSign_out) + { + emit presenceTypeChanged(QXmppPresence::Unavailable); + icon = "gray"; + } + label->setPixmap(QPixmap(":/icons/resource/"+icon+".png")); +} + +void statusWidget::setPresenceAndStatusType(QXmppPresence::Type presenceType, + QXmppPresence::Status::Type statusType) +{ + if(presenceType == QXmppPresence::Available) + { + QString icon = "green"; + switch(statusType) + { + case QXmppPresence::Status::Online: + case QXmppPresence::Status::Chat: + icon = "green"; + break; + case QXmppPresence::Status::Away: + case QXmppPresence::Status::XA: + icon = "orange"; + break; + case QXmppPresence::Status::DND: + icon = "red"; + break; + case QXmppPresence::Status::Invisible: + case QXmppPresence::Status::Offline: + icon = "gray"; + break; + } + label->setPixmap(QPixmap(":/icons/resource/"+icon+".png")); + } + else if(presenceType == QXmppPresence::Unavailable) + { + label->setPixmap(QPixmap(":/icons/resource/gray.png")); + } +} + +void statusWidget::avatarSelection() +{ + QString file = QFileDialog::getOpenFileName(this, "Select your avatar"); + if(file.isEmpty()) + return; + + QImage image; + if(image.load(file)) + { + QImage scaled = image.scaled(QSize(96, 96), Qt::KeepAspectRatio, + Qt::SmoothTransformation); + emit avatarChanged(scaled); + } + else + QMessageBox::information(this, "Avatar selection", "Invalid image file"); +} + +void statusWidget::setDisplayName(const QString& name) +{ + toolButton_userName->setText(name); +} + +void statusWidget::setAvatar(const QImage& image) +{ + pushButton_avatar->setIcon(QIcon(QPixmap::fromImage(image))); +} -- cgit v1.2.3