← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2284: better behavior for static window opening

 

------------------------------------------------------------
revno: 2284
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Mon 2010-11-08 17:27:16 +0100
message:
  better behavior for static window opening
modified:
  win32/MainWindow.cpp
  win32/MainWindow.h
  win32/SearchFrame.h
  win32/StaticFrame.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 'win32/MainWindow.cpp'
--- win32/MainWindow.cpp	2010-10-31 13:07:37 +0000
+++ win32/MainWindow.cpp	2010-11-08 16:27:16 +0000
@@ -118,16 +118,16 @@
 	addAccel(FCONTROL, '1', std::bind(&MainWindow::switchToolbar, this));
 	addAccel(FCONTROL, '2', std::bind(&MainWindow::switchTransfers, this));
 	addAccel(FCONTROL, '3', std::bind(&MainWindow::switchStatus, this));
-	addAccel(FCONTROL, 'D', std::bind(&QueueFrame::openWindow, getTabView()));
+	addAccel(FCONTROL, 'D', [this] { QueueFrame::openWindow(getTabView()); });
 	addAccel(FCONTROL, 'E', std::bind(&MainWindow::handleRefreshFileList, this));
-	addAccel(FCONTROL, 'F', std::bind(&FavHubsFrame::openWindow, getTabView()));
+	addAccel(FCONTROL, 'F', [this] { FavHubsFrame::openWindow(getTabView()); });
 	addAccel(FCONTROL, 'G', std::bind(&MainWindow::handleConnectFavHubGroup, this));
 	addAccel(FCONTROL, 'L', std::bind(&MainWindow::handleOpenFileList, this));
-	addAccel(FCONTROL, 'N', std::bind(&NotepadFrame::openWindow, getTabView()));
-	addAccel(FCONTROL, 'P', std::bind(&PublicHubsFrame::openWindow, getTabView()));
+	addAccel(FCONTROL, 'N', [this] { NotepadFrame::openWindow(getTabView()); });
+	addAccel(FCONTROL, 'P', [this] { PublicHubsFrame::openWindow(getTabView()); });
 	addAccel(FCONTROL, 'Q', std::bind(&MainWindow::handleQuickConnect, this));
-	addAccel(FCONTROL, 'S', std::bind(&SearchFrame::openWindow, getTabView(), Util::emptyStringT, SearchManager::TYPE_ANY));
-	addAccel(FCONTROL, 'U', std::bind(&UsersFrame::openWindow, getTabView()));
+	addAccel(FCONTROL, 'S', [this] { SearchFrame::openWindow(getTabView()); });
+	addAccel(FCONTROL, 'U', [this] { UsersFrame::openWindow(getTabView()); });
 	addAccel(FCONTROL, VK_F3, std::bind(&MainWindow::handleSettings, this));
 	addAccel(0, VK_F5, std::bind(&MainWindow::handleRefreshFileList, this));
 	initAccels();
@@ -176,18 +176,7 @@
 
 	if(SETTING(NICK).empty()) {
 		callAsync([this]() {
-			bool systemLogOpen = false;
-			const dwt::TabView::ChildList& views = tabs->getChildren();
-			for(dwt::TabView::ChildList::const_iterator i = views.begin(); i != views.end(); ++i) {
-				MDIChildFrame<dwt::Container>* child = static_cast<MDIChildFrame<dwt::Container>*>(*i);
-				if(child->getId() == SystemFrame::id) {
-					systemLogOpen = true;
-					break;
-				}
-			}
-
-			if(!systemLogOpen)
-				SystemFrame::openWindow(getTabView());
+			SystemFrame::openWindow(getTabView(), false, false);
 
 			WinUtil::help(this, IDH_GET_STARTED);
 			handleSettings();
@@ -263,33 +252,33 @@
 		viewMenu = mainMenu->appendPopup(T_("&View"));
 
 		viewIndexes[PublicHubsFrame::id] = viewMenu->appendItem(T_("&Public Hubs\tCtrl+P"),
-			std::bind(&PublicHubsFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_PUBLICHUBS));
+			[this] { PublicHubsFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_PUBLICHUBS));
 		viewIndexes[FavHubsFrame::id] = viewMenu->appendItem(T_("&Favorite Hubs\tCtrl+F"),
-			std::bind(&FavHubsFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_FAVORITE_HUBS));
+			[this] { FavHubsFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_FAVORITE_HUBS));
 		viewIndexes[UsersFrame::id] = viewMenu->appendItem(T_("Favorite &Users\tCtrl+U"),
-			std::bind(&UsersFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_FAVORITE_USERS));
+			[this] { UsersFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_FAVORITE_USERS));
 		viewMenu->appendSeparator();
 		viewIndexes[QueueFrame::id] = viewMenu->appendItem(T_("&Download Queue\tCtrl+D"),
-			std::bind(&QueueFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_QUEUE));
+			[this] { QueueFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_QUEUE));
 		viewIndexes[FinishedDLFrame::id] = viewMenu->appendItem(T_("Finished Downloads"),
-			std::bind(&FinishedDLFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_FINISHED_DL));
+			[this] { FinishedDLFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_FINISHED_DL));
 		viewIndexes[WaitingUsersFrame::id] = viewMenu->appendItem(T_("Waiting Users"),
-			std::bind(&WaitingUsersFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_WAITING_USERS));
+			[this] { WaitingUsersFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_WAITING_USERS));
 		viewIndexes[FinishedULFrame::id] = viewMenu->appendItem(T_("Finished Uploads"),
-			std::bind(&FinishedULFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_FINISHED_UL));
+			[this] { FinishedULFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_FINISHED_UL));
 		viewMenu->appendSeparator();
