void ContactBrowser::linkHighlighted(const QString& link) { if (mDocument) { ContactDocument::ContactAnchorType cType = mDocument->getAnchorType(link); /* Now display the new one */ switch(cType) { case ContactDocument::None: setEditFocus(true); QSoftMenuBar::setLabel(this, Qt::Key_Select, QSoftMenuBar::NoLabel); break; case ContactDocument::DialLink: setEditFocus(true); QSoftMenuBar::setLabel(this, Qt::Key_Select, "phone/calls", tr("Dial")); break; case ContactDocument::EmailLink: setEditFocus(true); QSoftMenuBar::setLabel(this, Qt::Key_Select, "email", tr("Email")); break; case ContactDocument::QdlLink: setEditFocus(true); QSoftMenuBar::setLabel(this, Qt::Key_Select, QSoftMenuBar::Select); break; case ContactDocument::CustomLink: setEditFocus(true); QSoftMenuBar::setLabel(this, Qt::Key_Select, "activate", tr("Activate")); break; } } mLink = link; }
/*! \reimp */ void QSlider::mousePressEvent(QMouseEvent *ev) { Q_D(QSlider); if (d->maximum == d->minimum || (ev->buttons() ^ ev->button())) { ev->ignore(); return; } #ifdef QT_KEYPAD_NAVIGATION if (QApplication::keypadNavigationEnabled()) setEditFocus(true); #endif ev->accept(); if ((ev->button() & style()->styleHint(QStyle::SH_Slider_AbsoluteSetButtons)) == ev->button()) { QStyleOptionSlider opt; initStyleOption(&opt); const QRect sliderRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); const QPoint center = sliderRect.center() - sliderRect.topLeft(); // to take half of the slider off for the setSliderPosition call we use the center - topLeft setSliderPosition(d->pixelPosToRangeValue(d->pick(ev->pos() - center))); triggerAction(SliderMove); setRepeatAction(SliderNoAction); d->pressedControl = QStyle::SC_SliderHandle; update(); } else if ((ev->button() & style()->styleHint(QStyle::SH_Slider_PageSetButtons)) == ev->button()) { QStyleOptionSlider opt; initStyleOption(&opt); d->pressedControl = style()->hitTestComplexControl(QStyle::CC_Slider, &opt, ev->pos(), this); SliderAction action = SliderNoAction; if (d->pressedControl == QStyle::SC_SliderGroove) { const QRect sliderRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); int pressValue = d->pixelPosToRangeValue(d->pick(ev->pos() - sliderRect.center() + sliderRect.topLeft())); d->pressValue = pressValue; if (pressValue > d->value) action = SliderPageStepAdd; else if (pressValue < d->value) action = SliderPageStepSub; if (action) { triggerAction(action); setRepeatAction(action); } } } else { ev->ignore(); return; } if (d->pressedControl == QStyle::SC_SliderHandle) { QStyleOptionSlider opt; initStyleOption(&opt); setRepeatAction(SliderNoAction); QRect sr = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this); d->clickOffset = d->pick(ev->pos() - sr.topLeft()); update(sr); setSliderDown(true); } }
/*! \reimp */ void WheelBrowserScreen::showEvent(QShowEvent *e) { setEditFocus(true); m_views.clear(); m_views.append("Main"); m_wheel->moveToWheel(*m_data); m_fillTimeline->setDirection(QTimeLine::Forward); m_fillTimeline->start(); QAbstractBrowserScreen::showEvent(e); }
void QWrapListView::keyPressEvent(QKeyEvent *ke) { if (ke->key() == Qt::Key_Up && currentIndex().row() == 0) { focusNextPrevChild(false); ke->accept(); } else if (ke->key() == Qt::Key_Down && currentIndex().row() == model()->rowCount() - 1) { focusNextPrevChild(true); ke->accept(); } else if (ke->key() == Qt::Key_Back) { setEditFocus(false); QListView::keyPressEvent(ke); } else QListView::keyPressEvent(ke); }
/*! \reimp */ void QAbstractSlider::keyPressEvent(QKeyEvent *ev) { Q_D(QAbstractSlider); SliderAction action = SliderNoAction; #ifdef QT_KEYPAD_NAVIGATION if (ev->isAutoRepeat()) { if (!d->firstRepeat.isValid()) d->firstRepeat.start(); else if (1 == d->repeatMultiplier) { // This is the interval in milli seconds which one key repetition // takes. const int repeatMSecs = d->firstRepeat.elapsed(); /** * The time it takes to currently navigate the whole slider. */ const qreal currentTimeElapse = (qreal(maximum()) / singleStep()) * repeatMSecs; /** * This is an arbitrarily determined constant in msecs that * specifies how long time it should take to navigate from the * start to the end(excluding starting key auto repeat). */ const int SliderRepeatElapse = 2500; d->repeatMultiplier = currentTimeElapse / SliderRepeatElapse; } } else if (d->firstRepeat.isValid()) { d->firstRepeat.invalidate(); d->repeatMultiplier = 1; } #endif switch (ev->key()) { #ifdef QT_KEYPAD_NAVIGATION case Qt::Key_Select: if (QApplication::keypadNavigationEnabled()) setEditFocus(!hasEditFocus()); else ev->ignore(); break; case Qt::Key_Back: if (QApplication::keypadNavigationEnabled() && hasEditFocus()) { setValue(d->origValue); setEditFocus(false); } else ev->ignore(); break; #endif // It seems we need to use invertedAppearance for Left and right, otherwise, things look weird. case Qt::Key_Left: #ifdef QT_KEYPAD_NAVIGATION // In QApplication::KeypadNavigationDirectional, we want to change the slider // value if there is no left/right navigation possible and if this slider is not // inside a tab widget. if (QApplication::keypadNavigationEnabled() && (!hasEditFocus() && QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder || d->orientation == Qt::Vertical || !hasEditFocus() && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) || QWidgetPrivate::inTabWidget(this)))) { ev->ignore(); return; } if (QApplication::keypadNavigationEnabled() && d->orientation == Qt::Vertical) action = d->invertedControls ? SliderSingleStepSub : SliderSingleStepAdd; else #endif if (isRightToLeft()) action = d->invertedAppearance ? SliderSingleStepSub : SliderSingleStepAdd; else action = !d->invertedAppearance ? SliderSingleStepSub : SliderSingleStepAdd; break; case Qt::Key_Right: #ifdef QT_KEYPAD_NAVIGATION // Same logic as in Qt::Key_Left if (QApplication::keypadNavigationEnabled() && (!hasEditFocus() && QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder || d->orientation == Qt::Vertical || !hasEditFocus() && (QWidgetPrivate::canKeypadNavigate(Qt::Horizontal) || QWidgetPrivate::inTabWidget(this)))) { ev->ignore(); return; } if (QApplication::keypadNavigationEnabled() && d->orientation == Qt::Vertical) action = d->invertedControls ? SliderSingleStepAdd : SliderSingleStepSub; else #endif if (isRightToLeft()) action = d->invertedAppearance ? SliderSingleStepAdd : SliderSingleStepSub; else action = !d->invertedAppearance ? SliderSingleStepAdd : SliderSingleStepSub; break; case Qt::Key_Up: #ifdef QT_KEYPAD_NAVIGATION // In QApplication::KeypadNavigationDirectional, we want to change the slider // value if there is no up/down navigation possible. if (QApplication::keypadNavigationEnabled() && (QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder || d->orientation == Qt::Horizontal || !hasEditFocus() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical))) { ev->ignore(); break; } #endif action = d->invertedControls ? SliderSingleStepSub : SliderSingleStepAdd; break; case Qt::Key_Down: #ifdef QT_KEYPAD_NAVIGATION // Same logic as in Qt::Key_Up if (QApplication::keypadNavigationEnabled() && (QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder || d->orientation == Qt::Horizontal || !hasEditFocus() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical))) { ev->ignore(); break; } #endif action = d->invertedControls ? SliderSingleStepAdd : SliderSingleStepSub; break; case Qt::Key_PageUp: action = d->invertedControls ? SliderPageStepSub : SliderPageStepAdd; break; case Qt::Key_PageDown: action = d->invertedControls ? SliderPageStepAdd : SliderPageStepSub; break; case Qt::Key_Home: action = SliderToMinimum; break; case Qt::Key_End: action = SliderToMaximum; break; default: ev->ignore(); break; } if (action) triggerAction(action); }
/*! \reimp */ void QAbstractSlider::keyPressEvent(QKeyEvent *ev) { Q_D(QAbstractSlider); SliderAction action = SliderNoAction; switch (ev->key()) { #ifdef QT_KEYPAD_NAVIGATION case Qt::Key_Select: if (QApplication::keypadNavigationEnabled()) setEditFocus(!hasEditFocus()); else ev->ignore(); break; case Qt::Key_Back: if (QApplication::keypadNavigationEnabled() && hasEditFocus()) { setValue(d->origValue); setEditFocus(false); } else ev->ignore(); break; #endif // It seems we need to use invertedAppearance for Left and right, otherwise, things look weird. case Qt::Key_Left: #ifdef QT_KEYPAD_NAVIGATION if (QApplication::keypadNavigationEnabled() && !hasEditFocus()) { ev->ignore(); return; } if (QApplication::keypadNavigationEnabled() && d->orientation == Qt::Vertical) action = d->invertedControls ? SliderSingleStepSub : SliderSingleStepAdd; else #endif if (isRightToLeft()) action = d->invertedAppearance ? SliderSingleStepSub : SliderSingleStepAdd; else action = !d->invertedAppearance ? SliderSingleStepSub : SliderSingleStepAdd; break; case Qt::Key_Right: #ifdef QT_KEYPAD_NAVIGATION if (QApplication::keypadNavigationEnabled() && !hasEditFocus()) { ev->ignore(); return; } if (QApplication::keypadNavigationEnabled() && d->orientation == Qt::Vertical) action = d->invertedControls ? SliderSingleStepAdd : SliderSingleStepSub; else #endif if (isRightToLeft()) action = d->invertedAppearance ? SliderSingleStepAdd : SliderSingleStepSub; else action = !d->invertedAppearance ? SliderSingleStepAdd : SliderSingleStepSub; break; case Qt::Key_Up: #ifdef QT_KEYPAD_NAVIGATION if (QApplication::keypadNavigationEnabled()) { ev->ignore(); break; } #endif action = d->invertedControls ? SliderSingleStepSub : SliderSingleStepAdd; break; case Qt::Key_Down: #ifdef QT_KEYPAD_NAVIGATION if (QApplication::keypadNavigationEnabled()) { ev->ignore(); break; } #endif action = d->invertedControls ? SliderSingleStepAdd : SliderSingleStepSub; break; case Qt::Key_PageUp: action = d->invertedControls ? SliderPageStepSub : SliderPageStepAdd; break; case Qt::Key_PageDown: action = d->invertedControls ? SliderPageStepAdd : SliderPageStepSub; break; case Qt::Key_Home: action = SliderToMinimum; break; case Qt::Key_End: action = SliderToMaximum; break; default: ev->ignore(); break; } if (action) triggerAction(action); }