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

📄 textview.cpp

📁 Resource editor base speadrum Chinese mobile
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// TextView.cpp : implementation file
//

#include "stdafx.h"
#include "resourceeditor.h"
#include "TextView.h"
#include "DirFileInfo.h"
#include "ResDoc.h"

#include "Filedlg.h"
#include "TextDlg.h"
#include "TextExDlg.h"
#include "FindDlg.h"

#include "comdef.h" 
#include "excel.h"
#include "atlconv.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


_TCHAR CTextView::ARR_CLMN_NAME[] = _T("ID,English,Simplified Chinese,Traditional Chinese");
/////////////////////////////////////////////////////////////////////////////
// CTextView

IMPLEMENT_DYNCREATE(CTextView, CListView)

CTextView::CTextView()
{
}

CTextView::~CTextView()
{
}


BEGIN_MESSAGE_MAP(CTextView, CListView)
	//{{AFX_MSG_MAP(CTextView)
	ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
	ON_COMMAND(IDM_TEXT_ADD_ITEM, OnTextAddItem)
	ON_COMMAND(IDM_TEXT_DEL_ITEM, OnTextDelItem)
	ON_COMMAND(IDM_TEXT_EDIT_ITEM, OnTextEditItem)
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	ON_UPDATE_COMMAND_UI(IDM_TEXT_ADD_FILE, OnUpdateTextAddFile)
	ON_UPDATE_COMMAND_UI(IDM_TEXT_ADD_ITEM, OnUpdateTextAddItem)
	ON_UPDATE_COMMAND_UI(IDM_TEXT_DEL_ITEM, OnUpdateTextDelItem)
	ON_UPDATE_COMMAND_UI(IDM_TEXT_EDIT_ITEM, OnUpdateTextEditItem)
	ON_COMMAND(IDM_TEXT_FIND_ITEM, OnTextFindItem)
	ON_WM_KEYDOWN()
	ON_UPDATE_COMMAND_UI(IDM_TEXT_SAVETO_FILE, OnUpdateTextSavetoFile)
	ON_COMMAND(IDM_TEXT_DEL_ALL_ITEM, OnTextDelAllItem)
	ON_COMMAND(IDM_TEXT_EXPORT_TO_EXCEL, OnTextExportToExcel)
	ON_COMMAND(IDM_TEXT_IMPORT_FORM_EXCEL, OnTextImportFormExcel)
	ON_UPDATE_COMMAND_UI(IDM_TEXT_IMPORT_FORM_EXCEL, OnUpdateTextImportFormExcel)
	ON_UPDATE_COMMAND_UI(IDM_TEXT_EXPORT_TO_EXCEL, OnUpdateTextExportToExcel)
	ON_UPDATE_COMMAND_UI(IDM_TEXT_DEL_ALL_ITEM, OnUpdateTextDelAllItem)
	ON_UPDATE_COMMAND_UI(IDM_TEXT_FIND_ITEM, OnUpdateTextFindItem)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTextView drawing

void CTextView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CTextView diagnostics

#ifdef _DEBUG
void CTextView::AssertValid() const
{
	CListView::AssertValid();
}

void CTextView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTextView message handlers

BOOL CTextView::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
	cs.style |= LVS_REPORT;
    cs.style |= LVS_SHOWSELALWAYS;
   
	return CListView::PreCreateWindow(cs);
}

void CTextView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	LPNMITEMACTIVATE pnia = (LPNMITEMACTIVATE)pNMHDR;
    
    CMenu menu;
	VERIFY( menu.LoadMenu(IDM_POPUP_TEXT) );

	CMenu * pMenu = menu.GetSubMenu(0);

    if( PreTrackPopupMenu(pMenu, pnia->iItem, pnia->iSubItem) )
    {
	    POINT pt = pnia->ptAction;
        ClientToScreen(&pt);
	    pMenu->TrackPopupMenu(TPM_LEFTALIGN, pt.x, pt.y, this);

	    *pResult = 1;
    }
    else
    {
        *pResult = 0;
    }
}

BOOL CTextView::PreTrackPopupMenu( CMenu * pMenu, int nIdx, int nSubItem /* = 0 */ )
{
	_ASSERTE( pMenu != NULL );

    CListCtrl &ls = GetListCtrl();

	if( !g_theApp.IsSuperUser() )
	{
		if( nIdx == -1 )
		{
			return FALSE;
		}
		else
		{
			pMenu->DeleteMenu(IDM_TEXT_ADD_FILE, MF_BYCOMMAND);
            pMenu->DeleteMenu(IDM_TEXT_SAVETO_FILE, MF_BYCOMMAND);
			pMenu->DeleteMenu(IDM_TEXT_ADD_ITEM, MF_BYCOMMAND);
			pMenu->DeleteMenu(IDM_TEXT_DEL_ITEM, MF_BYCOMMAND);
            pMenu->DeleteMenu(IDM_TEXT_DEL_ALL_ITEM, MF_BYCOMMAND);
			pMenu->DeleteMenu(IDM_TEXT_IMPORT_FORM_EXCEL, MF_BYCOMMAND);
			pMenu->DeleteMenu(IDM_TEXT_EXPORT_TO_EXCEL, MF_BYCOMMAND);
		}
	}
	else
	{
		if( nIdx == -1 )
		{
            pMenu->EnableMenuItem( IDM_TEXT_EDIT_ITEM, MF_BYCOMMAND | MF_GRAYED );
            pMenu->EnableMenuItem( IDM_TEXT_DEL_ITEM,  MF_BYCOMMAND | MF_GRAYED );
		}

        if( ls.GetSelectedCount() == 0 )
        {
            pMenu->EnableMenuItem( IDM_TEXT_SAVETO_FILE,  MF_BYCOMMAND | MF_GRAYED );
			pMenu->EnableMenuItem( IDM_TEXT_EXPORT_TO_EXCEL,  MF_BYCOMMAND | MF_GRAYED );
        }
	}   

    if( nIdx != -1 )
    {
        if( ls.GetSelectedCount() > 1 )
            pMenu->EnableMenuItem( IDM_TEXT_EDIT_ITEM,  MF_BYCOMMAND | MF_GRAYED );
    }

    if( ls.GetItemCount() == 0 )
    {
        pMenu->EnableMenuItem( IDM_TEXT_DEL_ALL_ITEM, MF_BYCOMMAND | MF_GRAYED );
        pMenu->EnableMenuItem( IDM_TEXT_FIND_ITEM,    MF_BYCOMMAND | MF_GRAYED );
    }

    m_FindInfo.nCurIdx  = nIdx;
    m_FindInfo.nSubItem = nSubItem;

	return TRUE;
}

void CTextView::FillColumn()
{
/*    CListCtrl &ls = GetListCtrl();

    LPTSTR pStart = ARR_CLMN_NAME;
    LPTSTR pFind  = _tcschr(pStart, _T(','));
    for( int i = 0; pFind != NULL; ++i )
    {
        *pFind = 0;
        ls.InsertColumn(i, pStart, LVCFMT_LEFT, 200 + i * 40);
        *pFind = _T(',');
        pStart = pFind + 1;
        pFind  = _tcschr(pStart, _T(','));
    }

    ls.InsertColumn(i, pStart, LVCFMT_LEFT, 200 + i * 40);

    // used test*/
	CListCtrl &ls = GetListCtrl();
	int nColNum = g_theApp.m_nUsedLangNum+1;
	CStringArray &arrColName = g_theApp.m_arrUsedLangNames;

	ls.InsertColumn(0, _T("ID"), LVCFMT_LEFT, 200);

	for(int i=1;i<nColNum;i++)
	{
		ls.InsertColumn(i, arrColName.GetAt(i-1), LVCFMT_LEFT, 200 + i * 40);
	}

}

void CTextView::OnInitialUpdate() 
{
	CListView::OnInitialUpdate();
	
    CListCtrl &ls = GetListCtrl();

    DWORD dwStyle = ls.GetExtendedStyle();
    dwStyle |= LVS_EX_GRIDLINES;
    dwStyle |= LVS_EX_FULLROWSELECT;
    ls.SetExtendedStyle( dwStyle );

	// TODO: Add your specialized code here and/or call the base class
	FillColumn();

    m_pInfo = g_theApp.m_pTextInfo;
    _ASSERTE( m_pInfo != NULL );

    CDirFileNode * pRoot  = (CDirFileNode *)m_pInfo->GetRoot();
    CDirFileNode * pChild = (CDirFileNode *)m_pInfo->GetChild(pRoot);
    
    for( int i = 0; pChild != NULL; ++i )
    {
        CStringArray arr;

		VERIFY( g_theApp.m_MMIRes.GetTextEx(pChild->szID, arr) );

        ls.InsertItem(i, pChild->szID);

		for(int j = 1; j <= g_theApp.m_nUsedLangNum; j++)
			ls.SetItemText(i, j, arr[j-1]);

        ls.SetItemData(i, (DWORD)pChild);

        pChild = (CDirFileNode *)m_pInfo->GetNext(pChild);
    }
}

