From: <arn...@us...> - 2006-06-03 14:18:19
|
Revision: 611 Author: arnetheduck Date: 2006-06-03 07:17:47 -0700 (Sat, 03 Jun 2006) ViewCVS: http://svn.sourceforge.net/dcplusplus/?rev=611&view=rev Log Message: ----------- Fixed user list filter Modified Paths: -------------- dcplusplus/trunk/changelog.txt dcplusplus/trunk/windows/HubFrame.cpp dcplusplus/trunk/windows/HubFrame.h dcplusplus/trunk/windows/PublicHubsFrm.cpp dcplusplus/trunk/windows/PublicHubsFrm.h Modified: dcplusplus/trunk/changelog.txt =================================================================== --- dcplusplus/trunk/changelog.txt 2006-06-03 13:47:39 UTC (rev 610) +++ dcplusplus/trunk/changelog.txt 2006-06-03 14:17:47 UTC (rev 611) @@ -9,8 +9,10 @@ * [bug 927] Fixed OP detection bug (thanks pothead) * [bug 929] Fixed list view flicker issues (thanks trem) * [bug 931] Improved keyboard navigation (thanks trem) +* Added "all" to hub list field search (thanks trem) * Fixed bug when sending active ADC search results * Updated to ADC 0.11 +* Passive users now also get search results -- 0.69 2006-05-21 -- * Small linux / old gcc fixes (thanks jens oknelid) Modified: dcplusplus/trunk/windows/HubFrame.cpp =================================================================== --- dcplusplus/trunk/windows/HubFrame.cpp 2006-06-03 13:47:39 UTC (rev 610) +++ dcplusplus/trunk/windows/HubFrame.cpp 2006-06-03 14:17:47 UTC (rev 611) @@ -126,7 +126,8 @@ for(int j=0; j<COLUMN_LAST; j++) { ctrlFilterSel.AddString(CTSTRING_I(columnNames[j])); } - ctrlFilterSel.SetCurSel(0); + ctrlFilterSel.AddString(CTSTRING(ANY)); + ctrlFilterSel.SetCurSel(COLUMN_LAST); bHandled = FALSE; client->connect(); @@ -1306,31 +1307,31 @@ return 0; } -bool HubFrame::parseFilter(int& mode, int64_t& size) { +bool HubFrame::parseFilter(FilterModes& mode, int64_t& size) { tstring::size_type start = tstring::npos; tstring::size_type end = tstring::npos; int64_t multiplier = 1; if(filter.compare(0, 2, _T(">=")) == 0) { - mode = 1; + mode = FilterModes::GREATER_EQUAL; start = 2; } else if(filter.compare(0, 2, _T("<=")) == 0) { - mode = 2; + mode = FilterModes::LESS_EQUAL; start = 2; } else if(filter.compare(0, 2, _T("==")) == 0) { - mode = 0; + mode = FilterModes::EQUAL; start = 2; } else if(filter.compare(0, 2, _T("!=")) == 0) { - mode = 5; + mode = FilterModes::NOT_EQUAL; start = 2; } else if(filter[0] == _T('<')) { - mode = 4; + mode = FilterModes::LESS; start = 1; } else if(filter[0] == _T('>')) { - mode = 3; + mode = FilterModes::GREATER; start = 1; } else if(filter[0] == _T('=')) { - mode = 1; + mode = FilterModes::EQUAL; start = 1; } @@ -1372,7 +1373,7 @@ void HubFrame::updateUserList(UserInfo* ui) { int64_t size = -1; - int mode = -1; + FilterModes mode = FilterModes::NONE; int sel = ctrlFilterSel.GetCurSel(); @@ -1449,14 +1450,7 @@ } } -bool HubFrame::matchFilter(const UserInfo& ui, int sel, bool doSizeCompare, int mode, int64_t size) { - //mode - //0 - == - //1 - >= - //2 - <= - //3 - > - //4 - < - //5 - != +bool HubFrame::matchFilter(const UserInfo& ui, int sel, bool doSizeCompare, FilterModes mode, int64_t size) { if(filter.empty()) return true; @@ -1464,16 +1458,25 @@ bool insert = false; if(doSizeCompare) { switch(mode) { - case 0: insert = (size == ui.getIdentity().getBytesShared()); break; - case 1: insert = (size <= ui.getIdentity().getBytesShared()); break; - case 2: insert = (size >= ui.getIdentity().getBytesShared()); break; - case 3: insert = (size < ui.getIdentity().getBytesShared()); break; - case 4: insert = (size > ui.getIdentity().getBytesShared()); break; - case 5: insert = (size != ui.getIdentity().getBytesShared()); break; + case FilterModes::EQUAL: insert = (size == ui.getIdentity().getBytesShared()); break; + case FilterModes::GREATER_EQUAL: insert = (size <= ui.getIdentity().getBytesShared()); break; + case FilterModes::LESS_EQUAL: insert = (size >= ui.getIdentity().getBytesShared()); break; + case FilterModes::GREATER: insert = (size < ui.getIdentity().getBytesShared()); break; + case FilterModes::LESS: insert = (size > ui.getIdentity().getBytesShared()); break; + case FilterModes::NOT_EQUAL: insert = (size != ui.getIdentity().getBytesShared()); break; } } else { - if(Util::findSubString(ui.getText(sel), filter) != string::npos) - insert = true; + if(sel >= COLUMN_LAST) { + for(int i = COLUMN_FIRST; i < COLUMN_LAST; ++i) { + if(Util::findSubString(ui.getText(i), filter) != string::npos) { + insert = true; + break; + } + } + } else { + if(Util::findSubString(ui.getText(sel), filter) != string::npos) + insert = true; + } } return insert; Modified: dcplusplus/trunk/windows/HubFrame.h =================================================================== --- dcplusplus/trunk/windows/HubFrame.h 2006-06-03 13:47:39 UTC (rev 610) +++ dcplusplus/trunk/windows/HubFrame.h 2006-06-03 14:17:47 UTC (rev 611) @@ -178,6 +178,16 @@ COLUMN_LAST }; + enum FilterModes{ + NONE, + EQUAL, + GREATER_EQUAL, + LESS_EQUAL, + GREATER, + LESS, + NOT_EQUAL + }; + struct Task { Task(Speakers speaker_) : speaker(speaker_) { } virtual ~Task() { } @@ -354,8 +364,8 @@ void removeUser(const User::Ptr& aUser); void updateUserList(UserInfo* ui = NULL); - bool parseFilter(int& mode, int64_t& size); - bool matchFilter(const UserInfo& ui, int sel, bool doSizeCompare = false, int mode = 0, int64_t size = 0); + bool parseFilter(FilterModes& mode, int64_t& size); + bool matchFilter(const UserInfo& ui, int sel, bool doSizeCompare = false, FilterModes mode = FilterModes::NONE, int64_t size = 0); UserInfo* findUser(const tstring& nick); void addAsFavorite(); Modified: dcplusplus/trunk/windows/PublicHubsFrm.cpp =================================================================== --- dcplusplus/trunk/windows/PublicHubsFrm.cpp 2006-06-03 13:47:39 UTC (rev 610) +++ dcplusplus/trunk/windows/PublicHubsFrm.cpp 2006-06-03 14:17:47 UTC (rev 611) @@ -126,8 +126,8 @@ for(int j=0; j<COLUMN_LAST; j++) { ctrlFilterSel.AddString(CTSTRING_I(columnNames[j])); } - - ctrlFilterSel.SetCurSel(0); + ctrlFilterSel.AddString(CTSTRING(ANY)); + ctrlFilterSel.SetCurSel(COLUMN_LAST); ctrlFilterDesc.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | BS_GROUPBOX, WS_EX_TRANSPARENT); @@ -383,7 +383,7 @@ ctrlHubs.SetRedraw(FALSE); double size = -1; - int mode = -1; + FilterModes mode = FilterModes::NONE; int sel = ctrlFilterSel.GetCurSel(); @@ -489,31 +489,31 @@ ctrlPubLists.SetCurSel(FavoriteManager::getInstance()->getSelectedHubList()); } -bool PublicHubsFrame::parseFilter(int& mode, double& size) { +bool PublicHubsFrame::parseFilter(FilterModes& mode, double& size) { string::size_type start = (string::size_type)string::npos; string::size_type end = (string::size_type)string::npos; int64_t multiplier = 1; - if(Util::strnicmp(filter.c_str(), ">=", 2) == 0) { - mode = 1; + if(filter.compare(0, 2, ">=") == 0) { + mode = FilterModes::GREATER_EQUAL; start = 2; - } else if(Util::strnicmp(filter.c_str(), "<=", 2) == 0) { - mode = 2; + } else if(filter.compare(0, 2, "<=") == 0) { + mode = FilterModes::LESS_EQUAL; start = 2; - } else if(Util::strnicmp(filter.c_str(), "==", 2) == 0) { - mode = 0; + } else if(filter.compare(0, 2, "==") == 0) { + mode = FilterModes::EQUAL; start = 2; - } else if(Util::strnicmp(filter.c_str(), "!=", 2) == 0) { - mode = 5; + } else if(filter.compare(0, 2, "!=") == 0) { + mode = FilterModes::NOT_EQUAL; start = 2; - } else if(filter[0] == '<') { - mode = 4; + } else if(filter[0] == _T('<')) { + mode = FilterModes::LESS; start = 1; - } else if(filter[0] == '>') { - mode = 3; + } else if(filter[0] == _T('>')) { + mode = FilterModes::GREATER; start = 1; - } else if(filter[0] == '=') { - mode = 1; + } else if(filter[0] == _T('=')) { + mode = FilterModes::EQUAL; start = 1; } @@ -553,15 +553,7 @@ return true; } -bool PublicHubsFrame::matchFilter(const HubEntry& entry, const int& sel, bool doSizeCompare, const int& mode, const double& size) { - //mode - //0 - == - //1 - >= - //2 - <= - //3 - > - //4 - < - //5 - != - +bool PublicHubsFrame::matchFilter(const HubEntry& entry, const int& sel, bool doSizeCompare, const FilterModes& mode, const double& size) { if(filter.empty()) return true; @@ -587,14 +579,23 @@ bool insert = false; if(doSizeCompare) { switch(mode) { - case 0: insert = (size == entrySize); break; - case 1: insert = (size <= entrySize); break; - case 2: insert = (size >= entrySize); break; - case 3: insert = (size < entrySize); break; - case 4: insert = (size > entrySize); break; - case 5: insert = (size != entrySize); break; + case FilterModes::EQUAL: insert = (size == entrySize); break; + case FilterModes::GREATER_EQUAL: insert = (size <= entrySize); break; + case FilterModes::LESS_EQUAL: insert = (size >= entrySize); break; + case FilterModes::GREATER: insert = (size < entrySize); break; + case FilterModes::LESS: insert = (size > entrySize); break; + case FilterModes::NOT_EQUAL: insert = (size != entrySize); break; } } else { + if(sel >= COLUMN_LAST) { + if( Util::findSubString(entry.getName(), filter) != string::npos || + Util::findSubString(entry.getDescription(), filter) != string::npos || + Util::findSubString(entry.getServer(), filter) != string::npos || + Util::findSubString(entry.getCountry(), filter) != string::npos || + Util::findSubString(entry.getRating(), filter) != string::npos ) { + insert = true; + } + } if(Util::findSubString(entryString, filter) != string::npos) insert = true; } Modified: dcplusplus/trunk/windows/PublicHubsFrm.h =================================================================== --- dcplusplus/trunk/windows/PublicHubsFrm.h 2006-06-03 13:47:39 UTC (rev 610) +++ dcplusplus/trunk/windows/PublicHubsFrm.h 2006-06-03 14:17:47 UTC (rev 611) @@ -128,6 +128,16 @@ FAILED }; + enum FilterModes{ + NONE, + EQUAL, + GREATER_EQUAL, + LESS_EQUAL, + GREATER, + LESS, + NOT_EQUAL + }; + int visibleHubs; int users; CStatusBarCtrl ctrlStatus; @@ -163,8 +173,8 @@ void updateList(); void updateDropDown(); - bool parseFilter(int& mode, double& size); - bool matchFilter(const HubEntry& entry, const int& sel, bool doSizeCompare, const int& mode, const double& size); + bool parseFilter(FilterModes& mode, double& size); + bool matchFilter(const HubEntry& entry, const int& sel, bool doSizeCompare, const FilterModes& mode, const double& size); }; #endif // !defined(PUBLIC_HUBS_FRM_H) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |