www.pudn.com > source.rar > BrowserFrame.cpp


// MainFrm.cpp : implementation of the CBrowserFrame class 
// 
 
#include "stdafx.h" 
#include "FlashNow.h" 
#include "LogoBar.h" 
#include "BrowserFrame.h" 
#include "ViewerFrame.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CBrowserFrame 
 
IMPLEMENT_DYNAMIC(CBrowserFrame, CFrameWnd) 
 
BEGIN_MESSAGE_MAP(CBrowserFrame, CFrameWnd) 
//{{AFX_MSG_MAP(CBrowserFrame) 
ON_WM_CREATE() 
ON_COMMAND(ID_VIEW_DETAILS, OnViewDetails) 
ON_UPDATE_COMMAND_UI(ID_VIEW_DETAILS, OnUpdateViewDetails) 
ON_COMMAND(ID_VIEW_LIST, OnViewList) 
ON_UPDATE_COMMAND_UI(ID_VIEW_LIST, OnUpdateViewList) 
ON_WM_CLOSE() 
ON_COMMAND(ID_VIEW_HIDDEN_FILES, OnViewHiddenFiles) 
ON_UPDATE_COMMAND_UI(ID_VIEW_HIDDEN_FILES, OnUpdateViewHiddenFiles) 
ON_COMMAND(ID_VIEW_NEXT, OnViewNext) 
ON_COMMAND(ID_VIEW_BACK, OnViewBack) 
ON_UPDATE_COMMAND_UI(ID_VIEW_NEXT, OnUpdateViewNext) 
ON_UPDATE_COMMAND_UI(ID_VIEW_BACK, OnUpdateViewBack) 
ON_COMMAND(ID_FILE_UP, OnFileUp) 
ON_UPDATE_COMMAND_UI(ID_FILE_UP, OnUpdateFileUp) 
ON_COMMAND(ID_FILE_RENAME, OnFileRename) 
ON_UPDATE_COMMAND_UI(ID_FILE_RENAME, OnUpdateFileRename) 
ON_UPDATE_COMMAND_UI(ID_FILE_DELETE, OnUpdateFileDelete) 
ON_COMMAND(ID_FILE_OPEN, OnFileOpen) 
ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen) 
ON_COMMAND(ID_VIEW_FLASH_ONLY, OnViewFlashOnly) 
ON_UPDATE_COMMAND_UI(ID_VIEW_FLASH_ONLY, OnUpdateViewFlashOnly) 
	ON_COMMAND(ID_VIEW_SMALLICON, OnViewSmallIcon) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_SMALLICON, OnUpdateViewSmallIcon) 
	ON_COMMAND(ID_VIEW_LARGEICON, OnViewLargeIcon) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_LARGEICON, OnUpdateViewLargeIcon) 
	ON_COMMAND(ID_MOVIE_VIEW, OnMovieView) 
ON_COMMAND(ID_FILE_DELETE, OnFileDelete) 
ON_COMMAND(ID_VIEW_REFRESH, OnViewRefresh) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
static UINT indicators[] = 
{ 
	ID_SEPARATOR,           // status line indicator 
		ID_INDICATOR_CAPS, 
		ID_INDICATOR_NUM, 
		ID_INDICATOR_SCRL, 
}; 
 
///////////////////////////////////////////////////////////////////////////// 
// CBrowserFrame construction/destruction 
 
CBrowserFrame::CBrowserFrame() 
{ 
	m_ShowHidden=FALSE; 
	m_ShowFlashOnly=FALSE; 
	m_Add=TRUE; 
} 
 
CBrowserFrame::~CBrowserFrame() 
{ 
} 
 
int CBrowserFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1) 
		return -1; 
	 
	if (!m_ToolBar.CreateEx(this)|| 
		!m_ToolBar.LoadToolBar(IDR_BROWSER)) 
	{ 
		TRACE0("Failed to create toolbar\n"); 
		return -1;      // fail to create 
	} 
	 
	m_ToolBar.SetDropDownButton(ID_VIEW_BACK,0); 
	m_ToolBar.SetDropDownButton(ID_VIEW_NEXT,0); 
	 
	if (!m_StatusBar.Create(this) || 
		!m_StatusBar.SetIndicators(indicators, 
		sizeof(indicators)/sizeof(UINT))) 
	{ 
		TRACE0("Failed to create status bar\n"); 
		return -1;      // fail to create 
	} 
	 
	if (!m_ReBar.Create(this) || 
		!m_ReBar.AddBar(&m_ToolBar)) 
	{ 
		TRACE0("Failed to create rebar\n"); 
		return -1;      // fail to create 
	} 
	 
	// TODO: Delete these three lines if you don't want the toolbar to 
	//  be dockable 
	m_ToolBar.SetBarStyle(m_ToolBar.GetBarStyle() | 
		CBRS_TOOLTIPS | CBRS_FLYBY); 
	return 0; 
} 
 
