From: <arn...@us...> - 2006-03-18 16:14:25
|
Revision: 590 Author: arnetheduck Date: 2006-03-18 08:14:10 -0800 (Sat, 18 Mar 2006) ViewCVS: http://svn.sourceforge.net/dcplusplus/?rev=590&view=rev Log Message: ----------- Hub frame cleanup Modified Paths: -------------- dcplusplus/trunk/Example.xml dcplusplus/trunk/changelog.txt dcplusplus/trunk/client/StringDefs.cpp dcplusplus/trunk/client/StringDefs.h dcplusplus/trunk/windows/AboutDlg.h dcplusplus/trunk/windows/HubFrame.cpp dcplusplus/trunk/windows/HubFrame.h dcplusplus/trunk/windows/UsersFrame.cpp dcplusplus/trunk/windows/UsersFrame.h dcplusplus/trunk/windows/WinUtil.h Modified: dcplusplus/trunk/Example.xml =================================================================== --- dcplusplus/trunk/Example.xml 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/Example.xml 2006-03-18 16:14:10 UTC (rev 590) @@ -48,6 +48,7 @@ <String Name="CompressionError">Error during compression</String> <String Name="Configure">&Configure</String> <String Name="Connect">&Connect</String> + <String Name="ConnectFavuserHub">Connect to hub</String> <String Name="Connected">Connected</String> <String Name="Connecting">Connecting...</String> <String Name="ConnectingForced">Connecting (forced)...</String> Modified: dcplusplus/trunk/changelog.txt =================================================================== --- dcplusplus/trunk/changelog.txt 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/changelog.txt 2006-03-18 16:14:10 UTC (rev 590) @@ -1,10 +1,12 @@ -- 0.688 -- * Fixed public hubs sorting (thanks pothead) * Fixed a ZPipe issue (thanks jove) -* Fixed a 100% cpu / crash bug +* [bug 858] Fixed a 100% cpu / crash bug * [bug 872] Fixed a pm issue hopefully * [bug 812] Fixed pm's being sent to bots * Files with invalid crc-32, as per their sfv file, are no longer shared +* [bug 873] Added connect to hub option (thanks joakim tosteberg) +* Fixed an issue with linux file reading (thanks bart vullings and steven) -- 0.687 2006-02-26 -- * Fixed XML file list generation for invalid filenames from other os's Modified: dcplusplus/trunk/client/StringDefs.cpp =================================================================== --- dcplusplus/trunk/client/StringDefs.cpp 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/client/StringDefs.cpp 2006-03-18 16:14:10 UTC (rev 590) @@ -49,6 +49,7 @@ "Error during compression", "&Configure", "&Connect", +"Connect to hub", "Connected", "Connecting...", "Connecting (forced)...", @@ -650,6 +651,7 @@ "CompressionError", "Configure", "Connect", +"ConnectFavuserHub", "Connected", "Connecting", "ConnectingForced", Modified: dcplusplus/trunk/client/StringDefs.h =================================================================== --- dcplusplus/trunk/client/StringDefs.h 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/client/StringDefs.h 2006-03-18 16:14:10 UTC (rev 590) @@ -52,6 +52,7 @@ COMPRESSION_ERROR, // "Error during compression" CONFIGURE, // "&Configure" CONNECT, // "&Connect" + CONNECT_FAVUSER_HUB, // "Connect to hub" CONNECTED, // "Connected" CONNECTING, // "Connecting..." CONNECTING_FORCED, // "Connecting (forced)..." Modified: dcplusplus/trunk/windows/AboutDlg.h =================================================================== --- dcplusplus/trunk/windows/AboutDlg.h 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/windows/AboutDlg.h 2006-03-18 16:14:10 UTC (rev 590) @@ -41,7 +41,7 @@ _T("theparanoidone, gadget, naga, tremor, joakim tosteberg, pofis, psf8500, lauris ievins, ") _T("defr, ullner, fleetcommand, liny, xan, olle svensson, mark gillespie, jeremy huddleston, ") _T("bsod, sulan, jonathan stone, tim burton, izzzo, guitarm, paka, nils maier, jens oknelid, yoji, ") -_T("krzysztof tyszecki, poison, pothead, pur, bigmuscle, martin, jove. ") +_T("krzysztof tyszecki, poison, pothead, pur, bigmuscle, martin, jove, bart vullings, steven. ") _T("Keep it coming!"); class AboutDlg : public CDialogImpl<AboutDlg>, private HttpConnectionListener Modified: dcplusplus/trunk/windows/HubFrame.cpp =================================================================== --- dcplusplus/trunk/windows/HubFrame.cpp 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/windows/HubFrame.cpp 2006-03-18 16:14:10 UTC (rev 590) @@ -42,7 +42,6 @@ static ResourceManager::Strings columnNames[] = { ResourceManager::NICK, ResourceManager::SHARED, ResourceManager::DESCRIPTION, ResourceManager::TAG, ResourceManager::CONNECTION, ResourceManager::EMAIL }; - LRESULT HubFrame::OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { CreateSimpleStatusBar(ATL_IDS_IDLEMESSAGE, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | SBARS_SIZEGRIP); @@ -337,32 +336,30 @@ LRESULT HubFrame::onCopyNick(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { int i=-1; - if(client->isConnected()) { - string nicks; + string nicks; - while( (i = ctrlUsers.GetNextItem(i, LVNI_SELECTED)) != -1) { - nicks += (ctrlUsers.getItemData(i))->getIdentity().getNick(); - nicks += ' '; - } - if(!nicks.empty()) { - // remove last space - nicks.erase(nicks.length() - 1); - WinUtil::setClipboard(Text::toT(nicks)); - } + while( (i = ctrlUsers.GetNextItem(i, LVNI_SELECTED)) != -1) { + nicks += (ctrlUsers.getItemData(i))->getIdentity().getNick(); + nicks += ' '; } + if(!nicks.empty()) { + // remove last space + nicks.erase(nicks.length() - 1); + WinUtil::setClipboard(Text::toT(nicks)); + } return 0; } LRESULT HubFrame::onDoubleClickUsers(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/) { NMITEMACTIVATE* item = (NMITEMACTIVATE*)pnmh; - if(client->isConnected() && item->iItem != -1) { + if(item->iItem != -1) { ctrlUsers.getItemData(item->iItem)->getList(); } return 0; } -bool HubFrame::updateUser(const UpdateInfo& u) { +bool HubFrame::updateUser(const UserTask& u) { UserMapIter i = userMap.find(u.user); if(i == userMap.end()) { UserInfo* ui = new UserInfo(u); @@ -433,97 +430,91 @@ return needsSort; } -LRESULT HubFrame::onSpeaker(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) { - if(wParam == UPDATE_USERS) { - ctrlUsers.SetRedraw(FALSE); - { - Lock l(updateCS); - for(UpdateIter i = updateList.begin(); i != updateList.end(); ++i) { - UpdateInfo& u = i->first; - switch(i->second) { - case UPDATE_USER: - if(updateUser(u)) { - if (showJoins || (favShowJoins && FavoriteManager::getInstance()->isFavoriteUser(u.user))) { - addLine(_T("*** ") + TSTRING(JOINS) + Text::toT(u.identity.getNick())); - } - } - break; - case UPDATE_USERS: - updateUser(u); - break; - case REMOVE_USER: - removeUser(u.user); - if (showJoins || (favShowJoins && FavoriteManager::getInstance()->isFavoriteUser(u.user))) { - addLine(Text::toT("*** " + STRING(PARTS) + u.identity.getNick())); - } +static const COLORREF RED = RGB(255, 0, 0); +static const COLORREF GREEN = RGB(0, 255, 0); - break; - } - } - updateList.clear(); - } +LRESULT HubFrame::onSpeaker(UINT /*uMsg*/, WPARAM /* wParam */, LPARAM /* lParam */, BOOL& /*bHandled*/) { + TaskList t; + { + Lock l(taskCS); + taskList.swap(t); + } - if(resort && showUsers) { - ctrlUsers.resort(); - resort = false; - } + ctrlUsers.SetRedraw(FALSE); - ctrlUsers.SetRedraw(TRUE); - } else if(wParam == DISCONNECTED) { - clearUserList(); - setTabColor(RGB(255, 0, 0)); - } else if(wParam == CONNECTED) { - addClientLine(TSTRING(CONNECTED)); - setTabColor(RGB(0, 255, 0)); - } else if(wParam == ADD_CHAT_LINE) { - tstring* x = (tstring*)lParam; - addLine(*x); - delete x; - } else if(wParam == ADD_STATUS_LINE) { - tstring* x = (tstring*)lParam; - addClientLine(*x); - delete x; - } else if(wParam == ADD_SILENT_STATUS_LINE) { - tstring* x = (tstring*)lParam; - addClientLine(*x, false); - delete x; - } else if(wParam == SET_WINDOW_TITLE) { - tstring* x = (tstring*)lParam; - SetWindowText(x->c_str()); - delete x; - } else if(wParam == STATS) { - ctrlStatus.SetText(1, Text::toT(Util::toString(getUserCount()) + " " + STRING(HUB_USERS)).c_str()); - ctrlStatus.SetText(2, Text::toT(Util::formatBytes(getAvailable())).c_str()); - } else if(wParam == GET_PASSWORD) { - if(client->getPassword().size() > 0) { - client->password(client->getPassword()); - addClientLine(TSTRING(STORED_PASSWORD_SENT)); - } else { - ctrlMessage.SetWindowText(_T("/password ")); - ctrlMessage.SetFocus(); - ctrlMessage.SetSel(10, 10); - waitingForPW = true; - } - } else if(wParam == PRIVATE_MESSAGE) { - PMInfo* i = (PMInfo*)lParam; - if(i->replyTo->isOnline()) { - if(BOOLSETTING(POPUP_PMS) || PrivateFrame::isOpen(i->replyTo)) { - PrivateFrame::gotMessage(i->from, i->to, i->replyTo, i->msg); + for(TaskIter i = t.begin(); i != t.end(); ++i) { + Task* task = *i; + if(task->speaker == UPDATE_USER) { + updateUser(*static_cast<UserTask*>(task)); + } else if(task->speaker == UPDATE_USER_JOIN) { + UserTask& u = *static_cast<UserTask*>(task); + if(updateUser(u)) { + if (showJoins || (favShowJoins && FavoriteManager::getInstance()->isFavoriteUser(u.user))) { + addLine(_T("*** ") + TSTRING(JOINS) + Text::toT(u.identity.getNick())); + } + } + } else if(task->speaker == REMOVE_USER) { + UserTask& u = *static_cast<UserTask*>(task); + removeUser(u.user); + if (showJoins || (favShowJoins && FavoriteManager::getInstance()->isFavoriteUser(u.user))) { + addLine(Text::toT("*** " + STRING(PARTS) + u.identity.getNick())); + } + } else if(task->speaker == CONNECTED) { + addClientLine(TSTRING(CONNECTED)); + setTabColor(GREEN); + } else if(task->speaker == DISCONNECTED) { + clearUserList(); + setTabColor(RED); + } else if(task->speaker == ADD_CHAT_LINE) { + addLine(static_cast<StringTask*>(task)->msg); + } else if(task->speaker == ADD_STATUS_LINE) { + addClientLine(static_cast<StringTask*>(task)->msg); + } else if(task->speaker == ADD_SILENT_STATUS_LINE) { + addClientLine(static_cast<StringTask*>(task)->msg, false); + } else if(task->speaker == SET_WINDOW_TITLE) { + SetWindowText(static_cast<StringTask*>(task)->msg.c_str()); + } else if(task->speaker == STATS) { + ctrlStatus.SetText(1, Text::toT(Util::toString(getUserCount()) + " " + STRING(HUB_USERS)).c_str()); + ctrlStatus.SetText(2, Text::toT(Util::formatBytes(getAvailable())).c_str()); + } else if(task->speaker == GET_PASSWORD) { + if(client->getPassword().size() > 0) { + client->password(client->getPassword()); + addClientLine(TSTRING(STORED_PASSWORD_SENT)); } else { - addLine(TSTRING(PRIVATE_MESSAGE_FROM) + getNick(i->from) + _T(": ") + i->msg); + ctrlMessage.SetWindowText(_T("/password ")); + ctrlMessage.SetFocus(); + ctrlMessage.SetSel(10, 10); + waitingForPW = true; } - } else { - if(BOOLSETTING(IGNORE_OFFLINE)) { - addClientLine(TSTRING(IGNORED_MESSAGE) + i->msg, false); - } else if(BOOLSETTING(POPUP_OFFLINE)) { - PrivateFrame::gotMessage(i->from, i->to, i->replyTo, i->msg); + } else if(task->speaker == PRIVATE_MESSAGE) { + PMTask& pm = *static_cast<PMTask*>(task); + if(pm.replyTo->isOnline()) { + if(BOOLSETTING(POPUP_PMS) || PrivateFrame::isOpen(pm.replyTo)) { + PrivateFrame::gotMessage(pm.from, pm.to, pm.replyTo, pm.msg); + } else { + addLine(TSTRING(PRIVATE_MESSAGE_FROM) + getNick(pm.from) + _T(": ") + pm.msg); + } } else { - addLine(TSTRING(PRIVATE_MESSAGE_FROM) + getNick(i->from) + _T(": ") + i->msg); + if(BOOLSETTING(IGNORE_OFFLINE)) { + addClientLine(TSTRING(IGNORED_MESSAGE) + pm.msg, false); + } else if(BOOLSETTING(POPUP_OFFLINE)) { + PrivateFrame::gotMessage(pm.from, pm.to, pm.replyTo, pm.msg); + } else { + addLine(TSTRING(PRIVATE_MESSAGE_FROM) + getNick(pm.from) + _T(": ") + pm.msg); + } } } - delete i; + + delete task; } + if(resort && showUsers) { + ctrlUsers.resort(); + resort = false; + } + + ctrlUsers.SetRedraw(TRUE); + return 0; } @@ -590,6 +581,8 @@ FavoriteManager::getInstance()->removeUserCommand(Text::fromT(server)); clearUserList(); + clearTaskList(); + WinUtil::saveHeaderOrder(ctrlUsers, SettingsManager::HUBFRAME_ORDER, SettingsManager::HUBFRAME_WIDTHS, COLUMN_LAST, columnIndexes, columnSizes); @@ -619,18 +612,19 @@ } void HubFrame::clearUserList() { - { - Lock l(updateCS); - updateList.clear(); - } - for(UserMapIter i = userMap.begin(); i != userMap.end(); ++i) { delete i->second; } - ctrlUsers.DeleteAllItems(); userMap.clear(); + ctrlUsers.DeleteAllItems(); } +void HubFrame::clearTaskList() { + Lock l(taskCS); + for_each(taskList.begin(), taskList.end(), DeleteFunction()); + taskList.clear(); +} + LRESULT HubFrame::onLButton(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { HWND focus = GetFocus(); bHandled = false; @@ -1068,6 +1062,7 @@ client->removeListener(this); ClientManager::getInstance()->putClient(client); clearUserList(); + clearTaskList(); client = ClientManager::getInstance()->getClient(Text::fromT(server)); client->addListener(this); client->connect(); @@ -1077,7 +1072,7 @@ LRESULT HubFrame::onEnterUsers(int /*idCtrl*/, LPNMHDR /* pnmh */, BOOL& /*bHandled*/) { int item = ctrlUsers.GetNextItem(-1, LVNI_FOCUSED); - if(client->isConnected() && (item != -1)) { + if(item != -1) { try { QueueManager::getInstance()->addList((ctrlUsers.getItemData(item))->user, QueueItem::FLAG_CLIENT_VIEW); } catch(const Exception& e) { @@ -1138,7 +1133,7 @@ updateStatusBar(); if(updateUsers) { updateUsers = false; - PostMessage(WM_SPEAKER, UPDATE_USERS); + PostMessage(WM_SPEAKER); } } @@ -1153,18 +1148,15 @@ client->setPassword(Util::emptyString); } void HubFrame::on(UserUpdated, Client*, const OnlineUser& user) throw() { - speak(UPDATE_USER, user); + speak(UPDATE_USER_JOIN, user); } void HubFrame::on(UsersUpdated, Client*, const OnlineUser::List& aList) throw() { - Lock l(updateCS); - updateList.reserve(aList.size()); + Lock l(taskCS); + taskList.reserve(aList.size()); for(OnlineUser::List::const_iterator i = aList.begin(); i != aList.end(); ++i) { - if(!(*i)->getIdentity().isHidden()) - updateList.push_back(make_pair(UpdateInfo(*(*i)), UPDATE_USERS)); + taskList.push_back(new UserTask(UPDATE_USER, *(*i))); } - if(!updateList.empty()) { - PostMessage(WM_SPEAKER, UPDATE_USERS); - } + updateUsers = true; } void HubFrame::on(UserRemoved, Client*, const OnlineUser& user) throw() { @@ -1213,11 +1205,10 @@ } void HubFrame::on(PrivateMessage, Client*, const OnlineUser& from, const OnlineUser& to, const OnlineUser& replyTo, const string& line) throw() { - speak(PRIVATE_MESSAGE, from, to, replyTo, Util::toDOS("<" + from.getIdentity().getNick() + "> " + line)); + speak(from, to, replyTo, Util::toDOS("<" + from.getIdentity().getNick() + "> " + line)); } void HubFrame::on(NickTaken, Client*) throw() { speak(ADD_STATUS_LINE, STRING(NICK_TAKEN)); - speak(DISCONNECTED); } void HubFrame::on(SearchFlood, Client*, const string& line) throw() { speak(ADD_STATUS_LINE, STRING(SEARCH_SPAM_FROM) + line); Modified: dcplusplus/trunk/windows/HubFrame.h =================================================================== --- dcplusplus/trunk/windows/HubFrame.h 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/windows/HubFrame.h 2006-03-18 16:14:10 UTC (rev 590) @@ -132,6 +132,7 @@ LRESULT OnFileReconnect(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { client->disconnect(false); clearUserList(); + clearTaskList(); client->connect(); return 0; } @@ -150,7 +151,7 @@ TypedListViewCtrl<UserInfo, IDC_USERS>& getUserList() { return ctrlUsers; } private: - enum Speakers { UPDATE_USER, UPDATE_USERS, REMOVE_USER, ADD_CHAT_LINE, + enum Speakers { UPDATE_USER_JOIN, UPDATE_USER, REMOVE_USER, ADD_CHAT_LINE, ADD_STATUS_LINE, ADD_SILENT_STATUS_LINE, SET_WINDOW_TITLE, GET_PASSWORD, PRIVATE_MESSAGE, STATS, CONNECTED, DISCONNECTED }; @@ -170,18 +171,35 @@ COLUMN_LAST }; - struct UpdateInfo { - UpdateInfo() { } - UpdateInfo(const OnlineUser& ou) : user(ou.getUser()), identity(ou.getIdentity()) { } + struct Task { + Task(Speakers speaker_) : speaker(speaker_) { } + virtual ~Task() { } + Speakers speaker; + }; + struct UserTask : public Task { + UserTask(Speakers speaker_, const OnlineUser& ou) : Task(speaker_), user(ou.getUser()), identity(ou.getIdentity()) { } + User::Ptr user; Identity identity; }; + struct StringTask : public Task { + StringTask(Speakers speaker_, const tstring& msg_) : Task(speaker_), msg(msg_) { } + tstring msg; + }; + + struct PMTask : public StringTask { + PMTask(const User::Ptr& from_, const User::Ptr& to_, const User::Ptr& replyTo_, const tstring& m) : StringTask(PRIVATE_MESSAGE, m), from(from_), to(to_), replyTo(replyTo_) { } + User::Ptr from; + User::Ptr to; + User::Ptr replyTo; + }; + friend struct CompareItems; class UserInfo : public UserInfoBase, public FastAlloc<UserInfo> { public: - UserInfo(const UpdateInfo& u) : UserInfoBase(u.user) { + UserInfo(const UserTask& u) : UserInfoBase(u.user) { update(u.identity, -1); } @@ -209,14 +227,6 @@ GETSET(Identity, identity, Identity); }; - class PMInfo { - public: - PMInfo(const User::Ptr& from_, const User::Ptr& to_, const User::Ptr& replyTo_, const string& m) : from(from_), to(to_), replyTo(replyTo_), msg(Text::toT(m)) { } - User::Ptr from; - User::Ptr to; - User::Ptr replyTo; - tstring msg; - }; HubFrame(const tstring& aServer) : waitingForPW(false), extraSort(false), server(aServer), closed(false), @@ -231,11 +241,13 @@ } virtual ~HubFrame() { + ClientManager::getInstance()->putClient(client); + dcassert(frames.find(server) != frames.end()); dcassert(frames[server] == this); frames.erase(server); - ClientManager::getInstance()->putClient(client); + clearTaskList(); } typedef HASH_MAP<tstring, HubFrame*> FrameMap; @@ -272,7 +284,7 @@ if (ctrlUsers.GetSelectedCount() > 1) { return ctrlUsers.forEachSelectedT(CountAvailable()).available; } else - return client->getAvailable(); + return ctrlUsers.forEachT(CountAvailable()).available; } const tstring& getNick(const User::Ptr& u); @@ -299,14 +311,14 @@ TStringMap tabParams; bool tabMenuShown; - typedef vector<pair<UpdateInfo, Speakers> > UpdateList; - typedef UpdateList::iterator UpdateIter; + typedef vector<Task*> TaskList; + typedef TaskList::iterator TaskIter; typedef HASH_MAP<User::Ptr, UserInfo*, User::HashFunction> UserMap; typedef UserMap::iterator UserMapIter; UserMap userMap; - UpdateList updateList; - CriticalSection updateCS; + TaskList taskList; + CriticalSection taskCS; bool updateUsers; bool resort; @@ -318,7 +330,7 @@ static int columnIndexes[COLUMN_LAST]; static int columnSizes[COLUMN_LAST]; - bool updateUser(const UpdateInfo& u); + bool updateUser(const UserTask& u); void removeUser(const User::Ptr& aUser); UserInfo* findUser(const tstring& nick); @@ -327,13 +339,11 @@ void removeFavoriteHub(); void clearUserList(); + void clearTaskList(); int getImage(const Identity& u); - void updateStatusBar() { - if(m_hWnd) - PostMessage(WM_SPEAKER, STATS); - } + void updateStatusBar() { if(m_hWnd) speak(STATS); } // TimerManagerListener virtual void on(TimerManagerListener::Second, DWORD /*aTick*/) throw(); @@ -355,15 +365,10 @@ virtual void on(NickTaken, Client*) throw(); virtual void on(SearchFlood, Client*, const string&) throw(); - void speak(Speakers s) { PostMessage(WM_SPEAKER, (WPARAM)s); } - void speak(Speakers s, const string& msg) { PostMessage(WM_SPEAKER, (WPARAM)s, (LPARAM)new tstring(Text::toT(msg))); } - void speak(Speakers s, const OnlineUser& u) { - Lock l(updateCS); - updateList.push_back(make_pair(UpdateInfo(u), s)); - updateUsers = true; - } - void speak(Speakers s, const OnlineUser& from, const OnlineUser& to, const OnlineUser& replyTo, const string& line) { PostMessage(WM_SPEAKER, (WPARAM)s, (LPARAM)new PMInfo(from, to, replyTo, line)); } - + void speak(Speakers s) { Lock l(taskCS); taskList.push_back(new Task(s)); PostMessage(WM_SPEAKER); } + void speak(Speakers s, const string& msg) { Lock l(taskCS); taskList.push_back(new StringTask(s, Text::toT(msg))); PostMessage(WM_SPEAKER); } + void speak(Speakers s, const OnlineUser& u) { Lock l(taskCS); taskList.push_back(new UserTask(s, u)); updateUsers = true; } + void speak(const OnlineUser& from, const OnlineUser& to, const OnlineUser& replyTo, const string& line) { Lock l(taskCS); taskList.push_back(new PMTask(from, to, replyTo, Text::toT(line))); } }; #endif // !defined(HUB_FRAME_H) Modified: dcplusplus/trunk/windows/UsersFrame.cpp =================================================================== --- dcplusplus/trunk/windows/UsersFrame.cpp 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/windows/UsersFrame.cpp 2006-03-18 16:14:10 UTC (rev 590) @@ -27,6 +27,8 @@ #include "LineDlg.h" +#include "HubFrame.h" + int UsersFrame::columnIndexes[] = { COLUMN_NICK, COLUMN_HUB, COLUMN_SEEN, COLUMN_DESCRIPTION }; int UsersFrame::columnSizes[] = { 200, 300, 150, 200 }; static ResourceManager::Strings columnNames[] = { ResourceManager::AUTO_GRANT, ResourceManager::LAST_HUB, ResourceManager::LAST_SEEN, ResourceManager::DESCRIPTION }; @@ -147,8 +149,21 @@ FavoriteManager::getInstance()->setAutoGrant(ctrlUsers.getItemData(l->iItem)->user, ctrlUsers.GetCheckState(l->iItem) != FALSE); } return 0; -} +} +LRESULT UsersFrame::onConnect(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) { + for(int i = 0; i < ctrlUsers.GetItemCount(); ++i) { + UserInfo *ui = ctrlUsers.getItemData(i); + FavoriteManager::FavoriteMap favUsers = FavoriteManager::getInstance()->getFavoriteUsers(); + const FavoriteUser u = favUsers.find(ui->user->getCID())->second; + if(u.getUrl().length() > 0) + { + HubFrame::openWindow(Text::toT(u.getUrl())); + } + } + return 0; +} + void UsersFrame::addUser(const FavoriteUser& aUser) { int i = ctrlUsers.insertItem(new UserInfo(aUser), 0); bool b = aUser.isSet(FavoriteUser::FLAG_GRANTSLOT); Modified: dcplusplus/trunk/windows/UsersFrame.h =================================================================== --- dcplusplus/trunk/windows/UsersFrame.h 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/windows/UsersFrame.h 2006-03-18 16:14:10 UTC (rev 590) @@ -52,6 +52,7 @@ MESSAGE_HANDLER(WM_SETFOCUS, onSetFocus) COMMAND_ID_HANDLER(IDC_REMOVE, onRemove) COMMAND_ID_HANDLER(IDC_EDIT, onEdit) + COMMAND_ID_HANDLER(IDC_CONNECT, onConnect) CHAIN_MSG_MAP(uibBase) CHAIN_MSG_MAP(baseClass) END_MSG_MAP() @@ -62,6 +63,7 @@ LRESULT onEdit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT onItemChanged(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/); LRESULT onContextMenu(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/); + LRESULT onConnect(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); void UpdateLayout(BOOL bResizeBars = TRUE); Modified: dcplusplus/trunk/windows/WinUtil.h =================================================================== --- dcplusplus/trunk/windows/WinUtil.h 2006-03-17 22:57:48 UTC (rev 589) +++ dcplusplus/trunk/windows/WinUtil.h 2006-03-18 16:14:10 UTC (rev 590) @@ -125,6 +125,7 @@ menu.AppendMenu(MF_STRING, IDC_ADD_TO_FAVORITES, CTSTRING(ADD_TO_FAVORITES)); menu.AppendMenu(MF_STRING, IDC_GRANTSLOT, CTSTRING(GRANT_EXTRA_SLOT)); menu.AppendMenu(MF_STRING, IDC_REMOVEALL, CTSTRING(REMOVE_FROM_ALL)); + menu.AppendMenu(MF_STRING, IDC_CONNECT, CTSTRING(CONNECT_FAVUSER_HUB)); } }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |