void tst_QFormLayout::buddies() { QWidget *w = new QWidget; QFormLayout *fl = new QFormLayout(w); //normal buddy case QLineEdit *le = new QLineEdit; fl->addRow(tr("Label 1"), le); QLabel *label = qobject_cast<QLabel *>(fl->labelForField(le)); QVERIFY(label); QWidget *lew = le; QCOMPARE(label->buddy(), lew); //null label QLineEdit *le2 = new QLineEdit; fl->addRow(0, le2); QWidget *label2 = fl->labelForField(le2); QVERIFY(label2 == 0); //no label QLineEdit *le3 = new QLineEdit; fl->addRow(le3); QWidget *label3 = fl->labelForField(le3); QVERIFY(label3 == 0); //TODO: empty label? delete w; }
// Handling of the HTML accesskey attribute. bool KKbdAccessExtensions::handleAccessKey( const QKeyEvent* ev ) { // Qt interprets the keyevent also with the modifiers, and ev->text() matches that, // but this code must act as if the modifiers weren't pressed if (!d->accessKeyLabels) return false; QChar c; if( ev->key() >= Key_A && ev->key() <= Key_Z ) c = 'A' + ev->key() - Key_A; else if( ev->key() >= Key_0 && ev->key() <= Key_9 ) c = '0' + ev->key() - Key_0; else { // TODO fake XKeyEvent and XLookupString ? // This below seems to work e.g. for eacute though. if( ev->text().length() == 1 ) c = ev->text()[ 0 ]; } if( c.isNull()) return false; QLabel* lab = d->accessKeyLabels->first(); while (lab) { if (lab->text() == c) { lab->buddy()->setFocus(); delete d->accessKeyLabels; d->accessKeyLabels = 0; return true; } lab = d->accessKeyLabels->next(); } return false; }
/*! \reimp */ QAccessible::Relation QAccessibleDisplay::relationTo(int child, const QAccessibleInterface *other, int otherChild) const { Relation relation = QAccessibleWidgetEx::relationTo(child, other, otherChild); if (child || otherChild) return relation; QObject *o = other->object(); QLabel *label = qobject_cast<QLabel*>(object()); if (label) { #ifndef QT_NO_SHORTCUT if (o == label->buddy()) relation |= Label; #endif } return relation; }
QString QAccessibleDisplay::text(QAccessible::Text t) const { QString str; switch (t) { case QAccessible::Name: str = widget()->accessibleName(); if (str.isEmpty()) { if (qobject_cast<QLabel*>(object())) { QLabel *label = qobject_cast<QLabel*>(object()); str = label->text(); #ifndef QT_NO_TEXTHTMLPARSER if (label->textFormat() == Qt::RichText || (label->textFormat() == Qt::AutoText && Qt::mightBeRichText(str))) { QTextDocument doc; doc.setHtml(str); str = doc.toPlainText(); } #endif if (label->buddy()) str = qt_accStripAmp(str); #ifndef QT_NO_LCDNUMBER } else if (qobject_cast<QLCDNumber*>(object())) { QLCDNumber *l = qobject_cast<QLCDNumber*>(object()); if (l->digitCount()) str = QString::number(l->value()); else str = QString::number(l->intValue()); #endif } else if (qobject_cast<QStatusBar*>(object())) { return qobject_cast<QStatusBar*>(object())->currentMessage(); } } break; case QAccessible::Value: #ifndef QT_NO_PROGRESSBAR if (qobject_cast<QProgressBar*>(object())) str = QString::number(qobject_cast<QProgressBar*>(object())->value()); #endif break; default: break; } if (str.isEmpty()) str = QAccessibleWidget::text(t); return str; }
/*! \reimp */ int QAccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterface **target) const { *target = 0; if (rel == Labelled) { QObject *targetObject = 0; QLabel *label = qobject_cast<QLabel*>(object()); if (label) { #ifndef QT_NO_SHORTCUT if (entry == 1) targetObject = label->buddy(); #endif } *target = QAccessible::queryAccessibleInterface(targetObject); if (*target) return 0; } return QAccessibleWidgetEx::navigate(rel, entry, target); }
/*! \reimp */ QAccessible::Relation Q3AccessibleDisplay::relationTo(int child, const QAccessibleInterface *other, int otherChild) const { Relation relation = QAccessibleWidget::relationTo(child, other, otherChild); if (child || otherChild) return relation; QObject *o = other->object(); QLabel *label = qobject_cast<QLabel*>(object()); Q3GroupBox *groupbox = qobject_cast<Q3GroupBox*>(object()); if (label) { if (o == label->buddy()) relation |= Label; } else if (groupbox && !groupbox->title().isEmpty()) { if (groupbox->children().contains(o)) relation |= Label; } return relation; }
/*! \reimp */ int Q3AccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterface **target) const { *target = 0; if (rel == Labelled) { QObject *targetObject = 0; QLabel *label = qobject_cast<QLabel*>(object()); Q3GroupBox *groupbox = qobject_cast<Q3GroupBox*>(object()); if (label) { if (entry == 1) targetObject = label->buddy(); } else if (groupbox && !groupbox->title().isEmpty()) { rel = Child; } *target = QAccessible::queryAccessibleInterface(targetObject); if (*target) return 0; } return QAccessibleWidget::navigate(rel, entry, target); }
/*! \reimp */ int QAccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterface **target) const { *target = 0; if (rel == Labelled) { QObject *targetObject = 0; QLabel *label = qobject_cast<QLabel*>(object()); if (label) { #ifndef QT_NO_SHORTCUT if (entry == 1) targetObject = label->buddy(); #endif #ifndef QT_NO_GROUPBOX } else { QGroupBox *groupbox = qobject_cast<QGroupBox*>(object()); if (groupbox && !groupbox->title().isEmpty()) rel = Child; #endif } *target = QAccessible::queryAccessibleInterface(targetObject); if (*target) return 0; } return QAccessibleWidgetEx::navigate(rel, entry, target); }
/*! \reimp */ QAccessible::Relation QAccessibleDisplay::relationTo(int child, const QAccessibleInterface *other, int otherChild) const { Relation relation = QAccessibleWidgetEx::relationTo(child, other, otherChild); if (child || otherChild) return relation; QObject *o = other->object(); QLabel *label = qobject_cast<QLabel*>(object()); if (label) { #ifndef QT_NO_SHORTCUT if (o == label->buddy()) relation |= Label; #endif #ifndef QT_NO_GROUPBOX } else { QGroupBox *groupbox = qobject_cast<QGroupBox*>(object()); if (groupbox && !groupbox->title().isEmpty()) if (groupbox->children().contains(o)) relation |= Label; #endif } return relation; }
static QString buddyString(const QWidget *widget) { if (!widget) return QString(); QWidget *parent = widget->parentWidget(); if (!parent) return QString(); #ifndef QT_NO_SHORTCUT QObjectList ol = parent->children(); for (int i = 0; i < ol.size(); ++i) { QLabel *label = qobject_cast<QLabel*>(ol.at(i)); if (label && label->buddy() == widget) return label->text(); } #endif #ifndef QT_NO_GROUPBOX QGroupBox *groupbox = qobject_cast<QGroupBox*>(parent); if (groupbox) return groupbox->title(); #endif return QString(); }
void AcceleratorManagerPrivate::manageWidget(QWidget *w, Item *item) { // first treat the special cases QTabBar *tabBar = qobject_cast<QTabBar*>(w); if (tabBar) { manageTabBar(tabBar, item); return; } QStackedWidget *wds = qobject_cast<QStackedWidget*>( w ); if ( wds ) { QWidgetStackAccelManager::manage( wds ); // return; } QDockWidget *dock = qobject_cast<QDockWidget*>( w ); if ( dock ) { //QWidgetStackAccelManager::manage( wds ); manageDockWidget(dock, item); } QMenu *popupMenu = qobject_cast<QMenu*>(w); if (popupMenu) { // create a popup accel manager that can deal with dynamic menus PopupAccelManager::manage(popupMenu); return; } QStackedWidget *wdst = qobject_cast<QStackedWidget*>( w ); if ( wdst ) { QWidgetStackAccelManager::manage( wdst ); // return; } QMenuBar *menuBar = qobject_cast<QMenuBar*>(w); if (menuBar) { manageMenuBar(menuBar, item); return; } if (qobject_cast<QComboBox*>(w) || qobject_cast<QLineEdit*>(w) || w->inherits("Q3TextEdit") || qobject_cast<QTextEdit*>(w) || qobject_cast<QAbstractSpinBox*>(w) || w->inherits( "KMultiTabBar" ) ) return; if ( w->inherits("KUrlRequester") ) { traverseChildren(w, item); return; } if ( qobject_cast<PathRequester*>(w) ) { traverseChildren(w, item); return; } // now treat 'ordinary' widgets QLabel *label = qobject_cast<QLabel*>(w); if ( label ) { if ( !label->buddy() ) return; else { if ( label->textFormat() == Qt::RichText || ( label->textFormat() == Qt::AutoText && Qt::mightBeRichText( label->text() ) ) ) return; } } if (w->focusPolicy() != Qt::NoFocus || label || qobject_cast<QGroupBox*>(w) || qobject_cast<QRadioButton*>( w )) { QString content; QVariant variant; int tprop = w->metaObject()->indexOfProperty("text"); if (tprop != -1) { QMetaProperty p = w->metaObject()->property( tprop ); if ( p.isValid() && p.isWritable() ) variant = p.read (w); else tprop = -1; } if (tprop == -1) { tprop = w->metaObject()->indexOfProperty("title"); if (tprop != -1) { QMetaProperty p = w->metaObject()->property( tprop ); if ( p.isValid() && p.isWritable() ) variant = p.read (w); } } if (variant.isValid()) content = variant.toString(); if (!content.isEmpty()) { Item *i = new Item; i->m_widget = w; // put some more weight on the usual action elements int weight = AccelManagerAlgorithm::DEFAULT_WEIGHT; if (qobject_cast<QPushButton*>(w) || qobject_cast<QCheckBox*>(w) || qobject_cast<QRadioButton*>(w) || qobject_cast<QLabel*>(w)) weight = AccelManagerAlgorithm::ACTION_ELEMENT_WEIGHT; // don't put weight on non-checkable group boxes, // as usually the contents are more important QGroupBox *groupBox = qobject_cast<QGroupBox*>(w); if (groupBox) { if (groupBox->isCheckable()) weight = AccelManagerAlgorithm::CHECKABLE_GROUP_BOX_WEIGHT; else weight = AccelManagerAlgorithm::GROUP_BOX_WEIGHT; } i->m_content = AccelString(content, weight); item->addChild(i); } } traverseChildren(w, item); }