Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

301 lines
6.3 KiB

// Implementation for class CTMSingleSelect
// -- A Single Selection Text List
// Created 5 October 1992 by Ronald C. Murray
#include "stdafx.h"
#include "TextMat.h"
#include "Indicate.h"
#include "TMSingle.h"
long CTMSingleSelect::GetHighlights(long rowTop, long colLeft,
long cRows, long cCols,
long cHighlights, CHighlight *phl
)
{
UINT cRowsImage = m_ptm->RowCount();
UINT cCheckedRows = 0;
long iRow, c;
for (iRow= rowTop, c=cRows; c-- && iRow < int(cRowsImage); ++iRow)
// if (m_ptm->IsRowChecked(iRow))
++cCheckedRows;
BOOL fRowHighlight= ( m_fHLOn
&& m_hlType != CHighlight::DOT_BOX_TEXT
&& m_rowHL >= rowTop
&& m_rowHL < rowTop+cRows
&& colLeft < m_ptm->ColCount()
);
UINT chl= fRowHighlight? cCheckedRows + 1 : cCheckedRows;
if (!cHighlights || !phl) return chl;
for (iRow= rowTop, c= cRows; c--; iRow++)
{
ASSERT(chl);
if (fRowHighlight && iRow == m_rowHL)
{
phl->m_row= m_rowHL;
phl->m_col= colLeft;
if (colLeft + cCols > m_ptm->ColCount())
cCols= m_ptm->ColCount() - colLeft;
phl->m_cChars= cCols;
phl->m_iType = m_hlType;
++phl; --chl;
if (!--cHighlights) break;
}
ASSERT(chl);
if (iRow < int(cRowsImage) && m_ptm->IsRowChecked(iRow))
{
phl->m_row = iRow;
phl->m_col = 0;
phl->m_cChars = m_ptm->ColCount();
phl->m_iType = CHighlight::CHECK_MARK;
++phl; --chl;
if (!--cHighlights) break;
}
if (iRow < int(cRowsImage) && !m_ptm->IsRowChecked(iRow))
{
phl->m_row = iRow;
phl->m_col = 0;
phl->m_cChars = m_ptm->ColCount();
phl->m_iType = CHighlight::NOCHECK_MARK;
++phl; --chl;
if (!--cHighlights) break;
}
}
return chl;
}
void CTMSingleSelect::SetSelectedRow(long row, BOOL fNotify,
UINT hlType,
BOOL fHighlightOn
)
{
BOOL fHLOnOld= m_fHLOn;
m_fHLOn = fHighlightOn;
// if (row < 0 || row >= m_ptm->RowCount()) return;
// if (m_rowHL == row && m_hlType == hlType && fHLOnOld == fHighlightOn)
// return;
long rowOld= m_rowHL;
m_rowHL = row;
m_hlType = hlType;
m_ptm->InvalidateImage(m_rowHL, 0, 1, m_ptm->ColCount());
if (rowOld != m_rowHL)
m_ptm->InvalidateImage(rowOld, 0, 1, m_ptm->ColCount());
if (fNotify)
{
m_ptm->NotifyInterface(CTextMatrix::SelectionChange);
m_ptm->NotifyViewers(CTextMatrix::FocusChange);
}
}
BOOL CTMSingleSelect::GetFocusRect(int *prow , int *pcol,
int *pcRows, int *pcCols
)
{
#if 0
if (!m_fHLOn || ( m_hlType != CHighlight::HIGHLIGHT_TEXT
&& m_hlType != CHighlight::DOT_BOX_TEXT
)
)
return FALSE;
#endif // 0
*prow = m_rowHL;
*pcol = 0;
*pcRows = 1;
*pcCols = m_ptm->ColCount();
return TRUE;
}
// Mouse Events:
void CTMSingleSelect::OnLButtonDown(UINT nFlags, long row, long col)
{
SetSelectedRow(row);
}
void CTMSingleSelect::OnLButtonUp(UINT nFlags, long row, long col, BOOL bInBox)
{
SetSelectedRow(row);
if (bInBox) m_ptm->NotifyInterface(CTextMatrix::ToggleCheck);
}
void CTMSingleSelect::OnMouseMove(UINT nFlags, long row, long col)
{
if (row != m_rowHL) SetSelectedRow(row);
}
// Keystroke Events:
void CTMSingleSelect::OnKeyDown(CTextDisplay *ptd,
UINT nChar, UINT nRepCnt, UINT nFlags
)
{
long rowNew;
UINT hlType= CHighlight::HIGHLIGHT_TEXT;
if (!m_fHLOn)
{
SetSelectedRow(0);
return;
}
switch(nChar)
{
case VK_SPACE:
m_ptm->NotifyInterface(CTextMatrix::ToggleCheck);
return;
case VK_HOME:
rowNew= 0;
break;
case VK_END:
rowNew= m_ptm->RowCount()-1;
break;
case VK_PRIOR:
switch (m_hlType)
{
case CHighlight::OVERSCORE_TEXT:
rowNew= m_rowHL - ptd->FullRows() - 1;
break;
case CHighlight::UNDERSCORE_TEXT:
case CHighlight::HIGHLIGHT_TEXT:
default:
rowNew= m_rowHL - ptd->FullRows();
break;
}
if (rowNew < 0) rowNew= 0;
break;
case VK_NEXT:
switch (m_hlType)
{
case CHighlight::UNDERSCORE_TEXT:
rowNew= m_rowHL + ptd->FullRows() + 1;
break;
case CHighlight::OVERSCORE_TEXT:
case CHighlight::HIGHLIGHT_TEXT:
default:
rowNew= m_rowHL + ptd->FullRows();
break;
}
if (rowNew > m_ptm->RowCount()-1) rowNew= m_ptm->RowCount()-1;
break;
case VK_UP:
switch (m_hlType)
{
case CHighlight::UNDERSCORE_TEXT:
rowNew= m_rowHL;
break;
case CHighlight::OVERSCORE_TEXT:
case CHighlight::HIGHLIGHT_TEXT:
default:
rowNew= m_rowHL - 1;
break;
}
if (rowNew < 0) rowNew= 0;
break;
case VK_DOWN:
switch (m_hlType)
{
case CHighlight::OVERSCORE_TEXT:
rowNew= m_rowHL;
break;
case CHighlight::HIGHLIGHT_TEXT:
case CHighlight::UNDERSCORE_TEXT:
default:
rowNew= m_rowHL + 1;
break;
}
if (rowNew > m_ptm->RowCount()-1) rowNew= m_ptm->RowCount()-1;
break;
default:
return;
}
SetSelectedRow(rowNew);
}
void CTMSingleSelect::OnKeyUp(CTextDisplay *ptd,
UINT nChar, UINT nRepCnt, UINT nFlags
)
{
}
void CTMSingleSelect::OnChar(CTextDisplay *ptd,
UINT nChar, UINT nRepCnt, UINT nFlags
)
{
}