📄 searchfrm.h
字号:
private:
class SearchInfo;
public:
TypedListViewCtrl<SearchInfo, IDC_RESULTS>& getUserList() { return ctrlResults; }
private:
enum {
COLUMN_FIRST,
COLUMN_FILENAME = COLUMN_FIRST,
COLUMN_NICK,
COLUMN_TYPE,
COLUMN_SIZE,
COLUMN_PATH,
COLUMN_SLOTS,
COLUMN_CONNECTION,
COLUMN_HUB,
COLUMN_EXACT_SIZE,
COLUMN_IP,
COLUMN_TTH,
COLUMN_CID,
COLUMN_LAST
};
class SearchInfo : public UserInfoBase {
public:
SearchInfo(SearchResult* aSR) : UserInfoBase(aSR->getUser()), sr(aSR) {
sr->incRef(); update();
}
~SearchInfo() {
sr->decRef();
}
void getList();
void browseList();
void view();
struct Download {
Download(const tstring& aTarget) : tgt(aTarget) { }
void operator()(SearchInfo* si);
const tstring& tgt;
};
struct DownloadWhole {
DownloadWhole(const tstring& aTarget) : tgt(aTarget) { }
void operator()(SearchInfo* si);
const tstring& tgt;
};
struct DownloadTarget {
DownloadTarget(const tstring& aTarget) : tgt(aTarget) { }
void operator()(SearchInfo* si);
const tstring& tgt;
};
struct CheckSize {
CheckSize() : size(-1), op(true), firstHubs(true), hasTTH(false), firstTTH(true) { }
void operator()(SearchInfo* si);
tstring ext;
int64_t size;
bool firstHubs;
StringList hubs;
bool op;
bool hasTTH;
bool firstTTH;
tstring tth;
};
const tstring& getText(int col) const { return columns[col]; }
static int compareItems(SearchInfo* a, SearchInfo* b, int col) {
switch(col) {
case COLUMN_TYPE:
if(a->sr->getType() == b->sr->getType())
return lstrcmpi(a->columns[COLUMN_TYPE].c_str(), b->columns[COLUMN_TYPE].c_str());
else
return(a->sr->getType() == SearchResult::TYPE_DIRECTORY) ? -1 : 1;
case COLUMN_SLOTS:
if(a->sr->getFreeSlots() == b->sr->getFreeSlots())
return compare(a->sr->getSlots(), b->sr->getSlots());
else
return compare(a->sr->getFreeSlots(), b->sr->getFreeSlots());
case COLUMN_SIZE:
case COLUMN_EXACT_SIZE: return compare(a->sr->getSize(), b->sr->getSize());
default: return lstrcmpi(a->getText(col).c_str(), b->getText(col).c_str());
}
}
void update();
SearchResult* sr;
tstring columns[COLUMN_LAST];
};
struct HubInfo : public FastAlloc<HubInfo> {
HubInfo(const tstring& aUrl, const tstring& aName, bool aOp) : url(aUrl),
name(aName), op(aOp) { }
const tstring& getText(int col) const {
return (col == 0) ? name : Util::emptyStringT;
}
static int compareItems(HubInfo* a, HubInfo* b, int col) {
return (col == 0) ? lstrcmpi(a->name.c_str(), b->name.c_str()) : 0;
}
tstring url;
tstring name;
bool op;
};
// WM_SPEAKER
enum Speakers {
ADD_RESULT,
FILTER_RESULT,
HUB_ADDED,
HUB_CHANGED,
HUB_REMOVED,
};
tstring initialString;
int64_t initialSize;
SearchManager::SizeModes initialMode;
SearchManager::TypeModes initialType;
CStatusBarCtrl ctrlStatus;
CEdit ctrlSearch;
CComboBox ctrlSearchBox;
CEdit ctrlSize;
CComboBox ctrlMode;
CComboBox ctrlSizeMode;
CComboBox ctrlFiletype;
CButton ctrlDoSearch;
CButton ctrlPurge;
CContainedWindow searchContainer;
CContainedWindow searchBoxContainer;
CContainedWindow sizeContainer;
CContainedWindow modeContainer;
CContainedWindow sizeModeContainer;
CContainedWindow fileTypeContainer;
CContainedWindow slotsContainer;
CContainedWindow showUIContainer;
CContainedWindow doSearchContainer;
CContainedWindow resultsContainer;
CContainedWindow hubsContainer;
CContainedWindow tthContainer;
CContainedWindow purgeContainer;
CStatic searchLabel, sizeLabel, optionLabel, typeLabel, hubsLabel;
CButton ctrlSlots, ctrlShowUI, ctrlTTH;
bool showUI;
TypedListViewCtrl<SearchInfo, IDC_RESULTS> ctrlResults;
TypedListViewCtrl<HubInfo, IDC_HUB> ctrlHubs;
CMenu resultsMenu;
CMenu targetMenu;
CMenu targetDirMenu;
TStringList search;
StringList targets;
StringList wholeTargets;
bool onlyFree;
bool isHash;
bool onlyTTH;
CriticalSection cs;
static TStringList lastSearches;
size_t droppedResults;
bool closed;
StringMap ucLineParams;
static int columnIndexes[];
static int columnSizes[];
// Timer ID, needed to turn off timer
UINT timerID;
typedef map<HWND, SearchFrame*> FrameMap;
typedef FrameMap::iterator FrameIter;
typedef pair<HWND, SearchFrame*> FramePair;
static FrameMap frames;
void downloadSelected(const tstring& aDir, bool view = false);
void downloadWholeSelected(const tstring& aDir);
void onEnter();
void onTab(bool shift);
void download(SearchResult* aSR, const tstring& aDir, bool view);
virtual void on(SearchManagerListener::SR, SearchResult* aResult) throw();
// ClientManagerListener
virtual void on(ClientConnected, Client* c) throw() { speak(HUB_ADDED, c); }
virtual void on(ClientUpdated, Client* c) throw() { speak(HUB_CHANGED, c); }
virtual void on(ClientDisconnected, Client* c) throw() { speak(HUB_REMOVED, c); }
void initHubs();
void onHubAdded(HubInfo* info);
void onHubChanged(HubInfo* info);
void onHubRemoved(HubInfo* info);
LRESULT onItemChangedHub(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
void speak(Speakers s, Client* aClient) {
HubInfo* hubInfo = new HubInfo(Text::toT(aClient->getHubUrl()), Text::toT(aClient->getHubName()), aClient->getMyIdentity().isOp());
PostMessage(WM_SPEAKER, WPARAM(s), LPARAM(hubInfo));
}
};
#endif // !defined(SEARCH_FRM_H)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -