From 4cdd83cc89f9c5c5735da84b28d0335f0aa9791d Mon Sep 17 00:00:00 2001 From: defnax Date: Fri, 21 Nov 2014 01:54:21 +0000 Subject: [PATCH] * Enabled by default to display Friends Avatar on Friendslist * Changed for RS 0.6 the status icons * beautify the status string which displays after nicknames git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7695 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- retroshare-gui/src/gui/FriendsDialog.cpp | 2 +- retroshare-gui/src/gui/MainWindow.cpp | 12 +++++------ retroshare-gui/src/gui/common/FriendList.cpp | 12 ++++++----- retroshare-gui/src/gui/common/StatusDefs.cpp | 19 ++++++++++++++++++ retroshare-gui/src/gui/common/StatusDefs.h | 1 + retroshare-gui/src/gui/images.qrc | 5 +++++ .../gui/images/status/user-away-extended.png | Bin 0 -> 1658 bytes .../src/gui/images/status/user-away.png | Bin 0 -> 1482 bytes .../src/gui/images/status/user-busy.png | Bin 0 -> 1218 bytes .../src/gui/images/status/user-offline.png | Bin 0 -> 1272 bytes .../src/gui/images/status/user-online.png | Bin 0 -> 1308 bytes 11 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 retroshare-gui/src/gui/images/status/user-away-extended.png create mode 100644 retroshare-gui/src/gui/images/status/user-away.png create mode 100644 retroshare-gui/src/gui/images/status/user-busy.png create mode 100644 retroshare-gui/src/gui/images/status/user-offline.png create mode 100644 retroshare-gui/src/gui/images/status/user-online.png diff --git a/retroshare-gui/src/gui/FriendsDialog.cpp b/retroshare-gui/src/gui/FriendsDialog.cpp index b33d009b4..e8d083ae6 100644 --- a/retroshare-gui/src/gui/FriendsDialog.cpp +++ b/retroshare-gui/src/gui/FriendsDialog.cpp @@ -201,7 +201,7 @@ FriendsDialog::FriendsDialog(QWidget *parent) RsAutoUpdatePage::lockAllEvents(); ui.friendList->setShowStatusColumn(false); ui.friendList->setShowLastContactColumn(false); - ui.friendList->setShowAvatarColumn(false); + ui.friendList->setShowAvatarColumn(true); ui.friendList->setShowIPColumn(false); ui.friendList->setRootIsDecorated(true); ui.friendList->setShowGroups(true); diff --git a/retroshare-gui/src/gui/MainWindow.cpp b/retroshare-gui/src/gui/MainWindow.cpp index 3c1be1fbe..47e4b86de 100644 --- a/retroshare-gui/src/gui/MainWindow.cpp +++ b/retroshare-gui/src/gui/MainWindow.cpp @@ -1320,19 +1320,19 @@ void MainWindow::initializeStatusObject(QObject *pObject, bool bConnect) /* initialize menu */ QActionGroup *pGroup = new QActionGroup(pMenu); - QAction *pAction = new QAction(QIcon(StatusDefs::imageIM(RS_STATUS_ONLINE)), StatusDefs::name(RS_STATUS_ONLINE), pMenu); + QAction *pAction = new QAction(QIcon(StatusDefs::imageStatus(RS_STATUS_ONLINE)), StatusDefs::name(RS_STATUS_ONLINE), pMenu); pAction->setData(RS_STATUS_ONLINE); pAction->setCheckable(true); pMenu->addAction(pAction); pGroup->addAction(pAction); - pAction = new QAction(QIcon(StatusDefs::imageIM(RS_STATUS_BUSY)), StatusDefs::name(RS_STATUS_BUSY), pMenu); + pAction = new QAction(QIcon(StatusDefs::imageStatus(RS_STATUS_BUSY)), StatusDefs::name(RS_STATUS_BUSY), pMenu); pAction->setData(RS_STATUS_BUSY); pAction->setCheckable(true); pMenu->addAction(pAction); pGroup->addAction(pAction); - pAction = new QAction(QIcon(StatusDefs::imageIM(RS_STATUS_AWAY)), StatusDefs::name(RS_STATUS_AWAY), pMenu); + pAction = new QAction(QIcon(StatusDefs::imageStatus(RS_STATUS_AWAY)), StatusDefs::name(RS_STATUS_AWAY), pMenu); pAction->setData(RS_STATUS_AWAY); pAction->setCheckable(true); pMenu->addAction(pAction); @@ -1345,9 +1345,9 @@ void MainWindow::initializeStatusObject(QObject *pObject, bool bConnect) /* initialize combobox */ QComboBox *pComboBox = dynamic_cast(pObject); if (pComboBox) { - pComboBox->addItem(QIcon(StatusDefs::imageIM(RS_STATUS_ONLINE)), StatusDefs::name(RS_STATUS_ONLINE), RS_STATUS_ONLINE); - pComboBox->addItem(QIcon(StatusDefs::imageIM(RS_STATUS_BUSY)), StatusDefs::name(RS_STATUS_BUSY), RS_STATUS_BUSY); - pComboBox->addItem(QIcon(StatusDefs::imageIM(RS_STATUS_AWAY)), StatusDefs::name(RS_STATUS_AWAY), RS_STATUS_AWAY); + pComboBox->addItem(QIcon(StatusDefs::imageStatus(RS_STATUS_ONLINE)), StatusDefs::name(RS_STATUS_ONLINE), RS_STATUS_ONLINE); + pComboBox->addItem(QIcon(StatusDefs::imageStatus(RS_STATUS_BUSY)), StatusDefs::name(RS_STATUS_BUSY), RS_STATUS_BUSY); + pComboBox->addItem(QIcon(StatusDefs::imageStatus(RS_STATUS_AWAY)), StatusDefs::name(RS_STATUS_AWAY), RS_STATUS_AWAY); if (bConnect) { connect(pComboBox, SIGNAL(activated(int)), this, SLOT(statusChangedComboBox(int))); diff --git a/retroshare-gui/src/gui/common/FriendList.cpp b/retroshare-gui/src/gui/common/FriendList.cpp index 31fd888cb..2299b8967 100644 --- a/retroshare-gui/src/gui/common/FriendList.cpp +++ b/retroshare-gui/src/gui/common/FriendList.cpp @@ -296,6 +296,7 @@ void FriendList::initializeHeader(bool /*afterLoadSettings*/) header->resizeSection(COLUMN_NAME, 150); header->resizeSection(COLUMN_LAST_CONTACT, 120); }*/ + header->resizeSection(COLUMN_NAME, 220); header->resizeSection(COLUMN_AVATAR, COLUMN_AVATAR_WIDTH); } @@ -1083,7 +1084,7 @@ void FriendList::insertPeers() gpgItem->setFont(i, font); } - gpgIcon = QIcon(StatusDefs::imageUser(bestRSState)); + gpgIcon = QIcon(StatusDefs::imageStatus(bestRSState)); if (!isStatusColumnHidden) { gpgItem->setText(COLUMN_STATE, StatusDefs::name(bestRSState)); @@ -1096,13 +1097,13 @@ void FriendList::insertPeers() gpgItemText += "\n" + bestCustomStateString; } } else if (isStatusColumnHidden && !mHideState){ - gpgItemText += " [" + StatusDefs::name(bestRSState) + "]"; + gpgItemText += " - " + StatusDefs::name(bestRSState); } } else if (gpg_online) { if (!isStatusColumnHidden) { gpgItem->setText(COLUMN_STATE, tr("Available")); } else if (!mHideState && !mBigName) { - gpgItemText += " [" + tr("Available") + "]"; + gpgItemText += " - " + tr("Available") ; } bestPeerState = PEER_STATE_AVAILABLE; @@ -1121,12 +1122,12 @@ void FriendList::insertPeers() if (!isStatusColumnHidden) { gpgItem->setText(COLUMN_STATE, StatusDefs::name(RS_STATUS_OFFLINE)); } else if (!mHideState && !mBigName) { - gpgItemText += " [" + StatusDefs::name(RS_STATUS_OFFLINE) + "]"; + gpgItemText += " - " + StatusDefs::name(RS_STATUS_OFFLINE) ; } bestPeerState = PEER_STATE_OFFLINE; gpgItem->setHidden(mHideUnconnected); - gpgIcon = QIcon(StatusDefs::imageUser(RS_STATUS_OFFLINE)); + gpgIcon = QIcon(StatusDefs::imageStatus(RS_STATUS_OFFLINE)); QColor textColor = mTextColorStatus[RS_STATUS_OFFLINE]; QFont font = StatusDefs::font(RS_STATUS_OFFLINE); @@ -1769,6 +1770,7 @@ void FriendList::setShowAvatarColumn(bool show) ui->peerTreeWidget->setColumnHidden(COLUMN_AVATAR, !show); updateHeader(); + initializeHeader(true); insertPeers(); } diff --git a/retroshare-gui/src/gui/common/StatusDefs.cpp b/retroshare-gui/src/gui/common/StatusDefs.cpp index 6945605c5..954d1413d 100644 --- a/retroshare-gui/src/gui/common/StatusDefs.cpp +++ b/retroshare-gui/src/gui/common/StatusDefs.cpp @@ -82,6 +82,25 @@ const char *StatusDefs::imageUser(unsigned int status) return ""; } +const char *StatusDefs::imageStatus(unsigned int status) +{ + switch (status) { + case RS_STATUS_OFFLINE: + return ":/images/status/user-offline.png"; + case RS_STATUS_AWAY: + return ":/images/status/user-away.png"; + case RS_STATUS_BUSY: + return ":/images/status/user-busy.png"; + case RS_STATUS_ONLINE: + return ":/images/status/user-online.png"; + case RS_STATUS_INACTIVE: + return ":/images/status/user-away-extended.png"; + } + + std::cerr << "StatusDefs::imageUser: Unknown status requested " << status; + return ""; +} + QString StatusDefs::tooltip(unsigned int status) { switch (status) { diff --git a/retroshare-gui/src/gui/common/StatusDefs.h b/retroshare-gui/src/gui/common/StatusDefs.h index d96abb57d..f21298428 100644 --- a/retroshare-gui/src/gui/common/StatusDefs.h +++ b/retroshare-gui/src/gui/common/StatusDefs.h @@ -34,6 +34,7 @@ public: static QString name(unsigned int status); static const char* imageIM(unsigned int status); static const char* imageUser(unsigned int status); + static const char* imageStatus(unsigned int status); static QString tooltip(unsigned int status); static QFont font(unsigned int status); diff --git a/retroshare-gui/src/gui/images.qrc b/retroshare-gui/src/gui/images.qrc index 4e2cdf64c..c95676b82 100644 --- a/retroshare-gui/src/gui/images.qrc +++ b/retroshare-gui/src/gui/images.qrc @@ -680,6 +680,11 @@ images/tags/dev-translator.png images/tags/dev-patcher.png images/tags/developer.png + images/status/user-online.png + images/status/user-offline.png + images/status/user-busy.png + images/status/user-away-extended.png + images/status/user-away.png images/circles/circles_32.png images/circles/circles_64.png images/newsfeed/news-feed-32.png diff --git a/retroshare-gui/src/gui/images/status/user-away-extended.png b/retroshare-gui/src/gui/images/status/user-away-extended.png new file mode 100644 index 0000000000000000000000000000000000000000..e348a306000bda92003bd56c4760ce65a84435d1 GIT binary patch literal 1658 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 literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/gui/images/status/user-busy.png b/retroshare-gui/src/gui/images/status/user-busy.png new file mode 100644 index 0000000000000000000000000000000000000000..85453b4e46dd48787591cc60bf3a8c58bf2a82cc GIT binary patch literal 1218 zcmV;z1U>tSP)X`vgzMJbp@3dLd;HMP;PNth(_|IGYqA!7Z&vC{Jd~QS==; zq)sZut=6Mz-&2mDT9u{SxADjHwElhf?i#l~`3IOj(|G1tfUCfnbUHox=E;+IZFm?C zof?`L(|E86q8fS7Fht08K>Krc7QbG;4A1jEJq~>N3;=2QFp*4Nf4f+eT|+~fWXQ%k zHb!Ag+YAtf5`l!Fk|udPKaZa$CbV9weMGvxZ2?%$>0oZp@Njm|kt0YtjyewGcO1|* z0U96-UpE1Q05tvuQsesm&6|3EcGl9h-_|60yd@DfVR4{gkPqnP*(l!xatSO=m#0!@4FcC{z5_AbQ&g^RGQE%fD%k#vxzg{ z5HM;wmB@LmrZl0!_dK1Onvy3$P-lJK5Ei!BY0UU;IvN}q5jUTQNu|_rUEv&o3Bj6~ zMD8s`_Hf2d!)jFn-xtpCOC^0UGb4Wycs&fqAZqsJ2tK7eNx4 zj5^FF!L?y+=)BQ%4FJk$AW?HsO+y0ID-{hGb)C-FxPHWa+h~Dpv{*%NWQ{r6NB!wx zv{Y10q|;&=(MMg~YBURAHHeL7yVqtw5UqQjP)YHW>m>$2shEkRBEGo>C>L`t8PmlR zg>KhHipFkkP{Zi0Hf_}+t3BH2Vz7%*rLEFrQ+Wx|^;~akv##d$rpl}Fy!jPshhv4!&bCsF+!2iGW+W>8Twg7vHlaCv##3}l0 g;s0ii?eN+1FOo#Y#I=_;hyVZp07*qoM6N<$f<{VF4*&oF literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/gui/images/status/user-offline.png b/retroshare-gui/src/gui/images/status/user-offline.png new file mode 100644 index 0000000000000000000000000000000000000000..d896ddf92f65abcd3f28a986da676c8204dfa596 GIT binary patch literal 1272 zcmVDVT8Bnx%pv@=L2>m*3rDY{X?#)degH|iz^ zf*WyYgy>20A)AR=yO&Jod1$vGMuc-QDlLzP{gvg@rj%Qc_H8Y^($Y1!??? ziwm>2w`bSa*Ujna>1SMj0q8Y={(BPO)vH$~Dk|y+Z0>YAoniU;`GULk^YcUUo~@Se zA$xmsb7NLkR%B*o#^Qd4r0UPk&ffO*_1Q-O>gwu#3Jwl#Eh#CH%*;$d1p+W#y4eMS z*m_4mU8q177Z+uGd|XgnOJ`^29}fUPOO?OB|C_S1GLx2;rdc~24hFRdVhHA40fJfp zvl6+zz13<~S65|pbkts7U;hZY`aJ+mO-;{n`;eQP8~WIVL0|L`FtN?EL(^I)~*~RaKd+tgL$!Ei5e9{{DWYkq@%7 zvrTzj;AI{F(3D_pRt^!E13_V%_0Wcdv465Qh=a4rB* z8u|U%vu9FWT`h-)heENr4h|0fAw}y62?@z`PGn@HA(w%HffgGL#3d~rN4e~(u5vpE zbP2?^NX%SbUQ#=IbabSS`uOqV1_3UUl9K#EkqU<3g6t|XP-;Ec5MR4r{1XgPzsE!W;@iPF73*hPj zMRWoIAdsOBg@uI*z$!=+0qA*Tt^iY0Q{>;mC<;Ia-lNDRatQ%qVqy$}$-8&&EVxt` z!9g}7Bg44IhFb$xu(Y&f;3Rbsv@_nB^jB(tN`y9@n3xc}EH0Z$ zMMZ_Ar>A>n66eqI^0EvM4~xsDf+VE4xR^F&=HjyHFRZ|c7q!vY`V<-g?BL*_;bzVv zmclMapJ)a2IY$Wlfx(fKt*opxOaT1rXz?_f_o(39r%mA?3r83oZZU9@9+}`almP5%I*BxR zyNL9;yO&cJTIrDqkhi!VKQbRX^g)vYRcU{CHyZtpY&n1Q(8q7D+uPfpKJ*^}asued izbyznfWTk;+wwmgI#Ez|FYSc@0000^dOP)tEQE*C?V4EzT23~<=7Ww0}ovbV0^D*3)V zx>DUi{OL+TM#o3>{I&BkQ=0X>7KRCQpm`jl_XLPN&(B@hZ3#Ypc;kbaSD)C8$2UEx zZY(Zx=T0@x@c>$HHst5aKjO2WPU!Df{w(`G-b4i_nqLO@+zsHoj{WIW;>g=O-@=Zq zJ77D2W$_Cux;eUA=N|X@%hmFLk@F+?@bpJ0S8DHipWx_S0HozLH|`7_+;u><1w<;GjA+3aJ&PjiN+WwI?6x?vXA7zzm9|q7I)KmdWctwT$;n1|yknJd;}w zY{_rJ#=b2S1qQ@qg7J%j>hv84&7%+|*#-0sPz;{j1P9lZ@e8;xdKnYffKmb9NqjG^ zclBXSZXGn$BeJ=F8`7z)N*q!rEjRy=dy2gJA%#o2v;iqsinug(PAgL?6aN6yO+VNOY3&q=o*@HOQp1DBKWCT#AHVT=NR{l1F&zIv^eY325^~?8+^a_b%%H^#W+w>{iu~=IO%Ktg z=HnH3)5bP)yIa9buuV z-LsnPP-x3gL>C#W!qkKVF;=Zig&L%KAhf8`o?@&?iv}(tJw{-ix(ODVu+Vg%tyLI+ z>M9CRd&sp3U?k&6a@<&J`ya7MrQ& zxxUoai=zI6sK`9l%xr5V+<<@s2*ChCFkrv|0~6fT3i(ET7U9S&a%7%bW@OF- zQ4`(~4E>nP;l`S9;`0FEaA}ZwdY|k65B(*87QMDeE|g%wYm3F#mgCF6w)_Y7z-5Cp S<