📄 searchfrm.cpp
字号:
}
StringList* l = new StringList();
l->push_back(aResult->getUser()->getNick());
l->push_back(file);
if(aResult->getType() == SearchResult::TYPE_FILE) {
int i = file.rfind('.');
if(i != string::npos) {
l->push_back(file.substr(i + 1));
} else {
l->push_back(Util::emptyString);
}
l->push_back(Util::formatBytes(aResult->getSize()));
} else {
l->push_back(STRING(DIRECTORY));
l->push_back(Util::emptyString);
}
l->push_back(path);
l->push_back(aResult->getSlotString());
if(aResult->getUser()) {
l->push_back(aResult->getUser()->getConnection());
} else {
l->push_back(Util::emptyString);
}
l->push_back(aResult->getHubName());
l->push_back((aResult->getType() == SearchResult::TYPE_FILE) ? Util::toString(aResult->getSize()) : Util::emptyString);
PostMessage(WM_SPEAKER, (WPARAM)l, (LPARAM)copy);
}
LRESULT SearchFrame::onKick(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
LineDlg dlg;
dlg.title = STRING(KICK_USER);
dlg.description = STRING(ENTER_REASON);
dlg.line = WinUtil::lastKick;
if(dlg.DoModal() == IDOK) {
WinUtil::lastKick = dlg.line;
int i = -1;
User::List kicked;
kicked.reserve(ctrlResults.GetSelectedCount());
while( (i = ctrlResults.GetNextItem(i, LVNI_SELECTED)) != -1) {
SearchResult* sr = (SearchResult*)ctrlResults.GetItemData(i);
if(find(kicked.begin(), kicked.end(), sr->getUser()) != kicked.end()) {
continue;
}
kicked.push_back(sr->getUser());
if(sr->getUser() && sr->getUser()->isOnline()) {
sr->getUser()->kick(dlg.line);
}
}
}
return 0;
};
LRESULT SearchFrame::onRedirect(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
LineDlg dlg1, dlg2;
dlg1.title = STRING(REDIRECT_USER);
dlg1.description = STRING(ENTER_REASON);
dlg1.line = WinUtil::lastRedirect;
if(dlg1.DoModal() == IDOK) {
dlg2.title = STRING(REDIRECT_USER);
dlg2.description = STRING(ENTER_SERVER);
dlg2.line = WinUtil::lastServer;
if(dlg2.DoModal() == IDOK) {
WinUtil::lastRedirect = dlg1.line;
WinUtil::lastServer = dlg2.line;
int i = -1;
User::List kicked;
kicked.reserve(ctrlResults.GetSelectedCount());
while( (i = ctrlResults.GetNextItem(i, LVNI_SELECTED)) != -1) {
SearchResult* sr = (SearchResult*)ctrlResults.GetItemData(i);
if(find(kicked.begin(), kicked.end(), sr->getUser()) != kicked.end()) {
continue;
}
kicked.push_back(sr->getUser());
if(sr->getUser() && sr->getUser()->isOnline()) {
sr->getUser()->redirect(dlg2.line, STRING(YOU_ARE_BEING_REDIRECTED) + dlg2.line + ": " + dlg1.line);
}
}
}
}
return 0;
};
LRESULT SearchFrame::onGetList(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
int i=-1;
while( (i = ctrlResults.GetNextItem(i, LVNI_SELECTED)) != -1) {
SearchResult* sr = (SearchResult*)ctrlResults.GetItemData(i);
try {
QueueManager::getInstance()->addList(sr->getUser());
} catch(...) {
// ...
}
}
return 0;
}
LRESULT SearchFrame::onDoubleClickResults(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/) {
NMITEMACTIVATE* item = (NMITEMACTIVATE*)pnmh;
if(item->iItem != -1) {
SearchResult* sr = (SearchResult*)ctrlResults.GetItemData(item->iItem);
try {
if(sr->getType() == SearchResult::TYPE_FILE) {
QueueManager::getInstance()->add(sr->getFile(), sr->getSize(), sr->getUser(), SETTING(DOWNLOAD_DIRECTORY) + sr->getFileName());
} else {
dcassert(sr->getType() == SearchResult::TYPE_DIRECTORY);
QueueManager::getInstance()->addDirectory(sr->getFile(), sr->getUser(), SETTING(DOWNLOAD_DIRECTORY) + Util::getLastDir(sr->getFile()));
}
} catch(const Exception& e) {
ctrlStatus.SetText(1, e.getError().c_str());
}
}
return 0;
}
void SearchFrame::downloadSelected(const string& aDir) {
int i=-1;
while( (i = ctrlResults.GetNextItem(i, LVNI_SELECTED)) != -1) {
SearchResult* sr = (SearchResult*)ctrlResults.GetItemData(i);
try {
if(sr->getType() == SearchResult::TYPE_FILE) {
QueueManager::getInstance()->add(sr->getFile(), sr->getSize(), sr->getUser(), aDir + sr->getFileName());
} else {
dcassert(sr->getType() == SearchResult::TYPE_DIRECTORY);
QueueManager::getInstance()->addDirectory(sr->getFile(), sr->getUser(), aDir);
}
} catch(const Exception& e) {
ctrlStatus.SetText(1, e.getError().c_str());
}
}
}
void SearchFrame::downloadWholeSelected(const string& aDir) {
int i=-1;
while( (i = ctrlResults.GetNextItem(i, LVNI_SELECTED)) != -1) {
SearchResult* sr = (SearchResult*)ctrlResults.GetItemData(i);
try {
if(sr->getType() == SearchResult::TYPE_FILE) {
QueueManager::getInstance()->addDirectory(Util::getFilePath(sr->getFile()), sr->getUser(), aDir);
} else {
QueueManager::getInstance()->addDirectory(sr->getFile(), sr->getUser(), aDir);
}
} catch(const Exception& e) {
ctrlStatus.SetText(1, e.getError().c_str());
}
}
}
LRESULT SearchFrame::onPrivateMessage(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
int i=-1;
while( (i = ctrlResults.GetNextItem(i, LVNI_SELECTED)) != -1) {
SearchResult* sr = (SearchResult*)ctrlResults.GetItemData(i);
PrivateFrame::openWindow(sr->getUser(), m_hWndMDIClient, getTab());
}
return 0;
}
LRESULT SearchFrame::onClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
if(!closed) {
SearchManager::getInstance()->removeListener(this);
closed = true;
PostMessage(WM_CLOSE);
return 0;
} else {
for(int i = 0; i < ctrlResults.GetItemCount(); i++) {
delete (SearchResult*)ctrlResults.GetItemData(i);
}
WinUtil::saveHeaderOrder(ctrlResults, SettingsManager::SEARCHFRAME_ORDER,
SettingsManager::SEARCHFRAME_WIDTHS, COLUMN_LAST, columnIndexes, columnSizes);
MDIDestroy(m_hWnd);
return 0;
}
}
void SearchFrame::UpdateLayout(BOOL bResizeBars)
{
RECT rect;
GetClientRect(&rect);
// position bars and offset their dimensions
UpdateBarsPosition(rect, bResizeBars);
if(ctrlStatus.IsWindow()) {
CRect sr;
int w[4];
ctrlStatus.GetClientRect(sr);
int tmp = (sr.Width()) > 316 ? 216 : ((sr.Width() > 116) ? sr.Width()-100 : 16);
w[0] = 15;
w[1] = sr.right - tmp;
w[2] = w[1] + (tmp-16)/2;
w[3] = w[1] + (tmp-16);
ctrlStatus.SetParts(4, w);
// Layout showUI button in statusbar part #0
ctrlStatus.GetRect(0, sr);
ctrlShowUI.MoveWindow(sr);
}
if(showUI)
{
int const width = 220, spacing = 50, labelH = 16, comboH = 140, lMargin = 2, rMargin = 4;
CRect rc = rect;
rc.left += width;
ctrlResults.MoveWindow(rc);
// "Search for"
rc.right = width - rMargin;
rc.left = lMargin;
rc.top += 25;
rc.bottom = rc.top + comboH + 21;
ctrlSearchBox.MoveWindow(rc);
searchLabel.MoveWindow(rc.left + lMargin, rc.top - labelH, width - rMargin, labelH-1);
// "Size"
int w2 = width - rMargin - lMargin;
rc.top += spacing;
rc.bottom += spacing;
rc.right = w2/3;
ctrlMode.MoveWindow(rc);
sizeLabel.MoveWindow(rc.left + lMargin, rc.top - labelH, width - rMargin, labelH-1);
rc.left = rc.right + lMargin;
rc.right += w2/3;
rc.bottom -= comboH;
ctrlSize.MoveWindow(rc);
rc.left = rc.right + lMargin;
rc.right = width - rMargin;
rc.bottom += comboH;
ctrlSizeMode.MoveWindow(rc);
rc.bottom -= comboH;
// "File type"
rc.left = lMargin;
rc.right = width - rMargin;
rc.top += spacing;
rc.bottom = rc.top + comboH + 21;
ctrlFiletype.MoveWindow(rc);
rc.bottom -= comboH;
typeLabel.MoveWindow(rc.left + lMargin, rc.top - labelH, width - rMargin, labelH-1);
// "Search options"
rc.left = lMargin;
rc.right = width - rMargin;
rc.top += spacing;
rc.bottom += spacing;
ctrlSlots.MoveWindow(rc);
optionLabel.MoveWindow(rc.left + lMargin, rc.top - labelH, width - rMargin, labelH-1);
// "Search"
rc.right = width - rMargin;
rc.left = rc.right - 100;
rc.top += spacing/2;
rc.bottom += spacing/2;
ctrlDoSearch.MoveWindow(rc);
}
else
{
CRect rc = rect;
ctrlResults.MoveWindow(rc);
rc.SetRect(0,0,0,0);
ctrlSearchBox.MoveWindow(rc);
ctrlMode.MoveWindow(rc);
ctrlSize.MoveWindow(rc);
ctrlSizeMode.MoveWindow(rc);
ctrlFiletype.MoveWindow(rc);
}
POINT pt;
pt.x = 10;
pt.y = 10;
HWND hWnd = ctrlSearchBox.ChildWindowFromPoint(pt);
if(hWnd != NULL && !ctrlSearch.IsWindow() && hWnd != ctrlSearchBox.m_hWnd) {
ctrlSearch.Attach(hWnd);
searchContainer.SubclassWindow(ctrlSearch.m_hWnd);
}
}
LRESULT SearchFrame::onUserCommand(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
dcassert(wID >= IDC_USER_COMMAND);
size_t n = (size_t)wID - IDC_USER_COMMAND;
UserCommand::List& ul = HubManager::getInstance()->getUserCommands();
dcassert(n < ul.size());
UserCommand& uc = ul[n];
if(!WinUtil::getUCParams(m_hWnd, uc, ucParams))
return 0;
int sel = -1;
while((sel = ctrlResults.GetNextItem(sel, LVNI_SELECTED)) != -1) {
SearchResult* sr = (SearchResult*) ctrlResults.GetItemData(sel);
ucParams["nick"] = sr->getUser()->getNick();
ucParams["mynick"] = sr->getUser()->getClientNick();
ucParams["file"] = sr->getFile();
if(uc.getNick().empty()) {
sr->getUser()->clientMessage(Util::formatParams(uc.getCommand(), ucParams));
} else {
sr->getUser()->clientPM(Util::formatParams(uc.getNick(), ucParams), Util::formatParams(uc.getCommand(), ucParams));
}
}
return 0;
};
LRESULT SearchFrame::onAddToFavorites(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) {
int i=-1;
while( (i = ctrlResults.GetNextItem(i, LVNI_SELECTED)) != -1) {
HubManager::getInstance()->addFavoriteUser(((SearchResult*)ctrlResults.GetItemData(i))->getUser());
}
return 0;
}
LRESULT SearchFrame::onCtlColor(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/) {
HWND hWnd = (HWND)lParam;
HDC hDC = (HDC)wParam;
if(hWnd == searchLabel.m_hWnd || hWnd == sizeLabel.m_hWnd || hWnd == optionLabel.m_hWnd || hWnd == typeLabel.m_hWnd
|| hWnd == ctrlSlots.m_hWnd) {
::SetBkColor(hDC, ::GetSysColor(COLOR_3DFACE));
::SetTextColor(hDC, ::GetSysColor(COLOR_BTNTEXT));
return (LRESULT)::GetSysColorBrush(COLOR_3DFACE);
} else {
::SetBkColor(hDC, WinUtil::bgColor);
::SetTextColor(hDC, WinUtil::textColor);
return (LRESULT)WinUtil::bgBrush;
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -