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 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); } } }