📄 wndbasematch.cpp
字号:
{
strFile = pHit->m_sName;
}
if ( strFile.IsEmpty() ) return;
CQuerySearch* pSearch = new CQuerySearch();
pSearch->m_sSearch = strFile;
CNewSearchDlg dlg( NULL, pSearch );
if ( dlg.DoModal() != IDOK ) return;
new CSearchWnd( dlg.GetSearch() );
}
void CBaseMatchWnd::OnUpdateSecurityBan(CCmdUI* pCmdUI)
{
CQueryHit* pHit = m_pMatches->GetSelectedHit();
pCmdUI->Enable( pHit != NULL );
}
void CBaseMatchWnd::OnSecurityBan()
{
CSingleLock pLock( &Network.m_pSection, TRUE );
if ( CQueryHit* pHit = m_pMatches->GetSelectedHit() )
{
Security.SessionBan( &pHit->m_pAddress );
}
}
void CBaseMatchWnd::OnUpdateBrowseLaunch(CCmdUI* pCmdUI)
{
CQueryHit* pHit = m_pMatches->GetSelectedHit();
pCmdUI->Enable( pHit != NULL && pHit->m_bBrowseHost );
}
void CBaseMatchWnd::OnBrowseLaunch()
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
if ( CQueryHit* pHit = m_pMatches->GetSelectedHit() )
{
new CBrowseHostWnd( &pHit->m_pAddress, pHit->m_nPort,
pHit->m_bPush == TS_TRUE, &pHit->m_pClientID );
}
}
void CBaseMatchWnd::OnUpdateLibraryBitziWeb(CCmdUI* pCmdUI)
{
if ( m_pMatches->GetSelectedCount() != 1 || Settings.Library.BitziWebView.IsEmpty() )
{
pCmdUI->Enable( FALSE );
}
else if ( CMatchFile* pFile = m_pMatches->GetSelectedFile() )
{
pCmdUI->Enable( pFile->m_bSHA1 );
}
else if ( CQueryHit* pHit = m_pMatches->GetSelectedHit() )
{
pCmdUI->Enable( pHit->m_bSHA1 );
}
}
void CBaseMatchWnd::OnLibraryBitziWeb()
{
if ( ! Settings.Library.BitziOkay )
{
CString strMessage;
Skin.LoadString( strMessage, IDS_LIBRARY_BITZI_MESSAGE );
if ( AfxMessageBox( strMessage, MB_ICONQUESTION|MB_YESNO ) != IDYES ) return;
Settings.Library.BitziOkay = TRUE;
Settings.Save();
}
if ( m_pMatches->GetSelectedCount() != 1 ) return;
CString strSHA1;
if ( CMatchFile* pFile = m_pMatches->GetSelectedFile() )
{
if ( pFile->m_bSHA1 )
strSHA1 = CSHA::HashToString( &pFile->m_pSHA1 );
}
else if ( CQueryHit* pHit = m_pMatches->GetSelectedHit() )
{
if ( pHit->m_bSHA1 )
strSHA1 = CSHA::HashToString( &pHit->m_pSHA1 );
}
if ( strSHA1.IsEmpty() ) return;
CString strURL = Settings.Library.BitziWebView;
Replace( strURL, _T("(SHA1)"), strSHA1 );
ShellExecute( GetSafeHwnd(), _T("open"), strURL, NULL, NULL, SW_SHOWNORMAL );
}
void CBaseMatchWnd::OnUpdateLibraryJigle(CCmdUI* pCmdUI)
{
if ( m_pMatches->GetSelectedCount() != 1 )
{
pCmdUI->Enable( FALSE );
}
else if ( CMatchFile* pFile = m_pMatches->GetSelectedFile() )
{
pCmdUI->Enable( pFile->m_bED2K );
}
else if ( CQueryHit* pHit = m_pMatches->GetSelectedHit() )
{
pCmdUI->Enable( pHit->m_bED2K );
}
}
void CBaseMatchWnd::OnLibraryJigle()
{
if ( m_pMatches->GetSelectedCount() != 1 ) return;
CString strED2K;
if ( CMatchFile* pFile = m_pMatches->GetSelectedFile() )
{
if ( pFile->m_bED2K )
strED2K = CED2K::HashToString( &pFile->m_pED2K );
}
else if ( CQueryHit* pHit = m_pMatches->GetSelectedHit() )
{
if ( pHit->m_bED2K )
strED2K = CED2K::HashToString( &pHit->m_pED2K );
}
if ( strED2K.IsEmpty() ) return;
CString strURL;
strURL.Format( _T("http://jigle.com/search?p=ed2k%%3A%s&v=1"), (LPCTSTR)strED2K );
ShellExecute( GetSafeHwnd(), _T("open"), strURL, NULL, NULL, SW_SHOWNORMAL );
}
void CBaseMatchWnd::OnUpdateSearchForThis(CCmdUI* pCmdUI)
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pCmdUI->Enable( pSearch.CanSearchForThis() );
}
void CBaseMatchWnd::OnSearchForThis()
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pLock.Unlock();
pSearch.RunSearchForThis();
}
void CBaseMatchWnd::OnUpdateSearchForSimilar(CCmdUI* pCmdUI)
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pCmdUI->Enable( pSearch.CanSearchForSimilar() );
}
void CBaseMatchWnd::OnSearchForSimilar()
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pLock.Unlock();
pSearch.RunSearchForSimilar();
}
void CBaseMatchWnd::OnUpdateSearchForArtist(CCmdUI* pCmdUI)
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pCmdUI->Enable( pSearch.CanSearchForArtist() );
}
void CBaseMatchWnd::OnSearchForArtist()
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pLock.Unlock();
pSearch.RunSearchForArtist();
}
void CBaseMatchWnd::OnUpdateSearchForAlbum(CCmdUI* pCmdUI)
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pCmdUI->Enable( pSearch.CanSearchForAlbum() );
}
void CBaseMatchWnd::OnSearchForAlbum()
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pLock.Unlock();
pSearch.RunSearchForAlbum();
}
void CBaseMatchWnd::OnUpdateSearchForSeries(CCmdUI* pCmdUI)
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pCmdUI->Enable( pSearch.CanSearchForSeries() );
}
void CBaseMatchWnd::OnSearchForSeries()
{
CSingleLock pLock( &m_pMatches->m_pSection, TRUE );
CRelatedSearch pSearch( m_pMatches->GetSelectedFile( TRUE ) );
pLock.Unlock();
pSearch.RunSearchForSeries();
}
void CBaseMatchWnd::OnUpdateSearchFilter(CCmdUI* pCmdUI)
{
if ( m_pMatches->m_sFilter.GetLength() )
{
/*
int nAmp = m_pMatches->m_sFilter.Find( '&' );
if ( nAmp >= 0 )
{
CString strFilter = m_pMatches->m_sFilter.Left( nAmp ) + '&' +
m_pMatches->m_sFilter.Mid( nAmp );
pCmdUI->SetText( _T("&Filtered by \"") + strFilter + _T("\"...") );
}
else
{
pCmdUI->SetText( _T("&Filtered by \"") + m_pMatches->m_sFilter + _T("\"...") );
}
*/
pCmdUI->SetCheck( TRUE );
}
else
{
// pCmdUI->SetText( _T("&Filter Results...") );
pCmdUI->SetCheck( FALSE );
}
}
void CBaseMatchWnd::OnSearchFilter()
{
CFilterSearchDlg dlg( NULL, m_pMatches );
if ( dlg.DoModal() == IDOK )
{
CWaitCursor pCursor;
m_pMatches->Filter();
m_bUpdate = TRUE;
PostMessage( WM_TIMER, 2 );
}
}
void CBaseMatchWnd::OnSearchFilterRaw()
{
OnSearchFilter();
}
void CBaseMatchWnd::OnUpdateSearchFilterRemove(CCmdUI* pCmdUI)
{
pCmdUI->Enable( m_pMatches->m_sFilter.GetLength() );
}
void CBaseMatchWnd::OnSearchFilterRemove()
{
CWaitCursor pCursor;
m_pMatches->m_sFilter.Empty();
m_pMatches->Filter();
m_bUpdate = TRUE;
PostMessage( WM_TIMER, 2 );
}
void CBaseMatchWnd::OnKillFocusFilter()
{
CString strFilter;
m_wndFilter.GetWindowText( strFilter );
if ( strFilter != m_pMatches->m_sFilter )
{
CWaitCursor pCursor;
m_pMatches->m_sFilter = strFilter;
m_pMatches->Filter();
m_bUpdate = TRUE;
PostMessage( WM_TIMER, 2 );
}
}
void CBaseMatchWnd::OnToolbarReturn()
{
if ( GetFocus() == &m_wndFilter ) OnKillFocusFilter();
}
void CBaseMatchWnd::OnToolbarEscape()
{
if ( GetFocus() == &m_wndFilter )
{
m_wndFilter.SetWindowText( m_pMatches->m_sFilter );
m_wndList.SetFocus();
}
}
void CBaseMatchWnd::OnSearchColumns()
{
CSchemaColumnsDlg dlg;
dlg.m_pSchema = m_wndList.m_pSchema;
dlg.m_pColumns.AddTail( &m_wndList.m_pColumns );
if ( dlg.DoModal() == IDOK )
{
m_wndList.SelectSchema( dlg.m_pSchema, &dlg.m_pColumns );
}
}
BOOL CBaseMatchWnd::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
m_wndList.PostMessage( WM_MOUSEWHEEL, MAKELONG( nFlags, zDelta ), MAKELONG( pt.x, pt.y ) );
return TRUE;
}
void CBaseMatchWnd::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd)
{
if ( m_bPanelMode && bActivate )
{
CRect rcParent, rcChild;
GetWindowRect( &rcChild );
GetParent()->GetClientRect( &rcParent );
if ( rcParent.Width() != rcChild.Width() || rcParent.Height() != rcChild.Height() )
{
SetWindowPos( NULL, 0, 0, rcParent.Width(), rcParent.Height(), SWP_FRAMECHANGED );
RedrawWindow( NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE | RDW_FRAME );
}
}
else if ( ! bActivate )
{
m_bBMWActive = FALSE;
m_pMatches->ClearNew();
m_wndList.Invalidate();
}
m_wndList.EnableTips( bActivate );
CPanelWnd::OnMDIActivate( bActivate, pActivateWnd, pDeactivateWnd );
}
void CBaseMatchWnd::OnTimer(UINT nIDEvent)
{
if ( m_wndFilter.m_hWnd == NULL ) return;
DWORD nNow = GetTickCount();
if ( nIDEvent == 1 )
{
if ( GetFocus() != &m_wndFilter )
{
CString strFilter;
m_wndFilter.GetWindowText( strFilter );
if ( strFilter != m_pMatches->m_sFilter )
{
m_wndFilter.SetWindowText( m_pMatches->m_sFilter );
}
}
BOOL bActive = ( GetMDIFrame()->MDIGetActive() == this );
if ( bActive )
{
if ( HWND hFore = ::GetForegroundWindow() )
{
DWORD nProcessID;
GetWindowThreadProcessId( hFore, &nProcessID );
bActive &= ( nProcessID == GetCurrentProcessId() );
}
}
if ( m_bBMWActive != bActive )
{
m_bBMWActive = bActive;
if ( ! m_bBMWActive )
{
m_pMatches->ClearNew();
m_wndList.Invalidate();
}
}
if ( m_pMatches->m_nFilteredFiles == 0 ) UpdateMessages( FALSE );
}
else if ( ( nIDEvent == 2 && m_bUpdate ) || nIDEvent == 7 )
{
CSingleLock pLock( &m_pMatches->m_pSection );
if ( pLock.Lock( 50 ) )
{
m_bUpdate = FALSE;
m_wndList.Update();
UpdateMessages();
if ( m_pMatches->m_nFilteredFiles != m_nCacheFiles )
{
m_nCacheFiles = m_pMatches->m_nFilteredFiles;
SetAlert();
}
}
else
{
m_bUpdate = TRUE;
PostMessage( WM_TIMER, 2 );
}
}
}
void CBaseMatchWnd::UpdateMessages(BOOL bActive)
{
}
/////////////////////////////////////////////////////////////////////////////
// CBaseMatchWnd generic view
HRESULT CBaseMatchWnd::GetGenericView(IGenericView** ppView)
{
if ( m_pMatches == NULL ) return S_FALSE;
CRuntimeClass* pClass = GetRuntimeClass();
*ppView = CMatchListView::Attach( CString( pClass->m_lpszClassName ), m_pMatches );
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -