📄 resorgappprojectsview2.cpp
字号:
/************************************************************************
*
* Resource ID Organiser Add-In
*
* (c) Copyright 2000-2002 by Anna-Jayne Metcalfe (resorg@annasplace.me.uk)
* All rights reserved.
*
************************************************************************
*
* Filename : ResOrgAppProjectsView2.cpp
*
* Description : CResOrgAppProjectsView2 - project workspace list view class
*
* Compiler : Microsoft Visual C++ 6.0, Service Pack 3 or 4
*
* Target
* Environment : Windows 98/NT
*
* NOTE:
*
* This software is provided "as is" free for personal use. All
* title and copyrights in and to the software, including but not
* limited to any images, text, etc. incorporated into it, are
* owned by Anna-Jayne Metcalfe, except where acknowledged otherwise.
*
* Your may freely to use this code in your own products, PROVIDED
* this notice is not removed or modified.
*
*
* Visit http://www.annasplace.me.uk/resorg for latest updates
*
************************************************************************
*
* MODIFICATION HISTORY:
*
* This is a controlled document. See project configuration
* control tool for latest version and full version history.
*
* $Archive: /Projects/AddIns/ResOrg/ResOrgApp/ResOrgAppProjectsView2.cpp $
* $Revision: 12 $
* $Date: 26/03/03 14:10 $
* $Author: Anna $
*
* $History: ResOrgAppProjectsView2.cpp $
*
* ***************** Version 12 *****************
* User: Anna Date: 26/03/03 Time: 14:10
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* Added CResOrgSymbolsDocMultiFile::GetDisplayTitle() to choose the title
* displayed for a multi-file Symbols Display
*
* ***************** Version 11 *****************
* User: Anna Date: 2/01/03 Time: 0:21
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* 1. Added support for WinXP visual themes
* 2. Initial support for multi-symbol file editing
*
* ***************** Version 10 *****************
* User: Anna Date: 25/11/02 Time: 14:59
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* Changed website address in banner
*
* ***************** Version 9 *****************
* User: Anna Date: 22/10/02 Time: 13:28
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* Changed name/mail address (at last!)
*
* ***************** Version 8 *****************
* User: Andy Date: 10/22/01 Time: 11:18a
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* Added the option to prompt if the "Next Symbol" values are in use
*
* ***************** Version 7 *****************
* User: Andy Date: 10/03/01 Time: 12:51p
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* Added "Properties" to the context menu
*
* ***************** Version 6 *****************
* User: Andy Date: 8/07/01 Time: 8:40
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* The Projects Display now autosizes the list control when it is resized
*
* ***************** Version 5 *****************
* User: Andy Date: 5/05/01 Time: 20:49
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* Trap attempts to Renumber symbols in empty resource symbol files from
* the Workspace Display
*
* ***************** Version 4 *****************
* User: Andy Date: 26/04/01 Time: 19:47
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* Renamed Resource.h to ResOrgAddIn_Res.h
*
* ***************** Version 3 *****************
* User: Andy Date: 23/04/01 Time: 21:25
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* Added icons to context menu
*
* ***************** Version 2 *****************
* User: Andy Date: 5/03/01 Time: 19:12
* Updated in $/Projects/AddIns/ResOrg/ResOrgApp
* 1. CResOrgAppProjectsView2::OnCmdOpenProject() now displays a message
* box if a resource symbol file cannot be located in a project instead of
* ASSERTing
* 2. The Workspace Display is now disabled if no workspace is loaded
* 3. CResOrgAppProjectsView2::SortList() now calls the base class
* implementation to set the correct sort image in the header control
* 4. Items inserted into the list control now have their item data set
* to allow sorting
* 5. CResOrgAppProjectsView2::OnCmdOpenProject() now displays a message
* box instead of ASSERTing if no resource symbol file can be identified
* within a project
*
* ***************** Version 1 *****************
* User: Andy Date: 2/03/01 Time: 17:20
* Created in $/Projects/AddIns/ResOrg/ResOrgApp
*
* ***************** Version 4 *****************
* User: Andy Date: 17/02/01 Time: 7:08
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* Context menu ID changed
*
* ***************** Version 3 *****************
* User: Andy Date: 29/11/00 Time: 18:37
* Updated in $/Projects/AddIns/ResOrg/ResOrgAddIn
* 1. Moved Office2KDlg code to its own DLL
* 2. Added file banners
*
* $Nokeywords: $
*
************************************************************************/
#include "StdAfx.h"
#include "ResOrgApp_Res.h"
#include "ResOrgApp.h"
#include "ResOrgAppProjectsDoc.h"
#include "ResOrgAppProjectsView2.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CResOrgAppProjectsView2
IMPLEMENT_DYNCREATE(CResOrgAppProjectsView2, CResOrgAppProjectsView2_BASE)
BEGIN_MESSAGE_MAP(CResOrgAppProjectsView2, CResOrgAppProjectsView2_BASE)
//{{AFX_MSG_MAP(CResOrgAppProjectsView2)
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_CONTEXTMENU()
ON_COMMAND( ID_PROJ_OPEN, OnCmdOpenProject)
ON_COMMAND( ID_PROJ_OPEN_MULTIPLE, OnCmdOpenProjectsTogether)
ON_UPDATE_COMMAND_UI( ID_PROJ_OPEN_MULTIPLE, OnUpdateOpenProjectsTogether)
ON_COMMAND( ID_PROJ_RENUMBER, OnCmdRenumberProject)
ON_UPDATE_COMMAND_UI( ID_PROJ_RENUMBER, OnUpdateRenumberProject)
ON_COMMAND( ID_PROJ_PROPERTIES, OnCmdProjectProperties)
ON_UPDATE_COMMAND_UI( ID_PROJ_PROPERTIES, OnUpdateProjectProperties)
//}}AFX_MSG_MAP
// The following are outside of ClassWizard's reach as it can't understand
// them....
// ON_NOTIFY_REFLECT( NM_DBLCLK, OnDblClick)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CResOrgAppProjectsView2 construction/destruction
CResOrgAppProjectsView2::CResOrgAppProjectsView2(void)
{
m_bInitialised = false;
}
CResOrgAppProjectsView2::~CResOrgAppProjectsView2(void)
{
Clear();
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAppProjectsView2 overrides
/******************************************************************************
* This method is called by the framework before the creation of the
* window attached to this CWnd object.
*
* This override is used to modify the window styles here to set the List
* control style to report view.
*
* This is achieved by masking out the view style using LVS_TYPEMASK
* and setting the LVS_REPORT style. LVS_SINGLESEL is also set to allow
* only single selections.
*
* Note that we DON'T want the LVS_SORTASCENDING style as this sorts items
* by item text and in this case we cannot have a comparison function.
*
******************************************************************************/
BOOL CResOrgAppProjectsView2::PreCreateWindow(CREATESTRUCT& cs)
{
// cs.style = (cs.style & ~LVS_TYPEMASK) | LVS_REPORT /*| LVS_SINGLESEL*/ | LVS_SHOWSELALWAYS;
return CResOrgAppProjectsView2_BASE::PreCreateWindow(cs);
}
void CResOrgAppProjectsView2::OnInitialUpdate(void)
{
// Change style to have:
//
// 1. Flat header (requires CJListCtrl)
// 2. Full row selection (requires ComCtl32.dll v4.71)
//
if (!m_bInitialised)
{
// CCJThemeHelper theme;
// if (!theme.IsAppThemed() )
// {
// SubclassHeader();
// }
// SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT);
// CRect rect;
// GetClientRect(rect);
// m_ctrlProjects.InsertColumn(0,
// _T("Project"),
// LVCFMT_LEFT,
// rect.Width(),
// -1);
m_bInitialised = TRUE;
}
CResOrgAppProjectsView2_BASE::OnInitialUpdate();
}
void CResOrgAppProjectsView2::OnUpdate( CView* pSender, LPARAM lHint, CObject* pHint)
{
UNREFERENCED_PARAMETER(pSender);
UNREFERENCED_PARAMETER(pHint);
switch (lHint)
{
case CLEAR_WORKSPACE:
m_ctrlProjects.DeleteAllItems();
m_ctrlProjects.EnableWindow(FALSE);
Clear();
break;
case SHOW_WORKSPACE:
m_ctrlProjects.DeleteAllItems();
m_ctrlProjects.EnableWindow(TRUE);
Clear();
GetDocument()->GetProjects(m_arrayProjects);
FillListCtrl();
// If there's only one project, open its symbol
// file automatically
if (m_arrayProjects.GetSize() == 1)
{
CString sProject = m_arrayProjects[0];
if (!sProject.IsEmpty())
{
OpenProject(sProject,
Options.WarnIfNextSymbolValuesInUse() );
}
}
break;
default:
m_ctrlProjects.DeleteAllItems();
Clear();
GetDocument()->GetProjects(m_arrayProjects);
m_ctrlProjects.EnableWindow( (m_arrayProjects.GetSize() > 0) );
FillListCtrl();
break;
}
}
void CResOrgAppProjectsView2::OnDraw(CDC* /*pDC*/)
{
CResOrgAppProjectsDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgAppProjectsView2 diagnostics
#ifdef _DEBUG
void CResOrgAppProjectsView2::AssertValid(void) const
{
CResOrgAppProjectsView2_BASE::AssertValid();
}
void CResOrgAppProjectsView2::Dump(CDumpContext& dc) const
{
CResOrgAppProjectsView2_BASE::Dump(dc);
}
CResOrgAppProjectsDoc* CResOrgAppProjectsView2::GetDocument(void) const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CResOrgAppProjectsDoc)));
return (CResOrgAppProjectsDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CResOrgAppProjectsView2 implementation
void CResOrgAppProjectsView2::FillListCtrl(void)
{
m_ctrlProjects.SetRedraw(FALSE);
m_ctrlProjects.DeleteAllItems();
CResOrgAppProjectsDoc* pDoc = GetDocument();
if (NULL != pDoc)
{
int nItem = -1;
CString sSolution = pDoc->GetSolutionName();
int nImage = m_images.AddIcon(IDI_SYM_SOLUTION);
HTREEITEM hRootItem = m_ctrlProjects.InsertItem(_T("Solution: ") + sSolution,
nImage,
nImage,
TVI_ROOT);
for (int n = 0; n < m_arrayProjects.GetSize(); n++)
{
CString sProject = m_arrayProjects[n];
nImage = m_images.AddIcon(IDI_SYM_PROJECT);
HTREEITEM hProjectItem = m_ctrlProjects.InsertItem( sProject,
nImage,
nImage,
hRootItem);
ASSERT(NULL != hProjectItem);
m_ctrlProjects.SetItemData(hProjectItem, (DWORD)&(m_arrayProjects[n]) );
CStringArray arrayResourceFilePathNames;
pDoc->GetResourceFilePathNames(sProject, arrayResourceFilePathNames);
for (int n = 0; n < arrayResourceFilePathNames.GetSize(); n++)
{
CString sResourceFilePathName = arrayResourceFilePathNames[n];
CNGSplitPath split(sResourceFilePathName);
nImage = m_images.AddIcon(IDI_SYM_RESOURCE_FILE);
HTREEITEM hResourceFileItem = m_ctrlProjects.InsertItem(split.GetFileName() + split.GetExtension(),
nImage,
nImage,
hProjectItem);
ASSERT(NULL != hResourceFileItem);
// Retrieve the name of the symbol file by parsing the rc file
CString sSymbolFilePathName = ::GetSymbolFileName(sResourceFilePathName);
CNGSplitPath splitSymFile(sSymbolFilePathName);
nImage = m_images.AddIcon(IDI_SYM_FILE);
HTREEITEM hSymbolFileItem = m_ctrlProjects.InsertItem( splitSymFile.GetFileName() + splitSymFile.GetExtension(),
nImage,
nImage,
hResourceFileItem);
}
}
m_ctrlProjects.SortChildren(hRootItem);
m_ctrlProjects.Expand(hRootItem, TVE_EXPAND);
}
m_ctrlProjects.SetRedraw(TRUE);
}
void CResOrgAppProjectsView2::Clear(void)
{
m_arrayProjects.RemoveAll();
}
CString CResOrgAppProjectsView2::GetSymbolFilePathName(const CString& sProject)
{
CString sSymbolFilePathName;
// First, extract the rc file name by parsing the .dsp file
CString sResourceFilePathName = GetDocument()->GetResourceFileName(sProject);
if (!sResourceFilePathName.IsEmpty())
{
// Retrieve the name of the symbol file by parsing the rc file
sSymbolFilePathName = ::GetSymbolFileName(sResourceFilePathName);
}
return sSymbolFilePathName;
}
CDocument* CResOrgAppProjectsView2::OpenResourceSymbolFile( const CString& sPathName,
BOOL bCheckNextSymbolValues /*= true*/)
{
CDocument* pDoc = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -