-
Notifications
You must be signed in to change notification settings - Fork 460
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1675 from srcejon/fix_1672
Add accessibility interface for ValueDial widgets
- Loading branch information
Showing
8 changed files
with
231 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
/////////////////////////////////////////////////////////////////////////////////// | ||
// Copyright (C) 2023 Jon Beniston, M7RCE // | ||
// // | ||
// This program is free software; you can redistribute it and/or modify // | ||
// it under the terms of the GNU General Public License as published by // | ||
// the Free Software Foundation as version 3 of the License, or // | ||
// (at your option) any later version. // | ||
// // | ||
// This program is distributed in the hope that it will be useful, // | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of // | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // | ||
// GNU General Public License V3 for more details. // | ||
// // | ||
// You should have received a copy of the GNU General Public License // | ||
// along with this program. If not, see <http://www.gnu.org/licenses/>. // | ||
/////////////////////////////////////////////////////////////////////////////////// | ||
|
||
#ifndef GUI_ACCESSIBLEVALUEDIAL_H | ||
#define GUI_ACCESSIBLEVALUEDIAL_H | ||
|
||
#include <QAccessibleWidget> | ||
|
||
#include "gui/valuedial.h" | ||
|
||
class SDRGUI_API AccessibleValueDial : public QAccessibleWidget, public QAccessibleValueInterface { | ||
public: | ||
AccessibleValueDial(ValueDial *valueDial) : | ||
QAccessibleWidget(valueDial) | ||
{ | ||
addControllingSignal(QLatin1String("changed(quint64)")); | ||
} | ||
|
||
void *interface_cast(QAccessible::InterfaceType t) override | ||
{ | ||
if (t == QAccessible::ValueInterface) | ||
return static_cast<QAccessibleValueInterface*>(this); | ||
return QAccessibleWidget::interface_cast(t); | ||
} | ||
|
||
QAccessible::Role role() const override | ||
{ | ||
//return QAccessible::Dial; // This results in reader saying "custom" and not reading the value | ||
return QAccessible::Slider; | ||
} | ||
|
||
QString text(QAccessible::Text t) const override | ||
{ | ||
switch (t) | ||
{ | ||
case QAccessible::Name: | ||
return valueDial()->toolTip(); // Use tooltip until accessibleName field is set to something in .ui files | ||
case QAccessible::Value: | ||
return QString::number(valueDial()->getValueNew()); | ||
default: | ||
return QAccessibleWidget::text(t); | ||
} | ||
} | ||
|
||
static QAccessibleInterface* factory(const QString &classname, QObject *object) | ||
{ | ||
QAccessibleInterface *iface = nullptr; | ||
|
||
if (classname == QLatin1String("ValueDial") && object && object->isWidgetType()) { | ||
iface = static_cast<QAccessibleInterface*>(new AccessibleValueDial(static_cast<ValueDial *>(object))); | ||
} | ||
|
||
return iface; | ||
} | ||
|
||
// QAccessibleValueInterface | ||
|
||
QVariant currentValue() const override | ||
{ | ||
return valueDial()->getValueNew(); | ||
} | ||
|
||
void setCurrentValue(const QVariant &value) override | ||
{ | ||
valueDial()->setValue(value.toInt()); | ||
} | ||
|
||
QVariant maximumValue() const override | ||
{ | ||
return valueDial()->m_valueMax; | ||
} | ||
|
||
QVariant minimumValue() const override | ||
{ | ||
return valueDial()->m_valueMin; | ||
} | ||
|
||
QVariant minimumStepSize() const override | ||
{ | ||
return 1; | ||
} | ||
|
||
protected: | ||
|
||
ValueDial *valueDial() const | ||
{ | ||
return static_cast<ValueDial*>(object()); | ||
} | ||
}; | ||
|
||
#endif /* GUI_ACCESSIBLEVALUEDIAL_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
/////////////////////////////////////////////////////////////////////////////////// | ||
// Copyright (C) 2023 Jon Beniston, M7RCE // | ||
// // | ||
// This program is free software; you can redistribute it and/or modify // | ||
// it under the terms of the GNU General Public License as published by // | ||
// the Free Software Foundation as version 3 of the License, or // | ||
// (at your option) any later version. // | ||
// // | ||
// This program is distributed in the hope that it will be useful, // | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of // | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // | ||
// GNU General Public License V3 for more details. // | ||
// // | ||
// You should have received a copy of the GNU General Public License // | ||
// along with this program. If not, see <http://www.gnu.org/licenses/>. // | ||
/////////////////////////////////////////////////////////////////////////////////// | ||
|
||
#ifndef GUI_ACCESSIBLEVALUEDIALZ_H | ||
#define GUI_ACCESSIBLEVALUEDIALZ_H | ||
|
||
#include <QAccessibleWidget> | ||
|
||
#include "gui/valuedialz.h" | ||
|
||
class SDRGUI_API AccessibleValueDialZ : public QAccessibleWidget, public QAccessibleValueInterface { | ||
public: | ||
AccessibleValueDialZ(ValueDialZ *valueDialZ) : | ||
QAccessibleWidget(valueDialZ) | ||
{ | ||
addControllingSignal(QLatin1String("changed(qint64)")); | ||
} | ||
|
||
void *interface_cast(QAccessible::InterfaceType t) override | ||
{ | ||
if (t == QAccessible::ValueInterface) | ||
return static_cast<QAccessibleValueInterface*>(this); | ||
return QAccessibleWidget::interface_cast(t); | ||
} | ||
|
||
QAccessible::Role role() const override | ||
{ | ||
//return QAccessible::Dial; // This results in reader saying "custom" and not reading the value | ||
return QAccessible::Slider; | ||
} | ||
|
||
QString text(QAccessible::Text t) const override | ||
{ | ||
switch (t) | ||
{ | ||
case QAccessible::Name: | ||
return valueDialZ()->toolTip(); // Use tooltip until accessibleName field is set to something in .ui files | ||
case QAccessible::Value: | ||
return QString::number(valueDialZ()->getValueNew()); | ||
default: | ||
return QAccessibleWidget::text(t); | ||
} | ||
} | ||
|
||
static QAccessibleInterface* factory(const QString &classname, QObject *object) | ||
{ | ||
QAccessibleInterface *iface = nullptr; | ||
|
||
if (classname == QLatin1String("ValueDialZ") && object && object->isWidgetType()) { | ||
iface = static_cast<QAccessibleInterface*>(new AccessibleValueDialZ(static_cast<ValueDialZ *>(object))); | ||
} | ||
|
||
return iface; | ||
} | ||
|
||
// QAccessibleValueInterface | ||
|
||
QVariant currentValue() const override | ||
{ | ||
return valueDialZ()->getValueNew(); | ||
} | ||
|
||
void setCurrentValue(const QVariant &value) override | ||
{ | ||
valueDialZ()->setValue(value.toInt()); | ||
} | ||
|
||
QVariant maximumValue() const override | ||
{ | ||
return valueDialZ()->m_valueMax; | ||
} | ||
|
||
QVariant minimumValue() const override | ||
{ | ||
return valueDialZ()->m_valueMin; | ||
} | ||
|
||
QVariant minimumStepSize() const override | ||
{ | ||
return 1; | ||
} | ||
|
||
protected: | ||
|
||
ValueDialZ *valueDialZ() const | ||
{ | ||
return static_cast<ValueDialZ*>(object()); | ||
} | ||
}; | ||
|
||
#endif /* GUI_ACCESSIBLEVALUEDIALZ_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters