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

📄 ringview.cpp

📁 Resource editor base speadrum Chinese mobile
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -