linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #02875
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2380: Rework file and folder icons, add one for incomplete dirs
------------------------------------------------------------
revno: 2380
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Wed 2011-01-05 21:22:31 +0100
message:
Rework file and folder icons, add one for incomplete dirs
removed:
res/folders.bmp
added:
res/Exec.ico
res/File.ico
modified:
changelog.txt
dwt/include/dwt/resources/ImageList.h
dwt/src/ImageList.cpp
help/SConscript
res/Directory.ico
win32/DCPlusPlus.rc
win32/DirectoryListingFrame.cpp
win32/FinishedFrameBase.h
win32/QueueFrame.cpp
win32/QueueFrame.h
win32/SearchFrame.cpp
win32/SystemFrame.cpp
win32/TransferView.cpp
win32/WinUtil.cpp
win32/WinUtil.h
win32/resource.h
--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk
Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'changelog.txt'
--- changelog.txt 2011-01-03 20:11:13 +0000
+++ changelog.txt 2011-01-05 20:22:31 +0000
@@ -64,6 +64,7 @@
* Ameliorate the MiniUPnPc device selection
* Prevent an endless loop on connection failure (thanks bigmuscle)
* More consistent behavior in file lists for back / forward / up, and some buttons (poy)
+* Rework file and folder icons, add one for incomplete dirs (poy)
-- 0.770 2010-07-05 --
* [L#550300] Catch more potential file corruptions (thanks bigmuscle)
=== modified file 'dwt/include/dwt/resources/ImageList.h'
--- dwt/include/dwt/resources/ImageList.h 2011-01-02 17:12:02 +0000
+++ dwt/include/dwt/resources/ImageList.h 2011-01-05 20:22:31 +0000
@@ -136,10 +136,8 @@
COLORREF getBkColor() const;
- int size() const;
-
- /// Deprecated, use size
- int getImageCount() const;
+ bool empty() const;
+ size_t size() const;
private:
friend class Handle<ImageListPolicy>;
=== modified file 'dwt/src/ImageList.cpp'
--- dwt/src/ImageList.cpp 2011-01-02 17:12:02 +0000
+++ dwt/src/ImageList.cpp 2011-01-05 20:22:31 +0000
@@ -105,13 +105,12 @@
return Point( x, y );
}
-int ImageList::size() const
-{
- return ImageList_GetImageCount( handle() );
+bool ImageList::empty() const {
+ return size() == 0;
}
-int ImageList::getImageCount() const {
- return size();
+size_t ImageList::size() const {
+ return ImageList_GetImageCount(handle());
}
IconPtr ImageList::getIcon(unsigned i) const {
=== modified file 'help/SConscript'
--- help/SConscript 2011-01-02 17:12:02 +0000
+++ help/SConscript 2011-01-05 20:22:31 +0000
@@ -61,8 +61,6 @@
web_files.append('external.png')
web_files.append('office11.css')
web_files.append('style.css')
- for file in Glob('#/res/*.bmp'):
- web_files.append(file)
for file in Glob('#/res/*.ico'):
web_files.append(file)
for file in Glob('#/res/*.png'):
@@ -82,7 +80,6 @@
CHM_sources.append('office11.css')
CHM_sources.append('resource.h')
CHM_sources.append('style.css')
-CHM_sources.append(Glob('#/res/*.bmp'))
CHM_sources.append(Glob('#/res/*.ico'))
CHM_sources.append(Glob('#/res/*.png'))
CHM_sources.sort()
=== modified file 'res/Directory.ico'
Binary files res/Directory.ico 2010-03-11 17:25:17 +0000 and res/Directory.ico 2011-01-05 20:22:31 +0000 differ
=== added file 'res/Exec.ico'
Binary files res/Exec.ico 1970-01-01 00:00:00 +0000 and res/Exec.ico 2011-01-05 20:22:31 +0000 differ
=== added file 'res/File.ico'
Binary files res/File.ico 1970-01-01 00:00:00 +0000 and res/File.ico 2011-01-05 20:22:31 +0000 differ
=== removed file 'res/folders.bmp'
Binary files res/folders.bmp 2005-03-12 13:36:52 +0000 and res/folders.bmp 1970-01-01 00:00:00 +0000 differ
=== modified file 'win32/DCPlusPlus.rc'
--- win32/DCPlusPlus.rc 2011-01-03 21:26:01 +0000
+++ win32/DCPlusPlus.rc 2011-01-05 20:22:31 +0000
@@ -34,13 +34,6 @@
/////////////////////////////////////////////////////////////////////////////
//
-// Bitmap
-//
-
-IDB_FOLDERS BITMAP "res/folders.bmp"
-
-/////////////////////////////////////////////////////////////////////////////
-//
// Icon
//
@@ -99,6 +92,8 @@
IDI_USER_NOSLOT ICON "res/UserNoSlot.ico"
IDI_USER_OP ICON "res/UserOp.ico"
IDI_UP ICON "res/Up.ico"
+IDI_FILE ICON "res/File.ico"
+IDI_EXEC ICON "res/Exec.ico"
/////////////////////////////////////////////////////////////////////////////
//
=== modified file 'win32/DirectoryListingFrame.cpp'
--- win32/DirectoryListingFrame.cpp 2011-01-03 21:26:01 +0000
+++ win32/DirectoryListingFrame.cpp 2011-01-05 20:22:31 +0000
@@ -54,10 +54,10 @@
int DirectoryListingFrame::ItemInfo::getImage() const {
if(type == DIRECTORY || type == USER) {
- return dir->getComplete() ? WinUtil::getDirIconIndex() : WinUtil::getDirMaskedIndex();
+ return dir->getComplete() ? WinUtil::DIR_ICON : WinUtil::DIR_ICON_INCOMPLETE;
}
- return WinUtil::getIconIndex(getText(COLUMN_FILENAME));
+ return WinUtil::getFileIcon(getText(COLUMN_FILENAME));
}
int DirectoryListingFrame::ItemInfo::compareItems(ItemInfo* a, ItemInfo* b, int col) {
=== modified file 'win32/FinishedFrameBase.h'
--- win32/FinishedFrameBase.h 2011-01-02 17:12:02 +0000
+++ win32/FinishedFrameBase.h 2011-01-05 20:22:31 +0000
@@ -259,7 +259,7 @@
return columns[col];
}
int getImage() const {
- return WinUtil::getIconIndex(Text::toT(file));
+ return WinUtil::getFileIcon(Text::toT(file));
}
static int compareItems(FileInfo* a, FileInfo* b, int col) {
=== modified file 'win32/QueueFrame.cpp'
--- win32/QueueFrame.cpp 2011-01-02 17:12:02 +0000
+++ win32/QueueFrame.cpp 2011-01-05 20:22:31 +0000
@@ -427,11 +427,11 @@
}
int QueueFrame::DirItemInfo::getImage() {
- return WinUtil::getDirIconIndex();
+ return WinUtil::DIR_ICON;
}
int QueueFrame::DirItemInfo::getSelectedImage() {
- return WinUtil::getDirIconIndex();
+ return WinUtil::DIR_ICON;
}
HTREEITEM QueueFrame::addDirectory(const string& dir, bool isFileList /* = false */, HTREEITEM startAt /* = NULL */) {
=== modified file 'win32/QueueFrame.h'
--- win32/QueueFrame.h 2011-01-02 17:12:02 +0000
+++ win32/QueueFrame.h 2011-01-05 20:22:31 +0000
@@ -129,7 +129,7 @@
}
int getImage() const {
- return WinUtil::getIconIndex(Text::toT(getTarget()));
+ return WinUtil::getFileIcon(Text::toT(getTarget()));
}
static int compareItems(QueueItemInfo* a, QueueItemInfo* b, int col) {
=== modified file 'win32/SearchFrame.cpp'
--- win32/SearchFrame.cpp 2011-01-02 17:12:02 +0000
+++ win32/SearchFrame.cpp 2011-01-05 20:22:31 +0000
@@ -51,7 +51,7 @@
int SearchFrame::SearchInfo::getImage() {
const SearchResultPtr& sr = srs[0];
- return sr->getType() == SearchResult::TYPE_FILE ? WinUtil::getIconIndex(Text::toT(sr->getFile())) : WinUtil::getDirIconIndex();
+ return sr->getType() == SearchResult::TYPE_FILE ? WinUtil::getFileIcon(Text::toT(sr->getFile())) : WinUtil::DIR_ICON;
}
int SearchFrame::SearchInfo::compareItems(SearchInfo* a, SearchInfo* b, int col) {
=== modified file 'win32/SystemFrame.cpp'
--- win32/SystemFrame.cpp 2011-01-02 17:12:02 +0000
+++ win32/SystemFrame.cpp 2011-01-05 20:22:31 +0000
@@ -97,7 +97,7 @@
string path_a = Text::fromT(path);
if(File::getSize(path_a) != -1) {
ShellMenuPtr menu = addChild(ShellMenu::Seed());
- menu->setTitle(escapeMenu(path), WinUtil::fileImages->getIcon(WinUtil::getIconIndex(path)));
+ menu->setTitle(escapeMenu(path), WinUtil::fileImages->getIcon(WinUtil::getFileIcon(path)));
menu->appendItem(T_("&Open"), std::bind(&WinUtil::openFile, path), dwt::IconPtr(), true, true);
menu->appendItem(T_("Open &folder"), std::bind(&WinUtil::openFolder, path));
menu->appendShellMenu(StringList(1, path_a));
=== modified file 'win32/TransferView.cpp'
--- win32/TransferView.cpp 2011-01-02 17:12:02 +0000
+++ win32/TransferView.cpp 2011-01-05 20:22:31 +0000
@@ -668,7 +668,7 @@
}
int TransferView::DownloadInfo::getImage() const {
- return WinUtil::getIconIndex(Text::toT(path));
+ return WinUtil::getFileIcon(Text::toT(path));
}
void TransferView::DownloadInfo::update(const TransferView::TickInfo& ti) {
=== modified file 'win32/WinUtil.cpp'
--- win32/WinUtil.cpp 2011-01-03 20:11:13 +0000
+++ win32/WinUtil.cpp 2011-01-05 20:22:31 +0000
@@ -77,9 +77,6 @@
dwt::FontPtr WinUtil::monoFont;
dwt::ImageListPtr WinUtil::fileImages;
dwt::ImageListPtr WinUtil::userImages;
-int WinUtil::fileImageCount;
-int WinUtil::dirIconIndex;
-int WinUtil::dirMaskedIndex;
TStringList WinUtil::lastDirs;
MainWindow* WinUtil::mainWindow = 0;
float WinUtil::dpiFactor = 0;
@@ -138,39 +135,51 @@
fileImages = dwt::ImageListPtr(new dwt::ImageList(dwt::Point(16, 16)));
- dirIconIndex = fileImageCount++;
- dirMaskedIndex = fileImageCount++;
-
+ // get the directory icon (DIR_ICON).
if(BOOLSETTING(USE_SYSTEM_ICONS)) {
- SHFILEINFO fi;
- ::SHGetFileInfo(_T("./"), FILE_ATTRIBUTE_DIRECTORY, &fi, sizeof(fi), SHGFI_ICON | SHGFI_SMALLICON
- | SHGFI_USEFILEATTRIBUTES);
- dwt::Icon tmp(fi.hIcon);
- fileImages->add(tmp);
- // @todo This one should be masked further for the incomplete folder thing
- fileImages->add(tmp);
- } else {
- dwt::Bitmap tmp(IDB_FOLDERS);
- fileImages->add(tmp, RGB(255, 0, 255));
-
- // Unknown file
- fileImageCount++;
- }
+ ::SHFILEINFO info;
+ if(::SHGetFileInfo(_T("./"), FILE_ATTRIBUTE_DIRECTORY, &info, sizeof(info),
+ SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES) && info.hIcon)
+ {
+ dwt::Icon icon(info.hIcon);
+ fileImages->add(icon);
+ }
+ }
+ if(fileImages->empty()) {
+ fileImages->add(*createIcon(IDI_DIRECTORY, 16));
+ }
+
+ // create the incomplete directory icon (DIR_ICON_INCOMPLETE).
+ {
+ vector<dwt::IconPtr> icons;
+ icons.push_back(fileImages->getIcon(DIR_ICON));
+ icons.push_back(createIcon(IDI_EXEC, 16));
+ fileImages->add(*dwt::util::merge(icons));
+ }
+
+ // add the generic file icon (FILE_ICON_GENERIC).
+ fileImages->add(*createIcon(IDI_FILE, 16));
{
userImages = dwt::ImageListPtr(new dwt::ImageList(dwt::Point(16, 16)));
- auto userIcon = [](unsigned id) { return createIcon(id, 16); };
+
const unsigned baseCount = USER_ICON_MOD_START;
const unsigned modifierCount = USER_ICON_LAST - USER_ICON_MOD_START;
+
+ auto userIcon = [](unsigned id) { return createIcon(id, 16); };
dwt::IconPtr bases[baseCount] = { userIcon(IDI_USER), userIcon(IDI_USER_AWAY), userIcon(IDI_USER_BOT) };
dwt::IconPtr modifiers[modifierCount] = { userIcon(IDI_USER_NOCON), userIcon(IDI_USER_NOSLOT), userIcon(IDI_USER_OP) };
+
for(size_t iBase = 0; iBase < baseCount; ++iBase) {
for(size_t i = 0, n = modifierCount * modifierCount; i < n; ++i) {
vector<dwt::IconPtr> icons;
+
icons.push_back(bases[iBase]);
+
for(size_t iMod = 0; iMod < modifierCount; ++iMod)
if(i & (1 << iMod))
icons.push_back(modifiers[iMod]);
+
userImages->add(*dwt::util::merge(icons));
}
}
@@ -606,33 +615,30 @@
return formatHubNames(ClientManager::getInstance()->getHubNames(cid, hintUrl, priv));
}
-int WinUtil::getIconIndex(const tstring& aFileName) {
+size_t WinUtil::getFileIcon(const tstring& aFileName) {
if(BOOLSETTING(USE_SYSTEM_ICONS)) {
- SHFILEINFO fi;
- string x = Text::toLower(Util::getFileExt(Text::fromT(aFileName)));
- if(!x.empty()) {
- ImageIter j = fileIndexes.find(x);
- if(j != fileIndexes.end())
- return j->second;
- }
- tstring fn = Text::toT(Text::toLower(Util::getFileName(Text::fromT(aFileName))));
- ::SHGetFileInfo(fn.c_str(), FILE_ATTRIBUTE_NORMAL, &fi, sizeof(fi), SHGFI_ICON | SHGFI_SMALLICON
- | SHGFI_USEFILEATTRIBUTES);
- if(!fi.hIcon) {
- return 2;
- }
- try {
- dwt::Icon tmp(fi.hIcon);
- fileImages->add(tmp);
-
- fileIndexes[x] = fileImageCount++;
- return fileImageCount - 1;
- } catch (const dwt::DWTException&) {
- return 2;
- }
- } else {
- return 2;
+ string ext = Text::toLower(Util::getFileExt(Text::fromT(aFileName)));
+ if(!ext.empty()) {
+ auto index = fileIndexes.find(ext);
+ if(index != fileIndexes.end())
+ return index->second;
+ }
+
+ ::SHFILEINFO info;
+ if(::SHGetFileInfo(Text::toT(Text::toLower(Util::getFileName(Text::fromT(aFileName)))).c_str(), FILE_ATTRIBUTE_NORMAL,
+ &info, sizeof(info), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES) && info.hIcon)
+ {
+ size_t ret = fileImages->size();
+ fileIndexes[ext] = ret;
+
+ dwt::Icon icon(info.hIcon);
+ fileImages->add(icon);
+
+ return ret;
+ }
}
+
+ return FILE_ICON_GENERIC;
}
void WinUtil::reducePaths(string& message) {
=== modified file 'win32/WinUtil.h'
--- win32/WinUtil.h 2011-01-03 20:11:13 +0000
+++ win32/WinUtil.h 2011-01-05 20:22:31 +0000
@@ -48,6 +48,15 @@
class WinUtil {
public:
+ // pre-defined icon indexes used by the "fileImages" image list - see also getFileIcon.
+ enum {
+ DIR_ICON,
+ DIR_ICON_INCOMPLETE,
+
+ FILE_ICON_GENERIC
+ };
+
+ // icon indexes to use with the "userImages" image list.
enum {
// base icons
USER_ICON,
@@ -73,15 +82,12 @@
static tstring commands;
static dwt::ImageListPtr fileImages;
static dwt::ImageListPtr userImages;
- static int fileImageCount;
- static int dirIconIndex;
- static int dirMaskedIndex;
static TStringList lastDirs;
static MainWindow* mainWindow;
//static dwt::TabView* mdiParent;
static float dpiFactor;
- typedef unordered_map<string, int> ImageMap;
+ typedef unordered_map<string, size_t> ImageMap;
typedef ImageMap::iterator ImageIter;
static ImageMap fileIndexes;
@@ -171,9 +177,7 @@
const dwt::Application::Callback& f_ok,
const dwt::Application::Callback& f_cancel);
- static int getIconIndex(const tstring& aFileName);
- static int getDirIconIndex() { return dirIconIndex; }
- static int getDirMaskedIndex() { return dirMaskedIndex; }
+ static size_t getFileIcon(const tstring& aFileName);
static bool isShift() { return (::GetKeyState(VK_SHIFT) & 0x8000) > 0; }
static bool isAlt() { return (::GetKeyState(VK_MENU) & 0x8000) > 0; }
=== modified file 'win32/resource.h'
--- win32/resource.h 2011-01-03 20:11:13 +0000
+++ win32/resource.h 2011-01-05 20:22:31 +0000
@@ -58,6 +58,8 @@
#define IDI_USER_NOSLOT 150
#define IDI_USER_OP 151
#define IDI_UP 152
+#define IDI_FILE 153
+#define IDI_EXEC 154
#define IDB_FOLDERS 200