// SpreadsheetSampleView.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 "SpreadsheetSample.h" #include "SpreadsheetSampleDoc.h" #include "SpreadsheetSampleView.h" #include "MainFrm.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define ID_REMOVE_ITEM 1 #define ID_SORT_ASC 2 #define ID_SORT_DESC 3 #define ID_SORT_NO 99 #define ID_GROUP_BYTHIS 4 #define ID_SHOW_GROUPBOX 5 #define ID_SHOW_FIELDCHOOSER 6 ///////////////////////////////////////////////////////////////////////////// // CSpreadsheetSampleView IMPLEMENT_DYNCREATE(CSpreadsheetSampleView, CXTPGridView) BEGIN_MESSAGE_MAP(CSpreadsheetSampleView, CXTPGridView) //{{AFX_MSG_MAP(CSpreadsheetSampleView) ON_WM_CREATE() ON_WM_SETFOCUS() ON_WM_DESTROY() // Grid behavior ON_COMMAND(ID_BEHAVIOR_CODEJOCKDEFAULT, OnBehaviorCodejockDefault) ON_COMMAND(ID_BEHAVIOR_CODEJOCK1502, OnBehaviorCodejock1502) ON_COMMAND(ID_BEHAVIOR_OUTLOOK2003, OnBehaviorOutlook2003) ON_COMMAND(ID_BEHAVIOR_OUTLOOK2007, OnBehaviorOutlook2007) ON_COMMAND(ID_BEHAVIOR_OUTLOOK2010, OnBehaviorOutlook2010) ON_COMMAND(ID_BEHAVIOR_EXCEL2003, OnBehaviorExcel2003) ON_COMMAND(ID_BEHAVIOR_EXCEL2007, OnBehaviorExcel2007) ON_COMMAND(ID_BEHAVIOR_EXCEL2010, OnBehaviorExcel2010) ON_COMMAND(ID_BEHAVIOR_CUSTOM, OnBehaviorCustom) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_CODEJOCKDEFAULT, OnUpdateBehaviorCodejockDefault) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_CODEJOCK1502, OnUpdateBehaviorCodejock1502) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_OUTLOOK2003, OnUpdateBehaviorOutlook2003) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_OUTLOOK2007, OnUpdateBehaviorOutlook2007) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_OUTLOOK2010, OnUpdateBehaviorOutlook2010) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_EXCEL2003, OnUpdateBehaviorExcel2003) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_EXCEL2007, OnUpdateBehaviorExcel2007) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_EXCEL2010, OnUpdateBehaviorExcel2010) ON_UPDATE_COMMAND_UI(ID_BEHAVIOR_CUSTOM, OnUpdateBehaviorCustom) // Grid control ON_COMMAND(ID_GRIDCONTROL_DOUBLEBUFFERING, OnGridDoubleBuffering) ON_COMMAND(ID_GRIDCONTROL_LOCKEXPAND, OnGridLockExpand) ON_COMMAND(ID_GRIDCONTROL_WATERMARK, OnGridWatermark) ON_COMMAND(ID_GRIDCONTROL_SMOOTH_SCROLLING, OnGridSmoothScrolling) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_DOUBLEBUFFERING, OnUpdateGridDoubleBuffering) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_LOCKEXPAND, OnUpdateGridLockExpand) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_WATERMARK, OnUpdateGridWatermark) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_SMOOTH_SCROLLING, OnUpdateGridSmoothScrolling) ON_COMMAND(ID_ENABLE_PREVIEW, OnEnablePreview) ON_COMMAND(ID_TEST_GROUPBY, OnGroupBy) ON_COMMAND(ID_TEST_GROUPSHADE, OnGroupShade) ON_COMMAND(ID_TEST_GROUPSBOLD, OnGroupBold) ON_COMMAND(ID_GRIDCONTROL_AUTOMATICFORMATTINGSAMPLE, OnGridControlAutomaticformattingsample) ON_UPDATE_COMMAND_UI(ID_ENABLE_PREVIEW, OnUpdateEnablePreview) ON_UPDATE_COMMAND_UI(ID_TEST_GROUPBY, OnUpdateGroupBy) ON_UPDATE_COMMAND_UI(ID_TEST_GROUPSHADE, OnUpdateGroupShade) ON_UPDATE_COMMAND_UI(ID_TEST_GROUPSBOLD, OnUpdateGroupBold) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_AUTOMATICFORMATTINGSAMPLE, OnUpdateGridControlAutomaticformattingsample) ON_COMMAND(ID_OPTIONS_ALLOWCOLUMNRESIZE, OnOptionsAllowcolumnresize) ON_COMMAND(ID_OPTIONS_ALLOWCOLUMNSREMOVE, OnOptionsAllowcolumnsremove) ON_COMMAND(ID_OPTIONS_MULTIPLESELECTION, OnOptionsMultipleselection) ON_COMMAND(ID_OPTIONS_SHOWITEMSINGROUPS, OnOptionsShowitemsingroups) ON_UPDATE_COMMAND_UI(ID_OPTIONS_ALLOWCOLUMNRESIZE, OnUpdateOptionsAllowcolumnresize) ON_UPDATE_COMMAND_UI(ID_OPTIONS_ALLOWCOLUMNSREMOVE, OnUpdateOptionsAllowcolumnsremove) ON_UPDATE_COMMAND_UI(ID_OPTIONS_MULTIPLESELECTION, OnUpdateOptionsMultipleselection) ON_UPDATE_COMMAND_UI(ID_OPTIONS_SHOWITEMSINGROUPS, OnUpdateOptionsShowitemsingroups) ON_COMMAND(ID_OPTIONS_AUTOMATICCOLUMNSIZING, OnOptionsAutomaticcolumnsizing) ON_UPDATE_COMMAND_UI(ID_OPTIONS_AUTOMATICCOLUMNSIZING, OnUpdateOptionsAutomaticcolumnsizing) ON_COMMAND(ID_OPTIONS_FULLCOLUMNSCROLING, OnOptionsFullColumnScrolling) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FULLCOLUMNSCROLING, OnUpdateOptionsFullColumnScrolling) ON_COMMAND(ID_GRIDHEADER_ALLOWCOLUMNREORDER, OnGridheaderAllowColumnReorder) ON_UPDATE_COMMAND_UI(ID_GRIDHEADER_ALLOWCOLUMNREORDER, OnUpdateGridHeaderAllowColumnReorder) ON_COMMAND_RANGE(ID_COLUMNSTYLE_SHADED, ID_COLUMNSTYLE_OFFICE2007, OnColumnStyle) ON_UPDATE_COMMAND_UI_RANGE(ID_COLUMNSTYLE_SHADED, ID_COLUMNSTYLE_OFFICE2007, OnUpdateColumnStyle) ON_COMMAND(ID_GRIDCONTROL_RIGHTTOLEFT, OnGridControlRighttoleft) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_RIGHTTOLEFT, OnUpdateGridControlRighttoleft) // Freeze columns ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_0, OnOptionsFreezecolumns0) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_1, OnOptionsFreezecolumns1) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_2, OnOptionsFreezecolumns2) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_3, OnOptionsFreezecolumns3) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_0, OnUpdateOptionsFreezecolumns0) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_1, OnUpdateOptionsFreezecolumns1) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_2, OnUpdateOptionsFreezecolumns2) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_3, OnUpdateOptionsFreezecolumns3) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_1, OnOptionsFreezecolumnsDivider1) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_2, OnOptionsFreezecolumnsDivider2) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_1, OnUpdateOptionsFreezecolumnsDivider1) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_2, OnUpdateOptionsFreezecolumnsDivider2) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_HEADER, OnOptionsFreezecolumnsDividerHeader) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_NONE, OnOptionsFreezecolumnsDividerNone) ON_COMMAND(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_SHADE, OnOptionsFreezecolumnsDividerShade) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_HEADER, OnUpdateOptionsFreezecolumnsDividerHeader) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_NONE, OnUpdateOptionsFreezecolumnsDividerNone) ON_UPDATE_COMMAND_UI(ID_OPTIONS_FREEZECOLUMNS_DIVIDER_SHADE, OnUpdateOptionsFreezecolumnsDividerShade) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND_RANGE(ID_GRID_HORIZONTAL_NOGRIDLINES, ID_GRID_HORIZONTAL_SOLID, OnGridHorizontal) ON_UPDATE_COMMAND_UI_RANGE(ID_GRID_HORIZONTAL_NOGRIDLINES, ID_GRID_HORIZONTAL_SOLID, OnUpdateGridHorizontal) ON_COMMAND_RANGE(ID_GRID_VERTICAL_NOGRIDLINES, ID_GRID_VERTICAL_SOLID, OnGridVertical) ON_UPDATE_COMMAND_UI_RANGE(ID_GRID_VERTICAL_NOGRIDLINES, ID_GRID_VERTICAL_SOLID, OnUpdateGridVertical) ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CSpreadsheetSampleView::OnFilePrintPreview) ON_COMMAND(ID_FILE_PAGE_SETUP, CXTPGridView::OnFilePageSetup) ON_NOTIFY(NM_CLICK, XTP_ID_GRID_CONTROL, OnGridItemClick) ON_NOTIFY(XTP_NM_GRID_HYPERLINK, XTP_ID_GRID_CONTROL, OnGridHyperlinkClick) ON_NOTIFY(NM_RCLICK, XTP_ID_GRID_CONTROL, OnGridItemRClick) ON_NOTIFY(NM_DBLCLK, XTP_ID_GRID_CONTROL, OnGridItemDblClick) ON_NOTIFY(XTP_NM_GRID_HEADER_RCLICK, XTP_ID_GRID_CONTROL, OnGridColumnRClick) ON_NOTIFY(NM_KEYDOWN, XTP_ID_GRID_CONTROL, OnGridKeyDown) ON_NOTIFY(LVN_BEGINDRAG, XTP_ID_GRID_CONTROL, OnGridBeginDrag) ON_NOTIFY(XTP_NM_GRID_BEFORE_PASTE_FROMTEXT, XTP_ID_GRID_CONTROL, OnGridBeforePasteFromText) ON_NOTIFY(XTP_NM_GRID_BEFORE_PASTE, XTP_ID_GRID_CONTROL, OnGridBeforePaste) ON_COMMAND(ID_GRIDCONTROL_WYSIWYG_PRINT, OnGridWYSIWYG) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_WYSIWYG_PRINT, OnUpdateGridWYSIWYG) ON_COMMAND(ID_GRIDCONTROL_ICONVIEW, OnGridIconview) ON_UPDATE_COMMAND_UI(ID_GRIDCONTROL_ICONVIEW, OnUpdateGridIconview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSpreadsheetSampleView construction/destruction CSpreadsheetSampleView::CSpreadsheetSampleView() : m_pWndMerge(NULL) , m_pWndSelection(NULL) , m_pWndSmoothScroll(NULL) { m_bAutomaticFormating = FALSE; m_pTaskFrame = 0; m_pHeaderFooterFrame = 0; m_pPropertiesFrame = 0; m_bMultilineSample = FALSE; m_bWYSIWYG = FALSE; } CSpreadsheetSampleView::~CSpreadsheetSampleView() { } BOOL CSpreadsheetSampleView::PreCreateWindow(CREATESTRUCT& cs) { if (!CView::PreCreateWindow(cs)) return FALSE; // cs.dwExStyle |= WS_EX_STATICEDGE; cs.dwExStyle &= ~WS_EX_CLIENTEDGE; return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CSpreadsheetSampleView diagnostics #ifdef _DEBUG void CSpreadsheetSampleView::AssertValid() const { CView::AssertValid(); } void CSpreadsheetSampleView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CSpreadsheetSampleDoc* CSpreadsheetSampleView::GetDocument() // non-debug version is inline { _ASSERTE(m_pDocument->IsKindOf(RUNTIME_CLASS(CSpreadsheetSampleDoc))); return (CSpreadsheetSampleDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CSpreadsheetSampleView message handlers int CSpreadsheetSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CXTPGridView::OnCreate(lpCreateStruct) == -1) return -1; VERIFY(m_ilIcons.Create(16, 16, ILC_COLOR24 | ILC_MASK, 0, 1)); CBitmap bmp; VERIFY(bmp.LoadBitmap(IDB_BMGRID)); m_ilIcons.Add(&bmp, RGB(255, 0, 255)); CXTPGridControl& wndGrid = GetGridCtrl(); wndGrid.SetImageList(&m_ilIcons); CXTPGridColumn* pColumnFixed = wndGrid.AddColumn(new CXTPGridColumn(0, _T(""), 50)); pColumnFixed->SetFixed(TRUE); pColumnFixed->SetAutoNumbering(TRUE); enum { ColumnCount = 10, RecordCount = 25 }; LPCTSTR lpszColumnName[] = { _T("A"), _T("B"), _T("C"), _T("D"), _T("E"), _T("F"), _T("G"), _T("H"), _T("I"), _T("J"), _T("K"), _T("L"), _T("M"), _T("N"), _T("O"), _T("P"), _T("Q"), _T("R"), _T("S"), _T("T"), _T("U"), _T("V"), _T("W"), _T("X"), _T("Y"), _T("Z") }; for (int nColumn = 0; nColumn < ColumnCount; nColumn++) { wndGrid.AddColumn( new CXTPGridColumn(wndGrid.GetColumns()->GetCount(), lpszColumnName[nColumn], 100)); } for (int nRecord = 0; nRecord < RecordCount; nRecord++) { CXTPGridRecord* pRecord = wndGrid.AddRecord(new CXTPGridRecord()); pRecord->AddItem(new CXTPGridRecordItemNumber()); for (int nColumn = 0; nColumn < ColumnCount; nColumn++) { CXTPGridRecordItemText* pItem = new CXTPGridRecordItemText(); pRecord->AddItem(pItem); } } wndGrid.Populate(); wndGrid.FocusSubItems(TRUE); wndGrid.AllowEdit(TRUE); wndGrid.GetPaintManager()->SetGridStyle(TRUE, xtpGridLineStyleSolid); wndGrid.GetGridHeader()->SetAutoColumnSizing(FALSE); #if defined(_XTP_INCLUDE_COMMANDBARS) wndGrid.GetPaintManager()->SetColumnStyle(xtpGridColumnResource); #endif return 0; } // Before self destroying destroy all child forms void CSpreadsheetSampleView::OnDestroy() { SaveGridState(); if (m_pTaskFrame) m_pTaskFrame->DestroyWindow(); if (m_pPropertiesFrame) m_pPropertiesFrame->DestroyWindow(); if (m_pHeaderFooterFrame) m_pHeaderFooterFrame->DestroyWindow(); if (m_pWndMerge) { m_pWndMerge->DestroyWindow(); } if (m_pWndSelection) { m_pWndSelection->DestroyWindow(); } CView::OnDestroy(); } // Preview is a text message which is shown for every row, // if GridControl is in Preview mode. // In this sample preview text is equal to Message text, // but it doesn't have to be always used in such way void CSpreadsheetSampleView::OnEnablePreview() { GetGridCtrl().EnablePreviewMode(!GetGridCtrl().IsPreviewMode()); GetGridCtrl().Populate(); } void CSpreadsheetSampleView::OnUpdateEnablePreview(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsPreviewMode()); } void CSpreadsheetSampleView::OnGroupBy() { GetGridCtrl().ShowGroupBy(!GetGridCtrl().IsGroupByVisible()); } void CSpreadsheetSampleView::OnUpdateGroupBy(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsGroupByVisible()); } // Toggles shady style for group heading void CSpreadsheetSampleView::OnGroupShade() { GetGridCtrl().ShadeGroupHeadings(!GetGridCtrl().IsShadeGroupHeadingsEnabled()); } void CSpreadsheetSampleView::OnUpdateGroupShade(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsShadeGroupHeadingsEnabled()); } // Toggles bold style for group heading void CSpreadsheetSampleView::OnGroupBold() { GetGridCtrl().SetGroupRowsBold(!GetGridCtrl().IsGroupRowsBold()); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateGroupBold(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsGroupRowsBold()); } void CSpreadsheetSampleView::OnInitialUpdate() { CView::OnInitialUpdate(); CMainFrame* pWnd = (CMainFrame*)AfxGetMainWnd(); if (m_wndSubList.GetSafeHwnd() == NULL) { m_wndSubList.SubclassDlgItem(IDC_COLUMNLIST, &pWnd->m_wndFieldChooser); GetGridCtrl().GetColumns()->GetGridHeader()->SetSubListCtrl(&m_wndSubList); } if (m_wndFilterEdit.GetSafeHwnd() == NULL) { m_wndFilterEdit.SubclassDlgItem(IDC_FILTEREDIT, &pWnd->m_wndFilterEdit); GetGridCtrl().GetColumns()->GetGridHeader()->SetFilterEditCtrl(&m_wndFilterEdit); } GetGridCtrl().GetPaintManager()->m_bShowLockIcon = TRUE; // GetGridCtrl().GetPaintManager()->m_bUseShellIcon = TRUE; } void CSpreadsheetSampleView::LoadGridState() { } void CSpreadsheetSampleView::SaveGridState() { } CString LoadResourceString(UINT nID) { CString str; VERIFY(str.LoadString(nID)); return str; } void CSpreadsheetSampleView::OnGridColumnRClick(NMHDR* pNotifyStruct, LRESULT* pResult) { } void CSpreadsheetSampleView::OnGridBeginDrag(NMHDR* pNotifyStruct, LRESULT* pResult) { } void CSpreadsheetSampleView::OnGridItemRClick(NMHDR* pNotifyStruct, LRESULT* pResult) { } void CSpreadsheetSampleView::OnGridHyperlinkClick(NMHDR* pNotifyStruct, LRESULT* /*result*/) { } void CSpreadsheetSampleView::OnGridItemClick(NMHDR* pNotifyStruct, LRESULT* /*result*/) { } void CSpreadsheetSampleView::OnGridKeyDown(NMHDR* pNotifyStruct, LRESULT* pResult) { NMKEY* pNMKey = reinterpret_cast(pNotifyStruct); } void CSpreadsheetSampleView::OnGridItemDblClick(NMHDR* pNotifyStruct, LRESULT* pResult) { XTP_NM_GRIDRECORDITEM* pItemNotify = (XTP_NM_GRIDRECORDITEM*)pNotifyStruct; } // FieldChooser is used to add or remove fields (i.e. columns) using drag-and-drop. // FieldChooser is an analog of a pool with column headers of none-used columns void CSpreadsheetSampleView::OnShowFieldChooser() { CMainFrame* pMainFrm = (CMainFrame*)AfxGetMainWnd(); if (pMainFrm) { BOOL bShow = !pMainFrm->m_wndFieldChooser.IsVisible(); pMainFrm->ShowControlBar(&pMainFrm->m_wndFieldChooser, bShow, FALSE); } } // If enabled -- allows automatic formating. void CSpreadsheetSampleView::OnGridControlAutomaticformattingsample() { m_bAutomaticFormating = !m_bAutomaticFormating; GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateGridControlAutomaticformattingsample(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bAutomaticFormating); } // Set horizontal grid lines style. // Following styles are available: // No Grid lines; // Small dots // Large Dots // Dashes // Solid void CSpreadsheetSampleView::OnGridHorizontal(UINT nID) { GetGridCtrl().SetGridStyle(FALSE, (XTPGridGridStyle)(nID - ID_GRID_HORIZONTAL_NOGRIDLINES)); } void CSpreadsheetSampleView::OnUpdateGridHorizontal(CCmdUI* pCmdUI) { pCmdUI->SetCheck(((int)pCmdUI->m_nID - ID_GRID_HORIZONTAL_NOGRIDLINES) == GetGridCtrl().GetGridStyle(FALSE)); } // Set vertical grid lines style. // Following styles are available: // No Grid lines; // Small dots // Large Dots // Dashes // Solid void CSpreadsheetSampleView::OnGridVertical(UINT nID) { GetGridCtrl().SetGridStyle(TRUE, (XTPGridGridStyle)(nID - ID_GRID_VERTICAL_NOGRIDLINES)); } void CSpreadsheetSampleView::OnUpdateGridVertical(CCmdUI* pCmdUI) { pCmdUI->SetCheck(((int)pCmdUI->m_nID - ID_GRID_VERTICAL_NOGRIDLINES) == GetGridCtrl().GetGridStyle(TRUE)); } // Allow or forbid column resize void CSpreadsheetSampleView::OnOptionsAllowcolumnresize() { GetGridCtrl().GetGridHeader()->AllowColumnResize( !GetGridCtrl().GetGridHeader()->IsAllowColumnResize()); } void CSpreadsheetSampleView::OnUpdateOptionsAllowcolumnresize(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsAllowColumnResize()); } // Allow or forbid columns removal void CSpreadsheetSampleView::OnOptionsAllowcolumnsremove() { GetGridCtrl().GetGridHeader()->AllowColumnRemove( !GetGridCtrl().GetGridHeader()->IsAllowColumnRemove()); } void CSpreadsheetSampleView::OnUpdateOptionsAllowcolumnsremove(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsAllowColumnRemove()); } // Allow or forbid columns reordering void CSpreadsheetSampleView::OnGridheaderAllowColumnReorder() { GetGridCtrl().GetGridHeader()->AllowColumnReorder( !GetGridCtrl().GetGridHeader()->IsAllowColumnReorder()); } void CSpreadsheetSampleView::OnUpdateGridHeaderAllowColumnReorder(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsAllowColumnReorder()); } // Allow or forbid simultaneous selection of several records void CSpreadsheetSampleView::OnOptionsMultipleselection() { GetGridCtrl().SetMultipleSelection(!GetGridCtrl().IsMultipleSelection()); } void CSpreadsheetSampleView::OnUpdateOptionsMultipleselection(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsMultipleSelection()); } // Allow or forbid records grouping void CSpreadsheetSampleView::OnOptionsShowitemsingroups() { GetGridCtrl().GetGridHeader()->ShowItemsInGroups( !GetGridCtrl().GetGridHeader()->IsShowItemsInGroups()); if (!GetGridCtrl().GetGridHeader()->IsShowItemsInGroups()) { GetGridCtrl().GetColumns()->GetGroupsOrder()->Clear(); GetGridCtrl().Populate(); } } void CSpreadsheetSampleView::OnUpdateOptionsShowitemsingroups(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsShowItemsInGroups()); } // Allow or forbid automatic columns resizing void CSpreadsheetSampleView::OnOptionsAutomaticcolumnsizing() { GetGridCtrl().GetGridHeader()->SetAutoColumnSizing( !GetGridCtrl().GetGridHeader()->IsAutoColumnSizing()); #ifdef _XTP_INCLUDE_COMMANDBARS if (GetGridCtrl().GetGridHeader()->IsAutoColumnSizing()) { SetScrollBarCtrl(NULL, TRUE); m_wndHScrollBar.ShowWindow(SW_HIDE); } else { m_wndHScrollBar.ShowWindow(SW_SHOW); SetScrollBarCtrl(&m_wndHScrollBar, TRUE); } #endif GetGridCtrl().AdjustScrollBars(); } void CSpreadsheetSampleView::OnUpdateOptionsAutomaticcolumnsizing(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetGridHeader()->IsAutoColumnSizing()); } void CSpreadsheetSampleView::OnOptionsFullColumnScrolling() { GetGridCtrl().SetFullColumnScrolling(!GetGridCtrl().IsFullColumnScrolling()); } void CSpreadsheetSampleView::OnUpdateOptionsFullColumnScrolling(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsFullColumnScrolling()); } void CSpreadsheetSampleView::OnSetFocus(CWnd* pOldWnd) { CView::OnSetFocus(pOldWnd); GetGridCtrl().SetFocus(); } // Set column header draw style. // Following styles are available: // Shaded // Flat // Explorer // Office2003 // Office2007 void CSpreadsheetSampleView::OnColumnStyle(UINT nID) { GetGridCtrl().GetPaintManager()->SetColumnStyle( XTPGridColumnStyle(nID - ID_COLUMNSTYLE_SHADED)); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateColumnStyle(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetPaintManager()->GetColumnStyle() == XTPGridColumnStyle(pCmdUI->m_nID - ID_COLUMNSTYLE_SHADED) ? TRUE : FALSE); } void CSpreadsheetSampleView::OnGridBeforePaste(NMHDR* pNotifyStruct, LRESULT* pResult) { *pResult = 1; // This result prevent grid changes } void CSpreadsheetSampleView::OnGridBeforePasteFromText(NMHDR* pNotifyStruct, LRESULT* pResult) { *pResult = 1; // This result prevent grid changes } void CSpreadsheetSampleView::OnOptionsFreezecolumns0() { GetGridCtrl().SetFreezeColumnsCount(0); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateOptionsFreezecolumns0(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetFreezeColumnsCount() == 0 ? 1 : 0); } void CSpreadsheetSampleView::OnOptionsFreezecolumns1() { GetGridCtrl().SetFreezeColumnsCount(1); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateOptionsFreezecolumns1(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetFreezeColumnsCount() == 1 ? 1 : 0); } void CSpreadsheetSampleView::OnOptionsFreezecolumns2() { GetGridCtrl().SetFreezeColumnsCount(2); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateOptionsFreezecolumns2(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetFreezeColumnsCount() == 2 ? 1 : 0); } void CSpreadsheetSampleView::OnOptionsFreezecolumns3() { GetGridCtrl().SetFreezeColumnsCount(3); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateOptionsFreezecolumns3(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().GetFreezeColumnsCount() == 3 ? 1 : 0); } void CSpreadsheetSampleView::OnGridControlRighttoleft() { GetGridCtrl().SetLayoutRTL(GetGridCtrl().GetExStyle() & WS_EX_LAYOUTRTL ? FALSE : TRUE); } void CSpreadsheetSampleView::OnUpdateGridControlRighttoleft(CCmdUI* pCmdUI) { if (!XTPSystemVersion()->IsLayoutRTLSupported()) { pCmdUI->Enable(FALSE); } else { pCmdUI->SetCheck(GetGridCtrl().GetExStyle() & WS_EX_LAYOUTRTL ? TRUE : FALSE); } } void CSpreadsheetSampleView::OnOptionsFreezecolumnsDivider1() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle &= ~(xtpGridFreezeColsDividerBold | xtpGridFreezeColsDividerThin); nStyle |= xtpGridFreezeColsDividerThin; GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnOptionsFreezecolumnsDivider2() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle &= ~(xtpGridFreezeColsDividerBold | xtpGridFreezeColsDividerThin); nStyle |= xtpGridFreezeColsDividerBold; GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateOptionsFreezecolumnsDivider1(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & xtpGridFreezeColsDividerThin) != 0); } void CSpreadsheetSampleView::OnUpdateOptionsFreezecolumnsDivider2(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & xtpGridFreezeColsDividerBold) != 0); } void CSpreadsheetSampleView::OnOptionsFreezecolumnsDividerHeader() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle ^= xtpGridFreezeColsDividerHeader; GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateOptionsFreezecolumnsDividerHeader(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & xtpGridFreezeColsDividerHeader) != 0); } void CSpreadsheetSampleView::OnOptionsFreezecolumnsDividerNone() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle = (nStyle & (xtpGridFreezeColsDividerHeader)); GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateOptionsFreezecolumnsDividerNone(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & ~xtpGridFreezeColsDividerHeader) == 0); } void CSpreadsheetSampleView::OnOptionsFreezecolumnsDividerShade() { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); nStyle ^= xtpGridFreezeColsDividerShade; GetGridCtrl().GetPaintManager()->SetFreezeColsDividerStyle(nStyle); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateOptionsFreezecolumnsDividerShade(CCmdUI* pCmdUI) { int nStyle = GetGridCtrl().GetPaintManager()->GetFreezeColsDividerStyle(); pCmdUI->SetCheck((nStyle & xtpGridFreezeColsDividerShade) != 0); } void CSpreadsheetSampleView::OnFilePrintPreview() { #ifdef _XTP_INCLUDE_COMMANDBARS // 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 } #else CXTPGridView::OnFilePrintPreview(); #endif } void CSpreadsheetSampleView::OnGridWYSIWYG() { m_bWYSIWYG = !m_bWYSIWYG; CXTPGridControl& wndGrid = GetGridCtrl(); wndGrid.GetPaintManager()->SetColumnWidthWYSIWYG(m_bWYSIWYG); if (m_bWYSIWYG) wndGrid.GetColumns()->GetGroupsOrder()->Clear(); m_pPrintOptions->m_bRepeatFooterRows = TRUE; m_pPrintOptions->m_bRepeatHeaderRows = TRUE; wndGrid.RedrawControl(); } void CSpreadsheetSampleView::OnUpdateGridWYSIWYG(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_bWYSIWYG); } void CSpreadsheetSampleView::OnGridIconview() { CXTPGridControl& wndGrid = GetGridCtrl(); wndGrid.AssignIconViewPropNumAndIconNum(3, 3, TRUE, 25); wndGrid.SetIconView(!wndGrid.IsIconView()); } void CSpreadsheetSampleView::OnUpdateGridIconview(CCmdUI* pCmdUI) { CXTPGridControl& wndGrid = GetGridCtrl(); pCmdUI->SetCheck(wndGrid.IsIconView()); } ///////////////////////////////////////////////////////////////////////////// // Grid behavior ///////////////////////////////////////////////////////////////////////////// void CSpreadsheetSampleView::OnBehaviorCodejockDefault() { m_behavior = xtpGridBehaviorCodejockDefault; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorCodejockDefault); } void CSpreadsheetSampleView::OnBehaviorCodejock1502() { m_behavior = xtpGridBehaviorCodejock1502; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorCodejock1502); } void CSpreadsheetSampleView::OnBehaviorOutlook2003() { m_behavior = xtpGridBehaviorOutlook2003; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorOutlook2003); } void CSpreadsheetSampleView::OnBehaviorOutlook2007() { m_behavior = xtpGridBehaviorOutlook2007; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorOutlook2007); } void CSpreadsheetSampleView::OnBehaviorOutlook2010() { m_behavior = xtpGridBehaviorOutlook2010; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorOutlook2010); } void CSpreadsheetSampleView::OnBehaviorExcel2003() { m_behavior = xtpGridBehaviorExcel2003; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorExcel2003); } void CSpreadsheetSampleView::OnBehaviorExcel2007() { m_behavior = xtpGridBehaviorExcel2007; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorExcel2007); } void CSpreadsheetSampleView::OnBehaviorExcel2010() { m_behavior = xtpGridBehaviorExcel2010; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorExcel2010); } void CSpreadsheetSampleView::OnBehaviorCustom() { m_behavior = 100; GetGridCtrl().GetBehavior()->SetScheme(xtpGridBehaviorOutlook2003); GetGridCtrl().GetBehavior()->Row->MouseUp->Right->None->bFocusRowTemporarily = FALSE; } void CSpreadsheetSampleView::OnUpdateBehaviorCodejockDefault(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorCodejockDefault == m_behavior ? 1 : 0); } void CSpreadsheetSampleView::OnUpdateBehaviorCodejock1502(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorCodejock1502 == m_behavior ? 1 : 0); } void CSpreadsheetSampleView::OnUpdateBehaviorOutlook2003(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorOutlook2003 == m_behavior ? 1 : 0); } void CSpreadsheetSampleView::OnUpdateBehaviorOutlook2007(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorOutlook2007 == m_behavior ? 1 : 0); } void CSpreadsheetSampleView::OnUpdateBehaviorOutlook2010(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorOutlook2010 == m_behavior ? 1 : 0); } void CSpreadsheetSampleView::OnUpdateBehaviorExcel2003(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorExcel2003 == m_behavior ? 1 : 0); } void CSpreadsheetSampleView::OnUpdateBehaviorExcel2007(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorExcel2007 == m_behavior ? 1 : 0); } void CSpreadsheetSampleView::OnUpdateBehaviorExcel2010(CCmdUI* pCmdUI) { pCmdUI->SetCheck(xtpGridBehaviorExcel2010 == m_behavior ? 1 : 0); } void CSpreadsheetSampleView::OnUpdateBehaviorCustom(CCmdUI* pCmdUI) { pCmdUI->SetCheck(100 == m_behavior ? 1 : 0); } ///////////////////////////////////////////////////////////////////////////// void CSpreadsheetSampleView::OnGridLockExpand() { GetGridCtrl().LockExpand(!GetGridCtrl().IsLockExpand()); GetGridCtrl().RedrawControl(); } void CSpreadsheetSampleView::OnUpdateGridLockExpand(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetGridCtrl().IsLockExpand() ? 1 : 0); } ///////////////////////////////////////////////////////////////////////////// // Watermark ///////////////////////////////////////////////////////////////////////////// void CSpreadsheetSampleView::OnGridWatermark() { CXTPGridControl& wndGrid = GetGridCtrl(); if (NULL == wndGrid.GetWatermarkBitmap()) { CBitmap bmpWatermark; if (bmpWatermark.LoadBitmap(IDB_CODEJOCKGEAR)) { wndGrid.SetWatermarkBitmap(bmpWatermark, 64); wndGrid.SetWatermarkAlignment(xtpGridWatermarkCenter | xtpGridWatermarkVCenter); wndGrid.GetPaintManager()->m_bPrintWatermark = TRUE; } } else { wndGrid.SetWatermarkBitmap(HBITMAP(NULL), 0); wndGrid.GetPaintManager()->m_bPrintWatermark = FALSE; } wndGrid.RedrawControl(); } void CSpreadsheetSampleView::OnUpdateGridWatermark(CCmdUI* pCmdUI) { pCmdUI->Enable(TRUE); pCmdUI->SetCheck(NULL == GetGridCtrl().GetWatermarkBitmap() ? 0 : 1); } ///////////////////////////////////////////////////////////////////////////// // Double buffering ///////////////////////////////////////////////////////////////////////////// void CSpreadsheetSampleView::OnGridDoubleBuffering() { CXTPGridControl& wndGrid = GetGridCtrl(); wndGrid.EnableDoubleBuffering(!wndGrid.IsDoubleBuffering()); wndGrid.RedrawControl(); } void CSpreadsheetSampleView::OnUpdateGridDoubleBuffering(CCmdUI* pCmdUI) { pCmdUI->Enable(TRUE); pCmdUI->SetCheck(GetGridCtrl().IsDoubleBuffering() ? 1 : 0); } ///////////////////////////////////////////////////////////////////////////// // Smooth scrolling ///////////////////////////////////////////////////////////////////////////// void CSpreadsheetSampleView::OnGridSmoothScrolling() { CXTPGridControl& wndGrid = GetGridCtrl(); BOOL bSmooth = xtpGridScrollModeSmooth == wndGrid.GetScrollMode(xtpGridOrientationVertical); if (bSmooth) { wndGrid.SetScrollMode(xtpGridOrientationVertical, xtpGridScrollModeBlock); } else { wndGrid.SetScrollMode(xtpGridOrientationVertical, xtpGridScrollModeSmooth); } } void CSpreadsheetSampleView::OnUpdateGridSmoothScrolling(CCmdUI* pCmdUI) { CXTPGridControl& wndGrid = GetGridCtrl(); BOOL bSmooth = xtpGridScrollModeSmooth == wndGrid.GetScrollMode(xtpGridOrientationVertical); pCmdUI->Enable(TRUE); pCmdUI->SetCheck(bSmooth); }