diff --git a/retroshare-gui/src/gui/chat/PopupChatDialog.ui b/retroshare-gui/src/gui/chat/PopupChatDialog.ui
index c43f8a046..86e89ec3b 100644
--- a/retroshare-gui/src/gui/chat/PopupChatDialog.ui
+++ b/retroshare-gui/src/gui/chat/PopupChatDialog.ui
@@ -16,9 +16,6 @@
MainWindow
-
-
-
0
@@ -116,15 +113,6 @@
16777215
-
- border: transparent;
-
-
- QFrame::StyledPanel
-
-
- QFrame::Raised
-
0
@@ -133,7 +121,7 @@
0
-
-
+
116
@@ -162,7 +150,7 @@
-
-
+
116
@@ -215,8 +203,8 @@
AvatarWidget
- QWidget
- gui/common/AvatarWidget.h
+ QLabel
+ gui/common/avatarwidget.h
1
diff --git a/retroshare-gui/src/gui/common/AvatarWidget.cpp b/retroshare-gui/src/gui/common/AvatarWidget.cpp
index 09c2a94bd..c9d8b95e0 100644
--- a/retroshare-gui/src/gui/common/AvatarWidget.cpp
+++ b/retroshare-gui/src/gui/common/AvatarWidget.cpp
@@ -19,6 +19,7 @@
* Boston, MA 02110-1301, USA.
****************************************************************/
+#include
#include
#include
#include
@@ -33,7 +34,7 @@
#include
AvatarWidget::AvatarWidget(QWidget *parent) :
- QWidget(parent), ui(new Ui::AvatarWidget)
+ QLabel(parent), ui(new Ui::AvatarWidget)
{
ui->setupUi(this);
@@ -53,33 +54,30 @@ AvatarWidget::~AvatarWidget()
delete ui;
}
-static bool isSmall(const QSize &size)
+QString AvatarWidget::frameState()
{
- if (size.width() <= 70 && size.height() <= 70) {
- return true;
+ switch (mFrameType)
+ {
+ case NO_FRAME:
+ return "NOTHING";
+ case NORMAL_FRAME:
+ return "NORMAL";
+ case STATUS_FRAME:
+ switch (mPeerState)
+ {
+ case RS_STATUS_OFFLINE:
+ return "OFFLINE";
+ case RS_STATUS_INACTIVE:
+ return "INACTIVE";
+ case RS_STATUS_ONLINE:
+ return "ONLINE";
+ case RS_STATUS_AWAY:
+ return "AWAY";
+ case RS_STATUS_BUSY:
+ return "BUSY";
+ }
}
-
- return false;
-}
-
-void AvatarWidget::resizeEvent(QResizeEvent */*event*/)
-{
- if (mFrameType == NO_FRAME) {
- return;
- }
-
- QSize widgetSize = size();
- QSize avatarSize;
- if (isSmall(widgetSize)) {
- avatarSize = QSize(widgetSize.width() * 50 / 70, widgetSize.height() * 50 / 70);
- } else {
- avatarSize = QSize(widgetSize.width() * 96 / 116, widgetSize.height() * 96 / 116);
- }
- int x = (widgetSize.width() - avatarSize.width()) / 2;
- int y = (widgetSize.height() - avatarSize.height()) / 2;
- ui->avatarFrameLayout->setContentsMargins(x, y, x, y);
-
- refreshStatus();
+ return "NOTHING";
}
void AvatarWidget::mouseReleaseEvent(QMouseEvent */*event*/)
@@ -99,7 +97,6 @@ void AvatarWidget::setFrameType(FrameType type)
switch (mFrameType) {
case NO_FRAME:
disconnect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(QString,int)), this, SLOT(updateStatus(const QString&, int)));
- ui->avatarFrameLayout->setContentsMargins(0, 0, 0, 0);
break;
case NORMAL_FRAME:
disconnect(NotifyQt::getInstance(), SIGNAL(peerStatusChanged(QString,int)), this, SLOT(updateStatus(const QString&, int)));
@@ -111,6 +108,7 @@ void AvatarWidget::setFrameType(FrameType type)
refreshStatus();
updateAvatar(QString::fromStdString(mId));
+ Rshare::refreshStyleSheet(this, false);
}
void AvatarWidget::setId(const std::string &id, bool isGpg)
@@ -120,13 +118,13 @@ void AvatarWidget::setId(const std::string &id, bool isGpg)
if (mId == rsPeers->getOwnId()) {
mFlag.isOwnId = true;
- ui->avatar->setToolTip(tr("Click to change your avatar"));
+ setToolTip(tr("Click to change your avatar"));
}
- ui->avatar->setPixmap(QPixmap());
+ setPixmap(QPixmap());
if (mId.empty()) {
- ui->avatar->setEnabled(false);
+ setEnabled(false);
}
refreshStatus();
@@ -148,62 +146,25 @@ void AvatarWidget::refreshStatus()
{
switch (mFrameType) {
case NO_FRAME:
- ui->avatarFrame->setStyleSheet("");
- break;
case NORMAL_FRAME:
- ui->avatarFrame->setStyleSheet(isSmall(size()) ? "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-70.png); }" : "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-116.png); }");
+ {
+ Rshare::refreshStyleSheet(this, false);
break;
+ }
case STATUS_FRAME:
- {
- StatusInfo statusInfo;
+ {
+ StatusInfo statusInfo;
- if (mFlag.isOwnId) {
- rsStatus->getOwnStatus(statusInfo);
- } else {
- // No check of return value. Non existing status info is handled as offline.
- rsStatus->getStatus(mId, statusInfo);
- }
- updateStatus(QString::fromStdString(statusInfo.id), statusInfo.status);
+ if (mFlag.isOwnId) {
+ rsStatus->getOwnStatus(statusInfo);
+ } else {
+ // No check of return value. Non existing status info is handled as offline.
+ rsStatus->getStatus(mId, statusInfo);
}
+ updateStatus(QString::fromStdString(statusInfo.id), statusInfo.status);
break;
}
-}
-
-static QString getStatusFrame(bool small, int status)
-{
- if (small) {
- switch (status) {
- case RS_STATUS_OFFLINE:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-offline-70.png); }";
- case RS_STATUS_INACTIVE:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-idle-70.png); }";
- case RS_STATUS_ONLINE:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-online-70.png); }";
- case RS_STATUS_AWAY:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-away-70.png); }";
- case RS_STATUS_BUSY:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-busy-70.png); }";
- }
-
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-70.png); }";
- } else {
- switch (status) {
- case RS_STATUS_OFFLINE:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-offline-116.png); }";
- case RS_STATUS_INACTIVE:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-idle-116.png); }";
- case RS_STATUS_ONLINE:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-online-116.png); }";
- case RS_STATUS_AWAY:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-away-116.png); }";
- case RS_STATUS_BUSY:
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-busy-116.png); }";
- }
-
- return "QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-116.png); }";
}
-
- return "";
}
void AvatarWidget::updateStatus(const QString peerId, int status)
@@ -213,36 +174,31 @@ void AvatarWidget::updateStatus(const QString peerId, int status)
}
if (mId.empty()) {
- ui->avatarFrame->setStyleSheet(getStatusFrame(isSmall(size()), RS_STATUS_OFFLINE));
- return;
+ mPeerState = status;
+ Rshare::refreshStyleSheet(this, false);
+ } else {
+ /* set style for status */
+ if (mId == peerId.toStdString()) {
+ // the peers status has changed
+ mPeerState = status;
+ setEnabled(((uint32_t) status == RS_STATUS_OFFLINE) ? false : true);
+ Rshare::refreshStyleSheet(this, false);
+ }
}
-
- /* set style for status */
- if (mId == peerId.toStdString()) {
- // the peers status has changed
-
- ui->avatarFrame->setStyleSheet(getStatusFrame(isSmall(size()), status));
-
- ui->avatar->setEnabled(((uint32_t) status == RS_STATUS_OFFLINE) ? false : true);
-
- return;
- }
-
- // ignore status change
}
void AvatarWidget::updateAvatar(const QString &peerId)
{
if (mId.empty()) {
QPixmap avatar(defaultAvatar);
- ui->avatar->setPixmap(avatar);
+ setPixmap(avatar);
return;
}
if (mFlag.isOwnId) {
QPixmap avatar;
AvatarDefs::getOwnAvatar(avatar);
- ui->avatar->setPixmap(avatar);
+ setPixmap(avatar);
return;
}
@@ -251,7 +207,7 @@ void AvatarWidget::updateAvatar(const QString &peerId)
/* called from AvatarWidget with gpg id */
QPixmap avatar;
AvatarDefs::getAvatarFromGpgId(mId, avatar, defaultAvatar);
- ui->avatar->setPixmap(avatar);
+ setPixmap(avatar);
return;
}
@@ -265,7 +221,7 @@ void AvatarWidget::updateAvatar(const QString &peerId)
/* One of the ssl ids of the gpg id */
QPixmap avatar;
AvatarDefs::getAvatarFromGpgId(mId, avatar, defaultAvatar);
- ui->avatar->setPixmap(avatar);
+ setPixmap(avatar);
}
return;
@@ -274,7 +230,7 @@ void AvatarWidget::updateAvatar(const QString &peerId)
if (mId == peerId.toStdString()) {
QPixmap avatar;
AvatarDefs::getAvatarFromSslId(mId, avatar, defaultAvatar);
- ui->avatar->setPixmap(avatar);
+ setPixmap(avatar);
return;
}
}
diff --git a/retroshare-gui/src/gui/common/AvatarWidget.h b/retroshare-gui/src/gui/common/AvatarWidget.h
index 7deb1755a..e6fead199 100644
--- a/retroshare-gui/src/gui/common/AvatarWidget.h
+++ b/retroshare-gui/src/gui/common/AvatarWidget.h
@@ -22,15 +22,16 @@
#ifndef AVATARWIDGET_H
#define AVATARWIDGET_H
-#include
+#include
namespace Ui {
class AvatarWidget;
}
-class AvatarWidget : public QWidget
+class AvatarWidget : public QLabel
{
Q_OBJECT
+ Q_PROPERTY(QString frameState READ frameState)
public:
enum FrameType {
@@ -43,13 +44,13 @@ public:
AvatarWidget(QWidget *parent = 0);
~AvatarWidget();
+ QString frameState();
void setFrameType(FrameType type);
void setId(const std::string& id, bool isGpg);
void setOwnId();
void setDefaultAvatar(const QString &avatar);
protected:
- void resizeEvent(QResizeEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private slots:
@@ -69,6 +70,7 @@ private:
bool isGpg : 1;
} mFlag;
FrameType mFrameType;
+ uint32_t mPeerState;
};
#endif // AVATARWIDGET_H
diff --git a/retroshare-gui/src/gui/common/AvatarWidget.ui b/retroshare-gui/src/gui/common/AvatarWidget.ui
index 4fcdd9605..06b8108e2 100644
--- a/retroshare-gui/src/gui/common/AvatarWidget.ui
+++ b/retroshare-gui/src/gui/common/AvatarWidget.ui
@@ -1,7 +1,7 @@
AvatarWidget
-
+
0
@@ -10,36 +10,21 @@
116
-
-
- 0
-
-
-
-
-
- QFrame#avatarFrame{ border-image:url(:/images/avatarstatus-bg-116.png); }
-
-
-
- 10
-
-
-
-
-
- true
-
-
- true
-
-
- Qt::AlignCenter
-
-
-
-
-
-
-
+
+ AvatarWidget{border-width: 10px;}
+AvatarWidget[frameState="NORMAL"]{border-image:url(:/images/avatarstatus-bg-116.png);}
+AvatarWidget[frameState="OFFLINE"]{border-image:url(:/images/avatarstatus-bg-offline-116.png);}
+AvatarWidget[frameState="INACTIVE"]{border-image:url(:/images/avatarstatus-bg-idle-116.png);}
+AvatarWidget[frameState="ONLINE"]{border-image:url(:/images/avatarstatus-bg-online-116.png);}
+AvatarWidget[frameState="AWAY"]{border-image:url(:/images/avatarstatus-bg-away-116.png);}
+AvatarWidget[frameState="BUSY"]{border-image:url(:/images/avatarstatus-bg-busy-116.png);}
+
+
+ true
+
+
+ Qt::AlignCenter
+
diff --git a/retroshare-gui/src/rshare.cpp b/retroshare-gui/src/rshare.cpp
index 0e59ded84..13aeec2ab 100644
--- a/retroshare-gui/src/rshare.cpp
+++ b/retroshare-gui/src/rshare.cpp
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -374,6 +375,31 @@ void Rshare::loadStyleSheet(const QString &sheetName)
qApp->setStyleSheet(styleSheet);
}
+void Rshare::refreshStyleSheet(QWidget *widget, bool processChildren)
+{
+ if (widget != NULL) {
+ // force widget to recalculate valid style
+ widget->style()->unpolish(widget);
+ widget->style()->polish(widget);
+ // widget might need to recalculate properties (like margins) depending on style
+ QEvent event(QEvent::StyleChange);
+ QApplication::sendEvent(widget, &event);
+ // repaint widget
+ widget->update();
+
+ if (processChildren == true) {
+ // process children recursively
+ QObjectList childList = widget->children ();
+ for (QObjectList::Iterator it = childList.begin(); it != childList.end(); it++) {
+ QWidget *child = qobject_cast(*it);
+ if (child != NULL) {
+ refreshStyleSheet(child, processChildren);
+ }
+ }
+ }
+ }
+}
+
/** Initialize plugins. */
void Rshare::initPlugins()
{
diff --git a/retroshare-gui/src/rshare.h b/retroshare-gui/src/rshare.h
index e2bff7765..d06b195e7 100644
--- a/retroshare-gui/src/rshare.h
+++ b/retroshare-gui/src/rshare.h
@@ -79,6 +79,8 @@ public:
static bool setSheet(QString sheet = QString());
/** Loads stylesheet from external file **/
static void loadStyleSheet(const QString &sheetName);
+ /** Recalculates matching stylesheet for widget **/
+ static void refreshStyleSheet(QWidget *widget, bool processChildren);
/**
* Update Language, Style and StyleSheet.