From d02cba5a91ac689ee5501af181dc154a20c61934 Mon Sep 17 00:00:00 2001 From: Phenom Date: Sun, 16 Apr 2017 17:53:37 +0200 Subject: [PATCH 1/9] Fix Lobby Topic not send on invite. --- libretroshare/src/chat/distributedchat.cc | 73 +++++++++++++++---- libretroshare/src/chat/distributedchat.h | 2 + libretroshare/src/chat/rschatitems.cc | 42 +++++++---- libretroshare/src/chat/rschatitems.h | 22 +++++- .../src/tests/serialiser/rsmsgitem_test.cc | 6 ++ .../serialiser/rsmsgitem_test.cc | 2 + 6 files changed, 113 insertions(+), 34 deletions(-) diff --git a/libretroshare/src/chat/distributedchat.cc b/libretroshare/src/chat/distributedchat.cc index 696ce3058..fe262943b 100644 --- a/libretroshare/src/chat/distributedchat.cc +++ b/libretroshare/src/chat/distributedchat.cc @@ -428,14 +428,14 @@ bool DistributedChatService::handleRecvItem(RsChatItem *item) { switch(item->PacketSubType()) { - case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT: handleRecvChatLobbyEventItem (dynamic_cast(item)) ; break ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE: handleRecvLobbyInvite (dynamic_cast(item)) ; break ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_CHALLENGE: handleConnectionChallenge (dynamic_cast(item)) ; break ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_UNSUBSCRIBE: handleFriendUnsubscribeLobby (dynamic_cast(item)) ; break ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST_REQUEST: handleRecvChatLobbyListRequest (dynamic_cast(item)) ; break ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST: handleRecvChatLobbyList (dynamic_cast(item)) ; break ; - default: - return false ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT: handleRecvChatLobbyEventItem (dynamic_cast(item)) ; break ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE_DEPRECATED: handleRecvLobbyInvite_Deprecated (dynamic_cast(item)) ; break ; // to be removed (deprecated since May 2017) + case RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE: handleRecvLobbyInvite (dynamic_cast(item)) ; break ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_CHALLENGE: handleConnectionChallenge (dynamic_cast(item)) ; break ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_UNSUBSCRIBE: handleFriendUnsubscribeLobby (dynamic_cast(item)) ; break ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST_REQUEST: handleRecvChatLobbyListRequest (dynamic_cast(item)) ; break ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST: handleRecvChatLobbyList (dynamic_cast(item)) ; break ; + default: return false ; } return true ; } @@ -1233,14 +1233,45 @@ void DistributedChatService::invitePeerToLobby(const ChatLobbyId& lobby_id, cons RsChatLobbyInviteItem *item = new RsChatLobbyInviteItem ; - item->lobby_id = lobby_id ; - item->lobby_name = it->second.lobby_name ; - item->lobby_topic = it->second.lobby_topic ; - item->lobby_flags = connexion_challenge?RS_CHAT_LOBBY_FLAGS_CHALLENGE:(it->second.lobby_flags) ; + item->lobby_id = lobby_id ; + item->lobby_name = it->second.lobby_name ; + item->lobby_topic = it->second.lobby_topic ; + item->lobby_flags = connexion_challenge?RS_CHAT_LOBBY_FLAGS_CHALLENGE:(it->second.lobby_flags) ; item->PeerId(peer_id) ; sendChatItem(item) ; + + //FOR BACKWARD COMPATIBILITY + {// to be removed (deprecated since May 2017) + RsChatLobbyInviteItem_Deprecated *item = new RsChatLobbyInviteItem_Deprecated ; + + item->lobby_id = lobby_id ; + item->lobby_name = it->second.lobby_name ; + item->lobby_topic = it->second.lobby_topic ; + item->lobby_flags = connexion_challenge?RS_CHAT_LOBBY_FLAGS_CHALLENGE:(it->second.lobby_flags) ; + item->PeerId(peer_id) ; + + sendChatItem(item) ; + } } + +// to be removed (deprecated since May 2017) +void DistributedChatService::handleRecvLobbyInvite_Deprecated(RsChatLobbyInviteItem_Deprecated *item) +{ +#ifdef DEBUG_CHAT_LOBBIES + std::cerr << "Received deprecated invite to lobby from " << item->PeerId() << " to lobby " << std::hex << item->lobby_id << std::dec << ", named " << item->lobby_name << item->lobby_topic << std::endl; +#endif + RsChatLobbyInviteItem* newItem = new RsChatLobbyInviteItem(); + + newItem->lobby_id = item->lobby_id ; + newItem->lobby_name = item->lobby_name ; + newItem->lobby_topic = item->lobby_topic ; + newItem->lobby_flags = item->lobby_flags ; + newItem->PeerId( item->PeerId() ); + + handleRecvLobbyInvite(newItem); +} + void DistributedChatService::handleRecvLobbyInvite(RsChatLobbyInviteItem *item) { #ifdef DEBUG_CHAT_LOBBIES @@ -1259,10 +1290,10 @@ void DistributedChatService::handleRecvLobbyInvite(RsChatLobbyInviteItem *item) { #ifdef DEBUG_CHAT_LOBBIES std::cerr << " Lobby already exists. " << std::endl; - std::cerr << " privacy levels: " << item->lobby_flags << " vs. " << it->second.lobby_flags ; + std::cerr << " privacy levels: " << item->lobby_flags << " vs. " << it->second.lobby_flags ; #endif - if((!IS_CONNEXION_CHALLENGE(item->lobby_flags)) && EXTRACT_PRIVACY_FLAGS(item->lobby_flags) != EXTRACT_PRIVACY_FLAGS(it->second.lobby_flags)) + if ((!IS_CONNEXION_CHALLENGE(item->lobby_flags)) && EXTRACT_PRIVACY_FLAGS(item->lobby_flags) != EXTRACT_PRIVACY_FLAGS(it->second.lobby_flags)) { std::cerr << " : Don't match. Cancelling." << std::endl; return ; @@ -1274,10 +1305,22 @@ void DistributedChatService::handleRecvLobbyInvite(RsChatLobbyInviteItem *item) std::cerr << " Adding new friend " << item->PeerId() << " to lobby." << std::endl; #endif + // to be removed (deprecated since May 2017) + { //Update Topics if have received deprecated before (withou topic) + if(it->second.lobby_topic.empty() && !item->lobby_topic.empty()) + it->second.lobby_topic = item->lobby_topic; + } + it->second.participating_friends.insert(item->PeerId()) ; return ; } + // to be removed (deprecated since May 2017) + {//check if invitation is already received by deprecated version + std::map::const_iterator it(_lobby_invites_queue.find( item->lobby_id)) ; + if(it != _lobby_invites_queue.end()) + return ; + } // Don't record the invitation if it's a challenge response item or a lobby we don't have. // if(IS_CONNEXION_CHALLENGE(item->lobby_flags)) @@ -1290,7 +1333,7 @@ void DistributedChatService::handleRecvLobbyInvite(RsChatLobbyInviteItem *item) invite.peer_id = item->PeerId() ; invite.lobby_name = item->lobby_name ; invite.lobby_topic = item->lobby_topic ; - invite.lobby_flags = item->lobby_flags ; + invite.lobby_flags = item->lobby_flags ; _lobby_invites_queue[item->lobby_id] = invite ; } diff --git a/libretroshare/src/chat/distributedchat.h b/libretroshare/src/chat/distributedchat.h index 89160a850..fef46b278 100644 --- a/libretroshare/src/chat/distributedchat.h +++ b/libretroshare/src/chat/distributedchat.h @@ -39,6 +39,7 @@ class RsChatLobbyListRequestItem ; class RsChatLobbyListItem ; class RsChatLobbyEventItem ; class RsChatLobbyBouncingObject ; +class RsChatLobbyInviteItem_Deprecated ; // to be removed (deprecated since May 2017) class RsChatLobbyInviteItem ; class RsChatLobbyMsgItem ; class RsChatLobbyConnectChallengeItem ; @@ -111,6 +112,7 @@ class DistributedChatService /// receive and handle chat lobby item bool recvLobbyChat(RsChatLobbyMsgItem*,const RsPeerId& src_peer_id) ; + void handleRecvLobbyInvite_Deprecated(RsChatLobbyInviteItem_Deprecated*) ; // to be removed (deprecated since May 2017) void handleRecvLobbyInvite(RsChatLobbyInviteItem*) ; void checkAndRedirectMsgToLobby(RsChatMsgItem*) ; void handleConnectionChallenge(RsChatLobbyConnectChallengeItem *item) ; diff --git a/libretroshare/src/chat/rschatitems.cc b/libretroshare/src/chat/rschatitems.cc index 2b7dd67d8..80241eac0 100644 --- a/libretroshare/src/chat/rschatitems.cc +++ b/libretroshare/src/chat/rschatitems.cc @@ -39,23 +39,24 @@ static const uint32_t RS_CHAT_SERIALIZER_FLAGS_NO_SIGNATURE = 0x0001; RsItem *RsChatSerialiser::create_item(uint16_t service_id,uint8_t item_sub_id) const { - if(service_id != RS_SERVICE_TYPE_CHAT) - return NULL ; + if (service_id != RS_SERVICE_TYPE_CHAT) + return NULL; switch(item_sub_id) { - case RS_PKT_SUBTYPE_DEFAULT: return new RsChatMsgItem() ; - case RS_PKT_SUBTYPE_PRIVATECHATMSG_CONFIG: return new RsPrivateChatMsgConfigItem() ; - case RS_PKT_SUBTYPE_CHAT_STATUS: return new RsChatStatusItem() ; - case RS_PKT_SUBTYPE_CHAT_AVATAR: return new RsChatAvatarItem() ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_MSG: return new RsChatLobbyMsgItem() ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE: return new RsChatLobbyInviteItem() ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_CHALLENGE: return new RsChatLobbyConnectChallengeItem() ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_UNSUBSCRIBE: return new RsChatLobbyUnsubscribeItem() ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT:return new RsChatLobbyEventItem() ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST_REQUEST:return new RsChatLobbyListRequestItem() ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST: return new RsChatLobbyListItem() ; - case RS_PKT_SUBTYPE_CHAT_LOBBY_CONFIG: return new RsChatLobbyConfigItem() ; + case RS_PKT_SUBTYPE_DEFAULT: return new RsChatMsgItem() ; + case RS_PKT_SUBTYPE_PRIVATECHATMSG_CONFIG: return new RsPrivateChatMsgConfigItem() ; + case RS_PKT_SUBTYPE_CHAT_STATUS: return new RsChatStatusItem() ; + case RS_PKT_SUBTYPE_CHAT_AVATAR: return new RsChatAvatarItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_MSG: return new RsChatLobbyMsgItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE_DEPRECATED: return new RsChatLobbyInviteItem_Deprecated() ; // to be removed (deprecated since May 2017) + case RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE: return new RsChatLobbyInviteItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_CHALLENGE: return new RsChatLobbyConnectChallengeItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_UNSUBSCRIBE: return new RsChatLobbyUnsubscribeItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT: return new RsChatLobbyEventItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST_REQUEST: return new RsChatLobbyListRequestItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_LIST: return new RsChatLobbyListItem() ; + case RS_PKT_SUBTYPE_CHAT_LOBBY_CONFIG: return new RsChatLobbyConfigItem() ; default: std::cerr << "Unknown packet type in chat!" << std::endl ; return NULL ; @@ -97,12 +98,12 @@ void RsChatLobbyMsgItem::serial_process(RsGenericSerializer::SerializeJob j,RsGe RsChatLobbyBouncingObject::serial_process(j,ctx) ; } -void RsChatLobbyListRequestItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +void RsChatLobbyListRequestItem::serial_process(RsGenericSerializer::SerializeJob /*j*/,RsGenericSerializer::SerializeContext& /*ctx*/) { // nothing to do. This is an empty item. } -template<> void RsTypeSerializer::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,VisibleChatLobbyInfo& info,const std::string& name) +template<> void RsTypeSerializer::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx,VisibleChatLobbyInfo& info,const std::string& /*name*/) { RsTypeSerializer::serial_process(j,ctx,info.id,"info.id") ; @@ -135,10 +136,19 @@ void RsChatLobbyConnectChallengeItem::serial_process(RsGenericSerializer::Serial RsTypeSerializer::serial_process(j,ctx,challenge_code,"challenge_code") ; } +// to be removed (deprecated since May 2017) +void RsChatLobbyInviteItem_Deprecated::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) +{ + RsTypeSerializer::serial_process(j,ctx, lobby_id, "lobby_id") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,lobby_name, "lobby_name") ; + RsTypeSerializer::serial_process (j,ctx, lobby_flags,"lobby_flags") ; +} + void RsChatLobbyInviteItem::serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx) { RsTypeSerializer::serial_process(j,ctx, lobby_id, "lobby_id") ; RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,lobby_name, "lobby_name") ; + RsTypeSerializer::serial_process (j,ctx,TLV_TYPE_STR_NAME,lobby_topic,"lobby_topic") ; RsTypeSerializer::serial_process (j,ctx, lobby_flags,"lobby_flags") ; } diff --git a/libretroshare/src/chat/rschatitems.h b/libretroshare/src/chat/rschatitems.h index ddc0a2b86..3784adc84 100644 --- a/libretroshare/src/chat/rschatitems.h +++ b/libretroshare/src/chat/rschatitems.h @@ -77,7 +77,8 @@ const uint8_t RS_PKT_SUBTYPE_DISTANT_CHAT_DH_PUBLIC_KEY = 0x16 ; const uint8_t RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_MSG = 0x17 ; const uint8_t RS_PKT_SUBTYPE_CHAT_LOBBY_SIGNED_EVENT = 0x18 ; const uint8_t RS_PKT_SUBTYPE_CHAT_LOBBY_LIST = 0x19 ; -const uint8_t RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE = 0x1A ; +const uint8_t RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE_DEPRECATED = 0x1A ; // to be removed (deprecated since May 2017) +const uint8_t RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE = 0x1B ; typedef uint64_t ChatLobbyId ; typedef uint64_t ChatLobbyMsgId ; @@ -93,7 +94,7 @@ class RsChatItem: public RsItem } virtual ~RsChatItem() {} - virtual std::ostream& print(std::ostream &out, uint16_t indent = 0) { return out; } // derived from RsItem, but should be removed + virtual std::ostream& print(std::ostream &out, uint16_t /*indent*/ = 0) { return out; } // derived from RsItem, but should be removed virtual void clear() {} }; @@ -238,6 +239,21 @@ class RsChatLobbyConnectChallengeItem: public RsChatItem uint64_t challenge_code ; }; +// to be removed (deprecated since May 2017) +class RsChatLobbyInviteItem_Deprecated: public RsChatItem +{ + public: + RsChatLobbyInviteItem_Deprecated() :RsChatItem(RS_PKT_SUBTYPE_CHAT_LOBBY_INVITE_DEPRECATED) {} + virtual ~RsChatLobbyInviteItem_Deprecated() {} + + void serial_process(RsGenericSerializer::SerializeJob j,RsGenericSerializer::SerializeContext& ctx); + + ChatLobbyId lobby_id ; + std::string lobby_name ; + std::string lobby_topic ; + ChatLobbyFlags lobby_flags ; +}; + class RsChatLobbyInviteItem: public RsChatItem { public: @@ -249,7 +265,7 @@ class RsChatLobbyInviteItem: public RsChatItem ChatLobbyId lobby_id ; std::string lobby_name ; std::string lobby_topic ; - ChatLobbyFlags lobby_flags ; + ChatLobbyFlags lobby_flags ; }; /*! diff --git a/libretroshare/src/tests/serialiser/rsmsgitem_test.cc b/libretroshare/src/tests/serialiser/rsmsgitem_test.cc index 17571602e..c964d97ba 100644 --- a/libretroshare/src/tests/serialiser/rsmsgitem_test.cc +++ b/libretroshare/src/tests/serialiser/rsmsgitem_test.cc @@ -52,12 +52,14 @@ RsSerialType* init_item(RsChatLobbyListItem& cmi) cmi.lobby_ids.resize(n) ; cmi.lobby_names.resize(n) ; + cmi.lobby_topics.resize(n) ; cmi.lobby_counts.resize(n) ; for(int i=0;i Date: Sun, 7 Feb 2016 11:45:55 +0100 Subject: [PATCH 2/9] Save last state of OpMode status bar droplist and restore it at start. Add colored style sheet to OpModeStatus ComboBox. And defined default color when stylesheet file are not found. --- .../src/gui/qss/stylesheet/qss.default | 20 ++++ .../src/gui/statusbar/OpModeStatus.cpp | 94 +++++++++++++++++-- .../src/gui/statusbar/OpModeStatus.h | 25 ++++- retroshare-gui/src/qss/blacknight.qss | 20 +++- retroshare-gui/src/qss/qdarkstyle.qss | 19 ++++ 5 files changed, 165 insertions(+), 13 deletions(-) diff --git a/retroshare-gui/src/gui/qss/stylesheet/qss.default b/retroshare-gui/src/gui/qss/stylesheet/qss.default index 48fef26e2..e3c01bca1 100644 --- a/retroshare-gui/src/gui/qss/stylesheet/qss.default +++ b/retroshare-gui/src/gui/qss/stylesheet/qss.default @@ -223,3 +223,23 @@ GenCertDialog QLabel#entropy_label { qproperty-fontSizeFactor: 115; } + +/* OpModeStatus need to be at end to overload other values*/ +OpModeStatus { + qproperty-opMode_Full_Color: #CCFFCC; + qproperty-opMode_NoTurtle_Color: #CCCCFF; + qproperty-opMode_Gaming_Color: #FFFFCC; + qproperty-opMode_Minimal_Color: #FFCCCC; +} +OpModeStatus[opMode="Full"] { + background: #CCFFCC; +} +OpModeStatus[opMode="NoTurtle"] { + background: #CCCCFF; +} +OpModeStatus[opMode="Gaming"] { + background: #FFFFCC; +} +OpModeStatus[opMode="Minimal"] { + background: #FFCCCC; +} diff --git a/retroshare-gui/src/gui/statusbar/OpModeStatus.cpp b/retroshare-gui/src/gui/statusbar/OpModeStatus.cpp index 96934c5bf..230b8e131 100644 --- a/retroshare-gui/src/gui/statusbar/OpModeStatus.cpp +++ b/retroshare-gui/src/gui/statusbar/OpModeStatus.cpp @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. ****************************************************************/ @@ -23,26 +23,40 @@ #include #include "gui/statusbar/OpModeStatus.h" +#include "gui/settings/rsharesettings.h" + #include + #include OpModeStatus::OpModeStatus(QWidget *parent) - : QComboBox(parent) + : QComboBox(parent) { + onUpdate = false; + opMode_Full_Color = QColor("#CCFFCC"); + opMode_NoTurtle_Color = QColor("#CCCCFF"); + opMode_Gaming_Color = QColor("#FFFFCC"); + opMode_Minimal_Color = QColor("#FFCCCC"); + /* add the options */ addItem(tr("Normal Mode"), RS_OPMODE_FULL); + setItemData(0, opMode_Full_Color, Qt::BackgroundRole); addItem(tr("No Anon D/L"), RS_OPMODE_NOTURTLE); + setItemData(1, opMode_NoTurtle_Color, Qt::BackgroundRole); addItem(tr("Gaming Mode"), RS_OPMODE_GAMING); + setItemData(2, opMode_Gaming_Color, Qt::BackgroundRole); addItem(tr("Low Traffic"), RS_OPMODE_MINIMAL); + setItemData(3, opMode_Minimal_Color, Qt::BackgroundRole); connect(this, SIGNAL(activated( int )), this, SLOT(setOpMode())); + setCurrentIndex(Settings->valueFromGroup("StatusBar", "OpMode", QVariant(0)).toInt()); + setOpMode(); setToolTip(tr("Use this DropList to quickly change Retroshare's behaviour\n No Anon D/L: switches off file forwarding\n Gaming Mode: 25% standard traffic and TODO: reduced popups\n Low Traffic: 10% standard traffic and TODO: pauses all file-transfers")); setFocusPolicy(Qt::ClickFocus); } - void OpModeStatus::getOpMode() { int opMode = rsConfig->getOperatingMode(); @@ -51,17 +65,26 @@ void OpModeStatus::getOpMode() default: case RS_OPMODE_FULL: setCurrentIndex(0); - break; + setProperty("opMode", "Full"); + break; case RS_OPMODE_NOTURTLE: setCurrentIndex(1); - break; + setProperty("opMode", "NoTurtle"); + break; case RS_OPMODE_GAMING: setCurrentIndex(2); - break; + setProperty("opMode", "Gaming"); + break; case RS_OPMODE_MINIMAL: setCurrentIndex(3); - break; + setProperty("opMode", "Minimal"); + break; } + onUpdate = true; + style()->unpolish(this); + style()->polish(this); + update(); + onUpdate = false; } void OpModeStatus::setOpMode() @@ -69,14 +92,65 @@ void OpModeStatus::setOpMode() std::cerr << "OpModeStatus::setOpMode()"; std::cerr << std::endl; - int idx = currentIndex(); - QVariant var = itemData(idx); - uint32_t opMode = var.toUInt(); + int idx = currentIndex(); + QVariant var = itemData(idx); + uint32_t opMode = var.toUInt(); rsConfig->setOperatingMode(opMode); // reload to be safe. getOpMode(); + Settings->setValueToGroup("StatusBar", "OpMode", idx); } +QColor OpModeStatus::getOpMode_Full_Color() const +{ + return opMode_Full_Color; +} +void OpModeStatus::setOpMode_Full_Color( QColor c ) +{ + opMode_Full_Color = c; + setItemData(0, opMode_Full_Color, Qt::BackgroundRole); + if (!onUpdate) + getOpMode(); +} + +QColor OpModeStatus::getOpMode_NoTurtle_Color() const +{ + return opMode_NoTurtle_Color; +} + +void OpModeStatus::setOpMode_NoTurtle_Color( QColor c ) +{ + opMode_NoTurtle_Color = c; + setItemData(1, opMode_NoTurtle_Color, Qt::BackgroundRole); + if (!onUpdate) + getOpMode(); +} + +QColor OpModeStatus::getOpMode_Gaming_Color() const +{ + return opMode_Gaming_Color; +} + +void OpModeStatus::setOpMode_Gaming_Color( QColor c ) +{ + opMode_Gaming_Color = c; + setItemData(2, opMode_Gaming_Color, Qt::BackgroundRole); + if (!onUpdate) + getOpMode(); +} + +QColor OpModeStatus::getOpMode_Minimal_Color() const +{ + return opMode_Minimal_Color; +} + +void OpModeStatus::setOpMode_Minimal_Color( QColor c ) +{ + opMode_Minimal_Color = c; + setItemData(3, opMode_Minimal_Color, Qt::BackgroundRole); + if (!onUpdate) + getOpMode(); +} diff --git a/retroshare-gui/src/gui/statusbar/OpModeStatus.h b/retroshare-gui/src/gui/statusbar/OpModeStatus.h index 6e84aea3a..3ca418cc3 100644 --- a/retroshare-gui/src/gui/statusbar/OpModeStatus.h +++ b/retroshare-gui/src/gui/statusbar/OpModeStatus.h @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. ****************************************************************/ #ifndef OP_MODE_STATUS_H @@ -26,16 +26,37 @@ class OpModeStatus : public QComboBox { Q_OBJECT + Q_PROPERTY(QColor opMode_Full_Color READ getOpMode_Full_Color WRITE setOpMode_Full_Color DESIGNABLE true) + Q_PROPERTY(QColor opMode_NoTurtle_Color READ getOpMode_NoTurtle_Color WRITE setOpMode_NoTurtle_Color DESIGNABLE true) + Q_PROPERTY(QColor opMode_Gaming_Color READ getOpMode_Gaming_Color WRITE setOpMode_Gaming_Color DESIGNABLE true) + Q_PROPERTY(QColor opMode_Minimal_Color READ getOpMode_Minimal_Color WRITE setOpMode_Minimal_Color DESIGNABLE true) public: OpModeStatus(QWidget *parent = 0); + QColor getOpMode_Full_Color() const; + void setOpMode_Full_Color( QColor c ); + + QColor getOpMode_NoTurtle_Color() const; + void setOpMode_NoTurtle_Color( QColor c ); + + QColor getOpMode_Gaming_Color() const; + void setOpMode_Gaming_Color( QColor c ); + + QColor getOpMode_Minimal_Color() const; + void setOpMode_Minimal_Color( QColor c ); + private slots: - void setOpMode(); + void setOpMode(); private: void getOpMode(); + QColor opMode_Full_Color; + QColor opMode_NoTurtle_Color; + QColor opMode_Gaming_Color; + QColor opMode_Minimal_Color; + bool onUpdate; }; #endif diff --git a/retroshare-gui/src/qss/blacknight.qss b/retroshare-gui/src/qss/blacknight.qss index 286183dfc..4a454c54e 100644 --- a/retroshare-gui/src/qss/blacknight.qss +++ b/retroshare-gui/src/qss/blacknight.qss @@ -273,4 +273,22 @@ QTextEdit { color: white; } - +/* OpModeStatus need to be at end to overload other values*/ +OpModeStatus { + qproperty-opMode_Full_Color: #007000; + qproperty-opMode_NoTurtle_Color: #000070; + qproperty-opMode_Gaming_Color: #707000; + qproperty-opMode_Minimal_Color: #700000; +} +OpModeStatus[opMode="Full"] { + background: #007000; +} +OpModeStatus[opMode="NoTurtle"] { + background: #000070; +} +OpModeStatus[opMode="Gaming"] { + background: #707000; +} +OpModeStatus[opMode="Minimal"] { + background: #700000; +} diff --git a/retroshare-gui/src/qss/qdarkstyle.qss b/retroshare-gui/src/qss/qdarkstyle.qss index 2ed225cf9..ad18bd402 100644 --- a/retroshare-gui/src/qss/qdarkstyle.qss +++ b/retroshare-gui/src/qss/qdarkstyle.qss @@ -1060,3 +1060,22 @@ QStatusBar::item { border-radius: 3px; } +/* OpModeStatus need to be at end to overload other values*/ +OpModeStatus { + qproperty-opMode_Full_Color: #007000; + qproperty-opMode_NoTurtle_Color: #000070; + qproperty-opMode_Gaming_Color: #707000; + qproperty-opMode_Minimal_Color: #700000; +} +OpModeStatus[opMode="Full"] { + background: #007000; +} +OpModeStatus[opMode="NoTurtle"] { + background: #000070; +} +OpModeStatus[opMode="Gaming"] { + background: #707000; +} +OpModeStatus[opMode="Minimal"] { + background: #700000; +} From 7eb5e8e02bfead157bc6c90c6e06e0d4b6e1bc11 Mon Sep 17 00:00:00 2001 From: csoler Date: Wed, 10 May 2017 21:37:06 +0200 Subject: [PATCH 3/9] added warning when switching opmode status to non turtle for the first time --- retroshare-gui/src/gui/statusbar/OpModeStatus.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/retroshare-gui/src/gui/statusbar/OpModeStatus.cpp b/retroshare-gui/src/gui/statusbar/OpModeStatus.cpp index 230b8e131..1ae2fb354 100644 --- a/retroshare-gui/src/gui/statusbar/OpModeStatus.cpp +++ b/retroshare-gui/src/gui/statusbar/OpModeStatus.cpp @@ -20,6 +20,7 @@ ****************************************************************/ #include +#include #include #include "gui/statusbar/OpModeStatus.h" @@ -96,6 +97,19 @@ void OpModeStatus::setOpMode() QVariant var = itemData(idx); uint32_t opMode = var.toUInt(); + QString message = tr("

Warning: This Operating mode disables the tunneling service. This means you can use distant chat not anonymously download files and the mail service will be slower.

This state will be saved after restart, so do not forget that you changed it!

"); + + if(opMode == RS_OPMODE_NOTURTLE && ! Settings->getPageAlreadyDisplayed(QString("RS_OPMODE_NO_TURTLE"))) + { + QMessageBox::warning(NULL,tr("Turtle routing disabled!"),message); + Settings->setPageAlreadyDisplayed(QString("RS_OPMODE_NO_TURTLE"),true) ; + } + if( (opMode == RS_OPMODE_MINIMAL && ! Settings->getPageAlreadyDisplayed(QString("RS_OPMODE_MINIMAL")))) + { + QMessageBox::warning(NULL,tr("Turtle routing disabled!"),message); + Settings->setPageAlreadyDisplayed(QString("RS_OPMODE_MINIMAL"),true) ; + } + rsConfig->setOperatingMode(opMode); // reload to be safe. From d73e850122181458cd2e76159a82046120fddf2a Mon Sep 17 00:00:00 2001 From: defnax Date: Thu, 11 May 2017 18:14:21 +0200 Subject: [PATCH 4/9] look n feel improvements --- retroshare-gui/src/gui/HomePage.ui | 247 ++++++---- retroshare-gui/src/gui/StartDialog.ui | 217 ++++++--- retroshare-gui/src/gui/icons.qrc | 459 +++++++++--------- retroshare-gui/src/gui/icons/svg/password.svg | 54 +++ .../src/gui/qss/stylesheet/Standard.qss | 17 + 5 files changed, 605 insertions(+), 389 deletions(-) create mode 100644 retroshare-gui/src/gui/icons/svg/password.svg diff --git a/retroshare-gui/src/gui/HomePage.ui b/retroshare-gui/src/gui/HomePage.ui index d2aba3dfc..60c87b0b9 100644 --- a/retroshare-gui/src/gui/HomePage.ui +++ b/retroshare-gui/src/gui/HomePage.ui @@ -6,103 +6,15 @@ 0 0 - 1558 - 703 + 675 + 544 Form - - - - - - - - - - - 11 - - - - - - - Did you receive a certificate from a friend? - - - - - - - Add friends certificate - - - - :/icons/png/invite.png:/icons/png/invite.png - - - - 24 - 24 - - - - Qt::ToolButtonTextBesideIcon - - - false - - - - - - - Add certificate file - - - - :/icons/svg/folders1.svg:/icons/svg/folders1.svg - - - - 24 - 24 - - - - Qt::ToolButtonTextBesideIcon - - - false - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - + 9 @@ -245,7 +157,7 @@ private and secure decentralized communication platform. - + Launch startup wizard @@ -256,15 +168,149 @@ private and secure decentralized communication platform. - - - - Open Web Help + + + + - - - :/icons/settings/webinterface.svg:/icons/settings/webinterface.svg + + + + + + 11 + + + + + + + Did you receive a certificate from a friend? + + + + + + + Add friends certificate + + + + :/icons/png/invite.png:/icons/png/invite.png + + + + 24 + 24 + + + + Qt::ToolButtonTextBesideIcon + + + false + + + + + + + Add certificate file + + + + :/icons/svg/folders1.svg:/icons/svg/folders1.svg + + + + 24 + 24 + + + + Qt::ToolButtonTextBesideIcon + + + false + + + + + + + + + + QFrame::StyledPanel + + QFrame::Raised + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + 11 + + + + Do you need help with RetroShare? + + + + + + + Open Web Help + + + + :/icons/settings/webinterface.svg:/icons/settings/webinterface.svg + + + + 24 + 24 + + + + Qt::ToolButtonTextBesideIcon + + + + @@ -273,7 +319,8 @@ private and secure decentralized communication platform. label_2 addframe runStartWizard_PB - openwebhelp + frame + helpframe diff --git a/retroshare-gui/src/gui/StartDialog.ui b/retroshare-gui/src/gui/StartDialog.ui index 0681835e6..572df161d 100644 --- a/retroshare-gui/src/gui/StartDialog.ui +++ b/retroshare-gui/src/gui/StartDialog.ui @@ -6,8 +6,8 @@ 0 0 - 656 - 645 + 516 + 569 @@ -17,7 +17,7 @@ :/images/logo/logo_32.png:/images/logo/logo_32.png - + 0 @@ -44,7 +44,7 @@ - + Qt::Horizontal @@ -110,12 +110,12 @@ - :/images/logo/logo_splash.png + :/images/logo/logo_spash2.png - + Qt::Horizontal @@ -129,7 +129,52 @@ - + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 60 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 60 + 20 + + + + + true @@ -140,35 +185,79 @@ 0 + + + - - - + + + 9 + + + + + + 22 + 22 + + - Profile - Location: + + + + :/icons/svg/person.svg + + + true - + - - + + + + + 22 + 22 + + - Password: + + + + :/icons/svg/password.svg + + + true - + QLineEdit::Password - + + + + Password: + + + + + + + Profile - Location: + + + + Remember Password @@ -178,68 +267,70 @@ + + + + + 12 + + + + Log In + + + true + + + false + + + - - - - Log In - - - true - - - false - - - - - - - Opens a dialog for creating a new profile or + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Opens a dialog for creating a new profile or adding locations to an existing profile. The current identities/locations will not be affected. - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><a href="Create new Profile..."><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt; text-decoration: underline; color:#0000ff;">Manage profiles and nodes...</span></a></p></body></html> - - - - - - - - 16 - 65 - - - - QFrame::NoFrame - - - QFrame::Raised - - + + + + - - - LogoBar - QFrame -
gui/LogoBar.h
- 1 -
-
+ diff --git a/retroshare-gui/src/gui/icons.qrc b/retroshare-gui/src/gui/icons.qrc index a89ead9d8..e9b7d32bd 100644 --- a/retroshare-gui/src/gui/icons.qrc +++ b/retroshare-gui/src/gui/icons.qrc @@ -1,228 +1,235 @@ - - icons/add_user_256.png - icons/anonymous_blue_128.png - icons/anonymous_green_128.png - icons/aol.png - icons/avatar_128.png - icons/avatar_grey_128.png - icons/biohazard_red.png - icons/biohazard_yellow.png - icons/blank_blue_128.png - icons/blank_green_128.png - icons/blank_red_128.png - icons/browsable_blue_128.png - icons/browsable_green_128.png - icons/bullet_blue_128.png - icons/bullet_green_128.png - icons/bullet_green_yellow_star_128.png - icons/bullet_grey_128.png - icons/bullet_red_128.png - icons/bullet_yellow_128.png - icons/channels_128.png - icons/channels_red_128.png - icons/chat_128.png - icons/chat_red_128.png - icons/circles_128.png - icons/circles_new_128.png - icons/flag-green.png - icons/friends_128.png - icons/global_switch_off_128.png - icons/global_switch_on_128.png - icons/gmail.png - icons/help_128.png - icons/help_64.png - icons/information_128.png - icons/internet_128.png - icons/invite64.png - icons/knews_128.png - icons/knews_red_128.png - icons/konversation_128.png - icons/konversation128.png - icons/konversation_red_128.png - icons/ktorrent_128.png - icons/ktorrent_red_128.png - icons/logo_0_connected_128.png - icons/logo_128.png - icons/logo_1_connected_128.png - icons/logo_2_connected_128.png - icons/mail_128.png - icons/mail_old_128.png - icons/mail_red_128.png - icons/newsfeed128.png - icons/outlook.png - icons/plugins_128.png - icons/png/add.png - icons/png/attach-image.png - icons/png/attach.png - icons/png/channels-notify.png - icons/png/channels.png - icons/png/chat-bubble-notify.png - icons/png/chat-bubble.png - icons/png/chat-lobbies-notify.png - icons/png/chat-lobbies.png - icons/png/circles.png - icons/png/empty-circle.png - icons/png/exit.png - icons/png/feedreader-notify.png - icons/png/feedreader.png - icons/png/filesharing-notify.png - icons/png/filesharing.png - icons/png/font.png - icons/png/forums-notify.png - icons/png/forums.png - icons/png/fullscreen_arrows.png - icons/png/highlight.png - icons/png/info.png - icons/png/invite.png - icons/png/keyring.png - icons/png/leave.png - icons/png/messages-notify.png - icons/png/messages.png - icons/png/microphone_mute.png - icons/png/microphone.png - icons/png/netgraph.png - icons/png/network-notify.png - icons/png/network.png - icons/png/network-puplic.png - icons/png/newsfeed-notify.png - icons/png/newsfeed.png - icons/png/options.png - icons/png/people-notify.png - icons/png/people.png - icons/png/person.png - icons/png/phone_hangup.png - icons/png/phone.png - icons/png/posted-notify.png - icons/png/posted.png - icons/png/search.png - icons/png/send-message-blocked.png - icons/png/send-message.png - icons/png/settings.png - icons/png/smiley.png - icons/png/speaker_mute.png - icons/png/speaker.png - icons/png/thumbs-down.png - icons/png/thumbs-neutral.png - icons/png/thumbs-up.png - icons/png/video.png - icons/posted_128.png - icons/posted_red_128.png - icons/quit_128.png - icons/search_red_128.png - icons/security_high_128.png - icons/security_low_128.png - icons/security_medium_128.png - icons/settings/appearance.svg - icons/settings/channels.svg - icons/settings/chat.svg - icons/settings/directories.svg - icons/settings/filesharing.svg - icons/settings/forums.svg - icons/settings/general.svg - icons/settings/messages.svg - icons/settings/network.svg - icons/settings/notify.svg - icons/settings/people.svg - icons/settings/permissions.svg - icons/settings/plugins.svg - icons/settings/posted.svg - icons/settings/profile.svg - icons/settings/server.svg - icons/settings/sound.svg - icons/settings/webinterface.svg - icons/star_overlay_128.png - icons/svg/add.svg - icons/svg/attach-image.svg - icons/svg/attach.svg - icons/svg/channels-notify.svg - icons/svg/channels.svg - icons/svg/chat-bubble-notify.svg - icons/svg/chat-bubble.svg - icons/svg/chat-lobbies-notify.svg - icons/svg/chat-lobbies.svg - icons/svg/circles.svg - icons/svg/download.svg - icons/svg/empty-circle.svg - icons/svg/exit-red.svg - icons/svg/exit.svg - icons/svg/feedreader-notify.svg - icons/svg/feedreader.svg - icons/svg/filesharing-notify.svg - icons/svg/filesharing.svg - icons/svg/folders1.svg - icons/svg/folders.svg - icons/svg/font.svg - icons/svg/forums-notify.svg - icons/svg/forums.svg - icons/svg/fullscreen_arrows.svg - icons/svg/highlight.svg - icons/svg/info.svg - icons/svg/invite.svg - icons/svg/keyring.svg - icons/svg/leave.svg - icons/svg/magnifying-glass.svg - icons/svg/messages-notify.svg - icons/svg/messages.svg - icons/svg/microphone_mute.svg - icons/svg/microphone.svg - icons/svg/netgraph.svg - icons/svg/network-notify.svg - icons/svg/network-puplic.svg - icons/svg/network.svg - icons/svg/newsfeed-notify.svg - icons/svg/newsfeed.svg - icons/svg/options.svg - icons/svg/paste.svg - icons/svg/people-notify.svg - icons/svg/people.svg - icons/svg/person.svg - icons/svg/phone_hangup.svg - icons/svg/phone.svg - icons/svg/posted-notify.svg - icons/svg/posted.svg - icons/svg/profile.svg - icons/svg/retroshare-info.svg - icons/svg/retroshare-splash.svg - icons/svg/retroshare-symbol_black_bg.svg - icons/svg/retroshare-symbol_gradients.svg - icons/svg/retroshare-symbol-minimal.svg - icons/svg/search.svg - icons/svg/send-message-blocked.svg - icons/svg/send-message.svg - icons/svg/settings.svg - icons/svg/share.svg - icons/svg/smiley.svg - icons/svg/speaker_mute.svg - icons/svg/speaker.svg - icons/svg/thumbs-down.svg - icons/svg/thumbs-neutral.svg - icons/svg/thumbs-up.svg - icons/svg/upload.svg - icons/svg/video.svg - icons/switch00_128.png - icons/switch01_128.png - icons/switch10_128.png - icons/switch11_128.png - icons/system_128.png - icons/tile_checking_48.png - icons/tile_downloaded_48.png - icons/tile_downloading_48.png - icons/tile_inactive_48.png - icons/tor-logo.png - icons/tor-off.png - icons/tor-on.png - icons/tor-starting.png - icons/tor-stopping.png - icons/user-away_64.png - icons/user-away-extended_64.png - icons/user-busy_64.png - icons/user-offline_64.png - icons/user-online_64.png - icons/void_128.png - icons/warning_red_128.png - icons/warning_yellow_128.png - icons/yahoo.png - icons/yandex.png - + + icons/svg/password.svg + icons/stars/star0.png + icons/stars/star1.png + icons/stars/star2.png + icons/stars/star3.png + icons/stars/star4.png + icons/stars/star5.png + icons/add_user_256.png + icons/anonymous_blue_128.png + icons/anonymous_green_128.png + icons/aol.png + icons/avatar_128.png + icons/avatar_grey_128.png + icons/biohazard_red.png + icons/biohazard_yellow.png + icons/blank_blue_128.png + icons/blank_green_128.png + icons/blank_red_128.png + icons/browsable_blue_128.png + icons/browsable_green_128.png + icons/bullet_blue_128.png + icons/bullet_green_128.png + icons/bullet_green_yellow_star_128.png + icons/bullet_grey_128.png + icons/bullet_red_128.png + icons/bullet_yellow_128.png + icons/channels_128.png + icons/channels_red_128.png + icons/chat_128.png + icons/chat_red_128.png + icons/circles_128.png + icons/circles_new_128.png + icons/flag-green.png + icons/friends_128.png + icons/global_switch_off_128.png + icons/global_switch_on_128.png + icons/gmail.png + icons/help_128.png + icons/help_64.png + icons/information_128.png + icons/internet_128.png + icons/invite64.png + icons/knews_128.png + icons/knews_red_128.png + icons/konversation_128.png + icons/konversation128.png + icons/konversation_red_128.png + icons/ktorrent_128.png + icons/ktorrent_red_128.png + icons/logo_0_connected_128.png + icons/logo_128.png + icons/logo_1_connected_128.png + icons/logo_2_connected_128.png + icons/mail_128.png + icons/mail_old_128.png + icons/mail_red_128.png + icons/newsfeed128.png + icons/outlook.png + icons/plugins_128.png + icons/png/add.png + icons/png/attach-image.png + icons/png/attach.png + icons/png/channels-notify.png + icons/png/channels.png + icons/png/chat-bubble-notify.png + icons/png/chat-bubble.png + icons/png/chat-lobbies-notify.png + icons/png/chat-lobbies.png + icons/png/circles.png + icons/png/empty-circle.png + icons/png/exit.png + icons/png/feedreader-notify.png + icons/png/feedreader.png + icons/png/filesharing-notify.png + icons/png/filesharing.png + icons/png/font.png + icons/png/forums-notify.png + icons/png/forums.png + icons/png/fullscreen_arrows.png + icons/png/highlight.png + icons/png/info.png + icons/png/invite.png + icons/png/keyring.png + icons/png/leave.png + icons/png/messages-notify.png + icons/png/messages.png + icons/png/microphone_mute.png + icons/png/microphone.png + icons/png/netgraph.png + icons/png/network-notify.png + icons/png/network.png + icons/png/network-puplic.png + icons/png/newsfeed-notify.png + icons/png/newsfeed.png + icons/png/options.png + icons/png/people-notify.png + icons/png/people.png + icons/png/person.png + icons/png/phone_hangup.png + icons/png/phone.png + icons/png/posted-notify.png + icons/png/posted.png + icons/png/search.png + icons/png/send-message-blocked.png + icons/png/send-message.png + icons/png/settings.png + icons/png/smiley.png + icons/png/speaker_mute.png + icons/png/speaker.png + icons/png/thumbs-down.png + icons/png/thumbs-neutral.png + icons/png/thumbs-up.png + icons/png/video.png + icons/posted_128.png + icons/posted_red_128.png + icons/quit_128.png + icons/search_red_128.png + icons/security_high_128.png + icons/security_low_128.png + icons/security_medium_128.png + icons/settings/appearance.svg + icons/settings/channels.svg + icons/settings/chat.svg + icons/settings/directories.svg + icons/settings/filesharing.svg + icons/settings/forums.svg + icons/settings/general.svg + icons/settings/messages.svg + icons/settings/network.svg + icons/settings/notify.svg + icons/settings/people.svg + icons/settings/permissions.svg + icons/settings/plugins.svg + icons/settings/posted.svg + icons/settings/profile.svg + icons/settings/server.svg + icons/settings/sound.svg + icons/settings/webinterface.svg + icons/star_overlay_128.png + icons/svg/add.svg + icons/svg/attach-image.svg + icons/svg/attach.svg + icons/svg/channels-notify.svg + icons/svg/channels.svg + icons/svg/chat-bubble-notify.svg + icons/svg/chat-bubble.svg + icons/svg/chat-lobbies-notify.svg + icons/svg/chat-lobbies.svg + icons/svg/circles.svg + icons/svg/download.svg + icons/svg/empty-circle.svg + icons/svg/exit-red.svg + icons/svg/exit.svg + icons/svg/feedreader-notify.svg + icons/svg/feedreader.svg + icons/svg/filesharing-notify.svg + icons/svg/filesharing.svg + icons/svg/folders1.svg + icons/svg/folders.svg + icons/svg/font.svg + icons/svg/forums-notify.svg + icons/svg/forums.svg + icons/svg/fullscreen_arrows.svg + icons/svg/highlight.svg + icons/svg/info.svg + icons/svg/invite.svg + icons/svg/keyring.svg + icons/svg/leave.svg + icons/svg/magnifying-glass.svg + icons/svg/messages-notify.svg + icons/svg/messages.svg + icons/svg/microphone_mute.svg + icons/svg/microphone.svg + icons/svg/netgraph.svg + icons/svg/network-notify.svg + icons/svg/network-puplic.svg + icons/svg/network.svg + icons/svg/newsfeed-notify.svg + icons/svg/newsfeed.svg + icons/svg/options.svg + icons/svg/paste.svg + icons/svg/people-notify.svg + icons/svg/people.svg + icons/svg/person.svg + icons/svg/phone_hangup.svg + icons/svg/phone.svg + icons/svg/posted-notify.svg + icons/svg/posted.svg + icons/svg/profile.svg + icons/svg/retroshare-info.svg + icons/svg/retroshare-splash.svg + icons/svg/retroshare-symbol_black_bg.svg + icons/svg/retroshare-symbol_gradients.svg + icons/svg/retroshare-symbol-minimal.svg + icons/svg/search.svg + icons/svg/send-message-blocked.svg + icons/svg/send-message.svg + icons/svg/settings.svg + icons/svg/share.svg + icons/svg/smiley.svg + icons/svg/speaker_mute.svg + icons/svg/speaker.svg + icons/svg/thumbs-down.svg + icons/svg/thumbs-neutral.svg + icons/svg/thumbs-up.svg + icons/svg/upload.svg + icons/svg/video.svg + icons/switch00_128.png + icons/switch01_128.png + icons/switch10_128.png + icons/switch11_128.png + icons/system_128.png + icons/tile_checking_48.png + icons/tile_downloaded_48.png + icons/tile_downloading_48.png + icons/tile_inactive_48.png + icons/tor-logo.png + icons/tor-off.png + icons/tor-on.png + icons/tor-starting.png + icons/tor-stopping.png + icons/user-away_64.png + icons/user-away-extended_64.png + icons/user-busy_64.png + icons/user-offline_64.png + icons/user-online_64.png + icons/void_128.png + icons/warning_red_128.png + icons/warning_yellow_128.png + icons/yahoo.png + icons/yandex.png + diff --git a/retroshare-gui/src/gui/icons/svg/password.svg b/retroshare-gui/src/gui/icons/svg/password.svg new file mode 100644 index 000000000..1ad0b352d --- /dev/null +++ b/retroshare-gui/src/gui/icons/svg/password.svg @@ -0,0 +1,54 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/retroshare-gui/src/gui/qss/stylesheet/Standard.qss b/retroshare-gui/src/gui/qss/stylesheet/Standard.qss index b183eb77c..c3f0c1012 100644 --- a/retroshare-gui/src/gui/qss/stylesheet/Standard.qss +++ b/retroshare-gui/src/gui/qss/stylesheet/Standard.qss @@ -756,3 +756,20 @@ ConnectFriendWizard QFrame#friendFrame { border-radius: 6px; background: white; } + +HomePage QFrame#helpframe{ + border: 2px solid #009933; + border-radius: 6px; + background: white; +} + +StartDialog QPushButton#loadButton { + border-image: url(:/images/btn_blue.png) 4; + border-width: 4; + font: bold; + color: white; +} + +StartDialog QPushButton#loadButton:hover { + border-image: url(:/images/btn_blue_hover.png) 4; +} \ No newline at end of file From eb30af57bd2f02945ae46b27a46bc2a255a0f372 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 11 May 2017 14:42:06 +0200 Subject: [PATCH 5/9] improved display in bw statistics --- .../src/gui/common/RSGraphWidget.cpp | 94 ++++++++++++------- retroshare-gui/src/gui/common/RSGraphWidget.h | 11 ++- .../gui/statistics/BandwidthStatsWidget.cpp | 4 + 3 files changed, 73 insertions(+), 36 deletions(-) diff --git a/retroshare-gui/src/gui/common/RSGraphWidget.cpp b/retroshare-gui/src/gui/common/RSGraphWidget.cpp index d0bbaa1dc..8f0272b55 100644 --- a/retroshare-gui/src/gui/common/RSGraphWidget.cpp +++ b/retroshare-gui/src/gui/common/RSGraphWidget.cpp @@ -59,6 +59,7 @@ RSGraphSource::RSGraphSource() #endif _timer = new QTimer ; _digits = 2 ; + _filtering_enabled = true; QObject::connect(_timer,SIGNAL(timeout()),this,SLOT(updateIfPossible())) ; } @@ -123,6 +124,9 @@ void RSGraphSource::getDataPoints(int index,std::vector& pts,float filt pts.clear() ; qint64 now = getTime() ; + if(!_filtering_enabled) + filter_factor = 0 ; + std::map > >::const_iterator it = _points.begin(); int n=0; @@ -267,11 +271,13 @@ RSGraphWidget::RSGraphWidget(QWidget *parent) _timer = new QTimer ; QObject::connect(_timer,SIGNAL(timeout()),this,SLOT(updateIfPossible())) ; + _y_scale = 1.0f ; _timer->start(1000); float FS = QFontMetricsF(font()).height(); setMinimumHeight(12*FS); + _graph_base = FS*GRAPH_BASE; } void RSGraphWidget::updateIfPossible() @@ -292,7 +298,13 @@ RSGraphWidget::~RSGraphWidget() delete _source ; } -/** Gets the width of the desktop, which is the maximum number of points +void RSGraphWidget::setFiltering(bool b) +{ + if(_source != NULL) + _source->setFiltering(b) ; +} + +/** Gets the width of the desktop, which is the maximum number of points * we can plot in the graph. */ int RSGraphWidget::getNumPoints() @@ -465,42 +477,43 @@ void RSGraphWidget::pointsFromData(const std::vector& values,QVector= SCALE_WIDTH*fact && last_px < SCALE_WIDTH*fact) + if(!(_flags & RSGRAPH_FLAGS_PAINT_STYLE_DOTS)) { - float alpha = (SCALE_WIDTH*fact - last_px)/(px - last_px) ; - float ipx = SCALE_WIDTH*fact ; - float ipy = (1-alpha)*last_py + alpha*py ; + if(px >= SCALE_WIDTH*fact && last_px < SCALE_WIDTH*fact) + { + float alpha = (SCALE_WIDTH*fact - last_px)/(px - last_px) ; + float ipx = SCALE_WIDTH*fact ; + float ipy = (1-alpha)*last_py + alpha*py ; - points << QPointF(ipx,y) ; - points << QPointF(ipx,ipy) ; - } - else if(i==0) - { - if(px < SCALE_WIDTH*fact) - points << QPointF(SCALE_WIDTH*fact,py) ; - else - points << QPointF(px,y) ; + points << QPointF(ipx,y - _graph_base) ; + points << QPointF(ipx,ipy) ; + } + else if(i==0) + { + if(px < SCALE_WIDTH*fact) + points << QPointF(SCALE_WIDTH*fact,py) ; + else + points << QPointF(px,y - _graph_base) ; + } } if(px < SCALE_WIDTH*fact) continue ; + if((_flags & RSGRAPH_FLAGS_PAINT_STYLE_DOTS) && values[i].y() == 0) + continue ; + _maxValue = std::max(_maxValue,values[i].y()) ; // remove midle point when 3 consecutive points have the same value. - if(points.size() > 1 && points[points.size()-2].y() == points.back().y() && points.back().y() == py) - points.pop_back() ; - - // if(fabs(px - last_px)/_time_scale > min_x_no_data_threshold) - // { - // points << QPointF(last_px,y) ; - // points << QPointF(px,y) ; - // } + if(!(_flags & RSGRAPH_FLAGS_PAINT_STYLE_DOTS)) + if(points.size() > 1 && points[points.size()-2].y() == points.back().y() && points.back().y() == py) + points.pop_back() ; points << QPointF(px,py) ; - if(i==values.size()-1) + if(!(_flags & RSGRAPH_FLAGS_PAINT_STYLE_DOTS) && (i==values.size()-1)) points << QPointF(px,y) ; last_px = px ; @@ -512,17 +525,17 @@ void RSGraphWidget::pointsFromData(const std::vector& values,QVectorpoints. The area will be @@ -560,7 +573,7 @@ void RSGraphWidget::paintDots(const QVector& points, QColor color) _painter->setBrush(QBrush(color)); for(int i=0;idrawEllipse(QRect(points[i].x(),points[i].y(),5*_linewidthscale,5*_linewidthscale)) ; + _painter->drawEllipse(QRect(points[i].x()-2.5*_linewidthscale,points[i].y()-2.5*_linewidthscale,5*_linewidthscale,5*_linewidthscale)) ; _painter->setPen(oldPen); _painter->setBrush(oldBrush); @@ -603,8 +616,8 @@ void RSGraphWidget::paintScale1() float fact = FS/14.0 ; int top = _rec.y(); - int bottom = _rec.height(); - qreal paintStep = (bottom - (bottom/10)) / 4; + int bottom = _rec.height() - _graph_base; + qreal paintStep = (bottom - top) / 5; /* Draw the other marks in their correctly scaled locations */ qreal scale; @@ -615,16 +628,23 @@ void RSGraphWidget::paintScale1() QString unit_name = _source->unitName() ; - for (int i = 1; i < 5; i++) + for (int i = 0; i < 5; i++) { - pos = bottom - (i * paintStep); + pos = bottom - (i * paintStep) ; - scale = pixelsToValue(i * paintStep); + scale = pixelsToValue(_graph_base + i * paintStep); + + // If legend contains integers only the value should be rounded to the nearest integer + if(_flags & RSGRAPH_FLAGS_LEGEND_INTEGER) + { + scale = (int)scale ; + pos = bottom - (valueToPixels(scale) - _graph_base) ; + } QString text = _source->displayValue(scale) ; _painter->setPen(SCALE_COLOR); - _painter->drawText(QPointF(5*fact, pos+0.5*FS), text); + _painter->drawText(QPointF(5*fact, pos+0.4*FS), text); _painter->setPen(GRID_COLOR); _painter->drawLine(QPointF(SCALE_WIDTH*fact, pos), QPointF(_rec.width(), pos)); } @@ -710,7 +730,11 @@ void RSGraphWidget::paintLegend() QString text = _source->legend(i,vals[i]) ; QPen oldPen = _painter->pen(); - _painter->setPen(QPen(getColor(i), Qt::SolidLine)); + + QPen pen(getColor(i), Qt::SolidLine) ; + pen.setWidth(_linewidthscale); + + _painter->setPen(pen); _painter->drawLine(QPointF(SCALE_WIDTH*fact+10.0*fact, pos+FS/3), QPointF(SCALE_WIDTH*fact+30.0*fact, pos+FS/3)); _painter->setPen(oldPen); diff --git a/retroshare-gui/src/gui/common/RSGraphWidget.h b/retroshare-gui/src/gui/common/RSGraphWidget.h index b57833d51..cb49c9ea2 100644 --- a/retroshare-gui/src/gui/common/RSGraphWidget.h +++ b/retroshare-gui/src/gui/common/RSGraphWidget.h @@ -32,8 +32,9 @@ #include +#define GRAPH_BASE 2 /** Position of the 0 of the scale, in count of the text height */ #define SCALE_WIDTH 75 /** Width of the scale */ -#define MINUSER_SCALE 2000 /** 2000 users is the minimum scale */ +#define MINUSER_SCALE 2000 /** 2000 users is the minimum scale */ #define SCROLL_STEP 4 /** Horizontal change on graph update */ #define BACK_COLOR Qt::white @@ -87,6 +88,9 @@ public: // Sets the time period for collecting new values. Units=milliseconds. void setCollectionTimePeriod(qint64 msecs) ; + // Enables/disables time filtering of the data + void setFiltering(bool b) { _filtering_enabled = b; } + void setDigits(int d) { _digits = d ;} protected slots: @@ -112,6 +116,7 @@ protected: qint64 _update_period_msecs ; qint64 _time_orig_msecs ; int _digits ; + bool _filtering_enabled ; }; class RSGraphWidget: public QFrame @@ -127,6 +132,7 @@ public: static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_FLAT = 0x0020 ;// do not interpolate, and draw flat colored boxes static const uint32_t RSGRAPH_FLAGS_LEGEND_CUMULATED = 0x0040 ;// show the total in the legend rather than current values static const uint32_t RSGRAPH_FLAGS_PAINT_STYLE_DOTS = 0x0080 ;// use dots + static const uint32_t RSGRAPH_FLAGS_LEGEND_INTEGER = 0x0100 ;// use integer number in the legend, and move the lines to match integers /** Bandwidth graph style. */ enum GraphStyle @@ -156,6 +162,8 @@ public: void setShowEntry(uint32_t entry, bool show) ; void setCurvesOpacity(float f) ; + void setFiltering(bool b) ; + void setFlags(uint32_t flag) { _flags |= flag ; } void resetFlags(uint32_t flag) { _flags &= ~flag ; } protected: @@ -209,6 +217,7 @@ private: /** The maximum number of points to store. */ qreal _y_scale ; qreal _opacity ; + qreal _graph_base; qreal pixelsToValue(qreal) ; qreal valueToPixels(qreal) ; diff --git a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp index 9fd2dfa3c..8c04ed9d0 100644 --- a/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp +++ b/retroshare-gui/src/gui/statistics/BandwidthStatsWidget.cpp @@ -202,12 +202,16 @@ void BandwidthStatsWidget::updateUnitSelection(int n) { ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_KILOBYTES) ; ui.bwgraph_BW->resetFlags(RSGraphWidget::RSGRAPH_FLAGS_PAINT_STYLE_DOTS); + ui.bwgraph_BW->resetFlags(RSGraphWidget::RSGRAPH_FLAGS_LEGEND_INTEGER); ui.legend_CB->setItemText(1,tr("Average")); + ui.bwgraph_BW->setFiltering(true) ; } else { ui.bwgraph_BW->setUnit(BWGraphSource::UNIT_COUNT) ; ui.bwgraph_BW->setFlags(RSGraphWidget::RSGRAPH_FLAGS_PAINT_STYLE_DOTS); + ui.bwgraph_BW->setFlags(RSGraphWidget::RSGRAPH_FLAGS_LEGEND_INTEGER); + ui.bwgraph_BW->setFiltering(false) ; ui.legend_CB->setItemText(1,tr("Total")); } } From 7a19deea030a673567283a0c229d99f22d2c936b Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 11 May 2017 14:52:26 +0200 Subject: [PATCH 6/9] small fix to statistics view --- retroshare-gui/src/gui/common/RSGraphWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/common/RSGraphWidget.cpp b/retroshare-gui/src/gui/common/RSGraphWidget.cpp index 8f0272b55..0f25d8168 100644 --- a/retroshare-gui/src/gui/common/RSGraphWidget.cpp +++ b/retroshare-gui/src/gui/common/RSGraphWidget.cpp @@ -644,7 +644,7 @@ void RSGraphWidget::paintScale1() QString text = _source->displayValue(scale) ; _painter->setPen(SCALE_COLOR); - _painter->drawText(QPointF(5*fact, pos+0.4*FS), text); + _painter->drawText(QPointF(SCALE_WIDTH*fact - QFontMetricsF(font()).width(text) - 4*fact, pos+0.4*FS), text); _painter->setPen(GRID_COLOR); _painter->drawLine(QPointF(SCALE_WIDTH*fact, pos), QPointF(_rec.width(), pos)); } From 38d07430b7e7a8571348799007741baa126eda60 Mon Sep 17 00:00:00 2001 From: csoler Date: Thu, 11 May 2017 18:46:40 +0200 Subject: [PATCH 7/9] used more saturated colors in stats graph --- .../src/gui/common/RSGraphWidget.cpp | 22 ++++++++++++------- retroshare-gui/src/gui/common/RSGraphWidget.h | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/retroshare-gui/src/gui/common/RSGraphWidget.cpp b/retroshare-gui/src/gui/common/RSGraphWidget.cpp index 0f25d8168..baf94dd25 100644 --- a/retroshare-gui/src/gui/common/RSGraphWidget.cpp +++ b/retroshare-gui/src/gui/common/RSGraphWidget.cpp @@ -385,12 +385,16 @@ default: } } -QColor RSGraphWidget::getColor(int i) +QColor RSGraphWidget::getColor(const std::string& name) { - // shuffle the colors a little bit - int h = (i*86243)%359 ; + uint32_t r = 57 ; + for(uint32_t i=0;i points ; pointsFromData(values,points) ; + QColor pcolor = getColor(source.displayName(i).toStdString()) ; + /* Plot the bandwidth data as area graphs */ if (_flags & RSGRAPH_FLAGS_PAINT_STYLE_PLAIN) - paintIntegral(points, getColor(i), _opacity); + paintIntegral(points, pcolor, _opacity); /* Plot the bandwidth as solid lines. If the graph style is currently an * area graph, we end up outlining the integrals. */ if(_flags & RSGRAPH_FLAGS_PAINT_STYLE_DOTS) - paintDots(points, getColor(i)); + paintDots(points, pcolor); else - paintLine(points, getColor(i)); + paintLine(points, pcolor); } if(_maxValue > 0.0f) { @@ -731,7 +737,7 @@ void RSGraphWidget::paintLegend() QPen oldPen = _painter->pen(); - QPen pen(getColor(i), Qt::SolidLine) ; + QPen pen(getColor(_source->displayName(i).toStdString()), Qt::SolidLine) ; pen.setWidth(_linewidthscale); _painter->setPen(pen); diff --git a/retroshare-gui/src/gui/common/RSGraphWidget.h b/retroshare-gui/src/gui/common/RSGraphWidget.h index cb49c9ea2..7c88086f4 100644 --- a/retroshare-gui/src/gui/common/RSGraphWidget.h +++ b/retroshare-gui/src/gui/common/RSGraphWidget.h @@ -191,7 +191,7 @@ private: void paintScale1(); void paintScale2(); - QColor getColor(int i) ; + QColor getColor(const std::string &name) ; /** Returns a formatted string representation of total. */ QString totalToStr(qreal total); From 837fcd7989a46e5ebd4572053c7451ada70da2e2 Mon Sep 17 00:00:00 2001 From: defnax Date: Fri, 12 May 2017 18:29:39 +0200 Subject: [PATCH 8/9] Added Placeholder text for Password field, removed "Password:" label. --- retroshare-gui/src/gui/StartDialog.ui | 30 ++++++++++++--------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/retroshare-gui/src/gui/StartDialog.ui b/retroshare-gui/src/gui/StartDialog.ui index 572df161d..4665dfdc0 100644 --- a/retroshare-gui/src/gui/StartDialog.ui +++ b/retroshare-gui/src/gui/StartDialog.ui @@ -195,6 +195,13 @@ 9 + + + + Profile - Location: + + + @@ -217,7 +224,7 @@ - + @@ -236,28 +243,17 @@ - + QLineEdit::Password - - - - - - Password: + + Password - - - - Profile - Location: - - - - + Remember Password @@ -267,7 +263,7 @@ - + From 2f17a8010343e27b4f8595b4632e85ebacfd319f Mon Sep 17 00:00:00 2001 From: defnax Date: Fri, 12 May 2017 21:39:50 +0200 Subject: [PATCH 9/9] added missed icons --- retroshare-gui/src/gui/icons/stars/star0.png | Bin 0 -> 7190 bytes retroshare-gui/src/gui/icons/stars/star0.svg | 131 +++++++++ retroshare-gui/src/gui/icons/stars/star1.png | Bin 0 -> 6561 bytes retroshare-gui/src/gui/icons/stars/star1.svg | 157 +++++++++++ retroshare-gui/src/gui/icons/stars/star2.png | Bin 0 -> 6560 bytes retroshare-gui/src/gui/icons/stars/star2.svg | 184 +++++++++++++ retroshare-gui/src/gui/icons/stars/star3.png | Bin 0 -> 5710 bytes retroshare-gui/src/gui/icons/stars/star3.svg | 210 ++++++++++++++ retroshare-gui/src/gui/icons/stars/star4.png | Bin 0 -> 5668 bytes retroshare-gui/src/gui/icons/stars/star4.svg | 237 ++++++++++++++++ retroshare-gui/src/gui/icons/stars/star5.png | Bin 0 -> 5267 bytes retroshare-gui/src/gui/icons/stars/star5.svg | 271 +++++++++++++++++++ 12 files changed, 1190 insertions(+) create mode 100644 retroshare-gui/src/gui/icons/stars/star0.png create mode 100644 retroshare-gui/src/gui/icons/stars/star0.svg create mode 100644 retroshare-gui/src/gui/icons/stars/star1.png create mode 100644 retroshare-gui/src/gui/icons/stars/star1.svg create mode 100644 retroshare-gui/src/gui/icons/stars/star2.png create mode 100644 retroshare-gui/src/gui/icons/stars/star2.svg create mode 100644 retroshare-gui/src/gui/icons/stars/star3.png create mode 100644 retroshare-gui/src/gui/icons/stars/star3.svg create mode 100644 retroshare-gui/src/gui/icons/stars/star4.png create mode 100644 retroshare-gui/src/gui/icons/stars/star4.svg create mode 100644 retroshare-gui/src/gui/icons/stars/star5.png create mode 100644 retroshare-gui/src/gui/icons/stars/star5.svg diff --git a/retroshare-gui/src/gui/icons/stars/star0.png b/retroshare-gui/src/gui/icons/stars/star0.png new file mode 100644 index 0000000000000000000000000000000000000000..a7dc2a47717289971cbe73d73623a30466758c4b GIT binary patch literal 7190 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 + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/retroshare-gui/src/gui/icons/stars/star1.png b/retroshare-gui/src/gui/icons/stars/star1.png new file mode 100644 index 0000000000000000000000000000000000000000..875eecbb635639fbeee8b29467f79c1713b20971 GIT binary patch literal 6561 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 F`ai|1o>2e* literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/gui/icons/stars/star1.svg b/retroshare-gui/src/gui/icons/stars/star1.svg new file mode 100644 index 000000000..f30284678 --- /dev/null +++ b/retroshare-gui/src/gui/icons/stars/star1.svg @@ -0,0 +1,157 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/retroshare-gui/src/gui/icons/stars/star2.png b/retroshare-gui/src/gui/icons/stars/star2.png new file mode 100644 index 0000000000000000000000000000000000000000..507e728987392962ee2035d025c36f68e52a46ec GIT binary patch literal 6560 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 AZvX%Q literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/gui/icons/stars/star2.svg b/retroshare-gui/src/gui/icons/stars/star2.svg new file mode 100644 index 000000000..0b68c74a6 --- /dev/null +++ b/retroshare-gui/src/gui/icons/stars/star2.svg @@ -0,0 +1,184 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/retroshare-gui/src/gui/icons/stars/star3.png b/retroshare-gui/src/gui/icons/stars/star3.png new file mode 100644 index 0000000000000000000000000000000000000000..654ae5319dfacc261e8070d7e239d5332a1fb4bb GIT binary patch literal 5710 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 + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/retroshare-gui/src/gui/icons/stars/star4.png b/retroshare-gui/src/gui/icons/stars/star4.png new file mode 100644 index 0000000000000000000000000000000000000000..0a6769f139ece375da317b3ddc1c0616637fd7d6 GIT binary patch literal 5668 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 W{q>cB%VRXr1=LkuC|4`OBmM_qSiTYf literal 0 HcmV?d00001 diff --git a/retroshare-gui/src/gui/icons/stars/star4.svg b/retroshare-gui/src/gui/icons/stars/star4.svg new file mode 100644 index 000000000..af9ca8469 --- /dev/null +++ b/retroshare-gui/src/gui/icons/stars/star4.svg @@ -0,0 +1,237 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/retroshare-gui/src/gui/icons/stars/star5.png b/retroshare-gui/src/gui/icons/stars/star5.png new file mode 100644 index 0000000000000000000000000000000000000000..dd6f15dd92052f8f3a0eef9b4f9ed677bdc03369 GIT binary patch literal 5267 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 + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file