-		viewMenu->appendItem(T_("&Search\tCtrl+S"), std::bind(&SearchFrame::openWindow, getTabView(), Util::emptyStringT, SearchManager::TYPE_ANY), WinUtil::menuIcon(IDI_SEARCH));
+		viewMenu->appendItem(T_("&Search\tCtrl+S"), [this] { SearchFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_SEARCH));
 		viewIndexes[ADLSearchFrame::id] = viewMenu->appendItem(T_("ADL Search"),
-			std::bind(&ADLSearchFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_ADLSEARCH));
+			[this] { ADLSearchFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_ADLSEARCH));
 		viewIndexes[SpyFrame::id] = viewMenu->appendItem(T_("Search Spy"),
-			std::bind(&SpyFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_SPY));
+			[this] { SpyFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_SPY));
 		viewMenu->appendSeparator();
 		viewIndexes[NotepadFrame::id] = viewMenu->appendItem(T_("&Notepad\tCtrl+N"),
-			std::bind(&NotepadFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_NOTEPAD));
+			[this] { NotepadFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_NOTEPAD));
 		viewIndexes[SystemFrame::id] = viewMenu->appendItem(T_("System Log"),
-			std::bind(&SystemFrame::openWindow, getTabView()));
+			[this] { SystemFrame::openWindow(getTabView()); });
 		viewIndexes[StatsFrame::id] = viewMenu->appendItem(T_("Network Statistics"),
-			std::bind(&StatsFrame::openWindow, getTabView()), WinUtil::menuIcon(IDI_NET_STATS));
+			[this] { StatsFrame::openWindow(getTabView()); }, WinUtil::menuIcon(IDI_NET_STATS));
 		viewMenu->appendItem(T_("Indexing progress"), std::bind(&MainWindow::handleHashProgress, this), WinUtil::menuIcon(IDI_INDEXING));
 		viewMenu->appendSeparator();
 		viewIndexes["Toolbar"] = viewMenu->appendItem(T_("Toolbar\tCtrl+1"),
@@ -356,29 +345,29 @@
 	toolbar = addChild(ToolBar::Seed());
 
 	toolbar->addButton(PublicHubsFrame::id, toolbarIcon(IDI_PUBLICHUBS), 0, T_("Public Hubs"), IDH_TOOLBAR_PUBLIC_HUBS,
-		std::bind(&PublicHubsFrame::openWindow, getTabView()));
+		[this] { PublicHubsFrame::openWindow(getTabView()); });
 	toolbar->addButton("Reconnect", toolbarIcon(IDI_RECONNECT), 0, T_("Reconnect"), IDH_TOOLBAR_RECONNECT,
 		std::bind(&MainWindow::handleReconnect, this));
 	toolbar->addButton("Redirect", toolbarIcon(IDI_FOLLOW), 0, T_("Follow last redirect"), IDH_TOOLBAR_FOLLOW,
 		std::bind(&MainWindow::handleRedirect, this));
 	toolbar->addButton(FavHubsFrame::id, toolbarIcon(IDI_FAVORITE_HUBS), 0, T_("Favorite Hubs"), IDH_TOOLBAR_FAVORITE_HUBS,
-		std::bind(&FavHubsFrame::openWindow, getTabView()), std::bind(&MainWindow::handleFavHubsDropDown, this, _1));
+		[this] { FavHubsFrame::openWindow(getTabView()); }, std::bind(&MainWindow::handleFavHubsDropDown, this, _1));
 	toolbar->addButton(UsersFrame::id, toolbarIcon(IDI_FAVORITE_USERS), 0, T_("Favorite Users"), IDH_TOOLBAR_FAVORITE_USERS,
-		std::bind(&UsersFrame::openWindow, getTabView()));
+		[this] { UsersFrame::openWindow(getTabView()); });
 	toolbar->addButton(QueueFrame::id, toolbarIcon(IDI_QUEUE), 0, T_("Download Queue"), IDH_TOOLBAR_QUEUE,
-		std::bind(&QueueFrame::openWindow, getTabView()));
+		[this] { QueueFrame::openWindow(getTabView()); });
 	toolbar->addButton(FinishedDLFrame::id, toolbarIcon(IDI_FINISHED_DL), 0, T_("Finished Downloads"), IDH_TOOLBAR_FINISHED_DL,
-		std::bind(&FinishedDLFrame::openWindow, getTabView()));
+		[this] { FinishedDLFrame::openWindow(getTabView()); });
 	toolbar->addButton(WaitingUsersFrame::id, toolbarIcon(IDI_WAITING_USERS), 0, T_("Waiting Users"), IDH_TOOLBAR_WAITING_USERS,
-		std::bind(&WaitingUsersFrame::openWindow, getTabView()));
+		[this] { WaitingUsersFrame::openWindow(getTabView()); });
 	toolbar->addButton(FinishedULFrame::id, toolbarIcon(IDI_FINISHED_UL), 0, T_("Finished Uploads"), IDH_TOOLBAR_FINISHED_UL,
-		std::bind(&FinishedULFrame::openWindow, getTabView()));
+		[this] { FinishedULFrame::openWindow(getTabView()); });
 	toolbar->addButton(SearchFrame::id, toolbarIcon(IDI_SEARCH), 0, T_("Search"), IDH_TOOLBAR_SEARCH,
-		std::bind(&SearchFrame::openWindow, getTabView(), Util::emptyStringT, SearchManager::TYPE_ANY));
+		[this] { SearchFrame::openWindow(getTabView()); });
 	toolbar->addButton(ADLSearchFrame::id, toolbarIcon(IDI_ADLSEARCH), 0, T_("ADL Search"), IDH_TOOLBAR_ADL_SEARCH,
-		std::bind(&ADLSearchFrame::openWindow, getTabView()));
+		[this] { ADLSearchFrame::openWindow(getTabView()); });
 	toolbar->addButton(SpyFrame::id, toolbarIcon(IDI_SPY), 0, T_("Search Spy"), IDH_TOOLBAR_SEARCH_SPY,
-		std::bind(&SpyFrame::openWindow, getTabView()));
+		[this] { SpyFrame::openWindow(getTabView()); });
 	toolbar->addButton("OpenFL", toolbarIcon(IDI_OPEN_FILE_LIST), 0, T_("Open file list..."), IDH_TOOLBAR_FILE_LIST,
 		std::bind(&MainWindow::handleOpenFileList, this));
 	toolbar->addButton("Recents", toolbarIcon(IDI_RECENTS), 0, T_("Recent windows"), IDH_TOOLBAR_RECENT,
@@ -386,7 +375,7 @@
 	toolbar->addButton("Settings", toolbarIcon(IDI_SETTINGS), 0, T_("Settings"), IDH_TOOLBAR_SETTINGS,
 		std::bind(&MainWindow::handleSettings, this));
 	toolbar->addButton(NotepadFrame::id, toolbarIcon(IDI_NOTEPAD), 0, T_("Notepad"), IDH_TOOLBAR_NOTEPAD,
-		std::bind(&NotepadFrame::openWindow, getTabView()));
+		[this] { NotepadFrame::openWindow(getTabView()); });
 	toolbar->addButton("Refresh", toolbarIcon(IDI_REFRESH), 0, T_("Refresh file list"), IDH_TOOLBAR_REFRESH,
 		std::bind(&MainWindow::handleRefreshFileList, this));
 	toolbar->addButton("CSHelp", toolbarIcon(IDI_WHATS_THIS), 0, T_("What's This?"), IDH_TOOLBAR_WHATS_THIS,
@@ -461,7 +450,7 @@
 	status->onDblClicked(STATUS_STATUS, std::bind(&WinUtil::openFile, Text::toT(Util::validateFileName(LogManager::getInstance()->getPath(LogManager::SYSTEM)))));
 	status->onDblClicked(STATUS_AWAY, std::bind(&Util::switchAway));
 	{
-		dwt::Dispatchers::VoidVoid<>::F f = std::bind(&StatsFrame::openWindow, getTabView());
+		auto f = [this] { StatsFrame::openWindow(getTabView(), false); };
 		status->onDblClicked(STATUS_DOWN_TOTAL, f);
 		status->onDblClicked(STATUS_UP_TOTAL, f);
 		status->onDblClicked(STATUS_DOWN_DIFF, f);
@@ -598,7 +587,7 @@
 		GroupMenus::iterator groupMenu = groupMenus.find(entry->getGroup());
 		((groupMenu == groupMenus.end()) ? menu : groupMenu->second)->appendItem(
 			dwt::util::escapeMenu(Text::toT(entry->getName())),
-			std::bind(&HubFrame::openWindow, getTabView(), entry->getServer()));
+			[this, entry] { HubFrame::openWindow(getTabView(), entry->getServer()); });
 	}
 
 	menu->open(pt);
