From c84016c3b09d26626a4617292f44fc79ce52b691 Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 19 Apr 2020 13:10:30 +0200 Subject: [PATCH] force Qt to use implicit data sharing in icons and pixmaps by using our own cache, and apply this to GxsChannelPostItem --- .../src/gui/FileTransfer/SearchDialog.cpp | 2 +- .../src/gui/FileTransfer/TransfersDialog.cpp | 283 +----------------- retroshare-gui/src/gui/RemoteDirModel.cpp | 2 +- retroshare-gui/src/gui/common/FilesDefs.cpp | 50 +++- retroshare-gui/src/gui/common/FilesDefs.h | 13 +- .../src/gui/feeds/GxsChannelPostItem.cpp | 27 +- .../src/gui/feeds/GxsChannelPostItem.ui | 50 ---- 7 files changed, 81 insertions(+), 346 deletions(-) diff --git a/retroshare-gui/src/gui/FileTransfer/SearchDialog.cpp b/retroshare-gui/src/gui/FileTransfer/SearchDialog.cpp index 55887b14a..fb72135ed 100644 --- a/retroshare-gui/src/gui/FileTransfer/SearchDialog.cpp +++ b/retroshare-gui/src/gui/FileTransfer/SearchDialog.cpp @@ -1470,7 +1470,7 @@ void SearchDialog::hideOrShowSearchResult(QTreeWidgetItem* resultItem, QString c void SearchDialog::setIconAndType(QTreeWidgetItem *item, const QString& filename) { - item->setIcon(SR_NAME_COL, FilesDefs::getIconFromFilename(filename)); + item->setIcon(SR_NAME_COL, FilesDefs::getIconFromFileType(filename)); item->setText(SR_TYPE_COL, FilesDefs::getNameFromFilename(filename)); } diff --git a/retroshare-gui/src/gui/FileTransfer/TransfersDialog.cpp b/retroshare-gui/src/gui/FileTransfer/TransfersDialog.cpp index 9a901b809..eda3aa3e3 100644 --- a/retroshare-gui/src/gui/FileTransfer/TransfersDialog.cpp +++ b/retroshare-gui/src/gui/FileTransfer/TransfersDialog.cpp @@ -594,7 +594,7 @@ public: if(col == COLUMN_NAME) { if(source_id == -1) - return QVariant(FilesDefs::getIconFromFilename(QString::fromUtf8(fileInfo.fname.c_str()))); + return QVariant(FilesDefs::getIconFromFileType(QString::fromUtf8(fileInfo.fname.c_str()))); else { QString iconName,tooltip; @@ -1522,285 +1522,6 @@ void TransfersDialog::setDestinationDirectory() } } -/* -int TransfersDialog::addDLItem(int row, const FileInfo &fileInfo) -{ - QString fileHash = QString::fromStdString(fileInfo.hash.toStdString()); - double fileDlspeed = (fileInfo.downloadStatus == FT_STATE_DOWNLOADING) ? (fileInfo.tfRate * 1024.0) : 0.0; - - QString status; - switch (fileInfo.downloadStatus) { - case FT_STATE_FAILED: status = tr("Failed"); break; - case FT_STATE_OKAY: status = tr("Okay"); break; - case FT_STATE_WAITING: status = tr("Waiting"); break; - case FT_STATE_DOWNLOADING: status = tr("Downloading"); break; - case FT_STATE_COMPLETE: status = tr("Complete"); break; - case FT_STATE_QUEUED: status = tr("Queued"); break; - case FT_STATE_PAUSED: status = tr("Paused"); break; - case FT_STATE_CHECKING_HASH:status = tr("Checking..."); break; - default: status = tr("Unknown"); break; - } - - double priority = PRIORITY_NULL; - - if (fileInfo.downloadStatus == FT_STATE_QUEUED) { - priority = fileInfo.queue_position; - } else if (fileInfo.downloadStatus == FT_STATE_COMPLETE) { - priority = 0; - } else { - switch (fileInfo.priority) { - case SPEED_LOW: priority = PRIORITY_SLOWER; break; - case SPEED_NORMAL: priority = PRIORITY_AVERAGE; break; - case SPEED_HIGH: priority = PRIORITY_FASTER; break; - default: priority = PRIORITY_AVERAGE; break; - } - } - - qlonglong completed = fileInfo.transfered; - qlonglong remaining = fileInfo.size - fileInfo.transfered; - - qlonglong downloadtime = (fileInfo.tfRate > 0)?( (fileInfo.size - fileInfo.transfered) / (fileInfo.tfRate * 1024.0) ) : 0 ; - qint64 qi64LastDL = fileInfo.lastTS ; //std::numeric_limits::max(); - - if (qi64LastDL == 0) // file is complete, or any raison why the time has not been set properly - { - QFileInfo file; - - if (fileInfo.downloadStatus == FT_STATE_COMPLETE) - file = QFileInfo(QString::fromUtf8(fileInfo.path.c_str()), QString::fromUtf8(fileInfo.fname.c_str())); - else - file = QFileInfo(QString::fromUtf8(rsFiles->getPartialsDirectory().c_str()), QString::fromUtf8(fileInfo.hash.toStdString().c_str())); - - //Get Last Access on File - if (file.exists()) - qi64LastDL = file.lastModified().toTime_t(); - } - QString strPath = QString::fromUtf8(fileInfo.path.c_str()); - QString strPathAfterDL = strPath; - strPathAfterDL.replace(QString::fromUtf8(rsFiles->getDownloadDirectory().c_str()),""); - - FileChunksInfo fcinfo; - if (!rsFiles->FileDownloadChunksDetails(fileInfo.hash, fcinfo)) { - return -1; - } - - FileProgressInfo pinfo; - pinfo.cmap = fcinfo.chunks; - pinfo.type = FileProgressInfo::DOWNLOAD_LINE; - pinfo.progress = (fileInfo.size == 0) ? 0 : (completed * 100.0 / fileInfo.size); - pinfo.nb_chunks = pinfo.cmap._map.empty() ? 0 : fcinfo.chunks.size(); - - for (uint32_t i = 0; i < fcinfo.chunks.size(); ++i) - switch(fcinfo.chunks[i]) - { - case FileChunksInfo::CHUNK_CHECKING: pinfo.chunks_in_checking.push_back(i); - break ; - case FileChunksInfo::CHUNK_ACTIVE: pinfo.chunks_in_progress.push_back(i); - break ; - case FileChunksInfo::CHUNK_DONE: - case FileChunksInfo::CHUNK_OUTSTANDING: - break ; - } - - QString tooltip; - - if (fileInfo.downloadStatus == FT_STATE_CHECKING_HASH) { - tooltip = tr("If the hash of the downloaded data does\nnot correspond to the hash announced\nby the file source. The data is likely \nto be corrupted.\n\nRetroShare will ask the source a detailed \nmap of the data; it will compare and invalidate\nbad blocks, and download them again\n\nTry to be patient!") ; - } - - if (row < 0) { - row = DLListModel->rowCount(); - DLListModel->insertRow(row); - - // change progress column to own class for sorting - DLListModel->setItem(row, COLUMN_PROGRESS, new ProgressItem(NULL)); - - DLListModel->setData(DLListModel->index(row, COLUMN_SIZE), QVariant((qlonglong) fileInfo.size)); - DLListModel->setData(DLListModel->index(row, COLUMN_ID), fileHash, Qt::DisplayRole); - DLListModel->setData(DLListModel->index(row, COLUMN_ID), fileHash, Qt::UserRole); - } - QString fileName = QString::fromUtf8(fileInfo.fname.c_str()); - - DLListModel->setData(DLListModel->index(row, COLUMN_NAME), fileName); - DLListModel->setData(DLListModel->index(row, COLUMN_NAME), FilesDefs::getIconFromFilename(fileName), Qt::DecorationRole); - - DLListModel->setData(DLListModel->index(row, COLUMN_COMPLETED), QVariant((qlonglong)completed)); - DLListModel->setData(DLListModel->index(row, COLUMN_DLSPEED), QVariant((double)fileDlspeed)); - DLListModel->setData(DLListModel->index(row, COLUMN_PROGRESS), QVariant((float)pinfo.progress)); - DLListModel->setData(DLListModel->index(row, COLUMN_PROGRESS), QVariant::fromValue(pinfo), Qt::UserRole); - DLListModel->setData(DLListModel->index(row, COLUMN_STATUS), QVariant(status)); - DLListModel->setData(DLListModel->index(row, COLUMN_PRIORITY), QVariant(priority)); - DLListModel->setData(DLListModel->index(row, COLUMN_REMAINING), QVariant((qlonglong)remaining)); - DLListModel->setData(DLListModel->index(row, COLUMN_DOWNLOADTIME), QVariant((qlonglong)downloadtime)); - DLListModel->setData(DLListModel->index(row, COLUMN_LASTDL), QVariant(qi64LastDL)); - DLListModel->setData(DLListModel->index(row, COLUMN_PATH), QVariant(strPathAfterDL)); - DLListModel->item(row,COLUMN_PATH)->setToolTip(strPath); - DLListModel->item(row,COLUMN_STATUS)->setToolTip(tooltip); - - QStandardItem *dlItem = DLListModel->item(row); - - std::set used_rows ; - int active = 0; - - if (fileInfo.downloadStatus != FT_STATE_COMPLETE) { - for (std::vector::const_iterator pit = fileInfo.peers.begin() ; pit != fileInfo.peers.end(); ++pit) - { - const TransferInfo &transferInfo = *pit; - - //unique combination: fileHash + peerId, variant: hash + peerName (too long) - QString hashFileAndPeerId = fileHash + QString::fromStdString(transferInfo.peerId.toStdString()); - - double peerDlspeed = 0; - if ((uint32_t)transferInfo.status == FT_STATE_DOWNLOADING && fileInfo.downloadStatus != FT_STATE_PAUSED && fileInfo.downloadStatus != FT_STATE_COMPLETE) - peerDlspeed = transferInfo.tfRate * 1024.0; - - FileProgressInfo peerpinfo; - peerpinfo.cmap = fcinfo.compressed_peer_availability_maps[transferInfo.peerId]; - peerpinfo.type = FileProgressInfo::DOWNLOAD_SOURCE ; - peerpinfo.progress = 0.0; // we don't display completion for sources. - peerpinfo.nb_chunks = peerpinfo.cmap._map.empty() ? 0 : fcinfo.chunks.size(); - - int row_id = addPeerToDLItem(dlItem, transferInfo.peerId, hashFileAndPeerId, peerDlspeed, transferInfo.status, peerpinfo); - - used_rows.insert(row_id); - - // get the sources (number of online peers) - if (transferInfo.tfRate > 0 && fileInfo.downloadStatus == FT_STATE_DOWNLOADING) - ++active; - } - } - - float fltSources = active + (float)fileInfo.peers.size()/1000; - DLListModel->setData(DLListModel->index(row, COLUMN_SOURCES), fltSources); - - // This is not optimal, but we deal with a small number of elements. The reverse order is really important, - // because rows after the deleted rows change positions ! - // - for (int r = dlItem->rowCount() - 1; r >= 0; --r) { - if (used_rows.find(r) == used_rows.end()) { - dlItem->removeRow(r); - } - } - - return row; -} - -int TransfersDialog::addPeerToDLItem(QStandardItem *dlItem, const RsPeerId& peer_ID, const QString& coreID, double dlspeed, uint32_t status, const FileProgressInfo& peerInfo) -{ - // try to find the item - int childRow = -1; - - QStandardItem *childId = NULL; - for (int count = 0; (childId = dlItem->child(count, COLUMN_ID)) != NULL; ++count) { - if (childId->data(Qt::UserRole).toString() == coreID) { - childRow = count; - break; - } - } - - QStandardItem *siName = NULL; - QStandardItem *siStatus = NULL; - - if (childRow == -1) { - // set this false if you want to expand on double click - dlItem->setEditable(false); - - QHeaderView *header = ui.downloadList->header(); - - QStandardItem *iName = new QStandardItem(); //COLUMN_NAME - QStandardItem *iSize = new SortByNameItem(header); //COLUMN_SIZE - QStandardItem *iCompleted = new SortByNameItem(header); //COLUMN_COMPLETED - QStandardItem *iDlSpeed = new SortByNameItem(header); //COLUMN_DLSPEED - QStandardItem *iProgress = new ProgressItem(header); //COLUMN_PROGRESS - QStandardItem *iSource = new SortByNameItem(header); //COLUMN_SOURCES - QStandardItem *iStatus = new SortByNameItem(header); //COLUMN_STATUS - QStandardItem *iPriority = new SortByNameItem(header); //COLUMN_PRIORITY - QStandardItem *iRemaining = new SortByNameItem(header); //COLUMN_REMAINING - QStandardItem *iDownloadTime = new SortByNameItem(header); //COLUMN_DOWNLOADTIME - QStandardItem *iID = new SortByNameItem(header); //COLUMN_ID - QStandardItem *iLastDL = new SortByNameItem(header); //COLUMN_LASTDL - QStandardItem *iPath = new SortByNameItem(header); //COLUMN_PATH - - siName = iName; - siStatus = iStatus; - - QList items; - QString iconName; - QString tooltip; - iName->setData(QVariant(getPeerName(peer_ID, iconName, tooltip)), Qt::DisplayRole); - iName->setData(QIcon(iconName), Qt::DecorationRole); - iName->setData(QVariant(tooltip), Qt::ToolTipRole); - iSize->setData(QVariant(QString()), Qt::DisplayRole); - iCompleted->setData(QVariant(QString()), Qt::DisplayRole); - iDlSpeed->setData(QVariant((double)dlspeed), Qt::DisplayRole); - iProgress->setData(QVariant((float)peerInfo.progress), Qt::DisplayRole); - iProgress->setData(QVariant::fromValue(peerInfo), Qt::UserRole); - iSource->setData(QVariant(QString()), Qt::DisplayRole); - - iPriority->setData(QVariant((double)PRIORITY_NULL), Qt::DisplayRole); // blank field for priority - iRemaining->setData(QVariant(QString()), Qt::DisplayRole); - iDownloadTime->setData(QVariant(QString()), Qt::DisplayRole); - iID->setData(QVariant() , Qt::DisplayRole); - iID->setData(QVariant(coreID), Qt::UserRole); - iLastDL->setData(QVariant(QString()), Qt::DisplayRole); - iPath->setData(QVariant(QString()), Qt::DisplayRole); - - items.append(iName); - items.append(iSize); - items.append(iCompleted); - items.append(iDlSpeed); - items.append(iProgress); - items.append(iSource); - items.append(iStatus); - items.append(iPriority); - items.append(iRemaining); - items.append(iDownloadTime); - items.append(iID); - items.append(iLastDL); - items.append(iPath); - dlItem->appendRow(items); - - childRow = dlItem->rowCount() - 1; - } else { - // just update the child (peer) - dlItem->child(childRow, COLUMN_DLSPEED)->setData(QVariant((double)dlspeed), Qt::DisplayRole); - dlItem->child(childRow, COLUMN_PROGRESS)->setData(QVariant((float)peerInfo.progress), Qt::DisplayRole); - dlItem->child(childRow, COLUMN_PROGRESS)->setData(QVariant::fromValue(peerInfo), Qt::UserRole); - - siName = dlItem->child(childRow,COLUMN_NAME); - siStatus = dlItem->child(childRow, COLUMN_STATUS); - } - - switch (status) { - case FT_STATE_FAILED: - siStatus->setData(QVariant(tr("Failed"))) ; - siName->setData(QIcon(":/images/Client1.png"), Qt::StatusTipRole); - break ; - case FT_STATE_OKAY: - siStatus->setData(QVariant(tr("Okay"))); - siName->setData(QIcon(":/images/Client2.png"), Qt::StatusTipRole); - break ; - case FT_STATE_WAITING: - siStatus->setData(QVariant(tr(""))); - siName->setData(QIcon(":/images/Client3.png"), Qt::StatusTipRole); - break ; - case FT_STATE_DOWNLOADING: - siStatus->setData(QVariant(tr("Transferring"))); - siName->setData(QIcon(":/images/Client0.png"), Qt::StatusTipRole); - break ; - case FT_STATE_COMPLETE: - siStatus->setData(QVariant(tr("Complete"))); - siName->setData(QIcon(":/images/Client0.png"), Qt::StatusTipRole); - break ; - default: - siStatus->setData(QVariant(tr(""))); - siName->setData(QIcon(":/images/Client4.png"), Qt::StatusTipRole); - } - - return childRow; -} -*/ - int TransfersDialog::addULItem(int row, const FileInfo &fileInfo) { if (fileInfo.peers.empty()) @@ -1822,7 +1543,7 @@ int TransfersDialog::addULItem(int row, const FileInfo &fileInfo) //ULListModel->setItem(row, COLUMN_UPROGRESS, new ProgressItem(NULL)); ULListModel->setData(ULListModel->index(row, COLUMN_UNAME), fileName); - ULListModel->setData(ULListModel->index(row, COLUMN_UNAME), FilesDefs::getIconFromFilename(fileName), Qt::DecorationRole); + ULListModel->setData(ULListModel->index(row, COLUMN_UNAME), FilesDefs::getIconFromFileType(fileName), Qt::DecorationRole); ULListModel->setData(ULListModel->index(row, COLUMN_UHASH), fileHash); ULListModel->setData(ULListModel->index(row, COLUMN_UHASH), fileHash, Qt::UserRole); } diff --git a/retroshare-gui/src/gui/RemoteDirModel.cpp b/retroshare-gui/src/gui/RemoteDirModel.cpp index 7fadce49a..e522eb4f8 100644 --- a/retroshare-gui/src/gui/RemoteDirModel.cpp +++ b/retroshare-gui/src/gui/RemoteDirModel.cpp @@ -430,7 +430,7 @@ QVariant RetroshareDirModel::decorationRole(const DirDetails& details,int coln) if(details.hash.isNull()) return QIcon(":/images/reset.png") ; // file is being hashed else - return FilesDefs::getIconFromFilename(QString::fromUtf8(details.name.c_str())); + return FilesDefs::getIconFromFileType(QString::fromUtf8(details.name.c_str())); } else return QVariant(); diff --git a/retroshare-gui/src/gui/common/FilesDefs.cpp b/retroshare-gui/src/gui/common/FilesDefs.cpp index 83474a752..dc8b30e86 100644 --- a/retroshare-gui/src/gui/common/FilesDefs.cpp +++ b/retroshare-gui/src/gui/common/FilesDefs.cpp @@ -85,23 +85,57 @@ QString FilesDefs::getImageFromFilename(const QString& filename, bool anyForUnkn return getInfoFromFilename(filename, anyForUnknown, true); } -QIcon FilesDefs::getIconFromFilename(const QString& filename) +QPixmap FilesDefs::getPixmapFromQtResourcePath(const QString& resource_path) { - QString sImage = getInfoFromFilename(filename, true, true); - static std::map mIconCache; - QIcon icon; - auto item = mIconCache.find(sImage); - if (item == mIconCache.end()) + static std::map mPixmapCache; + QPixmap pixmap; + std::cerr << "Creating Pixmap from resource path " << resource_path.toStdString() ; + + auto item = mPixmapCache.find(resource_path); + + if (item == mPixmapCache.end()) { - icon = QIcon(sImage); - mIconCache[sImage] = icon; + std::cerr << " Not in cache. Creating new one." << std::endl; + pixmap = QPixmap(resource_path); + mPixmapCache[resource_path] = pixmap; } else + { + std::cerr << " In cache. " << std::endl; + pixmap = item->second; + } + + return pixmap; +} + +QIcon FilesDefs::getIconFromQtResourcePath(const QString& resource_path) +{ + static std::map mIconCache; + QIcon icon; + std::cerr << "Creating Icon from resource path " << resource_path.toStdString() ; + + auto item = mIconCache.find(resource_path); + + if (item == mIconCache.end()) + { + std::cerr << " Not in cache. Creating new one." << std::endl; + icon = QIcon(resource_path); + mIconCache[resource_path] = icon; + } + else + { + std::cerr << " In cache. " << std::endl; icon = item->second; + } return icon; } +QIcon FilesDefs::getIconFromFileType(const QString& filename) +{ + return getIconFromQtResourcePath(getInfoFromFilename(filename,true,true)); +} + QString FilesDefs::getNameFromFilename(const QString &filename) { return getInfoFromFilename(filename, false, false); diff --git a/retroshare-gui/src/gui/common/FilesDefs.h b/retroshare-gui/src/gui/common/FilesDefs.h index 50a9e19ab..de0c0316a 100644 --- a/retroshare-gui/src/gui/common/FilesDefs.h +++ b/retroshare-gui/src/gui/common/FilesDefs.h @@ -28,7 +28,18 @@ class FilesDefs { public: static QString getImageFromFilename(const QString& filename, bool anyForUnknown); - static QIcon getIconFromFilename(const QString& filename); + + // Theses methods is here to fix a Qt design flow that makes QIcon loaded from filename (e.g. :/images/icon.png) to not use the cache. + // As a result, icons created by Qt in this way (mostly from GUI) do not use data sharing. + // The method below has its own cache. + + static QIcon getIconFromQtResourcePath(const QString& resource_path); + static QPixmap getPixmapFromQtResourcePath(const QString& resource_path); + + // This method returns a QIcon that is suitable to represent a file of a particular type (image, movie, etc.) + + static QIcon getIconFromFileType(const QString& filename); + static QString getNameFromFilename(const QString& filename); }; diff --git a/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp b/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp index 7813b5118..4ee799041 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp +++ b/retroshare-gui/src/gui/feeds/GxsChannelPostItem.cpp @@ -23,6 +23,7 @@ #include #include "gui/gxs/GxsIdDetails.h" +#include "gui/common/FilesDefs.h" #include "rshare.h" #include "GxsChannelPostItem.h" #include "ui_GxsChannelPostItem.h" @@ -150,6 +151,24 @@ void GxsChannelPostItem::setup() ui = new Ui::GxsChannelPostItem; ui->setupUi(this); + // Manually set icons to allow to use clever resource sharing that is missing in Qt for Icons loaded from Qt resource file. + // This is particularly important here because a channel may contain many posts, so duplicating the QImages here is deadly for the + // memory. + + ui->logoLabel->setPixmap(FilesDefs::getPixmapFromQtResourcePath(":/images/thumb-default-video.png")); + ui->warn_image_label->setPixmap(FilesDefs::getPixmapFromQtResourcePath(":/images/status_unknown.png")); + ui->readButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/message-state-unread.png")); + ui->voteUpButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/vote_up.png")); + ui->voteDownButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/vote_down.png")); + ui->downloadButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/download.png")); + ui->playButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/play.png")); + ui->commentButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/commnt.png")); + ui->editButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/pencil-edit-button.png")); + ui->copyLinkButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/copy.png")); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/down-arrow.png")); + ui->readAndClearButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/correct.png")); + ui->clearButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/exit2.png")); + setAttribute(Qt::WA_DeleteOnClose, true); mInFill = false; @@ -566,12 +585,12 @@ void GxsChannelPostItem::setReadStatus(bool isNew, bool isUnread) if (isUnread) { ui->readButton->setChecked(true); - ui->readButton->setIcon(QIcon(":/images/message-state-unread.png")); + ui->readButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/message-state-unread.png")); } else { ui->readButton->setChecked(false); - ui->readButton->setIcon(QIcon(":/images/message-state-read.png")); + ui->readButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/images/message-state-read.png")); } ui->newLabel->setVisible(isNew); @@ -684,7 +703,7 @@ void GxsChannelPostItem::doExpand(bool open) if (open) { ui->expandFrame->show(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/up-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/up-arrow.png"))); ui->expandButton->setToolTip(tr("Hide")); readToggled(false); @@ -692,7 +711,7 @@ void GxsChannelPostItem::doExpand(bool open) else { ui->expandFrame->hide(); - ui->expandButton->setIcon(QIcon(QString(":/icons/png/down-arrow.png"))); + ui->expandButton->setIcon(FilesDefs::getIconFromQtResourcePath(QString(":/icons/png/down-arrow.png"))); ui->expandButton->setToolTip(tr("Expand")); } diff --git a/retroshare-gui/src/gui/feeds/GxsChannelPostItem.ui b/retroshare-gui/src/gui/feeds/GxsChannelPostItem.ui index 1f869dc37..e3558ea10 100644 --- a/retroshare-gui/src/gui/feeds/GxsChannelPostItem.ui +++ b/retroshare-gui/src/gui/feeds/GxsChannelPostItem.ui @@ -62,9 +62,6 @@ - - :/images/thumb-default-video.png - false @@ -156,9 +153,6 @@ - - :/images/status_unknown.png - @@ -213,10 +207,6 @@ Toggle Message Read Status - - - :/images/message-state-unread.png:/images/message-state-unread.png - true @@ -249,10 +239,6 @@ - - - :/images/vote_up.png:/images/vote_up.png - @@ -263,10 +249,6 @@ - - - :/images/vote_down.png:/images/vote_down.png - @@ -277,10 +259,6 @@ Download - - - :/icons/png/download.png:/icons/png/download.png - false @@ -294,10 +272,6 @@ Play - - - :/icons/png/play.png:/icons/png/play.png - @@ -305,10 +279,6 @@ Comments - - - :/icons/png/comment.png:/icons/png/comment.png - @@ -316,10 +286,6 @@ Edit - - - :/icons/png/pencil-edit-button.png:/icons/png/pencil-edit-button.png - @@ -336,10 +302,6 @@ Copy RetroShare Link - - - :/icons/png/copy.png:/icons/png/copy.png - @@ -398,10 +360,6 @@ Expand - - - :/icons/png/down-arrow.png:/icons/png/down-arrow.png - @@ -418,10 +376,6 @@ Set as read and remove item - - - :/icons/png/correct.png:/icons/png/correct.png - @@ -438,10 +392,6 @@ Remove Item - - - :/icons/png/exit2.png:/icons/png/exit2.png -