← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2355: better button sizes; fix file list searching; more icons

 

------------------------------------------------------------
revno: 2355
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Mon 2010-12-20 18:19:41 +0100
message:
  better button sizes; fix file list searching; more icons
added:
  res/Cancel.ico
  res/Left.ico
  res/OK.ico
  res/Right.ico
modified:
  dwt/include/dwt/widgets/Button.h
  dwt/src/widgets/Button.cpp
  res/Magnet.ico
  win32/DCPlusPlus.rc
  win32/DirectoryListingFrame.cpp
  win32/DirectoryListingFrame.h
  win32/SearchFrame.cpp
  win32/SettingsDialog.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 'dwt/include/dwt/widgets/Button.h'
--- dwt/include/dwt/widgets/Button.h	2010-10-28 20:31:03 +0000
+++ dwt/include/dwt/widgets/Button.h	2010-12-20 17:19:41 +0000
@@ -83,6 +83,9 @@
 
 	void create(const Seed& cs = Seed());
 
+	void setImage(BitmapPtr bitmap);
+	void setImage(IconPtr icon);
+
 	virtual Point getPreferedSize();
 
 protected:
@@ -94,8 +97,6 @@
 	friend class ChainingDispatcher;
 	static const TCHAR windowClass[];
 
-	Point padding;
-
 	// Contract needed by AspectClickable Aspect class
 	static Message getClickMessage();
 

=== modified file 'dwt/src/widgets/Button.cpp'
--- dwt/src/widgets/Button.cpp	2010-02-11 21:44:13 +0000
+++ dwt/src/widgets/Button.cpp	2010-12-20 17:19:41 +0000
@@ -30,6 +30,7 @@
 */
 
 #include <dwt/widgets/Button.h>
+
 #include <dwt/CanvasClasses.h>
 
 namespace dwt {
@@ -48,15 +49,28 @@
 	if(cs.font)
 		setFont(cs.font);
 
-	padding.x = ::GetSystemMetrics(SM_CYFIXEDFRAME) * 2 + cs.padding.x * 2;
-	padding.y = ::GetSystemMetrics(SM_CXFIXEDFRAME) * 2 + cs.padding.y * 2;
+	::RECT rect = { cs.padding.x, cs.padding.y, cs.padding.x, cs.padding.y };
+	sendMessage(BCM_SETTEXTMARGIN, 0, reinterpret_cast<LPARAM>(&rect));
+}
+
+void Button::setImage(BitmapPtr bitmap) {
+	sendMessage(BM_SETIMAGE, IMAGE_BITMAP, reinterpret_cast<LPARAM>(bitmap->handle()));
+}
+
+void Button::setImage(IconPtr icon) {
+	sendMessage(BM_SETIMAGE, IMAGE_ICON, reinterpret_cast<LPARAM>(icon->handle()));
 }
 
 Point Button::getPreferedSize() {
-	// TODO Consider icons etc
+	SIZE size = { 0 };
+	if(sendMessage(BCM_GETIDEALSIZE, 0, reinterpret_cast<LPARAM>(&size))) {
+		return Point(size.cx, size.cy);
+	}
+
+	// BCM_GETIDEALSIZE fails on comctrl < 6, so resort to the standard method
 	UpdateCanvas c(this);
 	c.selectFont(getFont());
-	return c.getTextExtent(getText()) + padding;
+	return c.getTextExtent(getText()) + Point(3, 2) + Point(::GetSystemMetrics(SM_CYFIXEDFRAME) * 2, ::GetSystemMetrics(SM_CXFIXEDFRAME) * 2);
 }
 
 }

=== added file 'res/Cancel.ico'
Binary files res/Cancel.ico	1970-01-01 00:00:00 +0000 and res/Cancel.ico	2010-12-20 17:19:41 +0000 differ
=== added file 'res/Left.ico'
Binary files res/Left.ico	1970-01-01 00:00:00 +0000 and res/Left.ico	2010-12-20 17:19:41 +0000 differ
=== modified file 'res/Magnet.ico'
Binary files res/Magnet.ico	2007-02-28 10:10:50 +0000 and res/Magnet.ico	2010-12-20 17:19:41 +0000 differ
=== added file 'res/OK.ico'
Binary files res/OK.ico	1970-01-01 00:00:00 +0000 and res/OK.ico	2010-12-20 17:19:41 +0000 differ
=== added file 'res/Right.ico'
Binary files res/Right.ico	1970-01-01 00:00:00 +0000 and res/Right.ico	2010-12-20 17:19:41 +0000 differ
=== modified file 'win32/DCPlusPlus.rc'
--- win32/DCPlusPlus.rc	2010-12-11 23:50:40 +0000
+++ win32/DCPlusPlus.rc	2010-12-20 17:19:41 +0000
@@ -89,6 +89,10 @@
 IDI_LINKS               ICON                    "res/Links.ico"
 IDI_REFRESH             ICON                    "res/Refresh.ico"
 IDI_SLOTS               ICON                    "res/Slots.ico"