void CTextView::SetModifiedFlag( BOOL bModified /* = TRUE */)
{
    CDocument * pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    pDoc->SetModifiedFlag( bModified );
}

//DEL void CTextView::OnTextAddFile() 
//DEL {
//DEL 	// TODO: Add your command handler code here
//DEL 	CFileDlg dlg;
//DEL     dlg.SetFileExt(_T(".def"));
//DEL     dlg.SetFileFilter(_T("text define files (*.def)|*.def|All Files (*.*)|*.*||"));
//DEL 
//DEL     CString strFileName = dlg.GetPathName();
//DEL     if( strFileName.IsEmpty() )
//DEL         return;
//DEL 
//DEL     CWaitCursor waitCur;
//DEL 
//DEL     if( !AddItemFromFile( strFileName ) )
//DEL         AfxMessageBox(_T("Add item from file fail!"));
//DEL     else
//DEL         SetModifiedFlag();
//DEL }

void CTextView::OnTextAddItem() 
{
	// TODO: Add your command handler code here

    CTextExDlg dlg;
	
    dlg.m_strArrLangValues.RemoveAll();
	int i=0;  
    for(i = 1;i<=g_theApp.m_nUsedLangNum;i++)
		dlg.m_strArrLangValues.Add(_T(""));

	CListCtrl &ls = GetListCtrl();
    POSITION pos = ls.GetFirstSelectedItemPosition();
	int nSel = -1;
	if(pos != NULL)
		nSel = ls.GetNextSelectedItem(pos);

	if(nSel!=-1)
		dlg.m_bSel = TRUE;

    if( dlg.DoModal() == IDOK )
    {
		if( g_theApp.m_MMIRes.AddTextEx( dlg.m_strID,  dlg.m_strArrLangValues ) )
        {
            int nCount = ls.GetItemCount();
			CDirFileNode * pRoot  = (CDirFileNode *)m_pInfo->GetRoot();
			CDirFileNode * pChild = NULL;
			CDirFileNode * pBrother = NULL;
			CDirFileNode * pCur     = NULL;
			//add at tail
			if(dlg.m_nPosition == ADD_ITEM_AT_TAIL)
			{
				ls.InsertItem( nCount, dlg.m_strID );
				for(i = 1;i<=g_theApp.m_nUsedLangNum;i++)
					ls.SetItemText( nCount, i, dlg.m_strArrLangValues.GetAt(i-1) );
				//for debug
	            CString strThai = dlg.m_strArrLangValues.GetAt(1);
				
				pChild = (CDirFileNode *)m_pInfo->MallocNode();
				if( NULL == pChild )
					return ;
        
				_tcscpy( pChild->szID, dlg.m_strID );
				m_pInfo->AddChild( pRoot, pChild );
				ls.SetItemData(nCount, (DWORD)pChild);
			}
			//add at head
			if(dlg.m_nPosition == ADD_ITEM_AT_HEAD)
			{
				ls.InsertItem(nCount,ls.GetItemText(nCount-1,0));
				ls.SetItemData(nCount,ls.GetItemData(nCount-1));
				for(i = 1;i<=g_theApp.m_nUsedLangNum;i++)
					ls.SetItemText( nCount, i, ls.GetItemText(nCount-1,i) );

				for(i = nCount-1;i>=1;i--)
				{
					ls.SetItemData(i,ls.GetItemData(i-1));
					for(int j=0; j <= g_theApp.m_nUsedLangNum; j++)
						ls.SetItemText( i, j, ls.GetItemText(i-1,j) );
				}
				ls.SetItemText( 0, 0,dlg.m_strID );
				for(i = 1;i<=g_theApp.m_nUsedLangNum;i++)
					ls.SetItemText( 0, i, dlg.m_strArrLangValues.GetAt(i-1));

				pChild = (CDirFileNode *)m_pInfo->MallocNode();
				if( NULL == pChild )
					return ;
        
				_tcscpy( pChild->szID, dlg.m_strID );
				m_pInfo->AddChild( pRoot, pChild, FALSE );
				ls.SetItemData(0, (DWORD)pChild);
			}
			//add before curent
			if(dlg.m_nPosition == ADD_ITEM_BEFORE_CUR)
			{
				_ASSERT(nSel != -1);
				pCur = (CDirFileNode *)ls.GetItemData(nSel);
				_ASSERT(pCur != NULL);	
				
				ls.InsertItem(nCount,ls.GetItemText(nCount-1,0));
				ls.SetItemData(nCount,ls.GetItemData(nCount-1));
				for(i = 1;i<=g_theApp.m_nUsedLangNum;i++)
					ls.SetItemText( nCount, i, ls.GetItemText(nCount-1,i) );

				for(i = nCount-1;i>=nSel+1;i--)
				{
					ls.SetItemData(i,ls.GetItemData(i-1));
					for(int j=0; j <= g_theApp.m_nUsedLangNum; j++)
						ls.SetItemText( i, j, ls.GetItemText(i-1,j) );
				}
				ls.SetItemText( nSel, 0,dlg.m_strID );
				for(i = 1;i<=g_theApp.m_nUsedLangNum;i++)
					ls.SetItemText( nSel, i, dlg.m_strArrLangValues.GetAt(i-1));

				pBrother = (CDirFileNode *)m_pInfo->MallocNode();
				if( NULL == pBrother )
					return ;
        
				_tcscpy( pBrother->szID, dlg.m_strID );
				m_pInfo->InsertInBrothers( pCur, pBrother, TRUE );
				ls.SetItemData(nSel, (DWORD)pBrother);
			}

			//add after curent
			if(dlg.m_nPosition == ADD_ITEM_AFTER_CUR)
			{
				_ASSERT(nSel != -1);
				pCur = (CDirFileNode *)ls.GetItemData(nSel);
				_ASSERT(pCur != NULL);	
				
				ls.InsertItem(nCount,ls.GetItemText(nCount-1,0));
				ls.SetItemData(nCount,ls.GetItemData(nCount-1));
				for(i = 1;i<=g_theApp.m_nUsedLangNum;i++)
					ls.SetItemText( nCount, i, ls.GetItemText(nCount-1,i) );

				for(i = nCount-1;i>=nSel+2;i--)
				{
					ls.SetItemData(i,ls.GetItemData(i-1));
					for(int j=0; j <= g_theApp.m_nUsedLangNum; j++)
						ls.SetItemText( i, j, ls.GetItemText(i-1,j) );
				}
				ls.SetItemText( nSel+1, 0,dlg.m_strID );
				for(i = 1;i<=g_theApp.m_nUsedLangNum;i++)
					ls.SetItemText( nSel+1, i, dlg.m_strArrLangValues.GetAt(i-1));

				pBrother = (CDirFileNode *)m_pInfo->MallocNode();
				if( NULL == pBrother )
					return ;
        
				_tcscpy( pBrother->szID, dlg.m_strID );
				m_pInfo->InsertInBrothers( pCur, pBrother, FALSE );
				ls.SetItemData(nSel+1, (DWORD)pBrother);
			}
            SetModifiedFlag();
        }  
        else
        {
            AfxMessageBox(g_theApp.m_MMIRes.GetErrMsg());
        }
    }
}

