diff --git a/manifest b/manifest index 0d94c75..2e7e729 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fixed\sbug\swhere\sa\sfossil\soutput\sline\swould\snot\sbe\soutput\sunder\scertain\sconditions -D 2015-05-03T17:57:33.003 +C Merged\swith\strunk\nPorted\sthe\sicon\scache +D 2015-05-03T19:27:50.028 F .travis.yml 77966888a81c4ceee1fcc79bce842c9667ad8a35 F debian/changelog eb4304dfcb6bb66850ec740838090eb50ce1249b F debian/compat b6abd567fa79cbe0196d093a067271361dc6ca8b @@ -200,8 +200,8 @@ F src/Fossil.cpp ca7ad24622e1fc1a03c92d7ae9b51afc17f7c09c F src/Fossil.h d65a7461d213bcc30f08724d3306c6ee00843217 F src/LoggedProcess.cpp 2a1e5c94bc1e57c8984563e66c210e43a14dc60c F src/LoggedProcess.h 85df7c635c807a5a0e8c4763f17a0752aaff7261 -F src/MainWindow.cpp 0a5183c05ff08b635cd9517182b2357240ea52be -F src/MainWindow.h 725b4b5ed259029fd3de4bda65ca89f35c37e55e +F src/MainWindow.cpp e56d3fe486a388a27f39648de7a58fab8be2824e +F src/MainWindow.h 2b84fe52f8184364d63a7c9518500017b866e8ea F src/RevisionDialog.cpp 51065c65a07c118dd1a7363da4a55a135d1c6c9c F src/RevisionDialog.h b718c3009342eaabad39c8a11a253a4e4fef7a73 F src/SettingsDialog.cpp a46cff5e5dd425e3dbdd15632abfd5829f5562b4 @@ -220,7 +220,7 @@ F ui/FileActionDialog.ui 89bb4dc2d0b8adcd41adcb11ec65f2028a09a12d F ui/MainWindow.ui 9dd0f9ef3f486413c9af912ac557c0e7bf9c6f50 F ui/RevisionDialog.ui 27c3b98c665fec014a50cbf3352c0627f75e68cd F ui/SettingsDialog.ui 2b7c2870e0054b0f4106f495d85d02c0b814df8b -P a297f70942e3dccf9904c054fb9e633edb9c59cb -R e0fe347c0fa4907206bddff7538284f8 +P 2744a0db324c05cb0f4e2e73128d8c3837d66479 964b28f34fae482959ce8a96cbc6106f8702fb33 +R 5246702db3f74ca03143a4c68bf370e8 U kostas -Z 101db116ff5c22dbcc32decf8bc34dd6 +Z 59727ab2a076e48750a62615838a345e diff --git a/manifest.uuid b/manifest.uuid index fce10bd..3dc7187 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2744a0db324c05cb0f4e2e73128d8c3837d66479 \ No newline at end of file +713625d58306a081885455e8f3869723fe649fdd \ No newline at end of file diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 760efc4..80c99cf 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -623,7 +622,7 @@ void MainWindow::scanWorkspace() } //------------------------------------------------------------------------------ -static void addPathToTree(QStandardItem &root, const QString &path) +static void addPathToTree(QStandardItem &root, const QString &path, const QIcon &folderIcon) { QStringList dirs = path.split('/'); QStandardItem *parent = &root; @@ -649,7 +648,7 @@ static void addPathToTree(QStandardItem &root, const QString &path) if(!found) // Generate it { - QStandardItem *child = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), dir); + QStandardItem *child = new QStandardItem(folderIcon, dir); child->setData(WorkspaceItem(WorkspaceItem::TYPE_FOLDER, fullpath), ROLE_WORKSPACE_ITEM); parent->appendRow(child); parent = child; @@ -668,7 +667,7 @@ void MainWindow::updateWorkspaceView() header << tr("Workspace"); getWorkspace().getDirModel().setHorizontalHeaderLabels(header); - QStandardItem *workspace = new QStandardItem(QIcon(":icons/icons/Folder-01.png"), tr("Files") ); + QStandardItem *workspace = new QStandardItem(getInternalIcon(":icons/icons/Folder-01.png"), tr("Files") ); workspace->setData(WorkspaceItem(WorkspaceItem::TYPE_WORKSPACE, ""), ROLE_WORKSPACE_ITEM); workspace->setEditable(false); @@ -681,56 +680,56 @@ void MainWindow::updateWorkspaceView() if(dir.isEmpty()) continue; - addPathToTree(*workspace, dir); + addPathToTree(*workspace, dir, getInternalIcon(":icons/icons/Folder-01.png")); } } // Branches - QStandardItem *branches = new QStandardItem(QIcon(":icons/icons/Document Organization Chart-01.png"), "Branches"); + QStandardItem *branches = new QStandardItem(getInternalIcon(":icons/icons/Document Organization Chart-01.png"), "Branches"); branches->setData(WorkspaceItem(WorkspaceItem::TYPE_BRANCHES, ""), ROLE_WORKSPACE_ITEM); branches->setEditable(false); getWorkspace().getDirModel().appendRow(branches); foreach(const QString &branch_name, getWorkspace().getBranches()) { - QStandardItem *branch = new QStandardItem(QIcon(":icons/icons/Document Organization Chart-01.png"), branch_name); + QStandardItem *branch = new QStandardItem(getInternalIcon(":icons/icons/Document Organization Chart-01.png"), branch_name); branch->setData(WorkspaceItem(WorkspaceItem::TYPE_BRANCH, branch_name), ROLE_WORKSPACE_ITEM); branches->appendRow(branch); } // Tags - QStandardItem *tags = new QStandardItem(QIcon(":icons/icons/Book-01.png"), "Tags"); + QStandardItem *tags = new QStandardItem(getInternalIcon(":icons/icons/Book-01.png"), "Tags"); tags->setData(WorkspaceItem(WorkspaceItem::TYPE_TAGS, ""), ROLE_WORKSPACE_ITEM); tags->setEditable(false); getWorkspace().getDirModel().appendRow(tags); for(QStringMap::const_iterator it=getWorkspace().getTags().begin(); it!=getWorkspace().getTags().end(); ++it) { const QString &tag_name = it.key(); - QStandardItem *tag = new QStandardItem(QIcon(":icons/icons/Book-01.png"), tag_name); + QStandardItem *tag = new QStandardItem(getInternalIcon(":icons/icons/Book-01.png"), tag_name); tag->setData(WorkspaceItem(WorkspaceItem::TYPE_TAG, tag_name), ROLE_WORKSPACE_ITEM); tags->appendRow(tag); } // Stashes - QStandardItem *stashes = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), "Stashes"); + QStandardItem *stashes = new QStandardItem(getInternalIcon(":icons/icons/My Documents-01.png"), "Stashes"); stashes->setData(WorkspaceItem(WorkspaceItem::TYPE_STASHES, ""), ROLE_WORKSPACE_ITEM); stashes->setEditable(false); getWorkspace().getDirModel().appendRow(stashes); for(stashmap_t::const_iterator it= getWorkspace().getStashes().begin(); it!=getWorkspace().getStashes().end(); ++it) { - QStandardItem *stash = new QStandardItem(QIcon(":icons/icons/My Documents-01.png"), it.key()); + QStandardItem *stash = new QStandardItem(getInternalIcon(":icons/icons/My Documents-01.png"), it.key()); stash->setData(WorkspaceItem(WorkspaceItem::TYPE_STASH, it.value()), ROLE_WORKSPACE_ITEM); stashes->appendRow(stash); } #if 0 // Unimplemented for now // Remotes - QStandardItem *remotes = new QStandardItem(QIcon(":icons/icons/Network PC-01.png"), "Remotes"); + QStandardItem *remotes = new QStandardItem(getInternalIcon(":icons/icons/Network PC-01.png"), "Remotes"); remotes->setData(WorkspaceItem(WorkspaceItem::TYPE_REMOTES, ""), ROLE_WORKSPACE_ITEM); remotes->setEditable(false); getWorkspace().getDirModel().appendRow(remotes); // Settings - QStandardItem *settings = new QStandardItem(QIcon(":icons/icons/Gear-01.png"), "Settings"); + QStandardItem *settings = new QStandardItem(getInternalIcon(":icons/icons/Gear-01.png"), "Settings"); settings->setData(WorkspaceItem(WorkspaceItem::TYPE_SETTINGS, ""), ROLE_WORKSPACE_ITEM); settings->setEditable(false); getWorkspace().getDirModel().appendRow(settings); @@ -758,8 +757,6 @@ void MainWindow::updateFileView() { WorkspaceFile::TYPE_MERGED, tr("Merged"), ":icons/icons/Button Blank Yellow-01.png" }, }; - QFileIconProvider icon_provider; - bool display_path = viewMode==VIEWMODE_LIST || selectedDirs.count() > 1; size_t item_id=0; @@ -786,20 +783,26 @@ void MainWindow::updateFileView() } } - QStandardItem *status = new QStandardItem(QIcon(status_icon_path), status_text); + QStandardItem *status = new QStandardItem(getInternalIcon(status_icon_path), status_text); status->setToolTip(status_text); getWorkspace().getFileModel().setItem(item_id, COLUMN_STATUS, status); QFileInfo finfo = e.getFileInfo(); - QIcon icon = icon_provider.icon(finfo); + QString icon_type = iconProvider.type(finfo); + + + if(!iconCache.contains(icon_type)) + iconCache.insert(icon_type, iconProvider.icon(finfo)); + + const QIcon *icon = &iconCache[icon_type]; QStandardItem *filename_item = 0; getWorkspace().getFileModel().setItem(item_id, COLUMN_PATH, new QStandardItem(path)); if(display_path) - filename_item = new QStandardItem(icon, QDir::toNativeSeparators(e.getFilePath())); + filename_item = new QStandardItem(*icon, QDir::toNativeSeparators(e.getFilePath())); else - filename_item = new QStandardItem(icon, e.getFilename()); + filename_item = new QStandardItem(*icon, e.getFilename()); Q_ASSERT(filename_item); // Keep the path in the user data @@ -1834,6 +1837,16 @@ QMenu * MainWindow::createPopupMenu() return NULL; } +//------------------------------------------------------------------------------ +const QIcon &MainWindow::getInternalIcon(const char* name) +{ + if(iconCache.contains(name)) + return iconCache[name]; + + iconCache.insert(name, QIcon(name)); + return iconCache[name]; +} + //------------------------------------------------------------------------------ void MainWindow::on_actionNewStash_triggered() { diff --git a/src/MainWindow.h b/src/MainWindow.h index a2cc858..51a1790 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -3,6 +3,7 @@ #include #include +#include #include "SettingsDialog.h" #include "Workspace.h" @@ -58,6 +59,7 @@ private: void dropEvent(class QDropEvent *event); void setBusy(bool busy); virtual QMenu *createPopupMenu(); + const QIcon& getInternalIcon(const char *name); enum ViewMode { @@ -149,7 +151,11 @@ private: MAX_RECENT=5 }; + typedef QMap icon_map_t; + Ui::MainWindow *ui; + QFileIconProvider iconProvider; + icon_map_t iconCache; class QAction *recentWorkspaceActs[MAX_RECENT]; class QProgressBar *progressBar; class QLabel *lblRevision;