+IDI_OK                  ICON                    "res/OK.ico"
+IDI_CANCEL              ICON                    "res/Cancel.ico"
+IDI_LEFT                ICON                    "res/Left.ico"
+IDI_RIGHT               ICON                    "res/Right.ico"
 
 /////////////////////////////////////////////////////////////////////////////
 //

=== modified file 'win32/DirectoryListingFrame.cpp'
--- win32/DirectoryListingFrame.cpp	2010-12-19 14:06:31 +0000
+++ win32/DirectoryListingFrame.cpp	2010-12-20 17:19:41 +0000
@@ -234,27 +234,29 @@
 		cs.caption = T_("Find");
 		find = addChild(cs);
 		find->setHelpId(IDH_FILE_LIST_FIND);
+		find->setImage(WinUtil::buttonIcon(IDI_SEARCH));
 		find->onClicked(std::bind(&DirectoryListingFrame::handleFind, this, FIND_START));
 
 		cs.caption = T_("Previous");
 		findPrev = addChild(cs);
 		findPrev->setHelpId(IDH_FILE_LIST_PREV);
+		findPrev->setImage(WinUtil::buttonIcon(IDI_LEFT));
 		findPrev->onClicked(std::bind(&DirectoryListingFrame::handleFind, this, FIND_PREV));
 
 		cs.caption = T_("Next");
 		findNext = addChild(cs);
 		findNext->setHelpId(IDH_FILE_LIST_NEXT);
+		findNext->setImage(WinUtil::buttonIcon(IDI_RIGHT));
 		findNext->onClicked(std::bind(&DirectoryListingFrame::handleFind, this, FIND_NEXT));
 	}
 
 	initStatus();
 
-	// This will set the widths correctly
-	status->setText(STATUS_FILE_LIST_DIFF, T_("Subtract list"));
-	status->setText(STATUS_MATCH_QUEUE, T_("Match queue"));
-	status->setText(STATUS_FIND, T_("Find"));
-	status->setText(STATUS_PREV, T_("Previous"));
-	status->setText(STATUS_NEXT, T_("Next"));
+	status->setSize(STATUS_FILE_LIST_DIFF, listDiff->getPreferedSize().x);
+	status->setSize(STATUS_MATCH_QUEUE, matchQueue->getPreferedSize().x);
+	status->setSize(STATUS_FIND, find->getPreferedSize().x);
+	status->setSize(STATUS_PREV, findPrev->getPreferedSize().x);
+	status->setSize(STATUS_NEXT, findNext->getPreferedSize().x);
 
 	treeRoot = dirs->insert(NULL, new ItemInfo(true, dl->getRoot()));
 
@@ -388,7 +390,7 @@
 
 	menu->setTitle(escapeMenu(ii->getText(COLUMN_FILENAME)), WinUtil::fileImages->getIcon(ii->getImage()));
 
-	menu->appendItem(T_("&Download"), std::bind(&DirectoryListingFrame::handleDownload, this), dwt::IconPtr(), true, true);
+	menu->appendItem(T_("&Download"), std::bind(&DirectoryListingFrame::handleDownload, this), WinUtil::menuIcon(IDI_DOWNLOAD), true, true);
 	addTargets(menu, ii);
 
 	if(ii->type == ItemInfo::FILE) {
@@ -415,7 +417,7 @@
 	size_t sel = files->countSelected();
 	menu->setTitle(str(TF_("%1% items") % sel), getParent()->getIcon(this));
 
-	menu->appendItem(T_("&Download"), std::bind(&DirectoryListingFrame::handleDownload, this), dwt::IconPtr(), true, true);
+	menu->appendItem(T_("&Download"), std::bind(&DirectoryListingFrame::handleDownload, this), WinUtil::menuIcon(IDI_DOWNLOAD), true, true);
 	addTargets(menu);
 	addUserCommands(menu);
 
@@ -428,7 +430,7 @@
 	menu->setTitle(escapeMenu(ii ? ii->getText(COLUMN_FILENAME) : getText()),
 		ii ? WinUtil::fileImages->getIcon(ii->getImage()) : getParent()->getIcon(this));
 
-	menu->appendItem(T_("&Download"), std::bind(&DirectoryListingFrame::handleDownload, this), dwt::IconPtr(), true, true);
+	menu->appendItem(T_("&Download"), std::bind(&DirectoryListingFrame::handleDownload, this), WinUtil::menuIcon(IDI_DOWNLOAD), true, true);
 	addTargets(menu);
 	return menu;
 }
@@ -850,7 +852,7 @@
 	}
 }
 
-pair<HTREEITEM, int> DirectoryListingFrame::findFile(const StringSearch& str, bool reverse, HTREEITEM item, int pos) {
+pair<HTREEITEM, int> DirectoryListingFrame::findFile(const StringSearch& str, bool reverse, HTREEITEM item, int pos, vector<HTREEITEM>& collapse) {
 	// try to match the names currently in the list pane
 	const int n = files->size();
 	if(reverse && pos == -1)
@@ -863,24 +865,22 @@
 	}
 
 	// flow to the next directory
+	if(!reverse && dirs->getChild(item) && !dirs->isExpanded(item)) {
+		dirs->expand(item);
+		collapse.push_back(item);
+	}
 	HTREEITEM next = dirs->getNext(item, reverse ? TVGN_PREVIOUSVISIBLE : TVGN_NEXTVISIBLE);
 	if(next) {
-		HTREEITEM collapse = nullptr;
-		if(dirs->getChild(next) && !dirs->isExpanded(next)) {
+		if(reverse && dirs->getChild(next) && !dirs->isExpanded(next)) {
 			dirs->expand(next);
-			collapse = next;
-			next = dirs->getNext(item, reverse ? TVGN_PREVIOUSVISIBLE : TVGN_NEXTVISIBLE);
+			collapse.push_back(next);
+			next = dirs->getNext(item, TVGN_PREVIOUSVISIBLE);
 		}
 
 		// refresh the list pane to respect sorting etc
 		changeDir(dirs->getData(next)->dir);
 
-		auto ret = findFile(str, reverse, next, -1);
-
-		if(collapse)
-			dirs->collapse(collapse);
-
-		return ret;
+		return findFile(str, reverse, next, -1, collapse);
 	}
 
 	return make_pair(nullptr, 0);
@@ -911,8 +911,6 @@
 	HoldRedraw hold2(dirs);
 	HoldRedraw hold3(status);
 
-	// Do a search
-
 	HTREEITEM const oldDir = dirs->getSelected();
 
 	auto selectDir = [this, oldDir](HTREEITEM newDir) {
@@ -929,7 +927,10 @@
 		files->clearSelection();
 	}
 
-	auto search = findFile(StringSearch(findStr), mode == FIND_PREV, (mode == FIND_START) ? treeRoot : oldDir, files->getSelected());
+	vector<HTREEITEM> collapse;
+	auto search = findFile(StringSearch(findStr), mode == FIND_PREV, (mode == FIND_START) ? treeRoot : oldDir, files->getSelected(), collapse);
+	for(auto i = collapse.cbegin(), iend = collapse.cend(); i != iend; ++i)
+		dirs->collapse(*i);
 
 	if(search.first) {
 		selectDir(search.first);

=== modified file 'win32/DirectoryListingFrame.h'
--- win32/DirectoryListingFrame.h	2010-12-18 16:47:53 +0000
+++ win32/DirectoryListingFrame.h	2010-12-20 17:19:41 +0000
@@ -260,7 +260,7 @@
 	void updateStatus();
 
 	void findFile(FindMode mode);
-	pair<HTREEITEM, int> findFile(const StringSearch& str, bool reverse, HTREEITEM item, int pos);
+	pair<HTREEITEM, int> findFile(const StringSearch& str, bool reverse, HTREEITEM item, int pos, vector<HTREEITEM>& collapse);
 
 	// MDIChildFrame
 	void tabMenuImpl(dwt::MenuPtr& menu);

=== modified file 'win32/SearchFrame.cpp'
--- win32/SearchFrame.cpp	2010-12-10 22:16:24 +0000
+++ win32/SearchFrame.cpp	2010-12-20 17:19:41 +0000
@@ -710,7 +710,7 @@
 	menu->setTitle(checkTTH.hasTTH ? escapeMenu(checkTTH.name) : str(TF_("%1% results") % results->countSelected()),
 		getParent()->getIcon(this));
 
-	menu->appendItem(T_("&Download"), std::bind(&SearchFrame::handleDownload, this), dwt::IconPtr(), true, true);
+	menu->appendItem(T_("&Download"), std::bind(&SearchFrame::handleDownload, this), WinUtil::menuIcon(IDI_DOWNLOAD), true, true);
 	addTargetMenu(menu, favoriteDirs, checkTTH);
 	menu->appendItem(T_("Download whole directory"), std::bind(&SearchFrame::handleDownloadDir, this));
 	addTargetDirMenu(menu, favoriteDirs);

=== modified file 'win32/SettingsDialog.cpp'
--- win32/SettingsDialog.cpp	2010-12-11 23:50:40 +0000
+++ win32/SettingsDialog.cpp	2010-12-20 17:19:41 +0000
@@ -173,6 +173,7 @@
 		seed.padding.x = 10;
 		ButtonPtr button = cur->addChild(seed);
 		button->setHelpId(IDH_DCPP_HELP);
+		button->setImage(WinUtil::buttonIcon(IDI_HELP));
 		button->onClicked(std::bind(&SettingsDialog::handleHelp, this, this, IDH_INDEX));
 	}
 

=== modified file 'win32/WinUtil.cpp'
--- win32/WinUtil.cpp	2010-12-12 14:58:25 +0000
+++ win32/WinUtil.cpp	2010-12-20 17:19:41 +0000
@@ -639,9 +639,9 @@
 }
 
 void WinUtil::addHashItems(const dwt::Menu::ObjectType& menu, const TTHValue& tth, const tstring& filename, int64_t size) {
-	menu->appendItem(T_("Search for alternates"), std::bind(&WinUtil::searchHash, tth));
+	menu->appendItem(T_("Search for alternates"), std::bind(&WinUtil::searchHash, tth), menuIcon(IDI_SEARCH));
 	menu->appendItem(T_("Lookup TTH at Bitzi.com"), std::bind(WinUtil::bitziLink, tth));
-	menu->appendItem(T_("Copy magnet link to clipboard"), std::bind(&WinUtil::copyMagnet, tth, filename, size));
+	menu->appendItem(T_("Copy magnet link to clipboard"), std::bind(&WinUtil::copyMagnet, tth, filename, size), menuIcon(IDI_MAGNET));
 }
 
 void WinUtil::bitziLink(const TTHValue& aHash) {
@@ -959,6 +959,7 @@
 	seed.padding.x = 20;
 	ButtonPtr ok = grid->addChild(seed);
 	ok->setHelpId(IDH_DCPP_OK);
+	ok->setImage(buttonIcon(IDI_OK));
 	ok->onClicked(f_ok);
 
 	seed.caption = T_("Cancel");
@@ -966,6 +967,7 @@
 	seed.padding.x = 10;
 	ButtonPtr cancel = grid->addChild(seed);
 	cancel->setHelpId(IDH_DCPP_CANCEL);
+	cancel->setImage(buttonIcon(IDI_CANCEL));
 	cancel->onClicked(f_cancel);
 
 	return make_pair(ok, cancel);

=== modified file 'win32/WinUtil.h'
--- win32/WinUtil.h	2010-12-11 23:50:40 +0000
+++ win32/WinUtil.h	2010-12-20 17:19:41 +0000
@@ -220,6 +220,7 @@
 	/* utility functions to create icons. use these throughout the prog to make it easier to change
 	sizes globally should the need arise to later on. */
 	static dwt::IconPtr createIcon(unsigned id, long size);
+	static inline dwt::IconPtr buttonIcon(unsigned id) { return createIcon(id, 16); }
 	static inline dwt::IconPtr menuIcon(unsigned id) { return createIcon(id, 16); }
 	static inline dwt::IconPtr statusIcon(unsigned id) { return createIcon(id, 16); }
 	static inline dwt::IconPtr tabIcon(unsigned id) { return createIcon(id, 16); }

=== modified file 'win32/resource.h'
--- win32/resource.h	2010-08-29 15:42:38 +0000
+++ win32/resource.h	2010-12-20 17:19:41 +0000
@@ -47,6 +47,10 @@
 #define IDI_LINKS 139
 #define IDI_REFRESH 140
 #define IDI_SLOTS 141
+#define IDI_OK 142
+#define IDI_CANCEL 143
+#define IDI_LEFT 144
+#define IDI_RIGHT 145
 
 #define IDB_FOLDERS		151
 #define IDB_USERS		154