590 lines
15 KiB
C++
590 lines
15 KiB
C++
// MainFrm.cpp : implementation of the CMainFrame class
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "FileExplorer.h"
|
|
|
|
#include "MainFrm.h"
|
|
#include "LeftView.h"
|
|
#include "FileExplorerView.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
const int ID_MAXHISTORYITEMDISPLAYED=20;
|
|
const int ID_BACKWARD_BASE=18000;
|
|
const int ID_FORWARD_BASE=19000;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame
|
|
|
|
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
|
|
|
|
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
|
|
//{{AFX_MSG_MAP(CMainFrame)
|
|
ON_WM_CREATE()
|
|
//}}AFX_MSG_MAP
|
|
ON_UPDATE_COMMAND_UI_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnUpdateViewStyles)
|
|
ON_COMMAND_RANGE(AFX_ID_VIEW_MINIMUM, AFX_ID_VIEW_MAXIMUM, OnViewStyle)
|
|
ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnDropDown)
|
|
ON_COMMAND(ID_VIEW_TYPE, OnViewType)
|
|
ON_COMMAND(ID_VIEW_UP, OnViewUp)
|
|
ON_COMMAND(ID_VIEW_BACKWARD, OnViewBackward)
|
|
ON_COMMAND(ID_VIEW_FORWARD, OnViewForward)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_UP, OnUpdateViewUp)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_BACKWARD, OnUpdateViewBackward)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_FORWARD, OnUpdateViewForward)
|
|
ON_COMMAND_RANGE(ID_BACKWARD_BASE, ID_BACKWARD_BASE+ID_MAXHISTORYITEMDISPLAYED, OnBackwardItem)
|
|
ON_COMMAND_RANGE(ID_FORWARD_BASE, ID_FORWARD_BASE+ID_MAXHISTORYITEMDISPLAYED, OnForwardItem)
|
|
END_MESSAGE_MAP()
|
|
|
|
static UINT indicators[] =
|
|
{
|
|
ID_SEPARATOR, // status line indicator
|
|
ID_INDICATOR_CAPS,
|
|
ID_INDICATOR_NUM,
|
|
ID_INDICATOR_SCRL,
|
|
};
|
|
|
|
static UINT buttons[] =
|
|
{
|
|
ID_VIEW_BACKWARD,
|
|
ID_VIEW_FORWARD,
|
|
ID_VIEW_UP,
|
|
ID_SEPARATOR,
|
|
ID_EDIT_CUT,
|
|
ID_EDIT_COPY,
|
|
ID_EDIT_PASTE,
|
|
ID_EDIT_DELETE,
|
|
ID_SEPARATOR,
|
|
ID_VIEW_PROPERTY,
|
|
ID_VIEW_TYPE,
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame construction/destruction
|
|
|
|
CMainFrame::CMainFrame()
|
|
{
|
|
// TODO: add member initialization code here
|
|
|
|
}
|
|
|
|
CMainFrame::~CMainFrame()
|
|
{
|
|
}
|
|
|
|
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
if (!m_wndToolBar.Create(this,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_TOOLTIPS|
|
|
CBRS_FLYBY|CBRS_SIZE_DYNAMIC) ||
|
|
!m_wndToolBar.SetButtons(buttons,sizeof(buttons)/sizeof(buttons[1])) ||
|
|
m_wndToolBar.GetToolBarCtrl().
|
|
AddBitmap(sizeof(buttons)/sizeof(buttons[1]),IDB_TB_FILE)==-1)
|
|
{
|
|
TRACE0("Failed to create toolbar\n");
|
|
return -1; // fail to create
|
|
}
|
|
|
|
/////////////
|
|
// COXCoolToolBar specific functions
|
|
m_wndToolBar.IniSizes(CSize(24,22));
|
|
m_wndToolBar.SetButtonTextFromID(COXCoolToolBar::TTID_TOOLTIP);
|
|
m_wndToolBar.SetMaxTextRows(1);
|
|
m_wndToolBar.SetButtonsMinMaxWidth(0,80);
|
|
m_wndToolBar.SetHotImageList(m_wndToolBar.AddImageList(IDB_TB_FILE_HOT,24,
|
|
RGB(192,192,192),ILC_COLOR8|ILC_MASK));
|
|
// m_wndToolBar.SetDisabledImageList(m_wndToolBar.AddImageList(IDB_TB_FILE_DISABLED,24,
|
|
// RGB(255,0,255),ILC_COLOR8|ILC_MASK));
|
|
m_wndToolBar.UpdateSizes();
|
|
|
|
m_wndToolBar.SetButtonStyle(0,m_wndToolBar.GetButtonStyle(0)|TBSTYLE_DROPDOWN);
|
|
m_wndToolBar.SetButtonStyle(1,m_wndToolBar.GetButtonStyle(1)|TBSTYLE_DROPDOWN);
|
|
m_wndToolBar.SetButtonStyle(10,m_wndToolBar.GetButtonStyle(10)|TBSTYLE_DROPDOWN);
|
|
m_wndToolBar.SetDropDownArrow(TRUE);
|
|
////////////
|
|
|
|
if (!m_wndStatusBar.Create(this) ||
|
|
!m_wndStatusBar.SetIndicators(indicators,
|
|
sizeof(indicators)/sizeof(UINT)))
|
|
{
|
|
TRACE0("Failed to create status bar\n");
|
|
return -1; // fail to create
|
|
}
|
|
|
|
// TODO: Delete these three lines if you don't want the toolbar to
|
|
// be dockable
|
|
m_wndToolBar.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
|
|
EnableDocking(CBRS_ALIGN_ANY);
|
|
DockControlBar(&m_wndToolBar);
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
|
|
CCreateContext* pContext)
|
|
{
|
|
// create splitter window
|
|
if (!m_wndSplitter.CreateStatic(this, 1, 2))
|
|
return FALSE;
|
|
|
|
if (!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLeftView),CSize(0,0),pContext) ||
|
|
!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CFileExplorerView),
|
|
CSize(0,0),pContext))
|
|
{
|
|
m_wndSplitter.DestroyWindow();
|
|
return FALSE;
|
|
}
|
|
|
|
m_wndSplitter.SetColumnInfo(0,200,0);
|
|
m_wndSplitter.SetActivePane(0,0);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
if( !CFrameWnd::PreCreateWindow(cs) )
|
|
return FALSE;
|
|
// TODO: Modify the Window class or styles here by modifying
|
|
// the CREATESTRUCT cs
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CMainFrame::AssertValid() const
|
|
{
|
|
CFrameWnd::AssertValid();
|
|
}
|
|
|
|
void CMainFrame::Dump(CDumpContext& dc) const
|
|
{
|
|
CFrameWnd::Dump(dc);
|
|
}
|
|
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame message handlers
|
|
|
|
CFileExplorerView* CMainFrame::GetRightPane()
|
|
{
|
|
CWnd* pWnd = m_wndSplitter.GetPane(0, 1);
|
|
CFileExplorerView* pView = DYNAMIC_DOWNCAST(CFileExplorerView, pWnd);
|
|
return pView;
|
|
}
|
|
|
|
CLeftView* CMainFrame::GetLeftPane()
|
|
{
|
|
CWnd* pWnd = m_wndSplitter.GetPane(0, 0);
|
|
CLeftView* pView = DYNAMIC_DOWNCAST(CLeftView, pWnd);
|
|
return pView;
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewStyles(CCmdUI* pCmdUI)
|
|
{
|
|
// TODO: customize or extend this code to handle choices on the
|
|
// View menu.
|
|
|
|
CFileExplorerView* pView = GetRightPane();
|
|
|
|
// if the right-hand pane hasn't been created or isn't a view,
|
|
// disable commands in our range
|
|
|
|
if (pView == NULL)
|
|
pCmdUI->Enable(FALSE);
|
|
else
|
|
{
|
|
DWORD dwStyle = pView->m_filesList.GetStyle() & LVS_TYPEMASK;
|
|
|
|
// if the command is ID_VIEW_LINEUP, only enable command
|
|
// when we're in LVS_ICON or LVS_SMALLICON mode
|
|
|
|
if (pCmdUI->m_nID == ID_VIEW_LINEUP)
|
|
{
|
|
if (dwStyle == LVS_ICON || dwStyle == LVS_SMALLICON)
|
|
pCmdUI->Enable();
|
|
else
|
|
pCmdUI->Enable(FALSE);
|
|
}
|
|
else
|
|
{
|
|
// otherwise, use dots to reflect the style of the view
|
|
pCmdUI->Enable();
|
|
BOOL bChecked = FALSE;
|
|
|
|
switch (pCmdUI->m_nID)
|
|
{
|
|
case ID_VIEW_DETAILS:
|
|
bChecked = (dwStyle == LVS_REPORT);
|
|
break;
|
|
|
|
case ID_VIEW_SMALLICON:
|
|
bChecked = (dwStyle == LVS_SMALLICON);
|
|
break;
|
|
|
|
case ID_VIEW_LARGEICON:
|
|
bChecked = (dwStyle == LVS_ICON);
|
|
break;
|
|
|
|
case ID_VIEW_LIST:
|
|
bChecked = (dwStyle == LVS_LIST);
|
|
break;
|
|
|
|
default:
|
|
bChecked = FALSE;
|
|
break;
|
|
}
|
|
|
|
pCmdUI->SetRadio(bChecked ? 1 : 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void CMainFrame::OnViewStyle(UINT nCommandID)
|
|
{
|
|
// TODO: customize or extend this code to handle choices on the
|
|
// View menu.
|
|
CFileExplorerView* pView = GetRightPane();
|
|
|
|
// if the right-hand pane has been created and is a CFileExplorerView,
|
|
// process the menu commands...
|
|
if (pView != NULL)
|
|
{
|
|
DWORD dwStyle=(DWORD)-1;
|
|
|
|
switch (nCommandID)
|
|
{
|
|
case ID_VIEW_LINEUP:
|
|
{
|
|
// ask the list control to snap to grid
|
|
pView->m_filesList.Arrange(LVA_SNAPTOGRID);
|
|
}
|
|
break;
|
|
|
|
// other commands change the style on the list control
|
|
case ID_VIEW_DETAILS:
|
|
dwStyle = LVS_REPORT;
|
|
break;
|
|
|
|
case ID_VIEW_SMALLICON:
|
|
dwStyle = LVS_SMALLICON;
|
|
break;
|
|
|
|
case ID_VIEW_LARGEICON:
|
|
dwStyle = LVS_ICON;
|
|
break;
|
|
|
|
case ID_VIEW_LIST:
|
|
dwStyle = LVS_LIST;
|
|
break;
|
|
}
|
|
|
|
// change the style; window will repaint automatically
|
|
if (dwStyle != -1)
|
|
pView->m_filesList.ModifyStyle(LVS_TYPEMASK, dwStyle);
|
|
}
|
|
}
|
|
|
|
|
|
void CMainFrame::OnDropDown(NMHDR* pNotifyStruct, LRESULT* pResult)
|
|
{
|
|
// this function handles the dropdown menus from the toolbar
|
|
NMTOOLBAR* pNMToolBar = (NMTOOLBAR*)pNotifyStruct;
|
|
CRect rect;
|
|
|
|
// translate the current toolbar item rectangle into screen coordinates
|
|
// so that we'll know where to pop up the menu
|
|
m_wndToolBar.GetItemRect(m_wndToolBar.CommandToIndex(pNMToolBar->iItem), &rect);
|
|
rect.top = rect.bottom;
|
|
::ClientToScreen(pNMToolBar->hdr.hwndFrom, &rect.TopLeft());
|
|
switch(pNMToolBar->iItem)
|
|
{
|
|
case ID_VIEW_BACKWARD:
|
|
{
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
|
|
ASSERT(pTreeView->m_arrHistory.GetSize()>1 &&
|
|
pTreeView->m_nCurrentItemInHistory!=0);
|
|
|
|
CMenu menuPopup;
|
|
VERIFY(menuPopup.CreatePopupMenu());
|
|
int nMenuItemCount=0;
|
|
int nHistoryItemIndex=pTreeView->m_nCurrentItemInHistory-1;
|
|
while(nMenuItemCount<ID_MAXHISTORYITEMDISPLAYED &&
|
|
nHistoryItemIndex>=0)
|
|
{
|
|
LPITEMIDLIST lpFullIDL=pTreeView->m_arrHistory.GetAt(nHistoryItemIndex);
|
|
if(lpFullIDL==NULL)
|
|
{
|
|
menuPopup.AppendMenu(MF_STRING,ID_BACKWARD_BASE+nMenuItemCount,
|
|
_T("Desktop"));
|
|
nHistoryItemIndex--;
|
|
nMenuItemCount++;
|
|
}
|
|
else
|
|
{
|
|
HTREEITEM hItem=pTreeView->m_folderTree.FindFolder(lpFullIDL);
|
|
if(hItem==NULL)
|
|
{
|
|
pTreeView->m_arrHistory.RemoveAt(nHistoryItemIndex);
|
|
pTreeView->m_nCurrentItemInHistory--;
|
|
nHistoryItemIndex--;
|
|
}
|
|
else
|
|
{
|
|
CString sText=pTreeView->m_folderTree.GetItemText(hItem);
|
|
menuPopup.AppendMenu(MF_STRING,ID_BACKWARD_BASE+nMenuItemCount,
|
|
sText);
|
|
nHistoryItemIndex--;
|
|
nMenuItemCount++;
|
|
}
|
|
}
|
|
|
|
}
|
|
menuPopup.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,rect.left,
|
|
rect.top+1,AfxGetMainWnd());
|
|
break;
|
|
}
|
|
|
|
case ID_VIEW_FORWARD:
|
|
{
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
|
|
ASSERT((pTreeView->m_arrHistory.GetSize()-1)>
|
|
pTreeView->m_nCurrentItemInHistory);
|
|
|
|
CMenu menuPopup;
|
|
VERIFY(menuPopup.CreatePopupMenu());
|
|
int nMenuItemCount=0;
|
|
int nHistoryItemIndex=pTreeView->m_nCurrentItemInHistory+1;
|
|
while(nMenuItemCount<ID_MAXHISTORYITEMDISPLAYED &&
|
|
nHistoryItemIndex<pTreeView->m_arrHistory.GetSize())
|
|
{
|
|
LPITEMIDLIST lpFullIDL=pTreeView->m_arrHistory.GetAt(nHistoryItemIndex);
|
|
if(lpFullIDL==NULL)
|
|
{
|
|
menuPopup.AppendMenu(MF_STRING,ID_FORWARD_BASE+nMenuItemCount,
|
|
_T("Desktop"));
|
|
nHistoryItemIndex++;
|
|
nMenuItemCount++;
|
|
}
|
|
else
|
|
{
|
|
HTREEITEM hItem=pTreeView->m_folderTree.FindFolder(lpFullIDL);
|
|
if(hItem==NULL)
|
|
{
|
|
pTreeView->m_arrHistory.RemoveAt(nHistoryItemIndex);
|
|
}
|
|
else
|
|
{
|
|
CString sText=pTreeView->m_folderTree.GetItemText(hItem);
|
|
menuPopup.AppendMenu(MF_STRING,ID_FORWARD_BASE+nMenuItemCount,
|
|
sText);
|
|
nHistoryItemIndex++;
|
|
nMenuItemCount++;
|
|
}
|
|
}
|
|
|
|
}
|
|
menuPopup.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,rect.left,
|
|
rect.top+1,AfxGetMainWnd());
|
|
break;
|
|
}
|
|
|
|
case ID_VIEW_TYPE:
|
|
{
|
|
CMenu menu;
|
|
CMenu* pPopup;
|
|
menu.LoadMenu(IDR_VIEWTYPE);
|
|
pPopup=menu.GetSubMenu(0);
|
|
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,rect.left,
|
|
rect.top+1,AfxGetMainWnd());
|
|
break;
|
|
}
|
|
}
|
|
*pResult=TBDDRET_DEFAULT;
|
|
}
|
|
|
|
|
|
void CMainFrame::OnBackwardItem(UINT nCommandID)
|
|
{
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
|
|
ASSERT(pTreeView->m_arrHistory.GetSize()>1 && pTreeView->m_nCurrentItemInHistory!=0);
|
|
int nItemIndex=pTreeView->m_nCurrentItemInHistory-1-nCommandID+ID_BACKWARD_BASE;
|
|
ASSERT(nItemIndex>=0);
|
|
LPITEMIDLIST lpFullIDLPrev=pTreeView->m_arrHistory.GetAt(nItemIndex);
|
|
HTREEITEM hPrevItem=NULL;
|
|
if(lpFullIDLPrev!=NULL)
|
|
{
|
|
hPrevItem=pTreeView->m_folderTree.FindFolder(lpFullIDLPrev);
|
|
}
|
|
else
|
|
{
|
|
hPrevItem=pTreeView->m_folderTree.GetRootItem();
|
|
}
|
|
if(hPrevItem!=NULL)
|
|
{
|
|
pTreeView->m_nCurrentItemInHistory=nItemIndex;
|
|
pTreeView->m_folderTree.SelectItem(hPrevItem);
|
|
}
|
|
}
|
|
|
|
|
|
void CMainFrame::OnForwardItem(UINT nCommandID)
|
|
{
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
|
|
ASSERT((pTreeView->m_arrHistory.GetSize()-1)>pTreeView->m_nCurrentItemInHistory);
|
|
int nItemIndex=pTreeView->m_nCurrentItemInHistory+1+nCommandID-ID_FORWARD_BASE;
|
|
ASSERT(nItemIndex<pTreeView->m_arrHistory.GetSize());
|
|
LPITEMIDLIST lpFullIDLNext=pTreeView->m_arrHistory.GetAt(nItemIndex);
|
|
HTREEITEM hNextItem=NULL;
|
|
if(lpFullIDLNext!=NULL)
|
|
{
|
|
hNextItem=pTreeView->m_folderTree.FindFolder(lpFullIDLNext);
|
|
}
|
|
else
|
|
{
|
|
hNextItem=pTreeView->m_folderTree.GetRootItem();
|
|
}
|
|
if(hNextItem!=NULL)
|
|
{
|
|
pTreeView->m_nCurrentItemInHistory=nItemIndex;
|
|
pTreeView->m_folderTree.SelectItem(hNextItem);
|
|
}
|
|
}
|
|
|
|
|
|
void CMainFrame::OnViewType()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
OnViewStyle(ID_VIEW_LARGEICON);
|
|
}
|
|
|
|
void CMainFrame::OnViewUp()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
HTREEITEM hItem=pTreeView->m_folderTree.GetSelectedItem();
|
|
ASSERT(hItem!=NULL);
|
|
HTREEITEM hParentItem=pTreeView->m_folderTree.GetParentItem(hItem);
|
|
ASSERT(hParentItem!=NULL);
|
|
pTreeView->m_folderTree.SelectItem(hParentItem);
|
|
}
|
|
|
|
void CMainFrame::OnViewBackward()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
|
|
ASSERT(pTreeView->m_arrHistory.GetSize()>1 && pTreeView->m_nCurrentItemInHistory!=0);
|
|
LPITEMIDLIST lpFullIDLPrev=pTreeView->m_arrHistory.
|
|
GetAt(pTreeView->m_nCurrentItemInHistory-1);
|
|
HTREEITEM hPrevItem=NULL;
|
|
if(lpFullIDLPrev!=NULL)
|
|
{
|
|
hPrevItem=pTreeView->m_folderTree.FindFolder(lpFullIDLPrev);
|
|
}
|
|
else
|
|
{
|
|
hPrevItem=pTreeView->m_folderTree.GetRootItem();
|
|
}
|
|
if(hPrevItem!=NULL)
|
|
{
|
|
pTreeView->m_nCurrentItemInHistory--;
|
|
pTreeView->m_folderTree.SelectItem(hPrevItem);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnViewForward()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
|
|
ASSERT((pTreeView->m_arrHistory.GetSize()-1)>pTreeView->m_nCurrentItemInHistory);
|
|
LPITEMIDLIST lpFullIDLNext=pTreeView->m_arrHistory.
|
|
GetAt(pTreeView->m_nCurrentItemInHistory+1);
|
|
HTREEITEM hNextItem=NULL;
|
|
if(lpFullIDLNext!=NULL)
|
|
{
|
|
hNextItem=pTreeView->m_folderTree.FindFolder(lpFullIDLNext);
|
|
}
|
|
else
|
|
{
|
|
hNextItem=pTreeView->m_folderTree.GetRootItem();
|
|
}
|
|
if(hNextItem!=NULL)
|
|
{
|
|
pTreeView->m_nCurrentItemInHistory++;
|
|
pTreeView->m_folderTree.SelectItem(hNextItem);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewForward(CCmdUI* pCmdUI)
|
|
{
|
|
// TODO: Add your command update UI handler code here
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
|
|
pCmdUI->Enable((pTreeView->m_arrHistory.GetSize()-1)>
|
|
pTreeView->m_nCurrentItemInHistory);
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewBackward(CCmdUI* pCmdUI)
|
|
{
|
|
// TODO: Add your command update UI handler code here
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
|
|
pCmdUI->Enable(pTreeView->m_arrHistory.GetSize()>1 &&
|
|
pTreeView->m_nCurrentItemInHistory!=0);
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewUp(CCmdUI* pCmdUI)
|
|
{
|
|
// TODO: Add your command update UI handler code here
|
|
BOOL bEnabled=FALSE;
|
|
CWnd* pWnd=m_wndSplitter.GetPane(0,0);
|
|
ASSERT(pWnd!=NULL);
|
|
CLeftView* pTreeView=DYNAMIC_DOWNCAST(CLeftView,pWnd);
|
|
HTREEITEM hItem=pTreeView->m_folderTree.GetSelectedItem();
|
|
if(hItem!=NULL)
|
|
{
|
|
HTREEITEM hParentItem=pTreeView->m_folderTree.GetParentItem(hItem);
|
|
if(hParentItem!=NULL)
|
|
bEnabled=TRUE;
|
|
}
|
|
|
|
pCmdUI->Enable(bEnabled);
|
|
}
|
|
|