BOOL CBrowserFrame::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	if(!CFrameWnd::PreCreateWindow(cs)) 
		return FALSE; 
	cs.dwExStyle&=~WS_EX_CLIENTEDGE; 
	cs.lpszClass=AfxRegisterWndClass(0,0,0,::theApp.LoadIcon(IDI_BROWSER)); 
	return TRUE; 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CBrowserFrame diagnostics 
 
#ifdef _DEBUG 
void CBrowserFrame::AssertValid() const 
{ 
	CFrameWnd::AssertValid(); 
} 
 
void CBrowserFrame::Dump(CDumpContext& dc) const 
{ 
	CFrameWnd::Dump(dc); 
} 
 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CBrowserFrame message handlers 
 
 
BOOL CBrowserFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)  
{ 
	m_Splitter1.CreateStatic(this,1,2); 
	m_Splitter2.CreateStatic(&m_Splitter1,2,1,WS_CHILD|WS_VISIBLE,m_Splitter1.IdFromRowCol(0,1)); 
	m_Splitter1.CreateView(0,0,RUNTIME_CLASS(CBrowserFolder),CSize(200,0),pContext); 
	m_Splitter2.CreateView(0,0,RUNTIME_CLASS(CLogoBar),CSize(0,80),pContext); 
	m_Splitter2.CreateView(1,0,RUNTIME_CLASS(CBrowserList),CSize(0,0),pContext); 
	 
	if(!p_Tree->SetSelection(::theApp.m_UserData.m_LastPath)) 
		p_Tree->SelectRootItem(); 
	return CFrameWnd::OnCreateClient(lpcs,pContext); 
} 
 
void CBrowserFrame::OnViewDetails()  
{ 
	p_List->SetViewStyle(3); 
} 
 
void CBrowserFrame::OnViewList() 
{ 
	p_List->SetViewStyle(2); 
} 
 
void CBrowserFrame::OnUpdateViewDetails(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck(p_List->GetViewStyle(3)); 
} 
 
void CBrowserFrame::OnUpdateViewList(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck(p_List->GetViewStyle(2)); 
} 
 
void CBrowserFrame::OnClose()  
{ 
	CFrameWnd::OnClose(); 
	if(::theApp.p_Viewer) 
	{ 
		::theApp.p_Viewer->DestroyWindow(); 
		::theApp.p_Viewer=NULL;  
	} 
} 
 
void CBrowserFrame::OnViewHiddenFiles()  
{ 
	m_ShowHidden=!m_ShowHidden; 
	p_Tree->m_ShowHidden=m_ShowHidden; 
	p_List->m_ShowHidden=m_ShowHidden; 
	p_Tree->Refresh(); 
} 
 
void CBrowserFrame::OnUpdateViewHiddenFiles(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck(m_ShowHidden); 
} 
 
void CBrowserFrame::OnViewRefresh()  
{ 
	m_History.Clear(); 
	p_Tree->Refresh(); 
} 
 
void CBrowserFrame::OnHilite() 
{ 
	p_List->SetFocus(); 
	if(!::theApp.IsValidFlashIndex()) 
		return; 
	int Index=::theApp.p_FlashIndex[::theApp.m_FlashIndex]; 
	if(p_List->m_SelectedItem!=Index) 
		p_List->SelectItem(Index); 
	else 
		p_List->OnItemSelected(p_List->m_SelectedItem); 
} 
 
void CBrowserFrame::OnViewNext()  
{ 
	m_Add=FALSE; 
	p_Tree->SelectItem(m_History.Next()); 
	m_Add=TRUE; 
} 
 
void CBrowserFrame::OnViewBack()  
{ 
	m_Add=FALSE; 
	p_Tree->SelectItem(m_History.Back()); 
	m_Add=TRUE; 
} 
 
void CBrowserFrame::OnUpdateViewNext(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(!m_History.TailReached());	 
} 
 
void CBrowserFrame::OnUpdateViewBack(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(!m_History.HeadReached());	 
} 
 
