⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrllibraryframe.cpp

📁 著名的下载软件核心Shareaza
💻 CPP
📖 第 1 页 / 共 3 页
字号:
void CLibraryFrame::UpdatePanel(BOOL bForce)
{
	if ( ! bForce && ! m_bViewSelection ) return;
	m_bViewSelection = FALSE;

	m_pViewSelection			= m_pView ? &m_pView->m_pSelection : &m_pViewEmpty;
	CLibraryPanel* pFirstPanel	= NULL;
	
	for ( POSITION pos = m_pPanels.GetHeadPosition() ; pos ; )
	{
		CLibraryPanel* pPanel = (CLibraryPanel*)m_pPanels.GetNext( pos );

		if ( pPanel->CheckAvailable( m_pFolderSelection, m_pViewSelection )
			&& pFirstPanel == NULL ) pFirstPanel = pPanel;
	}

	if ( m_bPanelShow )
	{
		if ( m_pPanel == NULL || m_pPanel->m_bAvailable == FALSE )
		{
			SetPanel( pFirstPanel );
		}
		else
		{
			SetPanel( m_pPanel );
		}
	}
}

BOOL CLibraryFrame::Display(CLibraryFolder* pFolder)
{
	if ( Settings.Library.ShowVirtual != FALSE ) OnLibraryTreePhysical();
	return m_wndTree.SelectFolder( pFolder );
}

BOOL CLibraryFrame::Display(CAlbumFolder* pFolder)
{
	if ( Settings.Library.ShowVirtual != TRUE ) OnLibraryTreeVirtual();
	return m_wndTree.SelectFolder( pFolder );
}

BOOL CLibraryFrame::Display(CLibraryFile* pFile)
{
	if ( Settings.Library.ShowVirtual )
	{
		if ( CAlbumFolder* pFolder = Library.GetAlbumRoot()->FindFile( pFile ) )
		{
			Display( pFolder );
		}
		else
		{
			Display( pFile->m_pFolder );
		}
	}
	else
	{
		Settings.Library.FilterURI.Empty();
		Display( pFile->m_pFolder );
	}
	
	return Select( pFile->m_nIndex );
}

BOOL CLibraryFrame::Select(DWORD nObject)
{
	if ( m_pView == NULL ) return FALSE;
	return m_pView->Select( nObject );
}

/////////////////////////////////////////////////////////////////////////////
// CLibraryFrame selection events

CLibraryTreeItem* CLibraryFrame::GetFolderSelection() const
{
	return m_pFolderSelection;
}

CLibraryList* CLibraryFrame::GetViewSelection() const
{
	return m_pViewSelection;
}

void CLibraryFrame::OnTreeSelection(NMHDR* pNotify, LRESULT* pResult)
{
	if ( ! m_bUpdating ) Update( TRUE, TRUE );
	*pResult = 0;
}

void CLibraryFrame::OnViewSelection()
{
	if ( m_bUpdating ) return;
	m_bViewSelection = TRUE;
	PostMessage( WM_TIMER, 1 );
}

void CLibraryFrame::OnTimer(UINT nIDEvent) 
{
	if ( m_bViewSelection ) UpdatePanel( FALSE );
}

void CLibraryFrame::OnFilterTypes()
{
	if ( CSchema* pSchema = m_wndTreeTypes.GetSelected() )
	{
		Settings.Library.FilterURI = pSchema->m_sURI;
	}
	else
	{
		Settings.Library.FilterURI.Empty();
	}
	
	Update();
}

/////////////////////////////////////////////////////////////////////////////
// CLibraryFrame drag & drop

void CLibraryFrame::DragObjects(CLibraryList* pList, CImageList* pImage, const CPoint& ptMouse)
{
	ASSERT( m_pDragList == NULL );

	m_pDragList		= pList;
	m_pDragImage	= pImage;

	CPoint ptStart( ptMouse );
	ScreenToClient( &ptStart );

	CRect rcClient;
	GetClientRect( &rcClient );
	ClientToScreen( &rcClient );
	
	ClipCursor( &rcClient );
	SetCapture();

	SetFocus();
	UpdateWindow();

	OnSetCursor( NULL, 0, 0 );

	m_pDragImage->DragEnter( this, ptStart );
}