void CTextView::OnTextDelItem() 
{
	// TODO: Add your command handler code here
	if( AfxMessageBox(_T("Are you sure delete the selected items!"), MB_YESNO) == IDNO )
        return;

    CWaitCursor waitCursor;

    CListCtrl &ls = GetListCtrl();

    POSITION pos = ls.GetFirstSelectedItemPosition();
    _ASSERTE( pos != NULL );

    CUIntArray arrSel;
    while( pos != NULL )
    {
        arrSel.Add( ls.GetNextSelectedItem(pos) );
    }

    int nCount = arrSel.GetSize();
    CString strID;
    for( int i = nCount - 1; i >= 0; --i )
    {
        strID = ls.GetItemText(arrSel[i], 0);
        //if( g_theApp.m_MMIRes.DeleteText(strID) )
	    //xb
		if( g_theApp.m_MMIRes.DeleteTextEx(strID) )
		//xe*/
        {
            CDirFileNode * pNode = (CDirFileNode *)ls.GetItemData(arrSel[i]);
            m_pInfo->RemoveNode(pNode);

            ls.DeleteItem(arrSel[i]);            
        }
        else
        {
            _ASSERTE( 0 );
        }
    }

    arrSel.RemoveAll();

    SetModifiedFlag();
}

void CTextView::OnTextDelAllItem() 
{
	// TODO: Add your command handler code here
	if( AfxMessageBox(_T("Are you sure delete all items!"), MB_YESNO) == IDNO )
        return;

    CWaitCursor waitCursor;

    CListCtrl &lst = GetListCtrl();

    CDirFileNode * pNode  = NULL;
    CString        strID;
    int            nCount = lst.GetItemCount();
    for( int i = 0; i < nCount; ++i )
    {
        strID = lst.GetItemText(i, 0);
		g_theApp.m_MMIRes.DeleteTextEx(strID);
        pNode = (CDirFileNode *)lst.GetItemData(i);
        m_pInfo->RemoveNode(pNode);
    }
  

⌨️ 快捷键说明

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