📄 resorgsymbolslistview.cpp
字号:
// TODO: add extra initialization before printing
}
void CResOrgSymbolsListView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsListView diagnostics
#ifdef _DEBUG
void CResOrgSymbolsListView::AssertValid(void) const
{
CResOrgSymbolsListView_BASE::AssertValid();
}
void CResOrgSymbolsListView::Dump(CDumpContext& dc) const
{
CResOrgSymbolsListView_BASE::Dump(dc);
}
CResOrgSymbolsDoc* CResOrgSymbolsListView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CResOrgSymbolsDoc)));
return (CResOrgSymbolsDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsListView implementation
void CResOrgSymbolsListView::Initialise(void)
{
if (!m_bInitialised)
{
m_ctrlSymbols.Initialise(TRUE);
m_bInitialised = TRUE;
}
}
BOOL CResOrgSymbolsListView::ConfirmDelete(const CString& sSymbol /*= _T("")*/ ) const
{
CNGMessageBox dlg;
if (!sSymbol.IsEmpty())
{
dlg.FormatMsgEx(MAKEINTRESOURCE(IDP_SYM_DELETE_WARNING_EX),
_T("RTF"),
sSymbol);
}
else
{
dlg.SetMsgEx( MAKEINTRESOURCE( IDP_SYM_DELETE_WARNING),
_T("RTF") );
}
dlg.SetRtf();
dlg.SetStandardIcon(IDI_WARNING);
dlg.AddButton(IDYES, FALSE, FALSE, _T("&Yes") );
dlg.AddButton(IDNO, TRUE, TRUE, _T("&No") );
return (IDYES == dlg.DoModal());
}
/////////////////////////////////////////////////////////////////////////////
// CResOrgSymbolsListView message handlers
int CResOrgSymbolsListView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
int nResult = CResOrgSymbolsListView_BASE::OnCreate(lpCreateStruct);
if (-1 != nResult)
{
if (!m_ctrlSymbols.Create( WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS,
CRect(0,0,0,0),
this,
IDC_RESORG_SYMBOLS))
{
TRACE(_T("Failed to create References tab window.\n"));
return -1;
}
}
return nResult;
}
void CResOrgSymbolsListView::OnSize(UINT nType, int cx, int cy)
{
CResOrgSymbolsListView_BASE::OnSize(nType, cx, cy);
if (m_ctrlSymbols.GetSafeHwnd() != NULL)
{
m_ctrlSymbols.SetWindowPos( NULL,
0,
0,
cx,
cy,
SWP_SHOWWINDOW|SWP_NOZORDER
);
}
}
// Context Menu handler
void CResOrgSymbolsListView::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
{
// Make sure window is active
GetParentFrame()->ActivateFrame();
CCJMenu menu;
if (menu.LoadMenu(IDM_SYM_CONTEXT_MENU))
{
menu.LoadToolbar(IDR_MAINFRAME);
CMenu* pPopup = menu.GetSubMenu(0);
ASSERT(NULL != pPopup);
pPopup->SetDefaultItem(ID_SYM_PROPERTIES);
pPopup->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,
point.x,
point.y,
AfxGetMainWnd() ); // Route commands through the main window
return;
}
Default(); // Default message handling if we didn't do anything
}
void CResOrgSymbolsListView::OnItemChangedListCtrl(NMHDR* /*pNMHDR*/, LRESULT* pResult)
{
*pResult = 0;
// Reserved for future expansion
}
/******************************************************************************
* Called when the user double clicks on an item in the list
*
******************************************************************************/
void CResOrgSymbolsListView::OnDblClickListCtrl(NMHDR* /*pNMHDR*/, LRESULT* pResult)
{
*pResult = 0;
OnCmdSymbolProperties();
}
void CResOrgSymbolsListView::OnCmdAutosizeColumns(void)
{
m_ctrlSymbols.AutoSizeColumn();
}
/******************************************************************************
* Handlers for Edit|Select All menu command
*
******************************************************************************/
void CResOrgSymbolsListView::OnCmdEditSelectAll(void)
{
#if 0
CMapStringToPtr* pMap = GetDocument()->GetSymbolMap();
ASSERT(NULL != pMap);
POSITION pos = pMap->GetStartPosition();
// Zoom through the map...
CString sKey;
CResourceSymbol* pSymbol = NULL;
while (NULL != pos)
{
pMap->GetNextAssoc(pos, sKey, (LPVOID&)pSymbol );
if (NULL != pSymbol)
{
LV_FINDINFO FindInfo;
FindInfo.flags = LVFI_PARAM;
FindInfo.lParam = (DWORD)pSymbol;
int nItem = GetListCtrl().FindItem(&FindInfo);
if (nItem >= 0)
{
GetListCtrl().SetItemState(nItem, /*LVIS_FOCUSED |*/ LVIS_SELECTED, 0xff);
}
}
}
#endif
}
void CResOrgSymbolsListView::OnUpdateEditSelectAll(CCmdUI* pCmdUI)
{
pCmdUI->Enable( TRUE );
// pCmdUI->Enable( !GetDocument()->IsEmpty() );
}
/******************************************************************************
* Edit the configuration of the currently selected Symbol
*
******************************************************************************/
void CResOrgSymbolsListView::OnCmdSymbolProperties(void)
{
CResourceSymbol* pSymbol = m_ctrlSymbols.LookupSelection();
if (NULL != pSymbol)
{
// Create a dialog object and let it do the difficult bit
CSymbolPropertySheet dlg(IDP_SYM_PROPERTIES_CAPTION, this);
dlg.Initialise( GetDocument()->GetSymbolBuffer(),
pSymbol);
if (IDOK == dlg.DoModal())
{
GetDocument()->Set( pSymbol,
dlg.m_GeneralPage.m_sName,
dlg.m_GeneralPage.m_uValue,
dlg.m_GeneralPage.m_bReadOnly);
}
}
}
void CResOrgSymbolsListView::OnUpdateSymbolProperties(CCmdUI* pCmdUI)
{
pCmdUI->Enable( m_ctrlSymbols.LookupSelection() != NULL );
}
void CResOrgSymbolsListView::OnCmdAddSymbol(void)
{
CString sName = GetDocument()->GetSymbolBuffer()->GetUnusedName(SYM_RESOURCE);
ASSERT(!sName.IsEmpty());
CResourceSymbol Symbol( sName,
GetDocument()->GetSymbolBuffer()->m_uNextResourceValue);
// Create a dialog object and let it do the difficult bit
CSymbolPropertySheet dlg(IDP_SYM_ADD_CAPTION, this);
dlg.Initialise( GetDocument()->GetSymbolBuffer(),
&Symbol);
dlg.m_GeneralPage.m_bWarnOnSymbolChanges = FALSE; // This is a new symbol, so don't warn
if (IDOK == dlg.DoModal())
{
CResourceSymbol* pSymbol = GetDocument()->Add( dlg.m_GeneralPage.m_sName,
dlg.m_GeneralPage.m_uValue,
0);
pSymbol->SetReadOnly(dlg.m_GeneralPage.m_bReadOnly);
GetDocument()->UpdateAllViews(NULL, SYM_CHANGED, (CObject*)pSymbol); // For read only attribute only
// Select the new symbol
int nItem = m_ctrlSymbols.FindSymbol(pSymbol);
if (nItem >= 0)
{
m_ctrlSymbols.EnsureVisible(nItem, FALSE);
m_ctrlSymbols.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
}
}
}
void CResOrgSymbolsListView::OnCmdDeleteSymbol(void)
{
CResourceSymbol* pSymbol = NULL;
switch (m_ctrlSymbols.GetSelectedCount())
{
case 1:
pSymbol = m_ctrlSymbols.LookupSelection();
if (NULL != pSymbol) // Single selection
{
BOOL bOkToDelete = TRUE;
if (Options.WarnOnSymbolChanges())
{
if (!ConfirmDelete(pSymbol->GetName() ) )
{
bOkToDelete = FALSE;
}
}
if (bOkToDelete)
{
GetDocument()->Remove(pSymbol);
}
}
break;
default: // Multiple (or no) selection
BOOL bOkToDelete = TRUE;
if (Options.WarnOnSymbolChanges())
{
if (!ConfirmDelete() )
{
bOkToDelete = FALSE;
}
}
if (bOkToDelete)
{
CTypedPtrArray<CPtrArray, CResourceSymbol*>arrayToDelete;
POSITION pos = m_ctrlSymbols.GetFirstSelectedItemPosition();
while (pos != NULL)
{
int nItem = m_ctrlSymbols.GetNextSelectedItem(pos);
pSymbol = (CResourceSymbol*)m_ctrlSymbols.GetItemData(nItem);
arrayToDelete.Add(pSymbol);
}
ASSERT(arrayToDelete.GetSize() != 0);
for (int n = 0; n <= arrayToDelete.GetUpperBound(); n++)
{
pSymbol = arrayToDelete[n];
GetDocument()->GetSymbolBuffer()->Remove(pSymbol);
delete pSymbol;
}
GetDocument()->UpdateAllViews(NULL, SYM_REFRESH, NULL);
}
break;
}
}
void CResOrgSymbolsListView::OnUpdateDeleteSymbol(CCmdUI* pCmdUI)
{
pCmdUI->Enable( m_ctrlSymbols.GetSelectedCount() >= 1 );
}
LRESULT CResOrgSymbolsListView::OnHelpHitTest(WPARAM, LPARAM)
{
return IDR_DISPLAY_SYMBOLS + HID_BASE_RESOURCE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -