void CWHTable::BranchAhead(int nBranchIndex) { // Put previous index on stack m_IndexStack.AddHead(m_nIndex); // Locate choice FindChoiceIndex(nBranchIndex, m_nIndex); // Table follows an over 1 column and down 1 row to branch ahead IncrementRow(m_nIndex); IncrementColumn(m_nIndex); }
void CWHTable::GetData(int nChoice, CString& csDataType, CString& csName, CString& csDescription) { int nColumn; int nIndex = m_nIndex; // Locate the choice in the column FindChoiceIndex(nChoice, nIndex); // Current column is determined by # of items on branch stack nColumn = m_IndexStack.GetCount(); // Data type is at m_nColumns-3 (0 based) int i = nColumn; while (i < m_nColumns-3) { IncrementColumn(nIndex); i++; } csDataType = m_csaLine[nIndex]; // Name is right next to it IncrementColumn(nIndex); csName = m_csaLine[nIndex]; // Then we have the description IncrementColumn(nIndex); csDescription = m_csaLine[nIndex]; if (!csDescription.IsEmpty()) { // Strip out quotes if (csDescription[0] == '"') { csDescription = csDescription.Mid(1, csDescription.GetLength()-2); } // Replace '|' character with '\n' InsertNewlines(csDescription); } }
bool DigitEntry::OnMouseDown(PixelPoint p) { int i = FindColumnAt(p.x); if (i >= 0 && columns[i].IsEditable()) { SetCursor(i); SetFocus(); if (p.y < int(top)) IncrementColumn(i); else if (unsigned(p.y) > bottom) DecrementColumn(i); return true; } return PaintWindow::OnMouseDown(p); }
bool DigitEntry::OnKeyDown(unsigned key_code) { assert(cursor < length); switch (key_code) { int i; case KEY_UP: IncrementColumn(cursor); return true; case KEY_DOWN: DecrementColumn(cursor); return true; case KEY_LEFT: i = FindEditableLeft(cursor - 1); if (i >= 0) SetCursor(i); return true; case KEY_RIGHT: i = FindEditableRight(cursor + 1); if (i >= 0) SetCursor(i); return true; case KEY_RETURN: if (action_listener != nullptr) { action_listener->OnAction(action_id); return true; } break; } return PaintWindow::OnKeyDown(key_code); }
void DigitEntry::IncrementColumn(unsigned i) { assert(i < length); valid = true; Column &c = columns[i]; if (c.IsNumber()) { if (c.value < c.GetMaxNumber()) ++c.value; else { c.value = 0; int previous = FindNumberLeft(i - 1); if (previous >= 0) IncrementColumn(previous); } } else if (c.IsSign()) { c.value = !c.value; } Invalidate(); }