📄 ringview.cpp
字号:
// RingView.cpp : implementation file
//
#include "stdafx.h"
#include "resourceeditor.h"
#include "RingView.h"
#include "RingDoc.h"
#include "DirFileInfo.h"
#include "FileDlg.h"
#include "ItemDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const _TCHAR CRingView::SZ_FILE_EXT[] = _T(".midi,.mid,.mmf");
const _TCHAR CRingView::SZ_FILTER[] =
_T("midi files (*.mid;*.midi)|*.mid;*.midi|wav files (*.wav)|*.wav|");
/////////////////////////////////////////////////////////////////////////////
// CRingView
IMPLEMENT_DYNCREATE(CRingView, CTreeViewEx)
CRingView::CRingView()
{
}
CRingView::~CRingView()
{
}
BEGIN_MESSAGE_MAP(CRingView, CTreeViewEx)
//{{AFX_MSG_MAP(CRingView)
ON_COMMAND(IDM_RING_ADD_DIR, OnRingAddDir)
ON_COMMAND(IDM_RING_REMOVE_DIR, OnRingRemoveDir)
ON_COMMAND(IDM_RING_REPLACE_DIR, OnRingReplaceDir)
ON_COMMAND(IDM_RING_ADD_FILE, OnRingAddFile)
ON_COMMAND(IDM_RING_REMOVE_FILE, OnRingRemoveFile)
ON_COMMAND(IDM_RING_REPLACE_FILE, OnRingReplaceFile)
ON_COMMAND(IDM_RING_PROPERTY, OnRingProperty)
ON_WM_RBUTTONDOWN()
ON_UPDATE_COMMAND_UI(IDM_RING_ADD_DIR, OnUpdateRingAddDir)
ON_UPDATE_COMMAND_UI(IDM_RING_ADD_FILE, OnUpdateRingAddFile)
ON_UPDATE_COMMAND_UI(IDM_RING_PROPERTY, OnUpdateRingProperty)
ON_UPDATE_COMMAND_UI(IDM_RING_REMOVE_DIR, OnUpdateRingRemoveDir)
ON_UPDATE_COMMAND_UI(IDM_RING_REMOVE_FILE, OnUpdateRingRemoveFile)
ON_UPDATE_COMMAND_UI(IDM_RING_REPLACE_DIR, OnUpdateRingReplaceDir)
ON_UPDATE_COMMAND_UI(IDM_RING_REPLACE_FILE, OnUpdateRingReplaceFile)
ON_COMMAND(ID_OPTION_RING_SIZEINFO, OnOptionRingSizeinfo)
ON_UPDATE_COMMAND_UI(ID_OPTION_RING_SIZEINFO, OnUpdateOptionRingSizeinfo)
ON_COMMAND(IDM_RING_EXPORT_TO_DIR, OnRingExportToDir)
ON_COMMAND(IDM_RING_EXPORT_TO_FILE, OnRingExportToFile)
ON_UPDATE_COMMAND_UI(IDM_RING_EXPORT_TO_FILE, OnUpdateRingExportToFile)
ON_UPDATE_COMMAND_UI(IDM_RING_EXPORT_TO_DIR, OnUpdateRingExportToDir)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRingView drawing
void CRingView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CRingView diagnostics
#ifdef _DEBUG
void CRingView::AssertValid() const
{
CTreeViewEx::AssertValid();
}
void CRingView::Dump(CDumpContext& dc) const
{
CTreeViewEx::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CRingView message handlers
void CRingView::OnInitialUpdate()
{
CTreeViewEx::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
m_pInfo = g_theApp.m_pRingInfo;
_ASSERTE( m_pInfo != NULL );
FillTreeCtrl((CDirFileNode *)m_pInfo->GetRoot());
m_SizeInfo.DeleteAll();
}
BOOL CRingView::PreTrackPopupMenu( CMenu * pMenu, HTREEITEM hItem )
{
_ASSERTE( pMenu != NULL );
if( !g_theApp.IsSuperUser() )
{
if( hItem == NULL )
{
return FALSE;
}
else
{
pMenu->DeleteMenu(IDM_RING_ADD_DIR, MF_BYCOMMAND);
pMenu->DeleteMenu(IDM_RING_REMOVE_DIR, MF_BYCOMMAND);
pMenu->DeleteMenu(IDM_RING_ADD_FILE, MF_BYCOMMAND);
pMenu->DeleteMenu(IDM_RING_REMOVE_FILE, MF_BYCOMMAND);
}
}
else if( NULL == hItem )
{
pMenu->EnableMenuItem( IDM_RING_REMOVE_DIR, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_REPLACE_DIR, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_REMOVE_FILE, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_REPLACE_FILE, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_EXPORT_TO_FILE, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_EXPORT_TO_DIR, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_PROPERTY, MF_BYCOMMAND | MF_GRAYED );
}
if( hItem != NULL )
{
// 区分目录还是文件
CTreeCtrl &tc = GetTreeCtrl();
CDirFileNode * pNode = (CDirFileNode *)tc.GetItemData(hItem);
if( m_pInfo->IsDirNode( pNode ) )
{
pMenu->EnableMenuItem( IDM_RING_PROPERTY, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_REMOVE_FILE, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_REPLACE_FILE, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_EXPORT_TO_FILE, MF_BYCOMMAND | MF_GRAYED );
}
else
{
pMenu->EnableMenuItem( IDM_RING_ADD_DIR, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_REMOVE_DIR, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_REPLACE_DIR, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_ADD_FILE, MF_BYCOMMAND | MF_GRAYED );
pMenu->EnableMenuItem( IDM_RING_EXPORT_TO_DIR, MF_BYCOMMAND | MF_GRAYED );
}
}
if( m_SizeInfo.GetStartPosition() == NULL )
{
pMenu->EnableMenuItem( ID_OPTION_RING_SIZEINFO, MF_BYCOMMAND | MF_GRAYED );
}
return TRUE;
}
void CRingView::OnRingAddDir()
{
// TODO: Add your command handler code here
CFileDlg fdlg;
fdlg.SetHwnOwner(this->m_hWnd);//*@Hongliang Xin 2006-5-31
CString strDir = fdlg.GetSelectDir();
if( strDir.IsEmpty() )
return;
CWaitCursor waitCur;
CTreeCtrl &tc = GetTreeCtrl();
HTREEITEM hItem = tc.GetSelectedItem();
if( hItem == NULL )
hItem = TVI_ROOT;
CDirFileNode * pRoot = hItem != TVI_ROOT ?
(CDirFileNode *)tc.GetItemData(hItem) :
(CDirFileNode *)m_pInfo->GetRoot();
if( !EnumAndFillRings(pRoot, hItem, strDir) )
{
CDirFileNode * pNode = (CDirFileNode *)tc.GetItemData(hItem);
RemoveAllRes(pNode);
tc.DeleteItem(hItem);
AfxMessageBox(_T("Add directory fail!"));
}
else
{
SetModifiedFlag();
}
}
void CRingView::OnRingRemoveDir()
{
// TODO: Add your command handler code here
if( AfxMessageBox(_T("Are you sure delete this directory!"), MB_YESNO) == IDNO )
return;
CTreeCtrl &tc = GetTreeCtrl();
HTREEITEM hItem = tc.GetSelectedItem();
_ASSERTE( hItem != NULL );
CDirFileNode * pNode = (CDirFileNode *)tc.GetItemData(hItem);
if( RemoveAllRes(pNode) )
{
RemoveSizeInfo( tc.GetChildItem(hItem) );
m_SizeInfo.DeleteByHandle( (DWORD)hItem );
tc.DeleteItem(hItem);
SetModifiedFlag();
}
else
{
AfxMessageBox(_T("Delete the directory fail!"));
}
}
void CRingView::OnRingReplaceDir()
{
// TODO: Add your command handler code here
if( AfxMessageBox(_T("Are sure replace this dirctory?"), MB_YESNO) == IDNO )
return;
CFileDlg dlg;
dlg.SetHwnOwner(this->m_hWnd);//*@Hongliang Xin 2006-9-26
CString strDir = dlg.GetSelectDir();
if( strDir.IsEmpty() )
return;
CTreeCtrl &tc = GetTreeCtrl();
HTREEITEM hItem = tc.GetSelectedItem();
_ASSERTE( hItem != NULL );
CDirFileNode * pNode = (CDirFileNode *)tc.GetItemData(hItem);
if( ReplaceDir(pNode, strDir, !g_theApp.IsSuperUser()) )
SetModifiedFlag();
}
void CRingView::OnRingAddFile()
{
// TODO: Add your command handler code here
CFileDlg fdlg;
fdlg.SetFileExt(SZ_FILE_EXT);
fdlg.SetFileFilter(SZ_FILTER);
CString strFileName = fdlg.GetPathName();
if( strFileName.IsEmpty() )
return;
CDirFileNode * pParent = NULL;
CTreeCtrl & tc = GetTreeCtrl();
HTREEITEM hItem = tc.GetSelectedItem();
if( hItem == NULL )
{
hItem = TVI_ROOT;
pParent = (CDirFileNode *)m_pInfo->GetRoot();
}
else
{
pParent = (CDirFileNode *)tc.GetItemData(hItem);
}
if( AddRingFile(&pParent, hItem, strFileName) )
{
SetModifiedFlag();
}
else
{
AfxMessageBox(_T("Add file fail!"));
}
}
void CRingView::OnRingRemoveFile()
{
// TODO: Add your command handler code here
if( AfxMessageBox(_T("Are you sure delete this item!"), MB_YESNO) == IDNO )
return;
CTreeCtrl &tc = GetTreeCtrl();
HTREEITEM hItem = tc.GetSelectedItem();
_ASSERTE( hItem != NULL );
CDirFileNode * pNode = (CDirFileNode *)tc.GetItemData(hItem);
CMMIRes &mmires = g_theApp.m_MMIRes;
if( mmires.DeleteRing(pNode->szID) )
{
m_SizeInfo.DeleteByHandle( (DWORD)hItem );
m_pInfo->RemoveNode(pNode);
tc.DeleteItem(hItem);
SetModifiedFlag();
}
else
{
AfxMessageBox(_T("Delete item fail!"));
}
}
void CRingView::OnRingReplaceFile()
{
// TODO: Add your command handler code here
//if( AfxMessageBox(_T("Are sure replace this file content?") , MB_YESNO) == IDNO )
// return;
CFileDlg fdlg;
fdlg.SetFileExt(SZ_FILE_EXT);
fdlg.SetFileFilter(SZ_FILTER);
CString strFileName = fdlg.GetPathName();
if( strFileName.IsEmpty() )
return;
CTreeCtrl &tc = GetTreeCtrl();
HTREEITEM hItem = tc.GetSelectedItem();
_ASSERTE( hItem != NULL );
CDirFileNode * pNode = (CDirFileNode *)tc.GetItemData(hItem);
_ASSERTE( _tcslen(pNode->szID) > 0 );
if( ReplaceFile(pNode, strFileName, FALSE, hItem) )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -