399 lines
9.8 KiB
C++
399 lines
9.8 KiB
C++
|
// adsqryView.cpp : implementation of the CAdsqryView class
|
||
|
//
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "viewex.h"
|
||
|
#include "adsqDoc.h"
|
||
|
#include "adsqView.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#define new DEBUG_NEW
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CAdsqryView
|
||
|
|
||
|
IMPLEMENT_DYNCREATE(CAdsqryView, CListView )
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CAdsqryView, CListView )
|
||
|
//{{AFX_MSG_MAP(CAdsqryView)
|
||
|
ON_WM_VSCROLL()
|
||
|
//}}AFX_MSG_MAP
|
||
|
// Standard printing commands
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CAdsqryView construction/destruction
|
||
|
|
||
|
extern CViewExApp NEAR theApp;
|
||
|
extern TCHAR szOpen[ MAX_PATH ];
|
||
|
|
||
|
/***********************************************************
|
||
|
Function:
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
CAdsqryView::CAdsqryView()
|
||
|
{
|
||
|
// TODO: add construction code here
|
||
|
m_nLastInsertedRow = -1;
|
||
|
m_nColumnsCount = 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************
|
||
|
Function:
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
CAdsqryView::~CAdsqryView()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************
|
||
|
Function:
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
BOOL CAdsqryView::PreCreateWindow(CREATESTRUCT& cs)
|
||
|
{
|
||
|
// TODO: Modify the Window class or styles here by modifying
|
||
|
// the CREATESTRUCT cs
|
||
|
|
||
|
cs.style |= LVS_REPORT;
|
||
|
|
||
|
return CListView::PreCreateWindow(cs);
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CAdsqryView diagnostics
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
void CAdsqryView::AssertValid() const
|
||
|
{
|
||
|
CListView::AssertValid();
|
||
|
}
|
||
|
|
||
|
void CAdsqryView::Dump(CDumpContext& dc) const
|
||
|
{
|
||
|
CListView::Dump(dc);
|
||
|
}
|
||
|
|
||
|
CAdsqryDoc* CAdsqryView::GetDocument() // non-debug version is inline
|
||
|
{
|
||
|
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAdsqryDoc)));
|
||
|
return (CAdsqryDoc*)m_pDocument;
|
||
|
}
|
||
|
#endif //_DEBUG
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CAdsqryView message handlers
|
||
|
|
||
|
/***********************************************************
|
||
|
Function: CAdsqryView::OnInitialUpdate
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
void CAdsqryView::OnInitialUpdate()
|
||
|
{
|
||
|
CListView ::OnInitialUpdate();
|
||
|
|
||
|
CreateColumns( );
|
||
|
AddRows( );
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************
|
||
|
Function: CAdsqryView::AddColumns
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
void CAdsqryView::AddColumns( int nRow )
|
||
|
{
|
||
|
int nColumnCount, nIdx, nColumn;
|
||
|
CString strColumn;
|
||
|
LV_COLUMN lvColumn;
|
||
|
CADsDataSource* pDataSource;
|
||
|
CAdsqryDoc* pDoc;
|
||
|
|
||
|
pDoc = GetDocument( );
|
||
|
pDataSource = pDoc->GetADsDataSource( );
|
||
|
|
||
|
nColumnCount = pDataSource->GetColumnsCount( nRow );
|
||
|
|
||
|
for( nIdx = 0; nIdx < nColumnCount ; nIdx++ )
|
||
|
{
|
||
|
pDataSource->GetColumnText( nRow, nIdx, strColumn );
|
||
|
|
||
|
for( nColumn = 0; nColumn < m_nColumnsCount ; nColumn++ )
|
||
|
{
|
||
|
if( m_strColumns[ nColumn ] == strColumn )
|
||
|
break;
|
||
|
}
|
||
|
if( nColumn == m_nColumnsCount )
|
||
|
{
|
||
|
m_strColumns.Add( strColumn );
|
||
|
m_nColumnsCount++;
|
||
|
lvColumn.iSubItem = m_nColumnsCount - 1;
|
||
|
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
||
|
lvColumn.fmt = LVCFMT_LEFT;
|
||
|
lvColumn.pszText = strColumn.GetBuffer( 256 );
|
||
|
lvColumn.cx = GetListCtrl( ).GetStringWidth( _T("WWWWWWWWWW") ) + 15;
|
||
|
|
||
|
GetListCtrl( ).InsertColumn( m_nColumnsCount - 1, &lvColumn );
|
||
|
TRACE( _T("Found new Column %s\n"), (LPCTSTR)strColumn );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/***********************************************************
|
||
|
Function: CAdsqryView::CreateColumns
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
void CAdsqryView::CreateColumns( void )
|
||
|
{
|
||
|
/* int nCol;
|
||
|
LV_COLUMN lvColumn;
|
||
|
CADsDataSource* pDataSource;
|
||
|
CAdsqryDoc* pDoc;
|
||
|
CString strColumn;
|
||
|
|
||
|
pDoc = GetDocument( );
|
||
|
pDataSource = pDoc->GetADsDataSource( );
|
||
|
|
||
|
m_nColumnsCount = pDataSource->GetColumnsCount( );
|
||
|
|
||
|
for( nCol = 0 ; nCol < m_nColumnsCount ; nCol++ )
|
||
|
{
|
||
|
pDataSource->GetColumnText( nCol, strColumn );
|
||
|
|
||
|
lvColumn.iSubItem = nCol;
|
||
|
lvColumn.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
||
|
lvColumn.fmt = LVCFMT_LEFT;
|
||
|
lvColumn.pszText = strColumn.GetBuffer( 256 );
|
||
|
lvColumn.cx = GetListCtrl( ).GetStringWidth( _T("WWWWWWWWWW") ) + 15;
|
||
|
|
||
|
GetListCtrl( ).InsertColumn( nCol, &lvColumn );
|
||
|
}*/
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************
|
||
|
Function: CAdsqryView::ClearContent
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
void CAdsqryView::ClearContent( void )
|
||
|
{
|
||
|
GetListCtrl( ).DeleteAllItems( );
|
||
|
|
||
|
m_nLastInsertedRow = -1;
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************
|
||
|
Function: CAdsqryView::AddRows
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
void CAdsqryView::AddRows( void )
|
||
|
{
|
||
|
int nCol;
|
||
|
int nTopIndex, nPageItems;
|
||
|
int nRowIndex;
|
||
|
CADsDataSource* pDataSource;
|
||
|
CAdsqryDoc* pDoc;
|
||
|
|
||
|
pDoc = GetDocument( );
|
||
|
pDataSource = pDoc->GetADsDataSource( );
|
||
|
|
||
|
nTopIndex = GetListCtrl( ).GetTopIndex( );
|
||
|
nPageItems = GetListCtrl( ).GetCountPerPage( );
|
||
|
if( m_nLastInsertedRow < nTopIndex + 2 * nPageItems )
|
||
|
{
|
||
|
HCURSOR aCursor, oldCursor;
|
||
|
|
||
|
aCursor = LoadCursor( NULL, IDC_WAIT );
|
||
|
oldCursor = SetCursor( aCursor );
|
||
|
// we must add extra items in the list view
|
||
|
for( nRowIndex = m_nLastInsertedRow + 1 ;
|
||
|
nRowIndex < nTopIndex + 2 * nPageItems ;
|
||
|
nRowIndex++ )
|
||
|
{
|
||
|
CString strValue;
|
||
|
BOOL bWork = FALSE;
|
||
|
|
||
|
AddColumns( nRowIndex );
|
||
|
|
||
|
for( nCol = 0; nCol < m_nColumnsCount ; nCol++ )
|
||
|
{
|
||
|
CString strColumnName;
|
||
|
|
||
|
strColumnName = m_strColumns.GetAt( nCol );
|
||
|
|
||
|
if( pDataSource->GetValue( nRowIndex, nCol, strValue ) ||
|
||
|
pDataSource->GetValue( nRowIndex, strColumnName, strValue ) )
|
||
|
{
|
||
|
LV_ITEM lvItem;
|
||
|
TCHAR* pszText;
|
||
|
|
||
|
|
||
|
pszText = (TCHAR*) malloc( strValue.GetLength( ) + 10 );
|
||
|
|
||
|
if(NULL != pszText)
|
||
|
{
|
||
|
_tcscpy( pszText, _T("") );
|
||
|
if( !nCol )
|
||
|
{
|
||
|
_itot( nRowIndex + 1, pszText, 10 );
|
||
|
_tcscat( pszText, _T(") ") );
|
||
|
}
|
||
|
|
||
|
_tcscat( pszText, strValue.GetBuffer( strValue.GetLength( ) + 1 ) );
|
||
|
|
||
|
bWork = TRUE;
|
||
|
memset( &lvItem, 0, sizeof(lvItem) );
|
||
|
|
||
|
lvItem.mask = LVIF_TEXT | LVIF_STATE;
|
||
|
lvItem.state = 0;
|
||
|
lvItem.stateMask = 0;
|
||
|
lvItem.iItem = nRowIndex;
|
||
|
lvItem.iSubItem = nCol;
|
||
|
lvItem.pszText = pszText;
|
||
|
lvItem.cchTextMax = _tcslen( pszText );
|
||
|
|
||
|
if( nCol == 0)
|
||
|
{
|
||
|
GetListCtrl( ).InsertItem(&lvItem);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
GetListCtrl( ).SetItem(&lvItem);
|
||
|
}
|
||
|
|
||
|
free( pszText );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if( bWork )
|
||
|
{
|
||
|
m_nLastInsertedRow++;
|
||
|
}
|
||
|
}
|
||
|
SetCursor( oldCursor );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************
|
||
|
Function: CAdsqryView::OnVScroll
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
void CAdsqryView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
||
|
{
|
||
|
// TODO: Add your message handler code here and/or call default
|
||
|
|
||
|
CListView ::OnVScroll(nSBCode, nPos, pScrollBar);
|
||
|
|
||
|
//if( nSBCode == SB_LINEDOWN || nSBCode == SB_PAGEDOWN )
|
||
|
{
|
||
|
AddRows( );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************
|
||
|
Function: CAdsqryView::OnChildNotify
|
||
|
Arguments:
|
||
|
Return:
|
||
|
Purpose:
|
||
|
Author(s):
|
||
|
Revision:
|
||
|
Date:
|
||
|
***********************************************************/
|
||
|
BOOL CAdsqryView::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult)
|
||
|
{
|
||
|
// TODO: Add your specialized code here and/or call the base class
|
||
|
NMHDR* pHeader;
|
||
|
int nSel;
|
||
|
CADsDataSource* pDataSource;
|
||
|
CAdsqryDoc* pDoc;
|
||
|
CString strADsPath;
|
||
|
|
||
|
while( TRUE )
|
||
|
{
|
||
|
if( message != WM_NOTIFY )
|
||
|
break;
|
||
|
|
||
|
pHeader = (NMHDR*)lParam;
|
||
|
if( pHeader->code != NM_DBLCLK )
|
||
|
break;
|
||
|
|
||
|
|
||
|
if( !GetListCtrl( ).GetSelectedCount( ) )
|
||
|
break;
|
||
|
|
||
|
nSel = GetListCtrl( ).GetNextItem( -1, LVNI_SELECTED );;
|
||
|
|
||
|
if( -1 == nSel )
|
||
|
break;
|
||
|
|
||
|
pDoc = GetDocument( );
|
||
|
pDataSource = pDoc->GetADsDataSource( );
|
||
|
|
||
|
pDataSource->GetADsPath( nSel, strADsPath );
|
||
|
|
||
|
_tcscpy( szOpen, strADsPath.GetBuffer( MAX_PATH ) );
|
||
|
|
||
|
theApp.OpenDocumentFile( strADsPath.GetBuffer( MAX_PATH ) );
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
return CListView::OnChildNotify(message, wParam, lParam, pLResult);
|
||
|
}
|
||
|
|