16#if QT_CONFIG(scrollbar)
17#include <qscrollbar.h>
20#include <qstyleoption.h>
23#if QT_CONFIG(lineedit)
24#include <QtWidgets/qlineedit.h>
27#include <private/qmath_p.h>
33using namespace Qt::StringLiterals;
35#if QT_CONFIG(accessibility)
40
41
42
43
44QAccessibleAbstractSpinBox::QAccessibleAbstractSpinBox(QWidget *w)
45 : QAccessibleWidgetV2(w, QAccessible::SpinBox), lineEdit(
nullptr)
47 Q_ASSERT(abstractSpinBox());
50QAccessibleAbstractSpinBox::~QAccessibleAbstractSpinBox()
56
57
58QAbstractSpinBox *QAccessibleAbstractSpinBox::abstractSpinBox()
const
60 return qobject_cast<QAbstractSpinBox*>(object());
63QAccessibleInterface *QAccessibleAbstractSpinBox::lineEditIface()
const
65#if QT_CONFIG(lineedit)
68 lineEdit =
new QAccessibleLineEdit(abstractSpinBox()->lineEdit());
75QAccessible::State QAccessibleAbstractSpinBox::state()
const
77 QAccessible::State state = QAccessibleWidgetV2::state();
78 if (abstractSpinBox()->isReadOnly())
79 state.readOnly =
true;
81 state.editable =
true;
85QString QAccessibleAbstractSpinBox::text(QAccessible::Text t)
const
87 if (t == QAccessible::Value)
88 return abstractSpinBox()->text();
89 return QAccessibleWidgetV2::text(t);
92void *QAccessibleAbstractSpinBox::interface_cast(QAccessible::InterfaceType t)
94 if (t == QAccessible::ValueInterface)
95 return static_cast<QAccessibleValueInterface*>(
this);
96 if (t == QAccessible::TextInterface)
97 return static_cast<QAccessibleTextInterface*>(
this);
98 if (t == QAccessible::EditableTextInterface)
99 return static_cast<QAccessibleEditableTextInterface*>(
this);
100 return QAccessibleWidgetV2::interface_cast(t);
103QVariant QAccessibleAbstractSpinBox::currentValue()
const
105 return abstractSpinBox()->property(
"value");
108void QAccessibleAbstractSpinBox::setCurrentValue(
const QVariant &value)
110 abstractSpinBox()->setProperty(
"value", value);
113QVariant QAccessibleAbstractSpinBox::maximumValue()
const
115 return abstractSpinBox()->property(
"maximum");
118QVariant QAccessibleAbstractSpinBox::minimumValue()
const
120 return abstractSpinBox()->property(
"minimum");
123QVariant QAccessibleAbstractSpinBox::minimumStepSize()
const
125 return abstractSpinBox()->property(
"singleStep");
128void QAccessibleAbstractSpinBox::addSelection(
int startOffset,
int endOffset)
130 lineEditIface()->textInterface()->addSelection(startOffset, endOffset);
133QString QAccessibleAbstractSpinBox::attributes(
int offset,
int *startOffset,
int *endOffset)
const
135 return lineEditIface()->textInterface()->attributes(offset, startOffset, endOffset);
138int QAccessibleAbstractSpinBox::cursorPosition()
const
140 return lineEditIface()->textInterface()->cursorPosition();
143QRect QAccessibleAbstractSpinBox::characterRect(
int offset)
const
145 return lineEditIface()->textInterface()->characterRect(offset);
148int QAccessibleAbstractSpinBox::selectionCount()
const
150 return lineEditIface()->textInterface()->selectionCount();
153int QAccessibleAbstractSpinBox::offsetAtPoint(
const QPoint &point)
const
155 return lineEditIface()->textInterface()->offsetAtPoint(point);
158void QAccessibleAbstractSpinBox::selection(
int selectionIndex,
int *startOffset,
int *endOffset)
const
160 lineEditIface()->textInterface()->selection(selectionIndex, startOffset, endOffset);
163QString QAccessibleAbstractSpinBox::text(
int startOffset,
int endOffset)
const
165 return lineEditIface()->textInterface()->text(startOffset, endOffset);
168QString QAccessibleAbstractSpinBox::textBeforeOffset(
int offset, QAccessible::TextBoundaryType boundaryType,
int *startOffset,
int *endOffset)
const
170 return lineEditIface()->textInterface()->textBeforeOffset(offset, boundaryType, startOffset, endOffset);
173QString QAccessibleAbstractSpinBox::textAfterOffset(
int offset, QAccessible::TextBoundaryType boundaryType,
int *startOffset,
int *endOffset)
const
175 return lineEditIface()->textInterface()->textAfterOffset(offset, boundaryType, startOffset, endOffset);
178QString QAccessibleAbstractSpinBox::textAtOffset(
int offset, QAccessible::TextBoundaryType boundaryType,
int *startOffset,
int *endOffset)
const
180 return lineEditIface()->textInterface()->textAtOffset(offset, boundaryType, startOffset, endOffset);
183void QAccessibleAbstractSpinBox::removeSelection(
int selectionIndex)
185 lineEditIface()->textInterface()->removeSelection(selectionIndex);
188void QAccessibleAbstractSpinBox::setCursorPosition(
int position)
190 lineEditIface()->textInterface()->setCursorPosition(position);
193void QAccessibleAbstractSpinBox::setSelection(
int selectionIndex,
int startOffset,
int endOffset)
195 lineEditIface()->textInterface()->setSelection(selectionIndex, startOffset, endOffset);
198int QAccessibleAbstractSpinBox::characterCount()
const
200 return lineEditIface()->textInterface()->characterCount();
203void QAccessibleAbstractSpinBox::scrollToSubstring(
int startIndex,
int endIndex)
205 lineEditIface()->textInterface()->scrollToSubstring(startIndex, endIndex);
208void QAccessibleAbstractSpinBox::deleteText(
int startOffset,
int endOffset)
210 lineEditIface()->editableTextInterface()->deleteText(startOffset, endOffset);
213void QAccessibleAbstractSpinBox::insertText(
int offset,
const QString &text)
215 lineEditIface()->editableTextInterface()->insertText(offset, text);
218void QAccessibleAbstractSpinBox::replaceText(
int startOffset,
int endOffset,
const QString &text)
220 lineEditIface()->editableTextInterface()->replaceText(startOffset, endOffset, text);
225
226
227
228
229
230
233
234
235QAccessibleSpinBox::QAccessibleSpinBox(QWidget *w)
236: QAccessibleAbstractSpinBox(w)
239 addControllingSignal(
"valueChanged(int)"_L1);
243
244
245QSpinBox *QAccessibleSpinBox::spinBox()
const
247 return qobject_cast<QSpinBox*>(object());
254
255
256
257
258QAccessibleDoubleSpinBox::QAccessibleDoubleSpinBox(QWidget *widget)
259 : QAccessibleAbstractSpinBox(widget)
261 Q_ASSERT(qobject_cast<QDoubleSpinBox *>(widget));
262 addControllingSignal(
"valueChanged(double)"_L1);
266
267
268QDoubleSpinBox *QAccessibleDoubleSpinBox::doubleSpinBox()
const
270 return static_cast<QDoubleSpinBox*>(object());
273QString QAccessibleDoubleSpinBox::text(QAccessible::Text textType)
const
275 if (textType == QAccessible::Value)
276 return doubleSpinBox()->textFromValue(doubleSpinBox()->value());
277 return QAccessibleWidgetV2::text(textType);
282#if QT_CONFIG(scrollbar)
284
285
286
287
288
289
292
293
294
295QAccessibleScrollBar::QAccessibleScrollBar(QWidget *w)
296: QAccessibleAbstractSlider(w, QAccessible::ScrollBar)
298 Q_ASSERT(scrollBar());
299 addControllingSignal(
"valueChanged(int)"_L1);
303QScrollBar *QAccessibleScrollBar::scrollBar()
const
305 return qobject_cast<QScrollBar*>(object());
308QString QAccessibleScrollBar::text(QAccessible::Text t)
const
310 if (t == QAccessible::Value)
311 return QString::number(scrollBar()->value());
312 return QAccessibleAbstractSlider::text(t);
319
320
321
322
323
324
327
328
329
330QAccessibleSlider::QAccessibleSlider(QWidget *w)
331: QAccessibleAbstractSlider(w)
334 addControllingSignal(
"valueChanged(int)"_L1);
338QSlider *QAccessibleSlider::slider()
const
340 return qobject_cast<QSlider*>(object());
343QString QAccessibleSlider::text(QAccessible::Text t)
const
345 if (t == QAccessible::Value)
346 return QString::number(slider()->value());
348 return QAccessibleAbstractSlider::text(t);
351QAccessibleAbstractSlider::QAccessibleAbstractSlider(QWidget *w, QAccessible::Role r)
352 : QAccessibleWidgetV2(w, r)
354 Q_ASSERT(qobject_cast<QAbstractSlider *>(w));
357void *QAccessibleAbstractSlider::interface_cast(QAccessible::InterfaceType t)
359 if (t == QAccessible::ValueInterface)
360 return static_cast<QAccessibleValueInterface*>(
this);
361 return QAccessibleWidgetV2::interface_cast(t);
364QList<QAccessible::Attribute> QAccessibleAbstractSlider::attributeKeys()
const
366 QList<QAccessible::Attribute> keys = QAccessibleWidgetV2::attributeKeys();
367 keys.append(QAccessible::Attribute::Orientation);
372QVariant QAccessibleAbstractSlider::attributeValue(QAccessible::Attribute key)
const
374 if (key == QAccessible::Attribute::Orientation)
375 return QVariant::fromValue(abstractSlider()->orientation());
377 return QAccessibleWidgetV2::attributeValue(key);
380QVariant QAccessibleAbstractSlider::currentValue()
const
382 return abstractSlider()->value();
385void QAccessibleAbstractSlider::setCurrentValue(
const QVariant &value)
387 abstractSlider()->setValue(value.toInt());
390QVariant QAccessibleAbstractSlider::maximumValue()
const
392 return abstractSlider()->maximum();
395QVariant QAccessibleAbstractSlider::minimumValue()
const
397 return abstractSlider()->minimum();
400QVariant QAccessibleAbstractSlider::minimumStepSize()
const
402 return abstractSlider()->singleStep();
405QAbstractSlider *QAccessibleAbstractSlider::abstractSlider()
const
407 return static_cast<QAbstractSlider *>(object());
414QAccessibleDial::QAccessibleDial(QWidget *widget)
415 : QAccessibleAbstractSlider(widget, QAccessible::Dial)
417 Q_ASSERT(qobject_cast<QDial *>(widget));
418 addControllingSignal(
"valueChanged(int)"_L1);
421QString QAccessibleDial::text(QAccessible::Text textType)
const
423 if (textType == QAccessible::Value)
424 return QString::number(dial()->value());
426 return QAccessibleAbstractSlider::text(textType);
429QDial *QAccessibleDial::dial()
const
431 return static_cast<QDial*>(object());