mirror of https://github.com/lianthony/NT4.0
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
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
|
|
)
|
|
{
|
|
|
|
}
|