linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #04724
[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 2658: improve multiple hub closing
------------------------------------------------------------
revno: 2658
committer: poy <poy@xxxxxxxxxx>
branch nick: trunk
timestamp: Sun 2011-10-30 15:24:14 +0100
message:
improve multiple hub closing
modified:
win32/HubFrame.cpp
win32/HubFrame.h
win32/MainWindow.cpp
win32/PrivateFrame.cpp
win32/PrivateFrame.h
win32/SearchFrame.cpp
win32/SearchFrame.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/HubFrame.cpp'
--- win32/HubFrame.cpp 2011-10-25 18:53:49 +0000
+++ win32/HubFrame.cpp 2011-10-30 14:24:14 +0000
@@ -67,52 +67,63 @@
HubFrame::FrameList HubFrame::frames;
void HubFrame::openWindow(TabViewPtr parent, const string& url, bool activate, bool connect) {
- for(FrameIter i = frames.begin(); i != frames.end(); ++i) {
- HubFrame* frame = *i;
- if(frame->url == url) {
- if(activate)
- frame->activate();
- else
- frame->setDirty(SettingsManager::BOLD_HUB);
- return;
- }
+ auto i = find_if(frames.begin(), frames.end(), [&url](HubFrame* frame) { return frame->url == url; });
+
+ if(i == frames.end()) {
+ auto frame = new HubFrame(parent, url, connect);
+ if(activate)
+ frame->activate();
+
+ } else {
+ auto frame = *i;
+ if(activate)
+ frame->activate();
+ else
+ frame->setDirty(SettingsManager::BOLD_HUB);
}
-
- auto frame = new HubFrame(parent, url, connect);
- if(activate)
- frame->activate();
}
void HubFrame::activateWindow(const string& url) {
- for(auto i = frames.cbegin(), iend = frames.cend(); i != iend; ++i) {
- auto frame = *i;
- if(frame->url == url) {
- frame->activate();
- }
+ auto i = find_if(frames.begin(), frames.end(), [&url](HubFrame* frame) { return frame->url == url; });
+ if(i != frames.end()) {
+ (*i)->activate();
}
}
-void HubFrame::closeAll(bool all) {
- for(FrameIter i = frames.begin(); i != frames.end(); ++i) {
- HubFrame* frame = *i;
- if(all || !(frame->client->isConnected())) {
+void HubFrame::closeAll(ClosePred f) {
+ if(!WinUtil::mainWindow->getEnabled())
+ return;
+
+ auto toClose = frames;
+ if(f) {
+ toClose.erase(std::remove_if(toClose.begin(), toClose.end(), f), toClose.end());
+ }
+
+ if(!toClose.empty() && (!BOOLSETTING(CONFIRM_HUB_CLOSING) || dwt::MessageBox(WinUtil::mainWindow).show(
+ str(TF_("Really close %1% hub windows?") % toClose.size()), _T(APPNAME) _T(" ") _T(VERSIONSTRING),
+ dwt::MessageBox::BOX_YESNO, dwt::MessageBox::BOX_ICONQUESTION) == IDYES))
+ {
+ for(auto i = toClose.begin(); i != toClose.end(); ++i) {
+ auto frame = *i;
+ frame->confirmClose = false;
frame->close(true);
}
}
}
+void HubFrame::closeAll(bool disconnected) {
+ closeAll(disconnected ? [](HubFrame* frame) { return frame->client->isConnected(); } : ClosePred());
+}
+
void HubFrame::closeFavGroup(const string& group, bool reversed) {
- for(FrameIter i = frames.begin(); i != frames.end(); ++i) {
- HubFrame* frame = *i;
+ closeAll([&](HubFrame* frame) -> bool {
FavoriteHubEntry* fav = FavoriteManager::getInstance()->getFavoriteHubEntry(frame->url);
- if((fav && fav->getGroup() == group) ^ reversed) {
- frame->close(true);
- }
- }
+ return (fav && fav->getGroup() == group) ^ !reversed;
+ });
}
void HubFrame::resortUsers() {
- for(FrameIter i = frames.begin(); i != frames.end(); ++i)
+ for(auto i = frames.begin(); i != frames.end(); ++i)
(*i)->resortForFavsFirst(true);
}
@@ -151,6 +162,7 @@
resort(false),
showJoins(BOOLSETTING(SHOW_JOINS)),
favShowJoins(BOOLSETTING(FAV_SHOW_JOINS)),
+confirmClose(true),
currentUser(0),
hubMenu(false),
inTabComplete(false)
@@ -259,9 +271,12 @@
}
bool HubFrame::preClosing() {
- if(BOOLSETTING(CONFIRM_HUB_CLOSING) && !WinUtil::mainWindow->closing() &&
- dwt::MessageBox(this).show(getText() + _T("\n\n") + T_("Really close?"), _T(APPNAME) _T(" ") _T(VERSIONSTRING), dwt::MessageBox::BOX_YESNO, dwt::MessageBox::BOX_ICONQUESTION) != IDYES)
+ if(BOOLSETTING(CONFIRM_HUB_CLOSING) && confirmClose && !WinUtil::mainWindow->closing() &&
+ dwt::MessageBox(this).show(getText() + _T("\n\n") + T_("Really close?"), _T(APPNAME) _T(" ") _T(VERSIONSTRING),
+ dwt::MessageBox::BOX_YESNO, dwt::MessageBox::BOX_ICONQUESTION) != IDYES)
+ {
return false;
+ }
FavoriteManager::getInstance()->removeListener(this);
client->removeListener(this);
=== modified file 'win32/HubFrame.h'
--- win32/HubFrame.h 2011-10-13 13:43:14 +0000
+++ win32/HubFrame.h 2011-10-30 14:24:14 +0000
@@ -67,8 +67,14 @@
static void openWindow(TabViewPtr parent, const string& url, bool activate = true, bool connect = true);
static void activateWindow(const string& url);
- static void closeAll(bool all);
+
+private:
+ typedef std::function<bool (HubFrame*)> ClosePred;
+ static void closeAll(ClosePred f = 0);
+public:
+ static void closeAll(bool disconnected);
static void closeFavGroup(const string& group, bool reversed);
+
static void resortUsers();
WindowParams getWindowParams() const;
@@ -172,6 +178,7 @@
bool resort;
bool showJoins;
bool favShowJoins;
+ bool confirmClose;
TaskQueue tasks; // todo get rid of TaskQueue
@@ -187,7 +194,6 @@
bool inTabComplete;
typedef std::vector<HubFrame*> FrameList;
- typedef FrameList::iterator FrameIter;
static FrameList frames;
HubFrame(TabViewPtr parent, const string& url, bool connect);
=== modified file 'win32/MainWindow.cpp'
--- win32/MainWindow.cpp 2011-10-21 19:32:21 +0000
+++ win32/MainWindow.cpp 2011-10-30 14:24:14 +0000
@@ -325,14 +325,14 @@
{
MenuPtr window = mainMenu->appendPopup(T_("&Window"));
- window->appendItem(T_("Close all hubs"), [] { HubFrame::closeAll(true); }, WinUtil::menuIcon(IDI_HUB));
- window->appendItem(T_("Close disconnected hubs"), [] { HubFrame::closeAll(false); }, WinUtil::menuIcon(IDI_HUB_OFF));
+ window->appendItem(T_("Close all hubs"), [] { HubFrame::closeAll(false); }, WinUtil::menuIcon(IDI_HUB));
+ window->appendItem(T_("Close disconnected hubs"), [] { HubFrame::closeAll(true); }, WinUtil::menuIcon(IDI_HUB_OFF));
window->appendItem(T_("Close all hubs of a favorite group"), [this] { handleCloseFavGroup(false); }, WinUtil::menuIcon(IDI_FAVORITE_HUBS));
window->appendItem(T_("Close hubs not in a favorite group"), [this] { handleCloseFavGroup(true); }, WinUtil::menuIcon(IDI_FAVORITE_HUBS));
window->appendSeparator();
- window->appendItem(T_("Close all PM windows"), &PrivateFrame::closeAll, WinUtil::menuIcon(IDI_PRIVATE));
- window->appendItem(T_("Close all offline PM windows"), &PrivateFrame::closeAllOffline, WinUtil::menuIcon(IDI_PRIVATE_OFF));
+ window->appendItem(T_("Close all PM windows"), [] { PrivateFrame::closeAll(false); }, WinUtil::menuIcon(IDI_PRIVATE));
+ window->appendItem(T_("Close all offline PM windows"), [] { PrivateFrame::closeAll(true); }, WinUtil::menuIcon(IDI_PRIVATE_OFF));
window->appendSeparator();
window->appendItem(T_("Close all file list windows"), &DirectoryListingFrame::closeAll, WinUtil::menuIcon(IDI_DIRECTORY));
=== modified file 'win32/PrivateFrame.cpp'
--- win32/PrivateFrame.cpp 2011-10-20 14:14:24 +0000
+++ win32/PrivateFrame.cpp 2011-10-30 14:24:14 +0000
@@ -44,25 +44,19 @@
void PrivateFrame::openWindow(TabViewPtr parent, const HintedUser& replyTo_, const tstring& msg,
const string& logPath, bool activate)
{
- PrivateFrame* pf;
- FrameIter i = frames.find(replyTo_);
- if(i == frames.end()) {
- pf = new PrivateFrame(parent, replyTo_, logPath);
- } else {
- pf = i->second;
- }
+ auto i = frames.find(replyTo_);
+ auto frame = (i == frames.end()) ? new PrivateFrame(parent, replyTo_, logPath) : i->second;
if(activate)
- pf->activate();
+ frame->activate();
if(!msg.empty())
- pf->sendMessage(msg);
-
+ frame->sendMessage(msg);
}
void PrivateFrame::gotMessage(TabViewPtr parent, const UserPtr& from, const UserPtr& to, const UserPtr& replyTo,
const tstring& aMessage, const string& hubHint)
{
const UserPtr& user = (replyTo == ClientManager::getInstance()->getMe()) ? to : replyTo;
- FrameIter i = frames.find(user);
+ auto i = frames.find(user);
if(i == frames.end()) {
auto p = new PrivateFrame(parent, HintedUser(user, hubHint));
if(!BOOLSETTING(POPUNDER_PM))
@@ -85,15 +79,11 @@
i->second->activate();
}
-void PrivateFrame::closeAll(){
- for(FrameIter i = frames.begin(); i != frames.end(); ++i)
- i->second->close(true);
-}
-
-void PrivateFrame::closeAllOffline() {
- for(FrameIter i = frames.begin(); i != frames.end(); ++i) {
- if(!i->second->online)
+void PrivateFrame::closeAll(bool offline) {
+ for(auto i = frames.begin(); i != frames.end(); ++i) {
+ if(!offline || !i->second->online) {
i->second->close(true);
+ }
}
}
=== modified file 'win32/PrivateFrame.h'
--- win32/PrivateFrame.h 2011-10-20 14:14:24 +0000
+++ win32/PrivateFrame.h 2011-10-30 14:24:14 +0000
@@ -62,8 +62,7 @@
const string& logPath = Util::emptyString, bool activate = true);
static void activateWindow(const UserPtr& u);
static bool isOpen(const UserPtr& u) { return frames.find(u) != frames.end(); }
- static void closeAll();
- static void closeAllOffline();
+ static void closeAll(bool offline);
WindowParams getWindowParams() const;
static void parseWindowParams(TabViewPtr parent, const WindowParams& params);
@@ -81,7 +80,6 @@
bool online;
typedef unordered_map<UserPtr, PrivateFrame*, User::Hash> FrameMap;
- typedef FrameMap::iterator FrameIter;
static FrameMap frames;
PrivateFrame(TabViewPtr parent, const HintedUser& replyTo_, const string& logPath = Util::emptyString);
=== modified file 'win32/SearchFrame.cpp'
--- win32/SearchFrame.cpp 2011-10-20 14:14:24 +0000
+++ win32/SearchFrame.cpp 2011-10-30 14:24:14 +0000
@@ -104,7 +104,7 @@
}
void SearchFrame::closeAll() {
- for(FrameIter i = frames.begin(); i != frames.end(); ++i)
+ for(auto i = frames.begin(); i != frames.end(); ++i)
(*i)->close(true);
}
=== modified file 'win32/SearchFrame.h'
--- win32/SearchFrame.h 2011-10-17 19:39:46 +0000
+++ win32/SearchFrame.h 2011-10-30 14:24:14 +0000
@@ -155,7 +155,6 @@
};
typedef set<SearchFrame*> FrameSet;
- typedef FrameSet::iterator FrameIter;
static FrameSet frames;
SplitterContainerPtr paned;