bool PopupMenuEditor::eventFilter( QObject * o, QEvent * e ) { if ( o == lineEdit && e->type() == QEvent::FocusOut ) { leaveEditMode( 0 ); update(); } return QWidget::eventFilter( o, e ); }
void PopupMenuEditor::keyPressEvent( QKeyEvent * e ) { if ( lineEdit->isHidden() ) { // In navigation mode switch ( e->key() ) { case Qt::Key_Delete: hideSubMenu(); removeItem(); showSubMenu(); break; case Qt::Key_Backspace: clearCurrentField(); break; case Qt::Key_Up: navigateUp( e->state() & Qt::ControlButton ); break; case Qt::Key_Down: navigateDown( e->state() & Qt::ControlButton ); break; case Qt::Key_Left: navigateLeft(); break; case Qt::Key_Right: navigateRight(); break; case Qt::Key_PageUp: currentIndex = 0; break; case Qt::Key_PageDown: currentIndex = itemList.count(); break; case Qt::Key_Enter: case Qt::Key_Return: case Qt::Key_F2: enterEditMode( e ); // move on case Qt::Key_Alt: case Qt::Key_Shift: case Qt::Key_Control: // do nothing return; case Qt::Key_Escape: currentField = 0; navigateLeft(); break; case Qt::Key_C: if ( e->state() & Qt::ControlButton && currentIndex < (int)itemList.count() ) { copy( currentIndex ); break; } case Qt::Key_X: if ( e->state() & Qt::ControlButton && currentIndex < (int)itemList.count() ) { hideSubMenu(); cut( currentIndex ); showSubMenu(); break; } case Qt::Key_V: if ( e->state() & Qt::ControlButton ) { hideSubMenu(); paste( currentIndex < (int)itemList.count() ? currentIndex + 1: itemList.count() ); showSubMenu(); break; } default: if ( currentItem()->isSeparator() ) return; if ( currentField == 1 ) { showLineEdit(); QApplication::sendEvent( lineEdit, e ); e->accept(); return; } else if ( currentField == 2 ) { setAccelerator( e->key(), e->state() ); showSubMenu(); } break; } } else { // In edit mode switch ( e->key() ) { case Qt::Key_Enter: case Qt::Key_Return: case Qt::Key_Escape: leaveEditMode( e ); e->accept(); return; } } update(); }
PageTimers::PageTimers (QWidget *parent) : Background (parent), edit_mode (false) { QGridLayout *layout = new QGridLayout (this); layout->setMargin (0); layout->setSpacing (0); { digital_timer = new DigitalTimer (this); connect (digital_timer, SIGNAL (enterEditModeRequested ()), this, SLOT (enterEditModeDigitalTimerPressed ())); connect (digital_timer, SIGNAL (leaveEditModeRequested ()), this, SLOT (leaveEditMode ())); layout->addWidget (digital_timer, 1, 1); } { analog_timer = new AnalogTimer (this); connect (analog_timer, SIGNAL (clearAlarms ()), this, SLOT (clearCurrentAlarms ())); connect (analog_timer, SIGNAL (enterEditModeRequested ()), this, SLOT (enterEditModeAnalogTimerPressed ())); connect (analog_timer, SIGNAL (leaveEditModeRequested ()), this, SLOT (leaveEditMode ())); connect (analog_timer, SIGNAL (pressed ()), this, SIGNAL (analogTimerPressed ())); connect (analog_timer, SIGNAL (released ()), this, SIGNAL (analogTimerReleased ())); connect (analog_timer, SIGNAL (slide ()), this, SIGNAL (analogTimerSlide ())); connect (analog_timer, SIGNAL (zeroTimeReached ()), this, SIGNAL (zeroTimeReached ())); layout->addWidget (analog_timer, 2, 1); } layout->setColumnStretch (0, 15); layout->setColumnStretch (1, 50); layout->setColumnStretch (2, 15); layout->setRowStretch (0, 2); layout->setRowStretch (1, 40); layout->setRowStretch (2, 40); layout->setRowStretch (3, 10); layout->setRowStretch (4, 2); #if 0 // Link with Reference { QHBoxLayout *hlayout = new QHBoxLayout (); hlayout->addStretch (1); QPushButton *add_timer_button = new QPushButton ("Add timer", this); connect (add_timer_button, SIGNAL (clicked ()), this, SIGNAL (switchToPageDishSelect ())); hlayout->addWidget (add_timer_button); hlayout->addStretch (1); layout->addLayout (hlayout); add_timer_button->hide (); } #endif connect (this, SIGNAL (pressed ()), this, SLOT (leaveEditMode ())); updateContent (); update_timer.setInterval (100); update_timer.setSingleShot (false); update_timer.start (); leave_edit_mode_timer.setSingleShot (false); connect (&leave_edit_mode_timer, SIGNAL (timeout ()), this, SLOT (leaveEditMode ())); connect (analog_timer, SIGNAL (lmb_pressed ()), &leave_edit_mode_timer, SLOT (stop ())); connect (digital_timer, SIGNAL (lmb_pressed ()), &leave_edit_mode_timer, SLOT (stop ())); connect (analog_timer, SIGNAL (userIsAlive ()), this, SLOT (restartTirednessTimer ())); connect (digital_timer, SIGNAL (userIsAlive ()), this, SLOT (restartTirednessTimer ())); connect (analog_timer, SIGNAL (lmb_released ()), this, SLOT (startTirednessTimer ())); connect (digital_timer, SIGNAL (lmb_released ()), this, SLOT (startTirednessTimer ())); }