262 lines
6.7 KiB
C++
262 lines
6.7 KiB
C++
// VirtualListView.cpp : implementation of the CVirtualListView class
|
|
//
|
|
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
|
|
// (c)1998-2008 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 "VirtualList.h"
|
|
|
|
#include "VirtualListDoc.h"
|
|
#include "VirtualListView.h"
|
|
|
|
#include "DialogRowsCount.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
class CVirtualRecord : public CXTPReportRecord
|
|
{
|
|
public:
|
|
CVirtualRecord()
|
|
{
|
|
AddItem(new CXTPReportRecordItem());
|
|
AddItem(new CXTPReportRecordItem());
|
|
AddItem(new CXTPReportRecordItem());
|
|
}
|
|
|
|
void GetItemMetrics (XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, XTP_REPORTRECORDITEM_METRICS* pItemMetrics)
|
|
{
|
|
CXTPReportColumnOrder* pSortOrder = pDrawArgs->pControl->GetColumns()->GetSortOrder();
|
|
|
|
BOOL bDecreasing = pSortOrder->GetCount() > 0 && pSortOrder->GetAt(0)->IsSortedDecreasing();
|
|
|
|
CString strColumn = pDrawArgs->pColumn->GetCaption();
|
|
int nIndex = pDrawArgs->pRow->GetIndex();
|
|
|
|
int nCount = pDrawArgs->pControl->GetRows()->GetCount();
|
|
pItemMetrics->strText.Format(_T("%s - Row %i"), strColumn, bDecreasing? nCount - nIndex: nIndex + 1);
|
|
|
|
CVirtualListView* pView = DYNAMIC_DOWNCAST(CVirtualListView, pDrawArgs->pControl->GetParent());
|
|
|
|
if (pView && pView->m_bColorize)
|
|
{
|
|
// Execute this code to apply predefined formatting.
|
|
// To turn on automatic formatting, select it from the menu
|
|
if (nIndex % 2)
|
|
{
|
|
pItemMetrics->clrBackground = RGB(245, 245, 245);
|
|
}
|
|
}
|
|
|
|
if (pView && pView->m_bSimpleTree)
|
|
{
|
|
// Demonstrate possibility to organize one-level tree
|
|
if (nIndex % 10 == 0)
|
|
{
|
|
POSITION pos = pView->m_lstCollapsed.Find(nIndex);
|
|
pDrawArgs->pRow->SetExpanded(pos == NULL);
|
|
|
|
if (pDrawArgs->pColumn->GetIndex() == 0)
|
|
{
|
|
pItemMetrics->nVirtRowLevel = 0;
|
|
pItemMetrics->nVirtRowFlags = xtpVirtRowHasChildren; // row has children
|
|
}
|
|
pItemMetrics->nVirtRowFlags |= xtpVirtRowLastChild; // row is the last child
|
|
|
|
}
|
|
else
|
|
{
|
|
pDrawArgs->pRow->SetExpanded(FALSE);
|
|
if (pDrawArgs->pColumn->GetIndex() == 0)
|
|
{
|
|
pItemMetrics->nVirtRowLevel = 1;
|
|
pItemMetrics->nVirtRowFlags = 0;
|
|
}
|
|
if (nIndex % 10 == 9)
|
|
{
|
|
pItemMetrics->nVirtRowFlags |= xtpVirtRowLastChild;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CVirtualListView
|
|
|
|
IMPLEMENT_DYNCREATE(CVirtualListView, CXTPReportView)
|
|
|
|
BEGIN_MESSAGE_MAP(CVirtualListView, CXTPReportView)
|
|
//{{AFX_MSG_MAP(CVirtualListView)
|
|
ON_WM_CREATE()
|
|
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
|
|
ON_COMMAND(ID_REPORT_SETROWSCOUNT, OnReportSetrowscount)
|
|
ON_COMMAND(ID_REPORT_COLORIZE, OnReportColorize)
|
|
ON_UPDATE_COMMAND_UI(ID_REPORT_COLORIZE, OnUpdateReportColorize)
|
|
ON_COMMAND(ID_REPORT_TREE, OnReportSimpleTree)
|
|
ON_UPDATE_COMMAND_UI(ID_REPORT_TREE, OnUpdateReportSimpleTree)
|
|
//}}AFX_MSG_MAP
|
|
// Standard printing commands
|
|
ON_COMMAND(ID_FILE_PRINT, CXTPReportView::OnFilePrint)
|
|
ON_COMMAND(ID_FILE_PRINT_DIRECT, CXTPReportView::OnFilePrint)
|
|
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CXTPReportView::OnFilePrintPreview)
|
|
|
|
ON_NOTIFY(NM_CLICK, XTP_ID_REPORT_CONTROL, OnReportItemClick)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CVirtualListView construction/destruction
|
|
|
|
CVirtualListView::CVirtualListView()
|
|
{
|
|
m_bColorize = FALSE;
|
|
m_bSimpleTree = FALSE;
|
|
|
|
}
|
|
|
|
CVirtualListView::~CVirtualListView()
|
|
{
|
|
}
|
|
|
|
BOOL CVirtualListView::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
// TODO: Modify the Window class or styles here by modifying
|
|
// the CREATESTRUCT cs
|
|
|
|
return CXTPReportView::PreCreateWindow(cs);
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CVirtualListView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CVirtualListView::AssertValid() const
|
|
{
|
|
CView::AssertValid();
|
|
}
|
|
|
|
void CVirtualListView::Dump(CDumpContext& dc) const
|
|
{
|
|
CView::Dump(dc);
|
|
}
|
|
|
|
CVirtualListDoc* CVirtualListView::GetDocument() // non-debug version is inline
|
|
{
|
|
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CVirtualListDoc)));
|
|
return (CVirtualListDoc*)m_pDocument;
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CVirtualListView message handlers
|
|
|
|
int CVirtualListView::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CXTPReportView::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
CXTPReportControl& wndReport = GetReportCtrl();
|
|
wndReport.GetReportHeader()->AllowColumnRemove(FALSE);
|
|
|
|
wndReport.AddColumn(new CXTPReportColumn(0, _T("Column 1"), 50));
|
|
wndReport.AddColumn(new CXTPReportColumn(1, _T("Column 2"), 50));
|
|
wndReport.AddColumn(new CXTPReportColumn(2, _T("Column 3"), 50));
|
|
|
|
|
|
wndReport.SetVirtualMode(new CVirtualRecord(), 1000000);
|
|
|
|
wndReport.Populate();
|
|
|
|
return 0;
|
|
}
|
|
|
|
void CVirtualListView::OnReportItemClick(NMHDR * pNotifyStruct, LRESULT * /*result*/)
|
|
{
|
|
XTP_NM_REPORTRECORDITEM* pItemNotify = (XTP_NM_REPORTRECORDITEM*) pNotifyStruct;
|
|
|
|
if (!pItemNotify->pRow || !pItemNotify->pColumn)
|
|
return;
|
|
|
|
TRACE(_T("Click on row %d, col %d\n"),
|
|
pItemNotify->pRow->GetIndex(), pItemNotify->pColumn->GetItemIndex());
|
|
|
|
}
|
|
|
|
|
|
void CVirtualListView::OnEditCopy()
|
|
{
|
|
CXTPReportSelectedRows* pSelectedRows = GetReportCtrl().GetSelectedRows();
|
|
POSITION pos = pSelectedRows->GetFirstSelectedRowPosition();
|
|
|
|
while (pos)
|
|
{
|
|
int nIndex = pSelectedRows->GetNextSelectedRow(pos)->GetIndex();
|
|
TRACE(_T("%i, "), nIndex + 1);
|
|
}
|
|
|
|
}
|
|
|
|
void CVirtualListView::OnReportSetrowscount()
|
|
{
|
|
CDialogRowsCount dr;
|
|
if (dr.DoModal() == IDOK)
|
|
{
|
|
GetReportCtrl().SetVirtualMode(new CVirtualRecord(), dr.m_nRowsCount);
|
|
GetReportCtrl().Populate();
|
|
}
|
|
|
|
}
|
|
|
|
void CVirtualListView::OnReportColorize()
|
|
{
|
|
m_bColorize = !m_bColorize;
|
|
GetReportCtrl().RedrawControl();
|
|
|
|
}
|
|
|
|
void CVirtualListView::OnUpdateReportColorize(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_bColorize);
|
|
}
|
|
|
|
|
|
void CVirtualListView::OnReportSimpleTree()
|
|
{
|
|
m_bSimpleTree = !m_bSimpleTree;
|
|
|
|
GetReportCtrl().GetColumns()->GetAt(0)->SetTreeColumn(m_bSimpleTree);
|
|
|
|
if (!m_bSimpleTree)
|
|
{
|
|
m_lstCollapsed.RemoveAll();
|
|
}
|
|
|
|
GetReportCtrl().RedrawControl();
|
|
|
|
}
|
|
|
|
void CVirtualListView::OnUpdateReportSimpleTree(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(m_bSimpleTree);
|
|
}
|
|
|