BOOL CBrowserFrame::PreTranslateMessage(MSG* pMsg)  
{ 
	if(::theApp.m_Mode&&pMsg->message==WM_KEYUP)	 
	{ 
		if(pMsg->wParam==VK_F5) 
			OnViewRefresh(); 
	} 
	if(pMsg->message==0x0111&&pMsg->wParam>=0xff00&&pMsg->wParam<=0xff08)	 
	{ 
		int Index=pMsg->wParam-0xff00; 
		CHistoryRecord *pRecord; 
		pRecord=m_History.p_Current; 
		HTREEITEM hItem=NULL; 
		while(1) 
		{ 
			pRecord=pRecord->p_Back; 
			hItem=pRecord->h_Item; 
			m_History.Back(); 
			if(!Index) 
				break; 
			if(m_History.IsHead(pRecord)) 
				break; 
			Index--; 
		} 
		m_Add=FALSE; 
		p_Tree->SelectItem(hItem); 
		m_Add=TRUE; 
		return TRUE; 
	} 
	 
	if(pMsg->message==0x0111&&pMsg->wParam>=0xff10&&pMsg->wParam<=0xff18) 
	{ 
		int Index=pMsg->wParam-0xff10; 
		CHistoryRecord *pRecord; 
		pRecord=m_History.p_Current; 
		HTREEITEM hItem=NULL; 
		while(1) 
		{ 
			pRecord=pRecord->p_Next; 
			hItem=pRecord->h_Item; 
			m_History.Next(); 
			if(!Index) 
				break; 
			if(!pRecord) 
				break; 
			Index--; 
		} 
		m_Add=FALSE; 
		p_Tree->SelectItem(hItem); 
		m_Add=TRUE; 
		return TRUE; 
	} 
	 
	return CFrameWnd::PreTranslateMessage(pMsg); 
} 
 
void CBrowserFrame::AddHistoryRecord(HTREEITEM hItem) 
{ 
	if(m_Add) 
		m_History.Add(hItem); 
} 
 
void CBrowserFrame::OnFileUp()  
{ 
	p_Tree->ItemUp(); 
} 
 
void CBrowserFrame::OnUpdateFileUp(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(!p_Tree->RootReached());	 
} 
 
void CBrowserFrame::OnFileRename()  
{ 
	p_List->EditLabel(p_List->m_SelectedItem);	 
} 
 
void CBrowserFrame::OnUpdateFileRename(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(p_List->m_SelectedItem!=-1);	 
} 
 
void CBrowserFrame::OnFileDelete()  
{ 
	CString FullPath=p_List->GetSelectedItemFullPath(); 
	if(p_List->IsFolder(p_List->m_SelectedItem)) 
	{ 
		if(RemoveDirectory(FullPath)) 
			OnViewRefresh(); 
	} 
	else 
	{ 
		if(DeleteFile(FullPath)) 
			OnViewRefresh(); 
	} 
} 
 
void CBrowserFrame::OnUpdateFileDelete(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(p_List->m_SelectedItem!=-1);	 
} 
 
void CBrowserFrame::OnFileOpen()  
{ 
	p_List->OnItemAction(p_List->m_SelectedItem); 
} 
 
void CBrowserFrame::OnUpdateFileOpen(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(p_List->m_SelectedItem!=-1);	 
} 
 
void CBrowserFrame::OnViewFlashOnly()  
{ 
	m_ShowFlashOnly=!m_ShowFlashOnly; 
	p_List->m_ShowFlashOnly=m_ShowFlashOnly; 
	p_List->Refresh(); 
} 
 
void CBrowserFrame::OnUpdateViewFlashOnly(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck(m_ShowFlashOnly);	 
} 
 
void CBrowserFrame::OnViewSmallIcon()  
{ 
	p_List->SetViewStyle(1); 
} 
 
void CBrowserFrame::OnUpdateViewSmallIcon(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck(p_List->GetViewStyle(1)); 
} 
 
void CBrowserFrame::OnViewLargeIcon()  
{ 
	p_List->SetViewStyle(0); 
} 
 
void CBrowserFrame::OnUpdateViewLargeIcon(CCmdUI* pCmdUI)  
{	 
	pCmdUI->SetCheck(p_List->GetViewStyle(0)); 
} 
 
void CBrowserFrame::OnMovieView()  
{ 
	::theApp.SwitchToViewer();	 
}