// GrepView.cpp // // (c)1998-2025 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Grep.h" #include "GrepDoc.h" #include "GrepView.h" #include "DialogSettings.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CGrepView IMPLEMENT_DYNCREATE(CGrepView, CXTPGridView) BEGIN_MESSAGE_MAP(CGrepView, CXTPGridView) //{{AFX_MSG_MAP(CGrepView) ON_WM_CREATE() //}}AFX_MSG_MAP // Standard printing commands ON_NOTIFY(NM_DBLCLK, XTP_ID_GRID_CONTROL, OnGridItemDblClick) ON_NOTIFY(NM_KEYDOWN, XTP_ID_GRID_CONTROL, OnGridKeyDown) ON_NOTIFY(XTP_NM_GRID_LBUTTONDOWN, XTP_ID_GRID_CONTROL, OnGridLButtonDown) ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CGrepView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGrepView construction/destruction CGrepView::CGrepView() { m_bAllowPaste = FALSE; } CGrepView::~CGrepView() { } BOOL CGrepView::PreCreateWindow(CREATESTRUCT& cs) { cs.style |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS; cs.style &= ~WS_BORDER; return CXTPGridView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CGrepView diagnostics #ifdef _DEBUG void CGrepView::AssertValid() const { CXTPGridView::AssertValid(); } void CGrepView::Dump(CDumpContext& dc) const { CXTPGridView::Dump(dc); } CGrepDoc* CGrepView::GetDocument() // non-debug version is inline { _ASSERTE(m_pDocument->IsKindOf(RUNTIME_CLASS(CGrepDoc))); return (CGrepDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CGrepView message handlers int CGrepView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CXTPGridView::OnCreate(lpCreateStruct) == -1) return -1; CXTPGridControl& wndGrid = GetGridCtrl(); wndGrid.AddColumn(new CXTPGridColumn(0, _T("Name"), 80)); wndGrid.AddColumn(new CXTPGridColumn(5, _T("Ext"), 18)); wndGrid.AddColumn(new CXTPGridColumn(3, _T("Line"), 20)); CXTPGridColumn* pColumnDirectory = wndGrid.AddColumn( new CXTPGridColumn(1, _T("Directory"), 180)); pColumnDirectory->SetAlignment(DT_LEFT | DT_PATH_ELLIPSIS); wndGrid.AddColumn(new CXTPGridColumn(2, _T("Match"), 80)); CXTPGridColumn* pClmnApply = wndGrid.AddColumn(new CXTPGridColumn(4, _T("Apply"), 18, FALSE)); pClmnApply->EnableResize(TRUE); wndGrid.ShowGroupBy(); wndGrid.GetGridHeader()->AllowColumnRemove(FALSE); wndGrid.EnablePreviewMode(TRUE); wndGrid.SetAutoCheckItems(FALSE); return 0; } void CGrepView::OnGridItemDblClick(NMHDR* pNotifyStruct, LRESULT* /*result*/) { XTP_NM_GRIDRECORDITEM* pItemNotify = (XTP_NM_GRIDRECORDITEM*)pNotifyStruct; if (pItemNotify->pRow) { TRACE(_T("Double Click on row %d\n"), pItemNotify->pRow->GetIndex()); CGrepRecord* pRecord = (CGrepRecord*)pItemNotify->pRow->GetRecord(); if (pRecord) { if (g_settings.m_bUseEditor) ShellExecute(0, 0, g_settings.m_strEditor, (LPTSTR)(LPCTSTR)pRecord->m_strPath, 0, SW_SHOW); else ShellExecute(0, _T("open"), (LPTSTR)(LPCTSTR)pRecord->m_strPath, 0, 0, SW_SHOW); } } } void CGrepView::CheckSelected(BOOL bChecked) { CXTPGridSelectedRows* pSelectedRows = GetGridCtrl().GetSelectedRows(); POSITION pos = pSelectedRows->GetFirstSelectedRowPosition(); while (pos) { CXTPGridRow* pRow = pSelectedRows->GetNextSelectedRow(pos); if (pRow->GetRecord()) { ((CGrepRecord*)pRow->GetRecord())->SetChecked(bChecked); } } GetGridCtrl().RedrawControl(); } void CGrepView::OnGridKeyDown(NMHDR* pNotifyStruct, LRESULT* /*result*/) { LPNMKEY lpNMKey = (LPNMKEY)pNotifyStruct; if (lpNMKey->nVKey == VK_SPACE) { BOOL bChecked = FALSE; if (GetGridCtrl().GetFocusedRow() && GetGridCtrl().GetFocusedRow()->GetRecord()) bChecked = !((CGrepRecord*)(GetGridCtrl().GetFocusedRow()->GetRecord()))->IsChecked(); CheckSelected(bChecked); } } void CGrepView::OnGridLButtonDown(NMHDR* pNotifyStruct, LRESULT* result) { XTP_NM_GRIDRECORDITEM* pItemNotify = (XTP_NM_GRIDRECORDITEM*)pNotifyStruct; if (pItemNotify->pRow && pItemNotify->pRow->GetRecord() && pItemNotify->pColumn && pItemNotify->pColumn->GetItemIndex() == 4) { BOOL bChecked = !((CGrepRecord*)(pItemNotify->pRow->GetRecord()))->IsChecked(); if (pItemNotify->pRow->IsSelected()) { CheckSelected(bChecked); *result = TRUE; } else { ((CGrepRecord*)pItemNotify->pRow->GetRecord())->SetChecked(bChecked); } } } void CGrepView::OnFilePrintPreview() { // replace the default print preview with ours! // In derived classes, implement special window handling here // Be sure to Unhook Frame Window close if hooked. // must not create this on the frame. Must outlive this function CPrintPreviewState* pState = new CPrintPreviewState; // DoPrintPreview's return value does not necessarily indicate that // Print preview succeeded or failed, but rather what actions are necessary // at this point. If DoPrintPreview returns TRUE, it means that // OnEndPrintPreview will be (or has already been) called and the // pState structure will be/has been deleted. // If DoPrintPreview returns FALSE, it means that OnEndPrintPreview // WILL NOT be called and that cleanup, including deleting pState // must be done here. if (!DoPrintPreview(XTP_IDD_PREVIEW_DIALOGBAR, this, RUNTIME_CLASS(CXTPPreviewView), pState)) { // In derived classes, reverse special window handling here for // Preview failure case TRACE0("Error: DoPrintPreview failed.\n"); AfxMessageBox(AFX_IDP_COMMAND_FAILURE); delete pState; // preview failed to initialize, delete State now pState = NULL; } CFrameWnd* pFrameWnd = DYNAMIC_DOWNCAST(CFrameWnd, AfxGetMainWnd()); if (pFrameWnd) { CXTPPreviewView* pPPView = DYNAMIC_DOWNCAST(CXTPPreviewView, pFrameWnd->GetActiveView()); if (pPPView && pPPView->GetCommandBar()) { CXTPImageManager* pImgMgr = pPPView->GetCommandBar()->GetImageManager(); if (pImgMgr) { pImgMgr->RemoveIcon(XTP_ID_PREVIEW_PRINT); pImgMgr->RemoveIcon(XTP_ID_PREVIEW_PREV); pImgMgr->RemoveIcon(XTP_ID_PREVIEW_NEXT); pImgMgr->RemoveIcon(XTP_ID_PREVIEW_ZOOMIN); pImgMgr->RemoveIcon(XTP_ID_PREVIEW_ZOOMOUT); pImgMgr->RemoveIcon(XTP_ID_PREVIEW_ONEPAGE); pImgMgr->RemoveIcon(XTP_ID_PREVIEW_TWOPAGE); pImgMgr->RemoveIcon(XTP_ID_PREVIEW_CLOSE); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_NORMAL_PRINT, XTP_ID_PREVIEW_PRINT, XTP_DPI_X(16)); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_NORMAL_SYMBOL_ARROW_LEFT, XTP_ID_PREVIEW_PREV, XTP_DPI_X(16)); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_NORMAL_SYMBOL_ARROW_RIGHT, XTP_ID_PREVIEW_NEXT, XTP_DPI_X(16)); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_NORMAL_ZOOM_IN, XTP_ID_PREVIEW_ZOOMIN, XTP_DPI_X(16)); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_NORMAL_ZOOM_OUT, XTP_ID_PREVIEW_ZOOMOUT, XTP_DPI_X(16)); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_NORMAL_VIEW_PAGE_LAYOUT, XTP_ID_PREVIEW_ONEPAGE, XTP_DPI_X(16)); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_NORMAL_VIEW_PAGE_FOUR, XTP_ID_PREVIEW_TWOPAGE, XTP_DPI_X(16)); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_NORMAL_CLOSE, XTP_ID_PREVIEW_CLOSE, XTP_DPI_X(16)); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_DISABLED_PRINT, XTP_ID_PREVIEW_PRINT, XTP_DPI_X(16), xtpImageDisabled); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_DISABLED_SYMBOL_ARROW_LEFT, XTP_ID_PREVIEW_PREV, XTP_DPI_X(16), xtpImageDisabled); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_DISABLED_SYMBOL_ARROW_RIGHT, XTP_ID_PREVIEW_NEXT, XTP_DPI_X(16), xtpImageDisabled); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_DISABLED_ZOOM_IN, XTP_ID_PREVIEW_ZOOMIN, XTP_DPI_X(16), xtpImageDisabled); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_DISABLED_ZOOM_OUT, XTP_ID_PREVIEW_ZOOMOUT, XTP_DPI_X(16), xtpImageDisabled); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_DISABLED_VIEW_PAGE_LAYOUT, XTP_ID_PREVIEW_ONEPAGE, XTP_DPI_X(16), xtpImageDisabled); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_DISABLED_VIEW_PAGE_FOUR, XTP_ID_PREVIEW_TWOPAGE, XTP_DPI_X(16), xtpImageDisabled); pImgMgr->SetVectorIcon(_T("RT_XAML"), IDR_XAML_ICON_DISABLED_CLOSE, XTP_ID_PREVIEW_CLOSE, XTP_DPI_X(16), xtpImageDisabled); pPPView->GetCommandBar()->Redraw(); } } } }