// TestExpandDlg.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 "Resource.h" #include "TestExpandDlg.h" #ifdef _DEBUG # define new DEBUG_NEW # undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CTestExpandDlg dialog CTestExpandDlg::CTestExpandDlg(CWnd* pParent) : CDialog(CTestExpandDlg::IDD, pParent) { //{{AFX_DATA_INIT(CTestExpandDlg) m_bNotificationExpanded = FALSE; //}}AFX_DATA_INIT } void CTestExpandDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTestExpandDlg) DDX_Control(pDX, IDC_GRID, m_wndGrid); DDX_Text(pDX, IDC_TIME, m_sTime); DDX_CBIndex(pDX, IDC_COUNT, m_nCount); DDX_Check(pDX, IDC_NOTIFICATION_EXPANDED, m_bNotificationExpanded); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CTestExpandDlg, CDialog) //{{AFX_MSG_MAP(CTestExpandDlg) ON_BN_CLICKED(IDC_EXPAND, OnExpand) ON_BN_CLICKED(IDC_COLLAPSE, OnCollapse) ON_CBN_SELENDOK(IDC_COUNT, OnCount) ON_BN_CLICKED(IDC_NOTIFICATION_EXPANDED, OnNotificationExpanded) ON_BN_CLICKED(IDC_INDEXES, OnIndexes) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CTestExpandDlg message handlers int Count[] = { 10, 100, 1000, 2500, 5000, 10000, 20000, 30000, 100000 }; BOOL CTestExpandDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the default font for all dialog controls. SendMessageToDescendants(WM_SETFONT, (WPARAM)(HFONT)XTPFontManager()->GetFont()); // Add columns CXTPGridColumn* pColumn; pColumn = new CXTPGridColumn(0, _T("Tree"), 100); m_wndGrid.AddColumn(pColumn); pColumn->SetTreeColumn(TRUE); pColumn = new CXTPGridColumn(1, _T("Index"), 100); m_wndGrid.AddColumn(pColumn); m_bNotificationExpanded = m_wndGrid.GetBehavior()->Notifications->Row->bRowExpanded; m_nCount = 1; AddRecords(Count[m_nCount]); UpdateData(FALSE); return FALSE; } CXTPGridRecord* AddItems(CXTPGridRecord* pRecord, CString sText, int nRecord) { CString sRecord; sRecord.Format(_T("Record %d"), nRecord); CXTPGridRecordItemText* pItem = new CXTPGridRecordItemText(sRecord); pRecord->AddItem(pItem); pRecord->AddItem(new CXTPGridRecordItemNumber()); CString sItem; sItem.Format(_T("%s %d %d"), sText, nRecord, 0); // Text CXTPGridRecord* pChild = new CXTPGridRecord(); pChild->AddItem(new CXTPGridRecordItemText(sItem)); pChild->AddItem(new CXTPGridRecordItemNumber()); pRecord->GetChilds()->Add(pChild); return pChild; } void CTestExpandDlg::AddRecords(int nRecordCount) { m_wndGrid.ResetContent(FALSE); DWORD dwStart = ::GetTickCount(); CXTPGridRecord* pRecord; // Add records for (int nRecord = 0; nRecord < nRecordCount; nRecord++) { pRecord = m_wndGrid.AddRecord(new CXTPGridRecord()); CXTPGridRecord* pChild; pChild = AddItems(pRecord, _T("Level 1"), nRecord); pChild = AddItems(pChild, _T("Level 2"), nRecord); pChild = AddItems(pChild, _T("Level 3"), nRecord); } pRecord = m_wndGrid.GetFooterRecords()->Add(new CXTPGridRecord()); AddItems(pRecord, _T("Item"), 0); m_wndGrid.Populate(); m_wndGrid.ShowFooterRows(TRUE); m_wndGrid.PinFooterRows(TRUE); DWORD dwEnd = ::GetTickCount(); m_sTime.Format(_T("Populate: %d"), dwEnd - dwStart); UpdateData(FALSE); } void CTestExpandDlg::OnExpand() { DWORD dwStart = ::GetTickCount(); m_wndGrid.ExpandAll(TRUE); DWORD dwEnd = ::GetTickCount(); m_sTime.Format(_T("Expand: %d"), dwEnd - dwStart); UpdateData(FALSE); } void CTestExpandDlg::OnCollapse() { m_wndGrid.CollapseAll(); } void CTestExpandDlg::OnCount() { UpdateData(); AddRecords(Count[m_nCount]); } void CTestExpandDlg::OnOK() { CDialog::OnOK(); } void CTestExpandDlg::OnNotificationExpanded() { UpdateData(); m_wndGrid.GetBehavior()->Notifications->Row->bRowExpanded = m_bNotificationExpanded; } void CTestExpandDlg::OnIndexes() { CXTPGridRows* pRows = m_wndGrid.GetRows(); for (int nIndex = 0; nIndex < pRows->GetCount(); nIndex++) { CXTPGridRow* pRow = pRows->GetAt(nIndex); CXTPGridRecordItemNumber* pItem = DYNAMIC_DOWNCAST(CXTPGridRecordItemNumber, pRow->GetRecord()->GetItem(1)); pItem->SetValue(pRow->GetIndex()); } m_wndGrid.RedrawControl(); }