Fixed accessibility for edit pitch dialog

This commit is contained in:
Eism 2021-11-15 18:16:38 +02:00
parent 97ff3b8ef5
commit 5353fc7660
5 changed files with 65 additions and 36 deletions

View file

@ -198,6 +198,7 @@ public:
GRADUATION_CAP = 0xF19D,
SCORE = 0xF319,
CLEF_TREBLE = 0xF31A,
AUTO_TEXT = 0xF329,
NOTE_HEAD_EIGHTH = 0xF33A,

View file

@ -41,24 +41,16 @@ bool WidgetNavigationFix::fixNavigationForTableWidget(const WidgetNavigationFix:
return false;
}
auto lastItem = tableWidget->item(tableWidget->rowCount() - 1, tableWidget->columnCount() - 1);
if (lastItem == tableWidget->currentItem()) {
chain->nextWidget->setFocus();
return true;
}
break;
chain->nextWidget->setFocus();
return true;
}
case Qt::Key_Backtab: {
if (!chain->prevWidget) {
return false;
}
auto firstItem = tableWidget->item(0, 0);
if (firstItem == tableWidget->currentItem()) {
chain->prevWidget->setFocus();
return true;
}
break;
chain->prevWidget->setFocus();
return true;
}
default:
break;

View file

@ -21,7 +21,12 @@
*/
#include "editpitch.h"
#include <QKeyEvent>
#include "translation.h"
#include "ui/view/iconcodes.h"
#include "ui/view/widgetstatestore.h"
#include "ui/view/widgetnavigationfix.h"
using namespace mu::notation;
using namespace mu::ui;
@ -35,20 +40,20 @@ EditPitch::EditPitch(QWidget* parent)
: QDialog(parent)
{
setObjectName("EditPitchNew");
setupUi(this);
setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
setup();
tableWidget->setCurrentCell(tableWidget->rowCount() - 1 - 5, 0); // select centre C by default
WidgetStateStore::restoreGeometry(this);
}
EditPitch::EditPitch(QWidget* parent, int midiCode)
: QDialog(parent)
{
setObjectName("EditPitchEdit");
setupUi(this);
setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
setup();
tableWidget->setCurrentCell(tableWidget->rowCount() - 1 - (midiCode / 12), midiCode % 12);
WidgetStateStore::restoreGeometry(this);
}
//---------------------------------------------------------
@ -61,6 +66,44 @@ void EditPitch::hideEvent(QHideEvent* ev)
QWidget::hideEvent(ev);
}
bool EditPitch::eventFilter(QObject* obj, QEvent* event)
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent* keyEvent = dynamic_cast<QKeyEvent*>(event);
if (keyEvent
&& WidgetNavigationFix::fixNavigationForTableWidget(
new WidgetNavigationFix::NavigationChain { tableWidget, buttonBox, buttonBox },
keyEvent->key())) {
return true;
}
}
return QDialog::eventFilter(obj, event);
}
void EditPitch::setup()
{
setupUi(this);
setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint);
auto clefTrebleItem = tableWidget->item(5, 7);
if (clefTrebleItem) {
clefTrebleItem->setText(iconCodeToChar(IconCode::Code::CLEF_TREBLE) + QString(" ") + qtrc("notation", "G 4"));
}
auto clefBassItem = tableWidget->item(6, 5);
if (clefBassItem) {
clefBassItem->setText(iconCodeToChar(IconCode::Code::CLEF_BASS) + QString(" ") + qtrc("notation", "F 3"));
}
WidgetStateStore::restoreGeometry(this);
//! NOTE: It is necessary for the correct start of navigation in the dialog
setFocus();
qApp->installEventFilter(this);
}
void EditPitch::accept()
{
on_tableWidget_cellDoubleClicked(tableWidget->currentRow(), tableWidget->currentColumn());

View file

@ -33,17 +33,21 @@ class EditPitch : public QDialog, private Ui::EditPitchBase
{
Q_OBJECT
virtual void hideEvent(QHideEvent*);
private slots:
void on_tableWidget_cellDoubleClicked(int row, int column);
void accept();
void reject() { done(-1); } // return an invalid pitch MIDI code
public:
EditPitch(QWidget* parent);
EditPitch(QWidget* parent, int midiCode);
~EditPitch() {}
private slots:
void on_tableWidget_cellDoubleClicked(int row, int column);
void accept() override;
void reject() override { done(-1); } // return an invalid pitch MIDI code
private:
virtual void hideEvent(QHideEvent*) override;
bool eventFilter(QObject* obj, QEvent* event) override;
void setup();
};
}

View file

@ -740,10 +740,6 @@
<property name="text">
<string>G 4</string>
</property>
<property name="icon">
<iconset resource="musescore.qrc">
<normaloff>:/data/icons/clef.svg</normaloff>:/data/icons/clef.svg</iconset>
</property>
<property name="flags">
<set>ItemIsSelectable|ItemIsEnabled</set>
</property>
@ -838,10 +834,6 @@
<property name="text">
<string>F 3</string>
</property>
<property name="icon">
<iconset resource="musescore.qrc">
<normaloff>:/data/icons/clef-bass.svg</normaloff>:/data/icons/clef-bass.svg</iconset>
</property>
<property name="flags">
<set>ItemIsSelectable|ItemIsEnabled</set>
</property>
@ -1356,9 +1348,6 @@
</item>
</layout>
</widget>
<resources>
<include location="musescore.qrc"/>
</resources>
<connections>
<connection>
<sender>buttonBox</sender>