void CLibraryFrame::CancelDrag()
{
	if ( m_pDragList == NULL ) return;
	
	ClipCursor( NULL );
	ReleaseCapture();
	
	m_pDragImage->DragLeave( this );
	m_pDragImage->EndDrag();
	delete m_pDragImage;
	m_pDragImage = NULL;
	
	delete m_pDragList;
	m_pDragList = NULL;
	
	m_wndTree.DropObjects( NULL, FALSE );
}

void CLibraryFrame::OnMouseMove(UINT nFlags, CPoint point) 
{
	if ( m_pDragList == NULL ) return;

	m_pDragImage->DragMove( point );
	
	ClientToScreen( &point );
	m_wndTree.DropShowTarget( m_pDragList, point );
}

void CLibraryFrame::OnLButtonUp(UINT nFlags, CPoint point) 
{
	if ( m_pDragList == NULL ) return;
	
	ClipCursor( NULL );
	ReleaseCapture();
	
	m_pDragImage->DragLeave( this );
	m_pDragImage->EndDrag();
	delete m_pDragImage;
	m_pDragImage = NULL;
	
	ClientToScreen( &point );
	
	BOOL bCopy = FALSE;
	
	if ( Settings.Library.ShowVirtual )
	{
		bCopy = ( nFlags & MK_SHIFT ) == 0;
	}
	else
	{
		bCopy = ( nFlags & MK_CONTROL ) != 0;
	}
	
	Library.Lock();
	m_wndTree.DropObjects( m_pDragList, bCopy );
	Library.Unlock( TRUE );
	
	delete m_pDragList;
	m_pDragList = NULL;
}

void CLibraryFrame::OnRButtonDown(UINT nFlags, CPoint point) 
{
	if ( m_pDragList != NULL )
	{
		CancelDrag();
		return;
	}
	
	CWnd::OnRButtonDown( nFlags, point );
}

void CLibraryFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if ( nChar == VK_ESCAPE ) CancelDrag();
	if ( m_pDragList ) OnSetCursor( NULL, 0, 0 );
	CWnd::OnKeyDown( nChar, nRepCnt, nFlags );
}

void CLibraryFrame::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	if ( m_pDragList ) OnSetCursor( NULL, 0, 0 );
	CWnd::OnKeyUp( nChar, nRepCnt, nFlags );
}

/////////////////////////////////////////////////////////////////////////////
// CLibraryFrame command handlers

void CLibraryFrame::OnUpdateLibraryTreePhysical(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( Settings.Library.ShowVirtual == FALSE );
}

void CLibraryFrame::OnLibraryTreePhysical() 
{
	if ( Settings.Library.ShowVirtual != FALSE )
	{
		Settings.Library.ShowVirtual = FALSE;
		OnSkinChange();
		m_wndTreeBottom.Invalidate();
	}
}

void CLibraryFrame::OnUpdateLibraryTreeVirtual(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( Settings.Library.ShowVirtual == TRUE );
}

void CLibraryFrame::OnLibraryTreeVirtual() 
{
	if ( Settings.Library.ShowVirtual != TRUE )
	{
		Settings.Library.ShowVirtual = TRUE;
		OnSkinChange();
		m_wndTreeBottom.Invalidate();
	}
}

void CLibraryFrame::OnLibraryRefresh() 
{
	CWaitCursor pCursor;
	Update( TRUE );	
}

void CLibraryFrame::OnUpdateLibraryPanel(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck( m_pPanel != NULL );
}

void CLibraryFrame::OnLibraryPanel() 
{
	if ( m_pPanel )
	{
		m_bPanelShow = FALSE;
		SetPanel( NULL );
	}
	else
	{
		m_bPanelShow = TRUE;
		Update( TRUE );
	}
}

