15#if QT_CONFIG(scrollbar)
16#include <qscrollbar.h>
19#include <qstyleoption.h>
22#if QT_CONFIG(lineedit)
23#include <QtWidgets/qlineedit.h>
26#include <private/qmath_p.h>
32using namespace Qt::StringLiterals;
34#if QT_CONFIG(accessibility)
37QAccessibleAbstractSpinBox::QAccessibleAbstractSpinBox(QWidget *w)
38 : QAccessibleWidgetV2(w, QAccessible::SpinBox), lineEdit(
nullptr)
40 Q_ASSERT(abstractSpinBox());
43QAccessibleAbstractSpinBox::~QAccessibleAbstractSpinBox()
49
50
51QAbstractSpinBox *QAccessibleAbstractSpinBox::abstractSpinBox()
const
53 return qobject_cast<QAbstractSpinBox*>(object());
56QAccessibleInterface *QAccessibleAbstractSpinBox::lineEditIface()
const
58#if QT_CONFIG(lineedit)
61 lineEdit =
new QAccessibleLineEdit(abstractSpinBox()->lineEdit());
68QAccessible::State QAccessibleAbstractSpinBox::state()
const
70 QAccessible::State state = QAccessibleWidgetV2::state();
71 if (abstractSpinBox()->isReadOnly())
72 state.readOnly =
true;
74 state.editable =
true;
78QString QAccessibleAbstractSpinBox::text(QAccessible::Text t)
const
80 if (t == QAccessible::Value)
81 return abstractSpinBox()->text();
82 return QAccessibleWidgetV2::text(t);
85void *QAccessibleAbstractSpinBox::interface_cast(QAccessible::InterfaceType t)
87 if (t == QAccessible::ValueInterface)
88 return static_cast<QAccessibleValueInterface*>(
this);
89 if (t == QAccessible::TextInterface)
90 return static_cast<QAccessibleTextInterface*>(
this);
91 if (t == QAccessible::EditableTextInterface)
92 return static_cast<QAccessibleEditableTextInterface*>(
this);
93 return QAccessibleWidgetV2::interface_cast(t);
96QVariant QAccessibleAbstractSpinBox::currentValue()
const
98 return abstractSpinBox()->property(
"value");
101void QAccessibleAbstractSpinBox::setCurrentValue(
const QVariant &value)
103 abstractSpinBox()->setProperty(
"value", value);
106QVariant QAccessibleAbstractSpinBox::maximumValue()
const
108 return abstractSpinBox()->property(
"maximum");
111QVariant QAccessibleAbstractSpinBox::minimumValue()
const
113 return abstractSpinBox()->property(
"minimum");
116QVariant QAccessibleAbstractSpinBox::minimumStepSize()
const
118 return abstractSpinBox()->property(
"stepSize");
121void QAccessibleAbstractSpinBox::addSelection(
int startOffset,
int endOffset)
123 lineEditIface()->textInterface()->addSelection(startOffset, endOffset);
126QString QAccessibleAbstractSpinBox::attributes(
int offset,
int *startOffset,
int *endOffset)
const
128 return lineEditIface()->textInterface()->attributes(offset, startOffset, endOffset);
131int QAccessibleAbstractSpinBox::cursorPosition()
const
133 return lineEditIface()->textInterface()->cursorPosition();
136QRect QAccessibleAbstractSpinBox::characterRect(
int offset)
const
138 return lineEditIface()->textInterface()->characterRect(offset);
141int QAccessibleAbstractSpinBox::selectionCount()
const
143 return lineEditIface()->textInterface()->selectionCount();
146int QAccessibleAbstractSpinBox::offsetAtPoint(
const QPoint &point)
const
148 return lineEditIface()->textInterface()->offsetAtPoint(point);
151void QAccessibleAbstractSpinBox::selection(
int selectionIndex,
int *startOffset,
int *endOffset)
const
153 lineEditIface()->textInterface()->selection(selectionIndex, startOffset, endOffset);
156QString QAccessibleAbstractSpinBox::text(
int startOffset,
int endOffset)
const
158 return lineEditIface()->textInterface()->text(startOffset, endOffset);
161QString QAccessibleAbstractSpinBox::textBeforeOffset(
int offset, QAccessible::TextBoundaryType boundaryType,
int *startOffset,
int *endOffset)
const
163 return lineEditIface()->textInterface()->textBeforeOffset(offset, boundaryType, startOffset, endOffset);
166QString QAccessibleAbstractSpinBox::textAfterOffset(
int offset, QAccessible::TextBoundaryType boundaryType,
int *startOffset,
int *endOffset)
const
168 return lineEditIface()->textInterface()->textAfterOffset(offset, boundaryType, startOffset, endOffset);
171QString QAccessibleAbstractSpinBox::textAtOffset(
int offset, QAccessible::TextBoundaryType boundaryType,
int *startOffset,
int *endOffset)
const
173 return lineEditIface()->textInterface()->textAtOffset(offset, boundaryType, startOffset, endOffset);
176void QAccessibleAbstractSpinBox::removeSelection(
int selectionIndex)
178 lineEditIface()->textInterface()->removeSelection(selectionIndex);
181void QAccessibleAbstractSpinBox::setCursorPosition(
int position)
183 lineEditIface()->textInterface()->setCursorPosition(position);
186void QAccessibleAbstractSpinBox::setSelection(
int selectionIndex,
int startOffset,
int endOffset)
188 lineEditIface()->textInterface()->setSelection(selectionIndex, startOffset, endOffset);
191int QAccessibleAbstractSpinBox::characterCount()
const
193 return lineEditIface()->textInterface()->characterCount();
196void QAccessibleAbstractSpinBox::scrollToSubstring(
int startIndex,
int endIndex)
198 lineEditIface()->textInterface()->scrollToSubstring(startIndex, endIndex);
201void QAccessibleAbstractSpinBox::deleteText(
int startOffset,
int endOffset)
203 lineEditIface()->editableTextInterface()->deleteText(startOffset, endOffset);
206void QAccessibleAbstractSpinBox::insertText(
int offset,
const QString &text)
208 lineEditIface()->editableTextInterface()->insertText(offset, text);
211void QAccessibleAbstractSpinBox::replaceText(
int startOffset,
int endOffset,
const QString &text)
213 lineEditIface()->editableTextInterface()->replaceText(startOffset, endOffset, text);
218
219
220
221
222
223
226
227
228QAccessibleSpinBox::QAccessibleSpinBox(QWidget *w)
229: QAccessibleAbstractSpinBox(w)
232 addControllingSignal(
"valueChanged(int)"_L1);
236
237
238QSpinBox *QAccessibleSpinBox::spinBox()
const
240 return qobject_cast<QSpinBox*>(object());
245QAccessibleDoubleSpinBox::QAccessibleDoubleSpinBox(QWidget *widget)
246 : QAccessibleAbstractSpinBox(widget)
248 Q_ASSERT(qobject_cast<QDoubleSpinBox *>(widget));
249 addControllingSignal(
"valueChanged(double)"_L1);
253
254
255QDoubleSpinBox *QAccessibleDoubleSpinBox::doubleSpinBox()
const
257 return static_cast<QDoubleSpinBox*>(object());
260QString QAccessibleDoubleSpinBox::text(QAccessible::Text textType)
const
262 if (textType == QAccessible::Value)
263 return doubleSpinBox()->textFromValue(doubleSpinBox()->value());
264 return QAccessibleWidgetV2::text(textType);
269#if QT_CONFIG(scrollbar)
271
272
273
274
275
276
279
280
281
282QAccessibleScrollBar::QAccessibleScrollBar(QWidget *w)
283: QAccessibleAbstractSlider(w, QAccessible::ScrollBar)
285 Q_ASSERT(scrollBar());
286 addControllingSignal(
"valueChanged(int)"_L1);
290QScrollBar *QAccessibleScrollBar::scrollBar()
const
292 return qobject_cast<QScrollBar*>(object());
295QString QAccessibleScrollBar::text(QAccessible::Text t)
const
297 if (t == QAccessible::Value)
298 return QString::number(scrollBar()->value());
299 return QAccessibleAbstractSlider::text(t);
306
307
308
309
310
311
314
315
316
317QAccessibleSlider::QAccessibleSlider(QWidget *w)
318: QAccessibleAbstractSlider(w)
321 addControllingSignal(
"valueChanged(int)"_L1);
325QSlider *QAccessibleSlider::slider()
const
327 return qobject_cast<QSlider*>(object());
330QString QAccessibleSlider::text(QAccessible::Text t)
const
332 if (t == QAccessible::Value)
333 return QString::number(slider()->value());
335 return QAccessibleAbstractSlider::text(t);
338QAccessibleAbstractSlider::QAccessibleAbstractSlider(QWidget *w, QAccessible::Role r)
339 : QAccessibleWidgetV2(w, r)
341 Q_ASSERT(qobject_cast<QAbstractSlider *>(w));
344void *QAccessibleAbstractSlider::interface_cast(QAccessible::InterfaceType t)
346 if (t == QAccessible::ValueInterface)
347 return static_cast<QAccessibleValueInterface*>(
this);
348 return QAccessibleWidgetV2::interface_cast(t);
351QList<QAccessible::Attribute> QAccessibleAbstractSlider::attributeKeys()
const
353 QList<QAccessible::Attribute> keys = QAccessibleWidgetV2::attributeKeys();
354 keys.append(QAccessible::Attribute::Orientation);
359QVariant QAccessibleAbstractSlider::attributeValue(QAccessible::Attribute key)
const
361 if (key == QAccessible::Attribute::Orientation)
362 return QVariant::fromValue(abstractSlider()->orientation());
364 return QAccessibleWidgetV2::attributeValue(key);
367QVariant QAccessibleAbstractSlider::currentValue()
const
369 return abstractSlider()->value();
372void QAccessibleAbstractSlider::setCurrentValue(
const QVariant &value)
374 abstractSlider()->setValue(value.toInt());
377QVariant QAccessibleAbstractSlider::maximumValue()
const
379 return abstractSlider()->maximum();
382QVariant QAccessibleAbstractSlider::minimumValue()
const
384 return abstractSlider()->minimum();
387QVariant QAccessibleAbstractSlider::minimumStepSize()
const
389 return abstractSlider()->singleStep();
392QAbstractSlider *QAccessibleAbstractSlider::abstractSlider()
const
394 return static_cast<QAbstractSlider *>(object());
401QAccessibleDial::QAccessibleDial(QWidget *widget)
402 : QAccessibleAbstractSlider(widget, QAccessible::Dial)
404 Q_ASSERT(qobject_cast<QDial *>(widget));
405 addControllingSignal(
"valueChanged(int)"_L1);
408QString QAccessibleDial::text(QAccessible::Text textType)
const
410 if (textType == QAccessible::Value)
411 return QString::number(dial()->value());
413 return QAccessibleAbstractSlider::text(textType);
416QDial *QAccessibleDial::dial()
const
418 return static_cast<QDial*>(object());