From 3430eece225c08ec770dee7cf73c0ac651e68dfb Mon Sep 17 00:00:00 2001 From: mr-alice Date: Tue, 1 Nov 2016 10:30:36 +0100 Subject: [PATCH] fixed display of share flags as a proper nice icon set --- retroshare-gui/src/gui/RemoteDirModel.cpp | 52 ++++++++++++++++++- retroshare-gui/src/gui/RemoteDirModel.h | 1 + retroshare-gui/src/gui/ShareManager.cpp | 15 +----- retroshare-gui/src/gui/SharedFilesDialog.cpp | 36 ++++++++++++- retroshare-gui/src/gui/icons.qrc | 1 + retroshare-gui/src/gui/icons/void_128.png | Bin 0 -> 5684 bytes 6 files changed, 89 insertions(+), 16 deletions(-) create mode 100644 retroshare-gui/src/gui/icons/void_128.png diff --git a/retroshare-gui/src/gui/RemoteDirModel.cpp b/retroshare-gui/src/gui/RemoteDirModel.cpp index 250eadfe4..25b8708d7 100644 --- a/retroshare-gui/src/gui/RemoteDirModel.cpp +++ b/retroshare-gui/src/gui/RemoteDirModel.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include "RemoteDirModel.h" #include #include @@ -270,8 +271,55 @@ QString RetroshareDirModel::getAgeIndicatorString(const DirDetails &details) con return ret; } +const QIcon& RetroshareDirModel::getFlagsIcon(FileStorageFlags flags) +{ + static QIcon *static_icons[8] = {NULL}; + + int n=0; + if(flags & DIR_FLAGS_ANONYMOUS_DOWNLOAD) n += 1 ; + if(flags & DIR_FLAGS_ANONYMOUS_SEARCH ) n += 2 ; + if(flags & DIR_FLAGS_BROWSABLE ) n += 4 ; + n-= 1; + + if(static_icons[n] == NULL) + { + QList icons ; + + if(flags & DIR_FLAGS_ANONYMOUS_SEARCH) + icons.push_back(QIcon(":icons/search_red_128.png")) ; + else + icons.push_back(QIcon(":icons/void_128.png")) ; + + if(flags & DIR_FLAGS_ANONYMOUS_DOWNLOAD) + icons.push_back(QIcon(":icons/anonymous_blue_128.png")) ; + else + icons.push_back(QIcon(":icons/void_128.png")) ; + + if(flags & DIR_FLAGS_BROWSABLE) + icons.push_back(QIcon(":icons/browsable_green_128.png")) ; + else + icons.push_back(QIcon(":icons/void_128.png")) ; + + QPixmap pix ; + GxsIdDetails::GenerateCombinedPixmap(pix, icons, 128); + + static_icons[n] = new QIcon(pix); + + std::cerr << "Generated icon for flags " << std::hex << flags << std::endl; + } + return *static_icons[n] ; +} + QVariant RetroshareDirModel::decorationRole(const DirDetails& details,int coln) const { + if(coln == 3) + { + if(details.type == DIR_TYPE_PERSON) return QVariant() ; + + return getFlagsIcon(details.flags) ; + } + + if(coln > 0) return QVariant() ; @@ -351,7 +399,7 @@ QVariant TreeStyle_RDM::displayRole(const DirDetails& details,int coln) const case 2: return misc::userFriendlyDuration(details.min_age); case 3: - return getFlagsString(details.flags); + return getFlagsIcon(details.flags);//getFlagsString(details.flags); // case 4: // { // QString ind(""); @@ -382,7 +430,7 @@ QVariant TreeStyle_RDM::displayRole(const DirDetails& details,int coln) const case 2: return misc::userFriendlyDuration(details.min_age); case 3: - return getFlagsString(details.flags); + return QVariant();//getFlagsString(details.flags); case 4: return getGroupsString(details.parent_groups) ; diff --git a/retroshare-gui/src/gui/RemoteDirModel.h b/retroshare-gui/src/gui/RemoteDirModel.h index 72a3fad7c..de1180f2c 100644 --- a/retroshare-gui/src/gui/RemoteDirModel.h +++ b/retroshare-gui/src/gui/RemoteDirModel.h @@ -97,6 +97,7 @@ class RetroshareDirModel : public QAbstractItemModel static QString getGroupsString(const std::list &) ; QString getAgeIndicatorString(const DirDetails &) const; // void getAgeIndicatorRec(const DirDetails &details, QString &ret) const; + static const QIcon& getFlagsIcon(FileStorageFlags flags) ; virtual QVariant displayRole(const DirDetails&,int) const = 0 ; virtual QVariant sortRole(const QModelIndex&,const DirDetails&,int) const =0; diff --git a/retroshare-gui/src/gui/ShareManager.cpp b/retroshare-gui/src/gui/ShareManager.cpp index 8ea8399a4..9d0fca3a7 100644 --- a/retroshare-gui/src/gui/ShareManager.cpp +++ b/retroshare-gui/src/gui/ShareManager.cpp @@ -62,7 +62,6 @@ ShareManager::ShareManager() ui.headerFrame->setHeaderText(tr("Share Manager")); isLoading = false; - load(); Settings->loadWidgetInformation(this); @@ -80,13 +79,12 @@ ShareManager::ShareManager() QHeaderView* header = ui.shareddirList->horizontalHeader(); QHeaderView_setSectionResizeModeColumn(header, COLUMN_PATH, QHeaderView::Stretch); -// header->setResizeMode(COLUMN_NETWORKWIDE, QHeaderView::ResizeToContents); -// header->setResizeMode(COLUMN_BROWSABLE, QHeaderView::ResizeToContents); - header->setHighlightSections(false); setAcceptDrops(true); setAttribute(Qt::WA_DeleteOnClose, true); + + reload(); } void ShareManager::doubleClickedCell(int row,int column) @@ -240,20 +238,11 @@ void ShareManager::showYourself() void ShareManager::updateFlags() { - if(isLoading) - return ; - - isLoading = true ; // stops GUI update. Otherwise each call to rsFiles->updateShareFlags() modifies the GUI that we count on to check - // what has changed => fail! - for(int row=0;rowrowCount();++row) { FileStorageFlags flags = (dynamic_cast(ui.shareddirList->cellWidget(row,COLUMN_SHARE_FLAGS)))->flags() ; - mDirInfos[row].shareflags = flags ; } - - isLoading = false ; // re-enable GUI load load() ; // update the GUI. } diff --git a/retroshare-gui/src/gui/SharedFilesDialog.cpp b/retroshare-gui/src/gui/SharedFilesDialog.cpp index 036dd96e2..ad22fb6f5 100644 --- a/retroshare-gui/src/gui/SharedFilesDialog.cpp +++ b/retroshare-gui/src/gui/SharedFilesDialog.cpp @@ -25,8 +25,10 @@ #include #include #include +#include #include #include +#include #include "SharedFilesDialog.h" #include "settings/AddFileAssociationDialog.h" @@ -114,6 +116,36 @@ private: RetroshareDirModel *m_dirModel; }; +// This class allows to draw the item in the share flags column using an appropriate size + +class ShareFlagsItemDelegate: public QStyledItemDelegate +{ +public: + ShareFlagsItemDelegate() {} + + virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const + { + Q_ASSERT(index.isValid()); + + QStyleOptionViewItemV4 opt = option; + initStyleOption(&opt, index); + // disable default icon + opt.icon = QIcon(); + // draw default item + QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, 0); + + const QRect r = option.rect; + + // get pixmap + QIcon icon = qvariant_cast(index.data(Qt::DecorationRole)); + QPixmap pix = icon.pixmap(r.size()); + + // draw pixmap at center of item + const QPoint p = QPoint((r.width() - pix.width())/2, (r.height() - pix.height())/2); + painter->drawPixmap(r.topLeft() + p, pix); + } +}; + /** Constructor */ SharedFilesDialog::SharedFilesDialog(RetroshareDirModel *_tree_model,RetroshareDirModel *_flat_model,QWidget *parent) : RsAutoUpdatePage(1000,parent),model(NULL) @@ -220,7 +252,9 @@ LocalSharedFilesDialog::LocalSharedFilesDialog(QWidget *parent) editshareAct = new QAction(QIcon(IMAGE_EDITSHARE), tr("Edit Share Permissions"), this) ; connect(editshareAct, SIGNAL(triggered()), this, SLOT(editSharePermissions())) ; - ui.titleBarPixmap->setPixmap(QPixmap(IMAGE_MYFILES)) ; + ui.titleBarPixmap->setPixmap(QPixmap(IMAGE_MYFILES)) ; + + ui.dirTreeView->setItemDelegateForColumn(COLUMN_FRIEND,new ShareFlagsItemDelegate()) ; } RemoteSharedFilesDialog::RemoteSharedFilesDialog(QWidget *parent) diff --git a/retroshare-gui/src/gui/icons.qrc b/retroshare-gui/src/gui/icons.qrc index 473b474fe..38d6878fd 100644 --- a/retroshare-gui/src/gui/icons.qrc +++ b/retroshare-gui/src/gui/icons.qrc @@ -29,6 +29,7 @@ icons/avatar_128.png icons/avatar_grey_128.png icons/blank_red_128.png + icons/void_128.png icons/blank_green_128.png icons/blank_blue_128.png icons/browsable_green_128.png diff --git a/retroshare-gui/src/gui/icons/void_128.png b/retroshare-gui/src/gui/icons/void_128.png new file mode 100644 index 0000000000000000000000000000000000000000..4756cf8ccfd0146c19d5394e228c1472a646d7aa GIT binary patch literal 5684 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