void CLibraryFrame::OnLibrarySearch() 
{
	CNewSearchDlg dlg( NULL, NULL, TRUE );
	
	if ( dlg.DoModal() == IDOK )
	{
		RunLocalSearch( dlg.GetSearch() );
	}
}

void CLibraryFrame::OnLibrarySearchQuick() 
{
	CString str;
	m_wndSearch.GetWindowText( str );
	
	if ( str.GetLength() > 0 )
	{
		CQuerySearch* pSearch = new CQuerySearch();
		pSearch->m_sSearch = str;
		RunLocalSearch( pSearch );
		m_wndSearch.SetWindowText( _T("") );
	}
	else
	{
		OnLibrarySearch();
	}
}

void CLibraryFrame::OnToolbarReturn()
{
	if ( GetFocus() == &m_wndSearch )
	{
		if ( m_wndSearch.GetWindowTextLength() > 0 )
			OnLibrarySearchQuick();
		else if ( m_pView != NULL )
			m_pView->SetFocus();
	}
}

void CLibraryFrame::OnToolbarEscape()
{
	if ( GetFocus() == &m_wndSearch )
	{
		m_wndSearch.SetWindowText( _T("") );
		if ( m_pView != NULL ) m_pView->SetFocus();
	}
}

void CLibraryFrame::RunLocalSearch(CQuerySearch* pSearch)
{
	CWaitCursor pCursor;
	
	pSearch->BuildWordList();
	
	CAlbumFolder* pRoot		= Library.GetAlbumRoot();
	CAlbumFolder* pFolder	= pRoot->GetFolder( _T("Search Results") );
	
	if ( pFolder == NULL )
		pFolder = pRoot->AddFolder( CSchema::uriSearchFolder, _T("Search Results") );
	else
		pFolder->Clear();
	
	if ( pFolder->m_pSchema != NULL )
	{
		CString strDate, strTime;
		SYSTEMTIME pTime;
		
		GetLocalTime( &pTime );
		GetDateFormat( LOCALE_USER_DEFAULT, 0, &pTime, _T("yyyy-MM-dd"), strDate.GetBuffer( 64 ), 64 );
		GetTimeFormat( LOCALE_USER_DEFAULT, 0, &pTime, _T("hh:mm tt"), strTime.GetBuffer( 64 ), 64 );
		strDate.ReleaseBuffer(); strTime.ReleaseBuffer();
		
		CXMLElement* pOuter = pFolder->m_pSchema->Instantiate();
		CXMLElement* pInner = pOuter->AddElement( _T("searchFolder") );
		pInner->AddAttribute( _T("title"), _T("Search Results") );
		pInner->AddAttribute( _T("content"), pSearch->m_sSearch );
		pInner->AddAttribute( _T("date"), strDate );
		pInner->AddAttribute( _T("time"), strTime );
		pFolder->SetMetadata( pOuter );
		delete pOuter;
	}
	
	CPtrList* pFiles = Library.Search( pSearch, 0, TRUE );
	
	if ( pFiles != NULL )
	{
		for ( POSITION pos = pFiles->GetHeadPosition() ; pos ; )
		{
			CLibraryFile* pFile = (CLibraryFile*)pFiles->GetNext( pos );
			
			if ( Settings.Search.SchemaTypes && pSearch->m_pSchema != NULL )
			{
				if ( pSearch->m_pSchema->FilterType( pFile->m_sName, TRUE ) == FALSE )
					pFile = NULL;
			}
			
			if ( pFile != NULL && pFile->IsAvailable() ) pFolder->AddFile( pFile );
		}
		
		delete pFiles;
		Library.Unlock();
	}
	
	delete pSearch;
	
	Update();
	Display( pFolder );
}

void CLibraryFrame::OnSetFocus(CWnd* pOldWnd)
{
	CWnd::OnSetFocus( pOldWnd );
	if ( m_pView != NULL && IsWindow( m_pView->m_hWnd ) && m_pView->IsWindowVisible() )
		m_pView->SetFocus();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -