// Pressed button long MFXAddEditTypedTable::onLeftBtnPress(FXObject*, FXSelector, void* ptr) { FXEvent* event = (FXEvent*)ptr; FXTablePos tablepos; flags &= ~FLAG_TIP; handle(this, FXSEL(SEL_FOCUS_SELF, 0), ptr); if (isEnabled()) { grab(); if (target && target->tryHandle(this, FXSEL(SEL_LEFTBUTTONPRESS, message), ptr)) { return 1; } // Cell being clicked on tablepos.row = rowAtY(event->win_y); tablepos.col = colAtX(event->win_x); // Outside table if (tablepos.row < 0 || tablepos.row >= nrows || tablepos.col < 0 || tablepos.col >= ncols) { setCurrentItem(-1, -1, TRUE); return 0; } // Change current item bool wasEdited = editor != 0; setCurrentItem(tablepos.row, tablepos.col, TRUE); if (!wasEdited) { // Select or deselect if (event->state & SHIFTMASK) { if (0 <= anchor.row && 0 <= anchor.col) { if (isItemEnabled(anchor.row, anchor.col)) { extendSelection(current.row, current.col, TRUE); } } else { setAnchorItem(current.row, current.col); if (isItemEnabled(current.row, current.col)) { extendSelection(current.row, current.col, TRUE); } } mode = MOUSE_SELECT; } else { if (isItemEnabled(current.row, current.col)) { killSelection(TRUE); setAnchorItem(current.row, current.col); extendSelection(current.row, current.col, TRUE); } else { setAnchorItem(current.row, current.col); } mode = MOUSE_SELECT; } } flags &= ~FLAG_UPDATE; flags |= FLAG_PRESSED; return 1; } return 0; }
void CFastGrid::OnItemchanging(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* p = (NM_LISTVIEW*)pNMHDR; UINT x = p->uNewState; char c[12] = ""; itoa(p->uOldState, c, 10); // AfxMessageBox(c); // AfxMessageBox("c"); if( isItemEnabled(p->iItem) == FALSE && (p->uOldState & 8192 || p->uNewState & 8192) ) { *pResult = 1; } else { *pResult = 0; } }
// Released button long MFXAddEditTypedTable::onLeftBtnRelease(FXObject*, FXSelector, void* ptr) { FXEvent* event = (FXEvent*)ptr; if (isEnabled()) { ungrab(); flags &= ~FLAG_PRESSED; flags |= FLAG_UPDATE; mode = MOUSE_NONE; stopAutoScroll(); setDragCursor(getApp()->getDefaultCursor(DEF_ARROW_CURSOR)); if (target && target->tryHandle(this, FXSEL(SEL_LEFTBUTTONRELEASE, message), ptr)) { return 1; } // Scroll to make item visibke makePositionVisible(current.row, current.col); // Update anchor //setAnchorItem(current.row,current.col); // FIXME look into the selection stuff // Generate clicked callbacks if (event->click_count == 1) { handle(this, FXSEL(SEL_CLICKED, 0), (void*)¤t); } else if (event->click_count == 2) { handle(this, FXSEL(SEL_DOUBLECLICKED, 0), (void*)¤t); } else if (event->click_count == 3) { handle(this, FXSEL(SEL_TRIPLECLICKED, 0), (void*)¤t); } // Command callback only when clicked on item if (0 <= current.row && 0 <= current.col && isItemEnabled(current.row, current.col)) { handle(this, FXSEL(SEL_COMMAND, 0), (void*)¤t); } return 1; } return 0; }
void KPopupMenu::keyPressEvent(QKeyEvent* e) { if (!d->shortcuts) { // continue event processing by Qpopup //e->ignore(); QPopupMenu::keyPressEvent(e); return; } int i = 0; bool firstpass = true; QString keyString = e->text(); // check for common commands dealt with by QPopup int key = e->key(); if (key == Key_Escape || key == Key_Return || key == Key_Enter || key == Key_Up || key == Key_Down || key == Key_Left || key == Key_Right || key == Key_F1) { resetKeyboardVars(); // continue event processing by Qpopup //e->ignore(); QPopupMenu::keyPressEvent(e); return; } // check to see if the user wants to remove a key from the sequence (backspace) // or clear the sequence (delete) if (d->keySeq != QString::null) { if (key == Key_Backspace) { if (d->keySeq.length() == 1) { resetKeyboardVars(); return; } // keep the last sequence in keyString keyString = d->keySeq.left(d->keySeq.length() - 1); // allow sequence matching to be tried again resetKeyboardVars(); } else if (key == Key_Delete) { resetKeyboardVars(); // clear active item setActiveItem(0); return; } else if (d->noMatches) { // clear if there are no matches resetKeyboardVars(); // clear active item setActiveItem(0); } else { // the key sequence is not a null string // therefore the lastHitIndex is valid i = d->lastHitIndex; } } else if (key == Key_Backspace && parentMenu) { // backspace with no chars in the buffer... go back a menu. hide(); resetKeyboardVars(); return; } d->keySeq += keyString; int seqLen = d->keySeq.length(); for (; i < (int)count(); i++) { // compare typed text with text of this entry int j = idAt(i); // don't search disabled entries if (!isItemEnabled(j)) continue; QString thisText; // retrieve the right text // (the last selected item one may have additional ampersands) if (i == d->lastHitIndex) thisText = d->originalText; else thisText = text(j); // if there is an accelerator present, remove it if ((int)accel(j) != 0) thisText = thisText.replace(QRegExp("&"), ""); // chop text to the search length thisText = thisText.left(seqLen); // do the search if (thisText.find(d->keySeq, 0, false) == 0) { if (firstpass) { // match setActiveItem(i); // check to see if we're underlining a different item if (d->lastHitIndex != i) // yes; revert the underlining changeItem(idAt(d->lastHitIndex), d->originalText); // set the original text if it's a different item if (d->lastHitIndex != i || d->lastHitIndex == -1) d->originalText = text(j); // underline the currently selected item changeItem(j, underlineText(d->originalText, d->keySeq.length())); // remeber what's going on d->lastHitIndex = i; // start/restart the clear timer d->clearTimer.start(5000, true); // go around for another try, to see if we can execute firstpass = false; } else { // don't allow execution return; } } // fall through to allow execution } if (!firstpass) { if (d->autoExec) { // activate anything activateItemAt(d->lastHitIndex); resetKeyboardVars(); } else if (findItem(idAt(d->lastHitIndex)) && findItem(idAt(d->lastHitIndex))->popup()) { // only activate sub-menus activateItemAt(d->lastHitIndex); resetKeyboardVars(); } return; } // no matches whatsoever, clean up resetKeyboardVars(true); //e->ignore(); QPopupMenu::keyPressEvent(e); }