@@ -761,11 +750,6 @@
 	callAsync(std::bind(&MainWindow::statusMessage, this, t, m));
 }
 
-void MainWindow::viewAndDelete(const string& fileName) {
-	TextFrame::openWindow(getTabView(), fileName);
-	File::deleteFile(fileName);
-}
-
 bool MainWindow::chooseFavHubGroup(const tstring& title, tstring& group) {
 	set<tstring, noCaseStringLess> groups;
 
@@ -1397,25 +1381,28 @@
 }
 
 void MainWindow::on(PartialList, const HintedUser& aUser, const string& text) throw() {
-	callAsync(
-		std::bind((void (*)(dwt::TabView*, const HintedUser&, const string&, int64_t))(&DirectoryListingFrame::openWindow), getTabView(),
-		aUser, text, 0));
+	callAsync([this, aUser, text] { DirectoryListingFrame::openWindow(getTabView(), aUser, text, 0); });
 }
 
 void MainWindow::on(QueueManagerListener::Finished, QueueItem* qi, const string& dir, int64_t speed) throw() {
 	if (qi->isSet(QueueItem::FLAG_CLIENT_VIEW)) {
 		if (qi->isSet(QueueItem::FLAG_USER_LIST)) {
-			callAsync(std::bind((void(*)(dwt::TabView*, const tstring&, const tstring&, const HintedUser&, int64_t))(&DirectoryListingFrame::openWindow), getTabView(),
-				Text::toT(qi->getListName()), Text::toT(dir), qi->getDownloads()[0]->getHintedUser(), speed));
+			tstring file = Text::toT(qi->getListName());
+			HintedUser user = qi->getDownloads()[0]->getHintedUser();
+			callAsync([this, file, dir, user, speed] { DirectoryListingFrame::openWindow(getTabView(), file, Text::toT(dir), user, speed); });
 		} else if (qi->isSet(QueueItem::FLAG_TEXT)) {
-			callAsync(std::bind(&MainWindow::viewAndDelete, this, qi->getTarget()));
+			string file = qi->getTarget();
+			callAsync([this, file] {
+				TextFrame::openWindow(getTabView(), file);
+				File::deleteFile(file);
+			});
 		}
 	}
 }
 
 void MainWindow::on(WindowManagerListener::Window, const string& id, const StringMap& params) throw() {
 	if(0);
-#define compare_id(frame) else if(frame::id == id) callAsync(std::bind(&frame::parseWindowParams, getTabView(), params))
+#define compare_id(frame) else if(frame::id == id) callAsync([this, params] { frame::parseWindowParams(getTabView(), params); })
 	compare_id(HubFrame);
 	compare_id(PrivateFrame);
 	compare_id(DirectoryListingFrame);

=== modified file 'win32/MainWindow.h'
--- win32/MainWindow.h	2010-08-29 15:42:38 +0000
+++ win32/MainWindow.h	2010-11-08 16:27:16 +0000
@@ -187,7 +187,6 @@
 	void showPortsError(const string& port);
 	void saveWindowSettings();
 	void parseCommandLine(const tstring& line);
-	void viewAndDelete(const string& fileName);
 	bool chooseFavHubGroup(const tstring& title, tstring& group);
 	void statusMessage(time_t t, const string& m);
 	dwt::IconPtr toolbarIcon(unsigned id) const;

=== modified file 'win32/SearchFrame.h'
--- win32/SearchFrame.h	2010-06-30 14:40:00 +0000
+++ win32/SearchFrame.h	2010-11-08 16:27:16 +0000
@@ -48,7 +48,8 @@
 	static const string id;
 	const string& getId() const;
 
-	static void openWindow(dwt::TabView* mdiParent, const tstring& str, SearchManager::TypeModes type);
+	static void openWindow(dwt::TabView* mdiParent, const tstring& str = Util::emptyStringT,
+		SearchManager::TypeModes type = SearchManager::TYPE_ANY);
 	static void closeAll();
 
 private:

=== modified file 'win32/StaticFrame.h'
--- win32/StaticFrame.h	2010-02-25 20:19:44 +0000
+++ win32/StaticFrame.h	2010-11-08 16:27:16 +0000
@@ -38,12 +38,12 @@
 		WinUtil::setStaticWindowState(T::id, false);
 	}
 
-	static void openWindow(dwt::TabView* mdiClient) {
+	static void openWindow(dwt::TabView* mdiClient, bool close = true, bool activate = true) {
 		if(frame) {
-			if(mdiClient->getActive() != frame) {
+			if(close && mdiClient->getActive() == frame) {
+				frame->close();
+			} else if(activate) {
 				frame->activate();
-			} else {
-				frame->close();
 			}
 		} else {
 			frame = new T(mdiClient);