void TNHexInputLine::handleEvent( TEvent& event ) { if( ((state & sfSelected) != 0) && (event.what == evKeyDown) ) switch( ctrlToArrow( event.keyDown.keyCode ) ) { case kbLeft: case kbRight: case kbHome: case kbEnd: case kbBack: case kbDel: case kbIns: break; default: if( ((event.keyDown.charScan.charCode < 'a') || (event.keyDown.charScan.charCode > 'f')) && ((event.keyDown.charScan.charCode < 'A') || (event.keyDown.charScan.charCode > 'F')) && isalpha( event.keyDown.charScan.charCode ) ) { clearEvent( event ); return; } int num; getData( &num ); if( (event.keyDown.charScan.charCode == '0') && (num == 0) ) { clearEvent( event ); return; } } TNRightJustInputLine::handleEvent( event ); }
void TNNumericInputLine::handleEvent( TEvent& event ) { if( ((state & sfSelected) != 0) && (event.what == evKeyDown) ) switch( ctrlToArrow( event.keyDown.keyCode ) ) { case kbLeft: case kbRight: case kbHome: case kbEnd: case kbBack: case kbDel: case kbIns: break; default: if( (event.keyDown.charScan.charCode >= ' ') && (event.keyDown.charScan.charCode != '.') && !isdigit( event.keyDown.charScan.charCode ) ) { clearEvent( event ); return; } int num; getData( &num ); if( (event.keyDown.charScan.charCode == '0') && (num == 0) ) { clearEvent( event ); return; } } TNRightJustInputLine::handleEvent( event ); }
void TCluster::handleEvent(TEvent &event) { TView::handleEvent(event); if (!(options & ofSelectable)) return; if (event.what == evMouseDown) { TPoint mouse = makeLocal(event.mouse.where); int i = findSel(mouse); if ((i != -1) && buttonState(i)) sel = i; drawView(); do { mouse = makeLocal(event.mouse.where); if ((findSel(mouse) == sel) && buttonState(sel)) showCursor(); else hideCursor(); } while (mouseEvent(event, evMouseMove)); showCursor(); mouse = makeLocal(event.mouse.where); if (findSel(mouse) == sel) { press(sel); drawView(); } clearEvent(event); } else if (event.what == evKeyDown) { int s = sel; switch (ctrlToArrow(event.keyDown.keyCode)) { case kbUp: if ((state & sfFocused) != 0) { int i = 0; do { i++; s--; if (s < 0) s = strings->getCount() - 1; } while (!(buttonState(s) || (i > strings->getCount()))); moveSel(i, s); clearEvent(event); } break; case kbDown: if ((state & sfFocused) != 0) { int i = 0; do { i++; s++; if (s >= strings->getCount()) s = 0; } while (!(buttonState(s) || (i > strings->getCount()))); moveSel(i, s); clearEvent(event); } break; case kbRight: if ((state & sfFocused) != 0) { int i = 0; do { i++; s += size.y; if (s >= strings->getCount()) { // BUG FIX - EFW - 10/25/94 s = (s + 1) % size.y; if (s >= strings->getCount()) s = 0; } } while (!(buttonState(s) || (i > strings->getCount()))); moveSel(i, s); // BUG FIX - EFW - 10/25/94 clearEvent(event); } break; case kbLeft: if ((state & sfFocused) != 0) { int i = 0; do { i++; if (s > 0) { s -= size.y; if (s < 0) { s = ((strings->getCount() + size.y - 1) / size.y) * size.y + s - 1; if (s >= strings->getCount()) s = strings->getCount() - 1; } } else s = strings->getCount() - 1; } while (!(buttonState(s) || (i > strings->getCount()))); moveSel(i, s); // BUG FIX - EFW - 10/25/94 clearEvent(event); } break; default: for (int i = 0; i < strings->getCount(); i++) { char c = hotKey((char *)(strings->at(i))); if (getAltCode(c) == event.keyDown.keyCode || ((owner->phase == phPostProcess || (state & sfFocused) != 0 ) && c != 0 && toupper(event.keyDown.charScan.charCode) == c ) ) { if (buttonState(i)) { if (focus()) { sel = i; movedTo(sel); press(sel); drawView(); } clearEvent(event); } return; } } if (event.keyDown.charScan.charCode == ' ' && (state & sfFocused) != 0 ) { press(sel); drawView(); clearEvent(event); } } } }
void TColorSelector::handleEvent(TEvent &event) { const int width = 4; TView::handleEvent(event); uchar oldColor = color; int maxCol = (selType == csBackground) ? 7 : 15; switch (event.what) { case evMouseDown: do { if (mouseInView(event.mouse.where)) { TPoint mouse = makeLocal(event.mouse.where); color = mouse.y * 4 + mouse.x / 3; } else color = oldColor; colorChanged(); drawView(); } while (mouseEvent(event, evMouseMove)); break; case evKeyDown: switch (ctrlToArrow(event.keyDown.keyCode)) { case kbLeft: if (color > 0) color--; else color = maxCol; break; case kbRight: if (color < maxCol) color++; else color = 0; break; case kbUp: if (color > width - 1) color -= width; else if (color == 0) color = maxCol; else color += maxCol - width; break; case kbDown: if (color < maxCol - (width - 1)) color += width; else if (color == maxCol) color = 0; else color -= maxCol - width; break; default: return; } break; case evBroadcast: if (event.message.command == cmColorSet) { if (selType == csBackground) color = event.message.infoByte >> 4; else color = event.message.infoByte & 0x0F; drawView(); return ; } else return;
void TOutlineViewer::handleEvent(TEvent &event) { const int mouseAutoToSkip = 3; TPoint mouse; TNode *cur; int newFocus; int count; char *graph; uchar dragged; TScroller::handleEvent(event); switch (event.what) { case evMouseDown: count = 0; dragged = 0; do { if (dragged < 2) dragged++; mouse = makeLocal(event.mouse.where); if (mouseInView(event.mouse.where)) newFocus = delta.y + mouse.y; else { if (event.what == evMouseAuto) count++; if (count == mouseAutoToSkip) { count = 0; if (mouse.y < 0) newFocus--; if (mouse.y >= size.y) newFocus++; } } if (foc != newFocus) { adjustFocus(newFocus); drawView(); } } while (!(event.mouse.eventFlags & meDoubleClick) && mouseEvent(event, evMouseMove + evMouseAuto)); if (event.mouse.eventFlags & meDoubleClick) selected(foc); else { if (dragged < 2) { cur = firstThat(isFocused); graph = getGraph(focLevel, focLines, focFlags); if (mouse.x < strlen(graph)) { adjust(cur, ! isExpanded(cur) ? True : False); update(); drawView(); } delete graph; } } break; case evKeyboard: newFocus = foc; switch (ctrlToArrow(event.keyDown.keyCode)) { case kbUp: case kbLeft: newFocus--; break; case kbDown: case kbRight: newFocus++; break; case kbPgDn: newFocus += size.y - 1; break; case kbPgUp: newFocus -= size.y - 1; break; case kbHome: newFocus = delta.y; break; case kbEnd: newFocus = delta.y + size.y - 1; break; case kbCtrlPgUp: newFocus = 0; break; case kbCtrlPgDn: newFocus = limit.y - 1; break; case kbCtrlEnter: case kbEnter: selected(newFocus); break; default: uchar code = event.keyDown.charScan.charCode; switch (code) { case '-': case '+': adjust(getNode(newFocus), code == '+' ? True : False); break; case '*': expandAll(getNode(newFocus)); break; default: return; } update(); } clearEvent(event); adjustFocus(newFocus); drawView(); }; };
void TListViewer::handleEvent(TEvent &event) { TPoint mouse; ushort colWidth; int oldItem, newItem; int count; int mouseAutosToSkip = 4; TView::handleEvent(event); if (event.what == evMouseDown) { colWidth = size.x / numCols + 1; oldItem = focused; mouse = makeLocal(event.mouse.where); if (mouseInView(event.mouse.where)) newItem = mouse.y + (size.y * (mouse.x / colWidth)) + topItem; else newItem = oldItem; count = 0; do { if (newItem != oldItem) { focusItemNum(newItem); drawView(); } oldItem = newItem; mouse = makeLocal(event.mouse.where); if (mouseInView(event.mouse.where)) newItem = mouse.y + (size.y * (mouse.x / colWidth)) + topItem; else { if (numCols == 1) { if (event.what == evMouseAuto) count++; if (count == mouseAutosToSkip) { count = 0; if (mouse.y < 0) newItem = focused - 1; else if (mouse.y >= size.y) newItem = focused + 1; } } else { if (event.what == evMouseAuto) count++; if (count == mouseAutosToSkip) { count = 0; if (mouse.x < 0) newItem = focused - size.y; else if (mouse.x >= size.x) newItem = focused + size.y; else if (mouse.y < 0) newItem = focused - focused % size.y; else if (mouse.y > size.y) newItem = focused - focused % size.y + size.y - 1; } } } if (event.mouse.eventFlags & meDoubleClick) break; } while (mouseEvent(event, evMouseMove | evMouseAuto)); focusItemNum(newItem); drawView(); if ((event.mouse.eventFlags & meDoubleClick) && range > newItem) selectItem(newItem); clearEvent(event); } else if (event.what == evKeyDown) { if (event.keyDown.charScan.charCode == ' ' && focused < range) { selectItem(focused); newItem = focused; } else { switch (ctrlToArrow(event.keyDown.keyCode)) { case kbUp: newItem = focused - 1; break; case kbDown: newItem = focused + 1; break; case kbRight: if (numCols > 1) newItem = focused + size.y; else return; break; case kbLeft: if (numCols > 1) newItem = focused - size.y; else return; break; case kbPgDn: newItem = focused + size.y * numCols; break; case kbPgUp: newItem = focused - size.y * numCols; break; case kbHome: newItem = topItem; break; case kbEnd: newItem = topItem + (size.y * numCols) - 1; break; case kbCtrlPgDn: newItem = range - 1; break; case kbCtrlPgUp: newItem = 0; break; default: return; } } focusItemNum(newItem); drawView(); clearEvent(event); } else if (event.what == evBroadcast) { if ((options & ofSelectable) != 0) { if (event.message.command == cmScrollBarClicked && (event.message.infoPtr == hScrollBar || event.message.infoPtr == vScrollBar)) focus(); // BUG FIX <<------ Change else if (event.message.command == cmScrollBarChanged) { if (vScrollBar == event.message.infoPtr) { focusItemNum(vScrollBar->value); drawView(); } else if (hScrollBar == event.message.infoPtr) drawView(); } } } }
ushort TMenuView::execute() { Boolean autoSelect = False; menuAction action; char ch; ushort result = 0; TMenuItem *itemShown = 0; TMenuItem *p; TMenuView *target; TRect r; TEvent e; current = menu->deflt; do { action = doNothing; getEvent(e); switch (e.what) { case evMouseDown: if( mouseInView(e.mouse.where) || mouseInOwner(e) ) { trackMouse(e); if( size.y == 1 ) autoSelect = True; } else action = doReturn; break; case evMouseUp: trackMouse(e); if( mouseInOwner(e) ) current = menu->deflt; else if( current != 0 && current->name != 0 ) action = doSelect; else action = doReturn; break; case evMouseMove: if( e.mouse.buttons != 0 ) { trackMouse(e); if( !(mouseInView(e.mouse.where) || mouseInOwner(e)) && mouseInMenus(e) ) action = doReturn; } break; case evKeyDown: switch( ctrlToArrow(e.keyDown.keyCode) ) { case kbUp: case kbDown: if( size.y != 1 ) trackKey(Boolean(ctrlToArrow(e.keyDown.keyCode) == kbDown)); else if( e.keyDown.keyCode == kbDown ) autoSelect = True; break; case kbLeft: case kbRight: if( parentMenu == 0 ) trackKey(Boolean(ctrlToArrow(e.keyDown.keyCode) == kbRight)); else action = doReturn; break; case kbHome: case kbEnd: if( size.y != 1 ) { current = menu->items; if( e.keyDown.keyCode == kbEnd ) trackKey(False); } break; case kbEnter: if( size.y == 1 ) autoSelect = True; action = doSelect; break; case kbEsc: action = doReturn; if( parentMenu == 0 || parentMenu->size.y != 1 ) clearEvent(e); break; default: target = this; ch = getAltChar(e.keyDown.keyCode); if( ch == 0 ) ch = e.keyDown.charScan.charCode; else target = topMenu(); p = target->findItem(ch); if( p == 0 ) { p = topMenu()->hotKey(e.keyDown.keyCode); if( p != 0 && commandEnabled(p->command) ) { result = p->command; action = doReturn; } } else if( target == this ) { if( size.y == 1 ) autoSelect = True; action = doSelect; current = p; } else if( parentMenu != target || parentMenu->current != p ) action = doReturn; } break; case evCommand: if( e.message.command == cmMenu ) { autoSelect = False; if (parentMenu != 0 ) action = doReturn; } else action = doReturn; break; } if( itemShown != current ) { itemShown = current; drawView(); } if( (action == doSelect || (action == doNothing && autoSelect)) && current != 0 && current->name != 0 ) if( current->command == 0 ) { if( (e.what & (evMouseDown | evMouseMove)) != 0 ) putEvent(e); r = getItemRect( current ); r.a.x = r.a.x + origin.x; r.a.y = r.b.y + origin.y; r.b = owner->size; if( size.y == 1 ) r.a.x--; target = topMenu()->newSubView(r, current->subMenu,this); result = owner->execView(target); destroy( target ); } else if( action == doSelect ) result = current->command; if( result != 0 && commandEnabled(result) ) { action = doReturn; clearEvent(e); } } while( action != doReturn ); if( e.what != evNothing && (parentMenu != 0 || e.what == evCommand)) putEvent(e); if( current != 0 ) { menu->deflt = current; current = 0; drawView(); } return result; }
void TCluster::handleEvent( TEvent& event ) { TView::handleEvent(event); if( event.what == evMouseDown ) { TPoint mouse = makeLocal( event.mouse.where ); int i = findSel(mouse); if( i != -1 ) sel = i; drawView(); do { mouse = makeLocal( event.mouse.where ); if( findSel(mouse) == sel ) showCursor(); else hideCursor(); } while( mouseEvent(event,evMouseMove) ); showCursor(); mouse = makeLocal( event.mouse.where ); if( findSel(mouse) == sel ) { press(sel); drawView(); } clearEvent(event); } else if( event.what == evKeyDown ) switch (ctrlToArrow(event.keyDown.keyCode)) { case kbUp: if( (state & sfFocused) != 0 ) { if( --sel < 0 ) sel = strings->getCount()-1; movedTo(sel); drawView(); clearEvent(event); } break; case kbDown: if( (state & sfFocused) != 0 ) { if( ++sel >= strings->getCount() ) sel = 0; movedTo(sel); drawView(); clearEvent(event); } break; case kbRight: if( (state & sfFocused) != 0 ) { sel += size.y; if( sel >= strings->getCount() ) { sel = (sel + 1) % size.y; if( sel >= strings->getCount() ) sel = 0; } movedTo(sel); drawView(); clearEvent(event); } break; case kbLeft: if( (state & sfFocused) != 0 ) { if( sel > 0 ) { sel -= size.y; if( sel < 0 ) { sel = ((strings->getCount()+size.y-1) /size.y)*size.y + sel - 1; if( sel >= strings->getCount() ) sel = strings->getCount()-1; } } else sel = strings->getCount()-1; movedTo(sel); drawView(); clearEvent(event); } break; default: for( int i = 0; i < strings->getCount(); i++ ) { char c = hotKey( (char *)(strings->at(i)) ); if( getAltCode(c) == event.keyDown.keyCode || ( ( owner->phase == phPostProcess || (state & sfFocused) != 0 ) && c != 0 && toupper(event.keyDown.charScan.charCode) == c ) ) { select(); sel = i; movedTo(sel); press(sel); drawView(); clearEvent(event); return; } } if( event.keyDown.charScan.charCode == ' ' && (state & sfFocused) != 0 ) { press(sel); drawView(); clearEvent(event); } } }
void TInputLine::handleEvent( TEvent& event ) { TView::handleEvent(event); int delta, anchor, i; if( (state & sfSelected) != 0 ) switch( event.what ) { case evMouseDown: if( canScroll(delta = mouseDelta(event)) ) do { if( canScroll(delta) ) { firstPos += delta; drawView(); } } while( mouseEvent( event, evMouseAuto ) ); else if (event.mouse.doubleClick) selectAll(True); else { anchor = mousePos(event); do { if( event.what == evMouseAuto && canScroll( delta = mouseDelta(event) ) ) firstPos += delta; curPos = mousePos(event); if( curPos < anchor ) { selStart = curPos; selEnd = anchor; } else { selStart = anchor; selEnd = curPos; } drawView(); } while (mouseEvent(event, evMouseMove | evMouseAuto)); } clearEvent(event); break; case evKeyDown: switch( ctrlToArrow(event.keyDown.keyCode) ) { case kbLeft: if( curPos > 0 ) curPos--; break; case kbRight: if( curPos < strlen(data) ) curPos++; break; case kbHome: curPos = 0; break; case kbEnd: curPos = strlen(data); break; case kbBack: if( curPos > 0 ) { strcpy( data+curPos-1, data+curPos ); curPos--; if( firstPos > 0 ) firstPos--; } break; case kbDel: if( selStart == selEnd ) if( curPos < strlen(data) ) { selStart = curPos; selEnd = curPos + 1; } deleteSelect(); break; case kbIns: setState(sfCursorIns, Boolean(!(state & sfCursorIns))); break; default: if( event.keyDown.charScan.charCode >= ' ' ) { if( (state & sfCursorIns) != 0 ) strcpy( data + curPos, data + curPos + 1 ); else deleteSelect(); if( strlen(data) < maxLen ) { if( firstPos > curPos ) firstPos = curPos; memmove( data + curPos + 1, data + curPos, strlen(data+curPos)+1 ); data[curPos++] = event.keyDown.charScan.charCode; } } else if( event.keyDown.charScan.charCode == CONTROL_Y) { *data = EOS; curPos = 0; } else return; } selStart = 0; selEnd = 0; if( firstPos > curPos ) firstPos = curPos; i = curPos - size.x + 3; if( firstPos < i ) firstPos = i; drawView(); clearEvent( event ); break; } }