Issue #172: access keys are missing from most menu items/action text strings

This commit is contained in:
Jakub Melka 2024-03-21 13:16:52 +01:00
parent bf4b0552dc
commit 8b832ccab9
33 changed files with 613 additions and 427 deletions

View File

@ -95,6 +95,8 @@ DifferencesDockWidget::DifferencesDockWidget(QWidget* parent,
connect(diffNavigator, &pdf::PDFDiffResultNavigator::selectionChanged, this, &DifferencesDockWidget::onSelectionChanged);
connect(ui->differencesTreeWidget, &QTreeWidget::currentItemChanged, this, &DifferencesDockWidget::onCurrentItemChanged);
toggleViewAction()->setText(tr("Differen&ces"));
setMinimumWidth(pdf::PDFWidgetUtils::scaleDPI_x(this, 120));
}

View File

@ -125,7 +125,7 @@ MainWindow::MainWindow(QWidget* parent) :
actionGroup->addAction(ui->actionView_Overlay);
ui->actionView_Differences->setChecked(true);
QToolBar* mainToolbar = addToolBar(tr("Main"));
QToolBar* mainToolbar = addToolBar(tr("&Main"));
mainToolbar->setObjectName("main_toolbar");
mainToolbar->addActions({ ui->actionOpen_Left, ui->actionOpen_Right });
mainToolbar->addSeparator();
@ -133,11 +133,11 @@ MainWindow::MainWindow(QWidget* parent) :
mainToolbar->addAction(ui->actionCreate_Compare_Report);
mainToolbar->addAction(ui->actionSave_Differences_to_XML);
QToolBar* differencesToolbar = addToolBar(tr("Differences"));
QToolBar* differencesToolbar = addToolBar(tr("&Differences"));
differencesToolbar->setObjectName("differences_toolbar");
differencesToolbar->addActions({ ui->actionPrevious_Difference, ui->actionNext_Difference });
QToolBar* viewToolbar = addToolBar(tr("View"));
QToolBar* viewToolbar = addToolBar(tr("&View"));
viewToolbar->setObjectName("view_toolbar");
viewToolbar->addActions({ ui->actionView_Differences, ui->actionView_Left, ui->actionView_Right, ui->actionView_Overlay });
viewToolbar->addSeparator();
@ -188,6 +188,10 @@ MainWindow::MainWindow(QWidget* parent) :
loadSettings();
updateAll(false);
updateOverlayTransparency();
#ifndef NDEBUG
pdf::PDFWidgetUtils::checkMenuAccessibility(this);
#endif
}
MainWindow::~MainWindow()

View File

@ -31,7 +31,7 @@
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
<string>&amp;File</string>
</property>
<addaction name="actionOpen_Left"/>
<addaction name="actionOpen_Right"/>
@ -39,7 +39,7 @@
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>Help</string>
<string>&amp;Help</string>
</property>
<addaction name="actionGet_Source"/>
<addaction name="actionBecomeASponsor"/>
@ -47,12 +47,12 @@
</widget>
<widget class="QMenu" name="menuToolbars">
<property name="title">
<string>Toolbars</string>
<string>&amp;Toolbars</string>
</property>
</widget>
<widget class="QMenu" name="menuCompare">
<property name="title">
<string>Compare</string>
<string>&amp;Compare</string>
</property>
<addaction name="actionCompare"/>
<addaction name="actionCreate_Compare_Report"/>
@ -60,11 +60,11 @@
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
<string>View</string>
<string>&amp;View</string>
</property>
<widget class="QMenu" name="menuView_2">
<property name="title">
<string>View</string>
<string>&amp;View</string>
</property>
<addaction name="actionView_Differences"/>
<addaction name="actionView_Left"/>
@ -73,7 +73,7 @@
</widget>
<widget class="QMenu" name="menuFilter">
<property name="title">
<string>Filter</string>
<string>&amp;Filter</string>
</property>
<addaction name="actionFilter_Text"/>
<addaction name="actionFilter_Vector_Graphics"/>
@ -105,7 +105,7 @@
<normaloff>:/pdfdiff/resources/get-source.svg</normaloff>:/pdfdiff/resources/get-source.svg</iconset>
</property>
<property name="text">
<string>Get Source</string>
<string>&amp;Get Source</string>
</property>
</action>
<action name="actionAbout">
@ -114,7 +114,7 @@
<normaloff>:/pdfdiff/resources/about.svg</normaloff>:/pdfdiff/resources/about.svg</iconset>
</property>
<property name="text">
<string>About...</string>
<string>&amp;About...</string>
</property>
<property name="shortcut">
<string>F1</string>
@ -126,7 +126,7 @@
<normaloff>:/pdfdiff/resources/open-left.svg</normaloff>:/pdfdiff/resources/open-left.svg</iconset>
</property>
<property name="text">
<string>Open Left...</string>
<string>Open &amp;Left...</string>
</property>
</action>
<action name="actionOpen_Right">
@ -135,7 +135,7 @@
<normaloff>:/pdfdiff/resources/open-right.svg</normaloff>:/pdfdiff/resources/open-right.svg</iconset>
</property>
<property name="text">
<string>Open Right...</string>
<string>Open &amp;Right...</string>
</property>
</action>
<action name="actionCompare">
@ -144,7 +144,7 @@
<normaloff>:/pdfdiff/resources/compare.svg</normaloff>:/pdfdiff/resources/compare.svg</iconset>
</property>
<property name="text">
<string>Compare</string>
<string>&amp;Compare</string>
</property>
<property name="shortcut">
<string>F5</string>
@ -156,7 +156,7 @@
<normaloff>:/pdfdiff/resources/close.svg</normaloff>:/pdfdiff/resources/close.svg</iconset>
</property>
<property name="text">
<string>Close</string>
<string>&amp;Close</string>
</property>
<property name="shortcut">
<string>Ctrl+F4</string>
@ -168,7 +168,7 @@
<normaloff>:/pdfdiff/resources/prev-diff.svg</normaloff>:/pdfdiff/resources/prev-diff.svg</iconset>
</property>
<property name="text">
<string>Previous Difference</string>
<string>&amp;Previous Difference</string>
</property>
<property name="shortcut">
<string>Shift+F6</string>
@ -180,7 +180,7 @@
<normaloff>:/pdfdiff/resources/next-diff.svg</normaloff>:/pdfdiff/resources/next-diff.svg</iconset>
</property>
<property name="text">
<string>Next Difference</string>
<string>&amp;Next Difference</string>
</property>
<property name="shortcut">
<string>F6</string>
@ -192,7 +192,7 @@
<normaloff>:/pdfdiff/resources/create-compare-report.svg</normaloff>:/pdfdiff/resources/create-compare-report.svg</iconset>
</property>
<property name="text">
<string>Create Compare Report...</string>
<string>Create Compare &amp;Report...</string>
</property>
</action>
<action name="actionFilter_Text">
@ -204,7 +204,7 @@
<normaloff>:/pdfdiff/resources/filter-text.svg</normaloff>:/pdfdiff/resources/filter-text.svg</iconset>
</property>
<property name="text">
<string>Filter Text</string>
<string>Filter &amp;Text</string>
</property>
</action>
<action name="actionFilter_Vector_Graphics">
@ -216,7 +216,7 @@
<normaloff>:/pdfdiff/resources/filter-vector-graphics.svg</normaloff>:/pdfdiff/resources/filter-vector-graphics.svg</iconset>
</property>
<property name="text">
<string>Filter Vector Graphics</string>
<string>Filter &amp;Vector Graphics</string>
</property>
</action>
<action name="actionFilter_Images">
@ -228,7 +228,7 @@
<normaloff>:/pdfdiff/resources/filter-images.svg</normaloff>:/pdfdiff/resources/filter-images.svg</iconset>
</property>
<property name="text">
<string>Filter Images</string>
<string>Filter &amp;Images</string>
</property>
</action>
<action name="actionFilter_Shading">
@ -240,7 +240,7 @@
<normaloff>:/pdfdiff/resources/filter-shading.svg</normaloff>:/pdfdiff/resources/filter-shading.svg</iconset>
</property>
<property name="text">
<string>Filter Shading</string>
<string>Filter &amp;Shading</string>
</property>
</action>
<action name="actionFilter_Page_Movement">
@ -252,7 +252,7 @@
<normaloff>:/pdfdiff/resources/filter-page-movement.svg</normaloff>:/pdfdiff/resources/filter-page-movement.svg</iconset>
</property>
<property name="text">
<string>Filter Page Movement</string>
<string>Filter &amp;Page Movement</string>
</property>
</action>
<action name="actionView_Differences">
@ -264,7 +264,7 @@
<normaloff>:/pdfdiff/resources/view-differences.svg</normaloff>:/pdfdiff/resources/view-differences.svg</iconset>
</property>
<property name="text">
<string>View Differences</string>
<string>View &amp;Differences</string>
</property>
</action>
<action name="actionView_Left">
@ -276,7 +276,7 @@
<normaloff>:/pdfdiff/resources/view-left.svg</normaloff>:/pdfdiff/resources/view-left.svg</iconset>
</property>
<property name="text">
<string>View Left</string>
<string>View &amp;Left</string>
</property>
</action>
<action name="actionView_Right">
@ -288,7 +288,7 @@
<normaloff>:/pdfdiff/resources/view-right.svg</normaloff>:/pdfdiff/resources/view-right.svg</iconset>
</property>
<property name="text">
<string>View Right</string>
<string>View &amp;Right</string>
</property>
</action>
<action name="actionView_Overlay">
@ -300,7 +300,7 @@
<normaloff>:/pdfdiff/resources/view-overlay.svg</normaloff>:/pdfdiff/resources/view-overlay.svg</iconset>
</property>
<property name="text">
<string>View Overlay</string>
<string>View &amp;Overlay</string>
</property>
</action>
<action name="actionShow_Pages_with_Differences">
@ -312,7 +312,7 @@
<normaloff>:/pdfdiff/resources/show-p-with-diff.svg</normaloff>:/pdfdiff/resources/show-p-with-diff.svg</iconset>
</property>
<property name="text">
<string>Show Pages with Differences</string>
<string>&amp;Show Pages with Differences</string>
</property>
<property name="toolTip">
<string>Show Pages with Differences</string>
@ -324,7 +324,7 @@
<normaloff>:/pdfdiff/resources/save-diff-to-xml.svg</normaloff>:/pdfdiff/resources/save-diff-to-xml.svg</iconset>
</property>
<property name="text">
<string>Save Differences to XML...</string>
<string>Save Differences to &amp;XML...</string>
</property>
</action>
<action name="actionSynchronize_View_with_Differences">
@ -336,7 +336,7 @@
<normaloff>:/pdfdiff/resources/synchronize-view.svg</normaloff>:/pdfdiff/resources/synchronize-view.svg</iconset>
</property>
<property name="text">
<string>Synchronize View with Differences</string>
<string>S&amp;ynchronize View with Differences</string>
</property>
</action>
<action name="actionDisplay_Differences">
@ -348,7 +348,7 @@
<normaloff>:/pdfdiff/resources/display-differences.svg</normaloff>:/pdfdiff/resources/display-differences.svg</iconset>
</property>
<property name="text">
<string>Display Differences</string>
<string>Display &amp;Differences</string>
</property>
</action>
<action name="actionDisplay_Markers">
@ -360,7 +360,7 @@
<normaloff>:/pdfdiff/resources/display-markers.svg</normaloff>:/pdfdiff/resources/display-markers.svg</iconset>
</property>
<property name="text">
<string>Display Markers</string>
<string>Display &amp;Markers</string>
</property>
</action>
<action name="actionBecomeASponsor">
@ -369,7 +369,7 @@
<normaloff>:/pdfdiff/resources/wallet.svg</normaloff>:/pdfdiff/resources/wallet.svg</iconset>
</property>
<property name="text">
<string>Become a Sponsor</string>
<string>Become a &amp;Sponsor</string>
</property>
</action>
</widget>

View File

@ -45,6 +45,8 @@ SettingsDockWidget::SettingsDockWidget(Settings* settings, QWidget* parent) :
}
connect(ui->transparencySlider, &QSlider::valueChanged, this, &SettingsDockWidget::transparencySliderChanged);
toggleViewAction()->setText(tr("S&ettings"));
}
SettingsDockWidget::~SettingsDockWidget()

View File

@ -67,61 +67,61 @@ void AudioBookPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(widget);
m_actionCreateTextStream = new QAction(QIcon(":/pdfplugins/audiobook/create-text-stream.svg"), tr("Create Text Stream for Audio Book"), this);
m_actionCreateTextStream = new QAction(QIcon(":/pdfplugins/audiobook/create-text-stream.svg"), tr("&Create Text Stream for Audio Book"), this);
m_actionCreateTextStream->setObjectName("actionAudioBook_CreateTextStream");
connect(m_actionCreateTextStream, &QAction::triggered, this, &AudioBookPlugin::onCreateTextStreamTriggered);
m_actionSynchronizeFromTableToGraphics = new QAction(QIcon(":/pdfplugins/audiobook/synchronize-from-table-to-graphics.svg"), tr("Synchronize Selection from Table to Graphics"), this);
m_actionSynchronizeFromTableToGraphics = new QAction(QIcon(":/pdfplugins/audiobook/synchronize-from-table-to-graphics.svg"), tr("Synchronize Selection from &Table to Graphics"), this);
m_actionSynchronizeFromTableToGraphics->setObjectName("actionAudioBook_SynchronizeFromTableToGraphics");
m_actionSynchronizeFromTableToGraphics->setCheckable(true);
m_actionSynchronizeFromTableToGraphics->setChecked(true);
m_actionSynchronizeFromGraphicsToTable = new QAction(QIcon(":/pdfplugins/audiobook/synchronize-from-graphics-to-table.svg"), tr("Synchronize Selection from Graphics to Table"), this);
m_actionSynchronizeFromGraphicsToTable = new QAction(QIcon(":/pdfplugins/audiobook/synchronize-from-graphics-to-table.svg"), tr("Synchronize Selection from &Graphics to Table"), this);
m_actionSynchronizeFromGraphicsToTable->setObjectName("actionAudioBook_SynchronizeFromGraphicsToTable");
m_actionSynchronizeFromGraphicsToTable->setCheckable(true);
m_actionSynchronizeFromGraphicsToTable->setChecked(true);
m_actionActivateSelection = new QAction(QIcon(":/pdfplugins/audiobook/activate-selection.svg"), tr("Activate Selection"), this);
m_actionActivateSelection = new QAction(QIcon(":/pdfplugins/audiobook/activate-selection.svg"), tr("&Activate Selection"), this);
m_actionActivateSelection->setObjectName("actionAudioBook_ActivateSelection");
connect(m_actionActivateSelection, &QAction::triggered, this, &AudioBookPlugin::onActivateSelection);
m_actionDeactivateSelection = new QAction(QIcon(":/pdfplugins/audiobook/deactivate-selection.svg"), tr("Deactivate Selection"), this);
m_actionDeactivateSelection = new QAction(QIcon(":/pdfplugins/audiobook/deactivate-selection.svg"), tr("&Deactivate Selection"), this);
m_actionDeactivateSelection->setObjectName("actionAudioBook_DeactivateSelection");
connect(m_actionDeactivateSelection, &QAction::triggered, this, &AudioBookPlugin::onDeactivateSelection);
m_actionSelectByRectangle = new QAction(QIcon(":/pdfplugins/audiobook/select-by-rectangle.svg"), tr("Select by Rectangle"), this);
m_actionSelectByRectangle = new QAction(QIcon(":/pdfplugins/audiobook/select-by-rectangle.svg"), tr("Select by &Rectangle"), this);
m_actionSelectByRectangle->setObjectName("actionAudioBook_SelectByRectangle");
connect(m_actionSelectByRectangle, &QAction::triggered, this, &AudioBookPlugin::onSelectByRectangle);
m_actionSelectByContainedText = new QAction(QIcon(":/pdfplugins/audiobook/select-by-contained-text.svg"), tr("Select by Contained Text"), this);
m_actionSelectByContainedText = new QAction(QIcon(":/pdfplugins/audiobook/select-by-contained-text.svg"), tr("Select by Contained &Text"), this);
m_actionSelectByContainedText->setObjectName("actionAudioBook_SelectByContainedText");
connect(m_actionSelectByContainedText, &QAction::triggered, this, &AudioBookPlugin::onSelectByContainedText);
m_actionSelectByRegularExpression = new QAction(QIcon(":/pdfplugins/audiobook/select-by-regular-expression.svg"), tr("Select by Regular Expression"), this);
m_actionSelectByRegularExpression = new QAction(QIcon(":/pdfplugins/audiobook/select-by-regular-expression.svg"), tr("Select by Regular &Expression"), this);
m_actionSelectByRegularExpression->setObjectName("actionAudioBook_SelectByRegularExpression");
connect(m_actionSelectByRegularExpression, &QAction::triggered, this, &AudioBookPlugin::onSelectByRegularExpression);
m_actionSelectByPageList = new QAction(QIcon(":/pdfplugins/audiobook/select-by-page-list.svg"), tr("Select by Page List"), this);
m_actionSelectByPageList = new QAction(QIcon(":/pdfplugins/audiobook/select-by-page-list.svg"), tr("Select by Page &List"), this);
m_actionSelectByPageList->setObjectName("actionAudioBook_SelectByPageList");
connect(m_actionSelectByPageList, &QAction::triggered, this, &AudioBookPlugin::onSelectByPageList);
m_actionRestoreOriginalText = new QAction(QIcon(":/pdfplugins/audiobook/restore-original-text.svg"), tr("Restore Original Text"), this);
m_actionRestoreOriginalText = new QAction(QIcon(":/pdfplugins/audiobook/restore-original-text.svg"), tr("Restore &Original Text"), this);
m_actionRestoreOriginalText->setObjectName("actionAudioBook_RestoreOriginalText");
connect(m_actionRestoreOriginalText, &QAction::triggered, this, &AudioBookPlugin::onRestoreOriginalText);
m_actionMoveSelectionUp = new QAction(QIcon(":/pdfplugins/audiobook/move-selection-up.svg"), tr("Move Selection Up"), this);
m_actionMoveSelectionUp = new QAction(QIcon(":/pdfplugins/audiobook/move-selection-up.svg"), tr("Move Selection &Up"), this);
m_actionMoveSelectionUp->setObjectName("actionAudioBook_MoveSelectionUp");
connect(m_actionMoveSelectionUp, &QAction::triggered, this, &AudioBookPlugin::onMoveSelectionUp);
m_actionMoveSelectionDown = new QAction(QIcon(":/pdfplugins/audiobook/move-selection-down.svg"), tr("Move Selection Down"), this);
m_actionMoveSelectionDown = new QAction(QIcon(":/pdfplugins/audiobook/move-selection-down.svg"), tr("Move Selection &Down"), this);
m_actionMoveSelectionDown->setObjectName("actionAudioBook_MoveSelectionDown");
connect(m_actionMoveSelectionDown, &QAction::triggered, this, &AudioBookPlugin::onMoveSelectionDown);
m_actionCreateAudioBook = new QAction(QIcon(":/pdfplugins/audiobook/create-audio-book.svg"), tr("Create Audio Book"), this);
m_actionCreateAudioBook = new QAction(QIcon(":/pdfplugins/audiobook/create-audio-book.svg"), tr("Create Audio &Book"), this);
m_actionCreateAudioBook->setObjectName("actionAudioBook_CreateAudioBook");
connect(m_actionCreateAudioBook, &QAction::triggered, this, &AudioBookPlugin::onCreateAudioBook);
m_actionClear = new QAction(QIcon(":/pdfplugins/audiobook/clear.svg"), tr("Clear Text Stream"), this);
m_actionClear = new QAction(QIcon(":/pdfplugins/audiobook/clear.svg"), tr("Clear Te&xt Stream"), this);
m_actionClear->setObjectName("actionAudioBook_Clear");
connect(m_actionClear, &QAction::triggered, this, &AudioBookPlugin::onClear);
@ -157,7 +157,12 @@ std::vector<QAction*> AudioBookPlugin::getActions() const
m_actionSynchronizeFromTableToGraphics,
m_actionSynchronizeFromGraphicsToTable,
m_actionCreateAudioBook,
m_actionClear };
m_actionClear };
}
QString AudioBookPlugin::getPluginMenuName() const
{
return tr("&Audio Book");
}
void AudioBookPlugin::drawPage(QPainter* painter,

View File

@ -46,6 +46,7 @@ public:
virtual void setWidget(pdf::PDFWidget* widget) override;
virtual void setDocument(const pdf::PDFModifiedDocument& document) override;
virtual std::vector<QAction*> getActions() const override;
virtual QString getPluginMenuName() const override;
virtual void drawPage(QPainter* painter,
pdf::PDFInteger pageIndex,

View File

@ -42,14 +42,14 @@ void DimensionsPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(widget);
QAction* horizontalDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/linear-horizontal.svg"), tr("Horizontal Dimension"), this);
QAction* verticalDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/linear-vertical.svg"), tr("Vertical Dimension"), this);
QAction* linearDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/linear.svg"), tr("Linear Dimension"), this);
QAction* perimeterDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/perimeter.svg"), tr("Perimeter"), this);
QAction* rectanglePerimeterDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/rectangle-perimeter.svg"), tr("Rectangle Perimeter"), this);
QAction* areaDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/area.svg"), tr("Area"), this);
QAction* rectangleAreaDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/rectangle-area.svg"), tr("Rectangle Area"), this);
QAction* angleAction = new QAction(QIcon(":/pdfplugins/dimensiontool/angle.svg"), tr("Angle"), this);
QAction* horizontalDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/linear-horizontal.svg"), tr("&Horizontal Dimension"), this);
QAction* verticalDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/linear-vertical.svg"), tr("&Vertical Dimension"), this);
QAction* linearDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/linear.svg"), tr("&Linear Dimension"), this);
QAction* perimeterDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/perimeter.svg"), tr("&Perimeter"), this);
QAction* rectanglePerimeterDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/rectangle-perimeter.svg"), tr("&Rectangle Perimeter"), this);
QAction* areaDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/area.svg"), tr("&Area"), this);
QAction* rectangleAreaDimensionAction = new QAction(QIcon(":/pdfplugins/dimensiontool/rectangle-area.svg"), tr("R&ectangle Area"), this);
QAction* angleAction = new QAction(QIcon(":/pdfplugins/dimensiontool/angle.svg"), tr("An&gle"), this);
horizontalDimensionAction->setObjectName("dimensiontool_LinearHorizontalAction");
verticalDimensionAction->setObjectName("dimensiontool_LinearVerticalAction");
@ -85,9 +85,9 @@ void DimensionsPlugin::setWidget(pdf::PDFWidget* widget)
connect(tool, &DimensionTool::dimensionCreated, this, &DimensionsPlugin::onDimensionCreated);
}
m_showDimensionsAction = new QAction(QIcon(":/pdfplugins/dimensiontool/show-dimensions.svg"), tr("Show Dimensions"), this);
m_clearDimensionsAction = new QAction(QIcon(":/pdfplugins/dimensiontool/clear-dimensions.svg"), tr("Clear Dimensions"), this);
m_settingsAction = new QAction(QIcon(":/pdfplugins/dimensiontool/settings.svg"), tr("Settings"), this);
m_showDimensionsAction = new QAction(QIcon(":/pdfplugins/dimensiontool/show-dimensions.svg"), tr("&Show Dimensions"), this);
m_clearDimensionsAction = new QAction(QIcon(":/pdfplugins/dimensiontool/clear-dimensions.svg"), tr("&Clear Dimensions"), this);
m_settingsAction = new QAction(QIcon(":/pdfplugins/dimensiontool/settings.svg"), tr("Se&ttings"), this);
m_showDimensionsAction->setCheckable(true);
m_showDimensionsAction->setChecked(true);
@ -139,6 +139,10 @@ std::vector<QAction*> DimensionsPlugin::getActions() const
return result;
}
QString DimensionsPlugin::getPluginMenuName() const
{
return tr("&Dimensions");
}
void DimensionsPlugin::drawPage(QPainter* painter,
pdf::PDFInteger pageIndex,

View File

@ -40,6 +40,7 @@ public:
virtual void setWidget(pdf::PDFWidget* widget) override;
virtual void setDocument(const pdf::PDFModifiedDocument& document) override;
virtual std::vector<QAction*> getActions() const override;
virtual QString getPluginMenuName() const override;
virtual void drawPage(QPainter* painter,
pdf::PDFInteger pageIndex,

View File

@ -43,13 +43,13 @@ void ObjectInspectorPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(widget);
m_objectInspectorAction = new QAction(QIcon(":/pdfplugins/objectinspector/object-inspector.svg"), tr("Object Inspector"), this);
m_objectInspectorAction = new QAction(QIcon(":/pdfplugins/objectinspector/object-inspector.svg"), tr("Object &Inspector"), this);
m_objectInspectorAction->setCheckable(false);
m_objectInspectorAction->setObjectName("actionObjectInspector_ObjectInspector");
connect(m_objectInspectorAction, &QAction::triggered, this, &ObjectInspectorPlugin::onObjectInspectorTriggered);
m_objectStatisticsAction = new QAction(QIcon(":/pdfplugins/objectinspector/object-statistics.svg"), tr("Object Statistics"), this);
m_objectStatisticsAction = new QAction(QIcon(":/pdfplugins/objectinspector/object-statistics.svg"), tr("Object &Statistics"), this);
m_objectStatisticsAction->setCheckable(false);
m_objectStatisticsAction->setObjectName("actionObjectInspector_ObjectStatistics");
@ -78,6 +78,11 @@ std::vector<QAction*> ObjectInspectorPlugin::getActions() const
return { m_objectInspectorAction, m_objectStatisticsAction };
}
QString ObjectInspectorPlugin::getPluginMenuName() const
{
return tr("Object &Inspector");
}
void ObjectInspectorPlugin::onObjectInspectorTriggered()
{
pdf::PDFCMSPointer cms = m_cmsManager->getCurrentCMS();

View File

@ -40,6 +40,7 @@ public:
virtual void setCMSManager(pdf::PDFCMSManager* manager) override;
virtual void setDocument(const pdf::PDFModifiedDocument& document) override;
virtual std::vector<QAction*> getActions() const override;
virtual QString getPluginMenuName() const override;
private:
void onObjectInspectorTriggered();

View File

@ -39,9 +39,9 @@ void OutputPreviewPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(widget);
m_outputPreviewAction = new QAction(QIcon(":/pdfplugins/outputpreview/preview.svg"), tr("Output Preview"), this);
m_outputPreviewAction = new QAction(QIcon(":/pdfplugins/outputpreview/preview.svg"), tr("&Output Preview"), this);
m_outputPreviewAction->setObjectName("actionOutputPreview_OutputPreview");
m_inkCoverageAction = new QAction(QIcon(":/pdfplugins/outputpreview/ink-coverage.svg"), tr("Ink Coverage"), this);
m_inkCoverageAction = new QAction(QIcon(":/pdfplugins/outputpreview/ink-coverage.svg"), tr("&Ink Coverage"), this);
m_inkCoverageAction->setObjectName("actionOutputPreview_InkCoverage");
connect(m_outputPreviewAction, &QAction::triggered, this, &OutputPreviewPlugin::onOutputPreviewTriggered);
@ -65,6 +65,11 @@ std::vector<QAction*> OutputPreviewPlugin::getActions() const
return { m_outputPreviewAction, m_inkCoverageAction };
}
QString OutputPreviewPlugin::getPluginMenuName() const
{
return tr("Output Previe&w");
}
void OutputPreviewPlugin::onOutputPreviewTriggered()
{
OutputPreviewDialog dialog(m_document, m_widget, m_widget);

View File

@ -39,6 +39,7 @@ public:
virtual void setWidget(pdf::PDFWidget* widget) override;
virtual void setDocument(const pdf::PDFModifiedDocument& document) override;
virtual std::vector<QAction*> getActions() const override;
virtual QString getPluginMenuName() const override;
private:
void onOutputPreviewTriggered();

View File

@ -50,11 +50,11 @@ void RedactPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(widget);
m_actionRedactRectangle = new QAction(QIcon(":/pdfplugins/redactplugin/redact-rectangle.svg"), tr("Redact Rectangle"), this);
m_actionRedactText = new QAction(QIcon(":/pdfplugins/redactplugin/redact-text.svg"), tr("Redact Text"), this);
m_actionRedactTextSelection = new QAction(QIcon(":/pdfplugins/redactplugin/redact-text-selection.svg"), tr("Redact Text Selection"), this);
m_actionRedactPage = new QAction(QIcon(":/pdfplugins/redactplugin/redact-page.svg"), tr("Redact Page(s)"), this);
m_actionCreateRedactedDocument = new QAction(QIcon(":/pdfplugins/redactplugin/redact-create-document.svg"), tr("Create Redacted Document"), this);
m_actionRedactRectangle = new QAction(QIcon(":/pdfplugins/redactplugin/redact-rectangle.svg"), tr("Redact &Rectangle"), this);
m_actionRedactText = new QAction(QIcon(":/pdfplugins/redactplugin/redact-text.svg"), tr("Redact &Text"), this);
m_actionRedactTextSelection = new QAction(QIcon(":/pdfplugins/redactplugin/redact-text-selection.svg"), tr("Redact Text &Selection"), this);
m_actionRedactPage = new QAction(QIcon(":/pdfplugins/redactplugin/redact-page.svg"), tr("Redact &Page(s)"), this);
m_actionCreateRedactedDocument = new QAction(QIcon(":/pdfplugins/redactplugin/redact-create-document.svg"), tr("Create Redacted &Document"), this);
m_actionRedactRectangle->setObjectName("redactplugin_RedactRectangle");
m_actionRedactText->setObjectName("redactplugin_RedactText");
@ -94,6 +94,11 @@ std::vector<QAction*> RedactPlugin::getActions() const
return { m_actionRedactRectangle, m_actionRedactText, m_actionRedactTextSelection, m_actionRedactPage, m_actionCreateRedactedDocument };
}
QString RedactPlugin::getPluginMenuName() const
{
return tr("Redac&t");
}
void RedactPlugin::updateActions()
{
m_actionRedactTextSelection->setEnabled(m_document);

View File

@ -39,6 +39,7 @@ public:
virtual void setWidget(pdf::PDFWidget* widget) override;
virtual void setDocument(const pdf::PDFModifiedDocument& document) override;
virtual std::vector<QAction*> getActions() const override;
virtual QString getPluginMenuName() const override;
private:
void updateActions();

View File

@ -52,22 +52,22 @@ void SignaturePlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(widget);
QAction* activateAction = new QAction(QIcon(":/pdfplugins/signatureplugin/activate.svg"), tr("Activate signature creator"), this);
QAction* createTextAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-text.svg"), tr("Create Text Label"), this);
QAction* createFreehandCurveAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-freehand-curve.svg"), tr("Create Freehand Curve"), this);
QAction* createAcceptMarkAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-yes-mark.svg"), tr("Create Accept Mark"), this);
QAction* createRejectMarkAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-no-mark.svg"), tr("Create Reject Mark"), this);
QAction* createRectangleAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-rectangle.svg"), tr("Create Rectangle"), this);
QAction* createRoundedRectangleAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-rounded-rectangle.svg"), tr("Create Rounded Rectangle"), this);
QAction* createHorizontalLineAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-horizontal-line.svg"), tr("Create Horizontal Line"), this);
QAction* createVerticalLineAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-vertical-line.svg"), tr("Create Vertical Line"), this);
QAction* createLineAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-line.svg"), tr("Create Line"), this);
QAction* createDotAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-dot.svg"), tr("Create Dot"), this);
QAction* createSvgImageAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-svg-image.svg"), tr("Create SVG Image"), this);
QAction* clearAction = new QAction(QIcon(":/pdfplugins/signatureplugin/clear.svg"), tr("Clear All Graphics"), this);
QAction* signElectronicallyAction = new QAction(QIcon(":/pdfplugins/signatureplugin/sign-electronically.svg"), tr("Sign Electronically"), this);
QAction* signDigitallyAction = new QAction(QIcon(":/pdfplugins/signatureplugin/sign-digitally.svg"), tr("Sign Digitally With Certificate"), this);
QAction* certificatesAction = new QAction(QIcon(":/pdfplugins/signatureplugin/certificates.svg"), tr("Certificates Manager"), this);
QAction* activateAction = new QAction(QIcon(":/pdfplugins/signatureplugin/activate.svg"), tr("&Activate signature creator"), this);
QAction* createTextAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-text.svg"), tr("Create &Text Label"), this);
QAction* createFreehandCurveAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-freehand-curve.svg"), tr("Create &Freehand Curve"), this);
QAction* createAcceptMarkAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-yes-mark.svg"), tr("Create &Accept Mark"), this);
QAction* createRejectMarkAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-no-mark.svg"), tr("Create Reject &Mark"), this);
QAction* createRectangleAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-rectangle.svg"), tr("Create &Rectangle"), this);
QAction* createRoundedRectangleAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-rounded-rectangle.svg"), tr("Create R&ounded Rectangle"), this);
QAction* createHorizontalLineAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-horizontal-line.svg"), tr("Create &Horizontal Line"), this);
QAction* createVerticalLineAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-vertical-line.svg"), tr("Create &Vertical Line"), this);
QAction* createLineAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-line.svg"), tr("Create &Line"), this);
QAction* createDotAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-dot.svg"), tr("Create &Dot"), this);
QAction* createSvgImageAction = new QAction(QIcon(":/pdfplugins/signatureplugin/create-svg-image.svg"), tr("Create SVG &Image"), this);
QAction* clearAction = new QAction(QIcon(":/pdfplugins/signatureplugin/clear.svg"), tr("Clear All &Graphics"), this);
QAction* signElectronicallyAction = new QAction(QIcon(":/pdfplugins/signatureplugin/sign-electronically.svg"), tr("Sign &Electronically"), this);
QAction* signDigitallyAction = new QAction(QIcon(":/pdfplugins/signatureplugin/sign-digitally.svg"), tr("Sign Digitally &With Certificate"), this);
QAction* certificatesAction = new QAction(QIcon(":/pdfplugins/signatureplugin/certificates.svg"), tr("Certificates &Manager"), this);
activateAction->setObjectName("signaturetool_activateAction");
createTextAction->setObjectName("signaturetool_createTextAction");
@ -189,6 +189,11 @@ std::vector<QAction*> SignaturePlugin::getActions() const
return result;
}
QString SignaturePlugin::getPluginMenuName() const
{
return tr("Si&gnature");
}
void SignaturePlugin::onSceneChanged(bool graphicsOnly)
{
if (!graphicsOnly)

View File

@ -46,6 +46,7 @@ public:
virtual void setWidget(pdf::PDFWidget* widget) override;
virtual void setDocument(const pdf::PDFModifiedDocument& document) override;
virtual std::vector<QAction*> getActions() const override;
virtual QString getPluginMenuName() const override;
private:
void onSceneChanged(bool graphicsOnly);

View File

@ -43,9 +43,9 @@ void SoftProofingPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(widget);
m_enableSoftProofingAction = new QAction(QIcon(":/pdfplugins/softproofing/soft-proofing.svg"), tr("Soft Proofing"), this);
m_enableGamutCheckingAction = new QAction(QIcon(":/pdfplugins/softproofing/gamut-checking.svg"), tr("Gamut Checking"), this);
m_showSettingsAction = new QAction(QIcon(":/pdfplugins/softproofing/settings.svg"), tr("Soft Proofing Settings"), this);
m_enableSoftProofingAction = new QAction(QIcon(":/pdfplugins/softproofing/soft-proofing.svg"), tr("&Soft Proofing"), this);
m_enableGamutCheckingAction = new QAction(QIcon(":/pdfplugins/softproofing/gamut-checking.svg"), tr("&Gamut Checking"), this);
m_showSettingsAction = new QAction(QIcon(":/pdfplugins/softproofing/settings.svg"), tr("Soft &Proofing Settings"), this);
m_enableSoftProofingAction->setCheckable(true);
m_enableGamutCheckingAction->setCheckable(true);
@ -83,6 +83,11 @@ std::vector<QAction*> SoftProofingPlugin::getActions() const
return { m_enableSoftProofingAction, m_enableGamutCheckingAction, m_showSettingsAction };
}
QString SoftProofingPlugin::getPluginMenuName() const
{
return tr("Soft &Proofing");
}
void SoftProofingPlugin::onSoftProofingTriggered()
{
if (m_isLoadingGUI)

View File

@ -40,6 +40,7 @@ public:
virtual void setCMSManager(pdf::PDFCMSManager* manager) override;
virtual void setDocument(const pdf::PDFModifiedDocument& document) override;
virtual std::vector<QAction*> getActions() const override;
virtual QString getPluginMenuName() const override;
private:
void onSoftProofingTriggered();

View File

@ -2921,7 +2921,7 @@ void PDFStampAnnotation::draw(AnnotationDrawParameters& parameters) const
QPainter& painter = *parameters.painter;
painter.setCompositionMode(getCompositionMode());
QString text = getText(m_stamp);
QString text = getText(m_stamp, false);
QColor color(Qt::red);
switch (m_stamp)
@ -3009,66 +3009,80 @@ void PDFStampAnnotation::draw(AnnotationDrawParameters& parameters) const
parameters.boundingRectangle.adjust(-penWidth, -penWidth, penWidth, penWidth);
}
QString PDFStampAnnotation::getText(Stamp stamp)
QString PDFStampAnnotation::getText(Stamp stamp, bool isActionText)
{
QString text;
switch (stamp)
{
case Stamp::Approved:
text = PDFTranslationContext::tr("APPROVED");
text = isActionText ? PDFTranslationContext::tr("&Approved")
: PDFTranslationContext::tr("APPROVED");
break;
case Stamp::AsIs:
text = PDFTranslationContext::tr("AS IS");
text = isActionText ? PDFTranslationContext::tr("As &Is")
: PDFTranslationContext::tr("AS IS");
break;
case Stamp::Confidential:
text = PDFTranslationContext::tr("CONFIDENTIAL");
text = isActionText ? PDFTranslationContext::tr("&Confidential")
: PDFTranslationContext::tr("CONFIDENTIAL");
break;
case Stamp::Departmental:
text = PDFTranslationContext::tr("DEPARTMENTAL");
text = isActionText ? PDFTranslationContext::tr("&Departmental")
: PDFTranslationContext::tr("DEPARTMENTAL");
break;
case Stamp::Draft:
text = PDFTranslationContext::tr("DRAFT");
text = isActionText ? PDFTranslationContext::tr("Dra&ft")
: PDFTranslationContext::tr("DRAFT");
break;
case Stamp::Experimental:
text = PDFTranslationContext::tr("EXPERIMENTAL");
text = isActionText ? PDFTranslationContext::tr("&Experimental")
: PDFTranslationContext::tr("EXPERIMENTAL");
break;
case Stamp::Expired:
text = PDFTranslationContext::tr("EXPIRED");
text = isActionText ? PDFTranslationContext::tr("E&xpired")
: PDFTranslationContext::tr("EXPIRED");
break;
case Stamp::Final:
text = PDFTranslationContext::tr("FINAL");
text = isActionText ? PDFTranslationContext::tr("Fina&l")
: PDFTranslationContext::tr("FINAL");
break;
case Stamp::ForComment:
text = PDFTranslationContext::tr("FOR COMMENT");
text = isActionText ? PDFTranslationContext::tr("For Co&mment")
: PDFTranslationContext::tr("FOR COMMENT");
break;
case Stamp::ForPublicRelease:
text = PDFTranslationContext::tr("FOR PUBLIC RELEASE");
text = isActionText ? PDFTranslationContext::tr("For P&ublic Release")
: PDFTranslationContext::tr("FOR PUBLIC RELEASE");
break;
case Stamp::NotApproved:
text = PDFTranslationContext::tr("NOT APPROVED");
text = isActionText ? PDFTranslationContext::tr("Not A&pproved")
: PDFTranslationContext::tr("NOT APPROVED");
break;
case Stamp::NotForPublicRelease:
text = PDFTranslationContext::tr("NOT FOR PUBLIC RELEASE");
text = isActionText ? PDFTranslationContext::tr("N&ot For Public Release")
: PDFTranslationContext::tr("NOT FOR PUBLIC RELEASE");
break;
case Stamp::Sold:
text = PDFTranslationContext::tr("SOLD");
text = isActionText ? PDFTranslationContext::tr("&Sold")
: PDFTranslationContext::tr("SOLD");
break;
case Stamp::TopSecret:
text = PDFTranslationContext::tr("TOP SECRET");
text = isActionText ? PDFTranslationContext::tr("&Top Secret")
: PDFTranslationContext::tr("TOP SECRET");
break;
default:

View File

@ -1119,7 +1119,7 @@ public:
void setStamp(const Stamp& stamp);
void setIntent(const StampIntent& intent);
static QString getText(Stamp stamp);
static QString getText(Stamp stamp, bool isActionText);
private:
friend PDFAnnotationPtr PDFAnnotation::parse(const PDFObjectStorage* storage, PDFObjectReference reference);

View File

@ -658,7 +658,7 @@ PDFObjectEditorAnnotationsModel::PDFObjectEditorAnnotationsModel(QObject* parent
PDFObjectFactory factory;
factory << stampType;
stampNameEnumItems.emplace_back(PDFStampAnnotation::getText(stampType), stampIndex++, factory.takeObject());
stampNameEnumItems.emplace_back(PDFStampAnnotation::getText(stampType, false), stampIndex++, factory.takeObject());
}
m_attributes.back().enumItems = qMove(stampNameEnumItems);

View File

@ -81,6 +81,7 @@ public:
virtual void setCMSManager(PDFCMSManager* manager);
virtual void setDocument(const PDFModifiedDocument& document);
virtual std::vector<QAction*> getActions() const;
virtual QString getPluginMenuName() const = 0;
protected:
IPluginDataExchange* m_dataExchangeInterface;

View File

@ -1,4 +1,4 @@
// Copyright (C) 2019-2022 Jakub Melka
// Copyright (C) 2019-2024 Jakub Melka
//
// This file is part of PDF4QT.
//
@ -63,7 +63,6 @@
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog>
#include <QtConcurrent/QtConcurrent>
#include <QPluginLoader>
#include <QToolButton>
#include <QActionGroup>
@ -278,7 +277,7 @@ PDFEditorMainWindow::PDFEditorMainWindow(QWidget* parent) :
setFocusProxy(m_programController->getPdfWidget());
m_sidebarWidget = new PDFSidebarWidget(m_programController->getPdfWidget()->getDrawWidgetProxy(), m_programController->getTextToSpeech(), m_programController->getCertificateStore(), m_programController->getBookmarkManager(), m_programController->getSettings(), true, this);
m_sidebarDockWidget = new QDockWidget(tr("Sidebar"), this);
m_sidebarDockWidget = new QDockWidget(tr("&Sidebar"), this);
m_sidebarDockWidget->setObjectName("SidebarDockWidget");
m_sidebarDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_sidebarDockWidget->setWidget(m_sidebarWidget);
@ -296,7 +295,7 @@ PDFEditorMainWindow::PDFEditorMainWindow(QWidget* parent) :
m_advancedFindDockWidget->hide();
QAction* toggleAdvancedFindAction = m_advancedFindDockWidget->toggleViewAction();
toggleAdvancedFindAction->setObjectName("actionAdvancedFind");
toggleAdvancedFindAction->setText(tr("Advanced Find..."));
toggleAdvancedFindAction->setText(tr("Ad&vanced Find..."));
toggleAdvancedFindAction->setShortcut(QKeySequence("Ctrl+Shift+F"));
toggleAdvancedFindAction->setIcon(QIcon(":/resources/find-advanced.svg"));
ui->menuEdit->insertAction(nullptr, toggleAdvancedFindAction);
@ -324,6 +323,10 @@ PDFEditorMainWindow::PDFEditorMainWindow(QWidget* parent) :
m_actionManager->styleActions();
m_programController->initActionComboBox(actionComboBox);
#ifndef NDEBUG
pdf::PDFWidgetUtils::checkMenuAccessibility(this);
#endif
}
PDFEditorMainWindow::~PDFEditorMainWindow()

File diff suppressed because it is too large Load Diff

View File

@ -283,7 +283,7 @@ void PDFActionManager::initActions(QSize iconSize, bool initializeStampActions)
auto createCreateStampAction = [this](Action actionType, pdf::Stamp stamp)
{
QString text = pdf::PDFStampAnnotation::getText(stamp);
QString text = pdf::PDFStampAnnotation::getText(stamp, true);
QAction* action = new QAction(text, this);
action->setObjectName(QString("actionCreateStamp_%1").arg(int(stamp)));
action->setData(int(stamp));
@ -2222,7 +2222,7 @@ void PDFProgramController::loadPlugins()
QToolBar* toolBar = m_mainWindow->addToolBar(plugin.first.name);
toolBar->setObjectName(QString("Plugin_Toolbar_%1").arg(plugin.first.name));
m_mainWindowInterface->adjustToolbar(toolBar);
QMenu* menu = m_mainWindowInterface->addToolMenu(plugin.first.name);
QMenu* menu = m_mainWindowInterface->addToolMenu(plugin.second->getPluginMenuName());
for (QAction* action : actions)
{
if (!action)

View File

@ -79,13 +79,13 @@ void PDFRecentFileManager::update()
if (i < m_recentFiles.size())
{
recentFileAction->setData(m_recentFiles[i]);
recentFileAction->setText(m_recentFiles[i]);
recentFileAction->setText(tr("(&%1) %2").arg(i + 1).arg(m_recentFiles[i]));
recentFileAction->setVisible(true);
}
else
{
recentFileAction->setData(QVariant());
recentFileAction->setText(tr("Recent file dummy %1").arg(i + 1));
recentFileAction->setText(tr("Recent file dummy &%1").arg(i + 1));
recentFileAction->setVisible(false);
}
}

View File

@ -212,7 +212,7 @@ PDFViewerMainWindow::PDFViewerMainWindow(QWidget* parent) :
setFocusProxy(m_programController->getPdfWidget());
m_sidebarWidget = new PDFSidebarWidget(m_programController->getPdfWidget()->getDrawWidgetProxy(), m_programController->getTextToSpeech(), m_programController->getCertificateStore(), m_programController->getBookmarkManager(), m_programController->getSettings(), false, this);
m_sidebarDockWidget = new QDockWidget(tr("Sidebar"), this);
m_sidebarDockWidget = new QDockWidget(tr("&Sidebar"), this);
m_sidebarDockWidget->setObjectName("SidebarDockWidget");
m_sidebarDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_sidebarDockWidget->setWidget(m_sidebarWidget);
@ -241,6 +241,10 @@ PDFViewerMainWindow::PDFViewerMainWindow(QWidget* parent) :
m_actionManager->styleActions();
m_programController->initActionComboBox(actionComboBox);
#ifndef NDEBUG
pdf::PDFWidgetUtils::checkMenuAccessibility(this);
#endif
}
PDFViewerMainWindow::~PDFViewerMainWindow()

View File

@ -25,7 +25,7 @@
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
<string>&amp;File</string>
</property>
<addaction name="actionOpen"/>
<addaction name="actionClose"/>
@ -40,11 +40,11 @@
</widget>
<widget class="QMenu" name="menuGoTo">
<property name="title">
<string>Go To</string>
<string>&amp;Go To</string>
</property>
<widget class="QMenu" name="menuBookmarkSettings">
<property name="title">
<string>Bookmark Settings</string>
<string>Book&amp;mark Settings</string>
</property>
<addaction name="actionBookmarkExport"/>
<addaction name="actionBookmarkImport"/>
@ -64,11 +64,11 @@
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
<string>View</string>
<string>&amp;View</string>
</property>
<widget class="QMenu" name="menuPage_Layout">
<property name="title">
<string>Page Layout</string>
<string>Page La&amp;yout</string>
</property>
<addaction name="actionPageLayoutSinglePage"/>
<addaction name="actionPageLayoutContinuous"/>
@ -79,7 +79,7 @@
</widget>
<widget class="QMenu" name="menuRendering_Options">
<property name="title">
<string>Rendering Options</string>
<string>Re&amp;ndering Options</string>
</property>
<addaction name="actionRenderOptionAntialiasing"/>
<addaction name="actionRenderOptionTextAntialiasing"/>
@ -109,7 +109,7 @@
</widget>
<widget class="QMenu" name="menuTools">
<property name="title">
<string>Tools</string>
<string>&amp;Tools</string>
</property>
<addaction name="separator"/>
<addaction name="actionRendering_Errors"/>
@ -121,7 +121,7 @@
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>Help</string>
<string>&amp;Help</string>
</property>
<addaction name="actionGetSource"/>
<addaction name="actionBecomeASponsor"/>
@ -145,29 +145,29 @@
<widget class="QStatusBar" name="statusBar"/>
<action name="actionOpen">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/open.svg</normaloff>:/resources/open.svg</iconset>
</property>
<property name="text">
<string>Open...</string>
<string>&amp;Open...</string>
</property>
</action>
<action name="actionClose">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/close.svg</normaloff>:/resources/close.svg</iconset>
</property>
<property name="text">
<string>Close</string>
<string>&amp;Close</string>
</property>
</action>
<action name="actionQuit">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/quit.svg</normaloff>:/resources/quit.svg</iconset>
</property>
<property name="text">
<string>Quit</string>
<string>&amp;Quit</string>
</property>
</action>
<action name="actionPageLayoutSinglePage">
@ -175,7 +175,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>Single Page</string>
<string>&amp;Single Page</string>
</property>
<property name="shortcut">
<string>Ctrl+1</string>
@ -186,7 +186,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>Continuous</string>
<string>&amp;Continuous</string>
</property>
<property name="shortcut">
<string>Ctrl+2</string>
@ -197,7 +197,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>Two Pages</string>
<string>Two &amp;Pages</string>
</property>
<property name="shortcut">
<string>Ctrl+3</string>
@ -208,7 +208,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>Two columns</string>
<string>&amp;Two columns</string>
</property>
<property name="shortcut">
<string>Ctrl+4</string>
@ -219,7 +219,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>First page on right side</string>
<string>&amp;First page on right side</string>
</property>
<property name="toolTip">
<string>First page on right side</string>
@ -230,11 +230,11 @@
</action>
<action name="actionRendering_Errors">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/rendering-errors.svg</normaloff>:/resources/rendering-errors.svg</iconset>
</property>
<property name="text">
<string>Rendering Errors...</string>
<string>Rendering &amp;Errors...</string>
</property>
<property name="shortcut">
<string>Ctrl+E</string>
@ -245,7 +245,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>Antialiasing</string>
<string>&amp;Antialiasing</string>
</property>
</action>
<action name="actionRenderOptionTextAntialiasing">
@ -253,7 +253,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>Text Antialiasing</string>
<string>&amp;Text Antialiasing</string>
</property>
</action>
<action name="actionRenderOptionSmoothPictures">
@ -261,7 +261,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>Smooth Pictures</string>
<string>&amp;Smooth Pictures</string>
</property>
</action>
<action name="actionRenderOptionIgnoreOptionalContentSettings">
@ -269,16 +269,16 @@
<bool>true</bool>
</property>
<property name="text">
<string>Ignore Optional Content Settings</string>
<string>&amp;Ignore Optional Content Settings</string>
</property>
</action>
<action name="actionOptions">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/settings.svg</normaloff>:/resources/settings.svg</iconset>
</property>
<property name="text">
<string>Options...</string>
<string>&amp;Options...</string>
</property>
<property name="shortcut">
<string>Ctrl+K</string>
@ -286,52 +286,52 @@
</action>
<action name="actionResetToFactorySettings">
<property name="text">
<string>Reset to Factory Settings</string>
<string>&amp;Reset to Factory Settings</string>
</property>
</action>
<action name="actionZoom_In">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/zoom-in.svg</normaloff>:/resources/zoom-in.svg</iconset>
</property>
<property name="text">
<string>Zoom In</string>
<string>&amp;Zoom In</string>
</property>
</action>
<action name="actionZoom_Out">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/zoom-out.svg</normaloff>:/resources/zoom-out.svg</iconset>
</property>
<property name="text">
<string>Zoom Out</string>
<string>Zoom &amp;Out</string>
</property>
</action>
<action name="actionAbout">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/book.svg</normaloff>:/resources/book.svg</iconset>
</property>
<property name="text">
<string>About...</string>
<string>&amp;About...</string>
</property>
</action>
<action name="actionFitPage">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/zoom-fit.svg</normaloff>:/resources/zoom-fit.svg</iconset>
</property>
<property name="text">
<string>Fit Page</string>
<string>Fit &amp;Page</string>
</property>
</action>
<action name="actionFitWidth">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/zoom-fit-horizontal.svg</normaloff>:/resources/zoom-fit-horizontal.svg</iconset>
</property>
<property name="text">
<string>Fit Width</string>
<string>Fit &amp;Width</string>
</property>
<property name="shortcut">
<string>W</string>
@ -339,11 +339,11 @@
</action>
<action name="actionFitHeight">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/zoom-fit-vertical.svg</normaloff>:/resources/zoom-fit-vertical.svg</iconset>
</property>
<property name="text">
<string>Fit Height</string>
<string>&amp;Fit Height</string>
</property>
<property name="shortcut">
<string>H</string>
@ -351,20 +351,20 @@
</action>
<action name="actionProperties">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/info.svg</normaloff>:/resources/info.svg</iconset>
</property>
<property name="text">
<string>Properties...</string>
<string>Prope&amp;rties...</string>
</property>
</action>
<action name="actionSend_by_E_Mail">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/send-mail.svg</normaloff>:/resources/send-mail.svg</iconset>
</property>
<property name="text">
<string>Send by E-Mail...</string>
<string>Send by &amp;E-Mail...</string>
</property>
</action>
<action name="actionColorInvert">
@ -372,11 +372,11 @@
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/invert-colors.svg</normaloff>:/resources/invert-colors.svg</iconset>
</property>
<property name="text">
<string>Color | Inverted</string>
<string>Color | &amp;Inverted</string>
</property>
</action>
<action name="actionColorGrayscale">
@ -384,11 +384,11 @@
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/invert-colors.svg</normaloff>:/resources/invert-colors.svg</iconset>
</property>
<property name="text">
<string>Color | Grayscale</string>
<string>Color | &amp;Grayscale</string>
</property>
</action>
<action name="actionColorHighContrast">
@ -396,11 +396,11 @@
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/invert-colors.svg</normaloff>:/resources/invert-colors.svg</iconset>
</property>
<property name="text">
<string>Color | High Contrast</string>
<string>Color | &amp;High Contrast</string>
</property>
</action>
<action name="actionColorBitonal">
@ -408,11 +408,11 @@
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/invert-colors.svg</normaloff>:/resources/invert-colors.svg</iconset>
</property>
<property name="text">
<string>Color | Monochromatic</string>
<string>Color | &amp;Monochromatic</string>
</property>
</action>
<action name="actionColorCustom">
@ -420,38 +420,38 @@
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/invert-colors.svg</normaloff>:/resources/invert-colors.svg</iconset>
</property>
<property name="text">
<string>Color | Custom</string>
<string>Color | &amp;Custom</string>
</property>
</action>
<action name="actionRotateRight">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/rotate-right.svg</normaloff>:/resources/rotate-right.svg</iconset>
</property>
<property name="text">
<string>Rotate Right</string>
<string>Rotate &amp;Right</string>
</property>
</action>
<action name="actionRotateLeft">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/rotate-left.svg</normaloff>:/resources/rotate-left.svg</iconset>
</property>
<property name="text">
<string>Rotate Left</string>
<string>Rotate &amp;Left</string>
</property>
</action>
<action name="actionPrint">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/print.svg</normaloff>:/resources/print.svg</iconset>
</property>
<property name="text">
<string>Print...</string>
<string>&amp;Print...</string>
</property>
</action>
<action name="actionRenderOptionDisplayAnnotations">
@ -459,79 +459,79 @@
<bool>true</bool>
</property>
<property name="text">
<string>Display Annotations</string>
<string>&amp;Display Annotations</string>
</property>
</action>
<action name="actionGoToDocumentStart">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/previous-start.svg</normaloff>:/resources/previous-start.svg</iconset>
</property>
<property name="text">
<string>Go to document start</string>
<string>Go to document &amp;start</string>
</property>
</action>
<action name="actionGoToDocumentEnd">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/next-end.svg</normaloff>:/resources/next-end.svg</iconset>
</property>
<property name="text">
<string>Go to document end</string>
<string>Go to document &amp;end</string>
</property>
</action>
<action name="actionGoToNextPage">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/next-page.svg</normaloff>:/resources/next-page.svg</iconset>
</property>
<property name="text">
<string>Go to next page</string>
<string>Go to &amp;next page</string>
</property>
</action>
<action name="actionGoToPreviousPage">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/previous-page.svg</normaloff>:/resources/previous-page.svg</iconset>
</property>
<property name="text">
<string>Go to previous page</string>
<string>Go to &amp;previous page</string>
</property>
</action>
<action name="actionGoToNextLine">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/next.svg</normaloff>:/resources/next.svg</iconset>
</property>
<property name="text">
<string>Go to next line</string>
<string>Go &amp;to next line</string>
</property>
</action>
<action name="actionGoToPreviousLine">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/previous.svg</normaloff>:/resources/previous.svg</iconset>
</property>
<property name="text">
<string>Go to previous line</string>
<string>Go t&amp;o previous line</string>
</property>
</action>
<action name="actionGetSource">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/web.svg</normaloff>:/resources/web.svg</iconset>
</property>
<property name="text">
<string>Get Source</string>
<string>&amp;Get Source</string>
</property>
</action>
<action name="actionCertificateManager">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/certificate-manager.svg</normaloff>:/resources/certificate-manager.svg</iconset>
</property>
<property name="text">
<string>Certificates...</string>
<string>&amp;Certificates...</string>
</property>
</action>
<action name="actionAutomaticDocumentRefresh">
@ -539,7 +539,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>Automatic Document Refresh</string>
<string>Automatic &amp;Document Refresh</string>
</property>
<property name="statusTip">
<string>Automatically reloads the document if a change made by an external program is detected.</string>
@ -547,11 +547,11 @@
</action>
<action name="actionBecomeASponsor">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/wallet.svg</normaloff>:/resources/wallet.svg</iconset>
</property>
<property name="text">
<string>Become a Sponsor</string>
<string>Become a &amp;Sponsor</string>
</property>
<property name="toolTip">
<string>Become a Sponsor</string>
@ -559,11 +559,11 @@
</action>
<action name="actionBookmarkPage">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/bookmark.svg</normaloff>:/resources/bookmark.svg</iconset>
</property>
<property name="text">
<string>Bookmark Page</string>
<string>&amp;Bookmark Page</string>
</property>
<property name="toolTip">
<string>Bookmark Page</string>
@ -574,11 +574,11 @@
</action>
<action name="actionGotoNextBookmark">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/bookmark-next.svg</normaloff>:/resources/bookmark-next.svg</iconset>
</property>
<property name="text">
<string>Go to Next Bookmark</string>
<string>&amp;Go to Next Bookmark</string>
</property>
<property name="toolTip">
<string>Go to Next Bookmark</string>
@ -589,14 +589,11 @@
</action>
<action name="actionGotoPreviousBookmark">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/bookmark-previous.svg</normaloff>:/resources/bookmark-previous.svg</iconset>
</property>
<property name="text">
<string>Go to Previous Bookmark</string>
</property>
<property name="toolTip">
<string>Go to Previous Bookmark</string>
<string>Go to Previous Boo&amp;kmark</string>
</property>
<property name="statusTip">
<string>Navigates to the previous bookmarked page.</string>
@ -604,11 +601,11 @@
</action>
<action name="actionBookmarkExport">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/bookmark.svg</normaloff>:/resources/bookmark.svg</iconset>
</property>
<property name="text">
<string>Export Bookmarks</string>
<string>&amp;Export Bookmarks</string>
</property>
<property name="toolTip">
<string>Export Bookmarks</string>
@ -619,11 +616,11 @@
</action>
<action name="actionBookmarkImport">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/bookmark.svg</normaloff>:/resources/bookmark.svg</iconset>
</property>
<property name="text">
<string>Import Bookmarks</string>
<string>&amp;Import Bookmarks</string>
</property>
<property name="toolTip">
<string>Import Bookmarks</string>
@ -637,11 +634,11 @@
<bool>true</bool>
</property>
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<iconset resource="pdf4qtlibgui.qrc">
<normaloff>:/resources/bookmark.svg</normaloff>:/resources/bookmark.svg</iconset>
</property>
<property name="text">
<string>Generate Bookmarks Automatically</string>
<string>&amp;Generate Bookmarks Automatically</string>
</property>
<property name="toolTip">
<string>Generate Bookmarks Automatically</string>
@ -655,7 +652,7 @@
<bool>true</bool>
</property>
<property name="text">
<string>Display Render Times</string>
<string>Display &amp;Render Times</string>
</property>
<property name="menuRole">
<enum>QAction::NoRole</enum>
@ -664,7 +661,7 @@
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
<include location="pdf4qtviewer.qrc"/>
<include location="pdf4qtlibgui.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -18,11 +18,17 @@
#include "pdfwidgetutils.h"
#include "pdfcolorconvertor.h"
#include <map>
#include <set>
#include <QMenu>
#include <QAction>
#include <QDialog>
#include <QLayout>
#include <QPainter>
#include <QPixmap>
#include <QGroupBox>
#include <QMessageBox>
#include <QApplication>
#include "pdfdbgheap.h"
@ -210,4 +216,73 @@ QIcon PDFWidgetUtils::convertIconForDarkTheme(QIcon icon, QSize iconSize, qreal
return QIcon(pixmap);
}
void PDFWidgetUtils::checkMenuAccessibility(QWidget* widget)
{
QList<QMenu*> menus = widget->findChildren<QMenu*>();
for (QMenu* menu : menus)
{
checkMenuAccessibility(menu);
}
}
void PDFWidgetUtils::checkMenuAccessibility(QMenu* menu)
{
QStringList actionsDuplicities;
QStringList actionsWithNoAmpersands;
std::map<QChar, std::set<QAction*>> actions;
for (QAction* action : menu->actions())
{
if (action->isSeparator())
{
continue;
}
if (QMenu* submenu = action->menu())
{
checkMenuAccessibility(submenu);
}
QString text = action->text();
int i = text.indexOf(QChar('&'));
if (i == -1)
{
actionsWithNoAmpersands << text;
}
else
{
QString accesibilityChar = text.mid(i + 1, 1);
if (accesibilityChar.size() == 1)
{
actions[accesibilityChar.front().toUpper()].insert(action);
}
}
}
for (const auto& actionItem : actions)
{
if (actionItem.second.size() > 1)
{
QStringList actionTexts;
for (QAction* action : actionItem.second)
{
actionTexts << action->text();
}
actionsDuplicities << QString("'%1': Duplicities = '%2'").arg(QString(actionItem.first), actionTexts.join("', '"));
}
}
QStringList errors;
errors.append(std::move(actionsDuplicities));
errors.append(std::move(actionsWithNoAmpersands));
if (!errors.isEmpty())
{
QMessageBox::warning(nullptr, "Accesibility Check", errors.join("<br>"));
}
}
} // namespace pdf

View File

@ -88,6 +88,14 @@ public:
convertActionForDarkTheme(action, iconSize, devicePixelRatioF);
}
}
/// Checks menu accessibility for all descendants of the specified widget.
/// \param widget The widget whose descendants are to be checked.
static void checkMenuAccessibility(QWidget* widget);
/// Checks menu accessibility for the specified menu.
/// \param menu The menu to be checked for accessibility.
static void checkMenuAccessibility(QMenu* menu);
};
} // namespace pdf

View File

@ -145,7 +145,7 @@ MainWindow::MainWindow(QWidget* parent) :
m_iconTheme.setPrefix(":/pdfpagemaster/resources/");
m_iconTheme.loadTheme();
QToolBar* mainToolbar = addToolBar(tr("Main"));
QToolBar* mainToolbar = addToolBar(tr("&Main"));
mainToolbar->setObjectName("main_toolbar");
mainToolbar->addAction(ui->actionAddDocuments);
mainToolbar->addSeparator();
@ -156,19 +156,19 @@ MainWindow::MainWindow(QWidget* parent) :
mainToolbar->addActions({ ui->actionCut, ui->actionCopy, ui->actionPaste });
mainToolbar->addSeparator();
mainToolbar->addActions({ ui->actionGroup, ui->actionUngroup });
QToolBar* insertToolbar = addToolBar(tr("Insert"));
QToolBar* insertToolbar = addToolBar(tr("&Insert"));
insertToolbar->setObjectName("insert_toolbar");
insertToolbar->addActions({ ui->actionInsert_PDF, ui->actionInsert_Image, ui->actionInsert_Empty_Page });
QToolBar* selectToolbar = addToolBar(tr("Select"));
QToolBar* selectToolbar = addToolBar(tr("&Select"));
selectToolbar->setObjectName("select_toolbar");
selectToolbar->addActions({ ui->actionSelect_None, ui->actionSelect_All, ui->actionSelect_Even, ui->actionSelect_Odd, ui->actionSelect_Portrait, ui->actionSelect_Landscape, ui->actionInvert_Selection });
QToolBar* regroupToolbar = addToolBar(tr("Regroup"));
QToolBar* regroupToolbar = addToolBar(tr("&Regroup"));
regroupToolbar->setObjectName("regroup_toolbar");
regroupToolbar->addActions({ ui->actionRegroup_Even_Odd, ui->actionRegroup_by_Page_Pairs, ui->actionRegroup_by_Outline, ui->actionRegroup_by_Alternating_Pages, ui->actionRegroup_by_Alternating_Pages_Reversed_Order });
QToolBar* zoomToolbar = addToolBar(tr("Zoom"));
QToolBar* zoomToolbar = addToolBar(tr("&Zoom"));
zoomToolbar->setObjectName("zoom_toolbar");
zoomToolbar->addActions({ ui->actionZoom_In, ui->actionZoom_Out });
QToolBar* makeToolbar = addToolBar(tr("Make"));
QToolBar* makeToolbar = addToolBar(tr("Ma&ke"));
makeToolbar->setObjectName("make_toolbar");
makeToolbar->addActions({ ui->actionUnited_Document, ui->actionSeparate_to_Multiple_Documents, ui->actionSeparate_to_Multiple_Documents_Grouped });
@ -209,6 +209,10 @@ MainWindow::MainWindow(QWidget* parent) :
loadSettings();
updateActions();
#ifndef NDEBUG
pdf::PDFWidgetUtils::checkMenuAccessibility(this);
#endif
}
MainWindow::~MainWindow()

View File

@ -59,7 +59,7 @@
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
<string>&amp;File</string>
</property>
<addaction name="actionAddDocuments"/>
<addaction name="actionClear"/>
@ -67,7 +67,7 @@
</widget>
<widget class="QMenu" name="menuEdit">
<property name="title">
<string>Edit</string>
<string>&amp;Edit</string>
</property>
<addaction name="actionUndo"/>
<addaction name="actionRedo"/>
@ -89,7 +89,7 @@
</widget>
<widget class="QMenu" name="menuInsert">
<property name="title">
<string>Insert</string>
<string>&amp;Insert</string>
</property>
<addaction name="actionInsert_PDF"/>
<addaction name="actionInsert_Image"/>
@ -97,7 +97,7 @@
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
<string>View</string>
<string>&amp;View</string>
</property>
<addaction name="actionSelect_None"/>
<addaction name="actionSelect_All"/>
@ -112,7 +112,7 @@
</widget>
<widget class="QMenu" name="menuMake">
<property name="title">
<string>Make</string>
<string>&amp;Make</string>
</property>
<addaction name="actionUnited_Document"/>
<addaction name="actionSeparate_to_Multiple_Documents"/>
@ -120,7 +120,7 @@
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>Help</string>
<string>&amp;Help</string>
</property>
<addaction name="actionGet_Source"/>
<addaction name="actionBecomeASponsor"/>
@ -129,12 +129,12 @@
</widget>
<widget class="QMenu" name="menuToolbars">
<property name="title">
<string>Toolbars</string>
<string>&amp;Toolbars</string>
</property>
</widget>
<widget class="QMenu" name="menuRegroup">
<property name="title">
<string>Regroup</string>
<string>&amp;Regroup</string>
</property>
<addaction name="actionRegroup_Even_Odd"/>
<addaction name="actionRegroup_by_Page_Pairs"/>
@ -158,7 +158,7 @@
<normaloff>:/pdfpagemaster/resources/open.svg</normaloff>:/pdfpagemaster/resources/open.svg</iconset>
</property>
<property name="text">
<string>Add Documents...</string>
<string>&amp;Add Documents...</string>
</property>
<property name="toolTip">
<string>Add Documents</string>
@ -173,7 +173,7 @@
<normaloff>:/pdfpagemaster/resources/close.svg</normaloff>:/pdfpagemaster/resources/close.svg</iconset>
</property>
<property name="text">
<string>Close</string>
<string>C&amp;lose</string>
</property>
<property name="shortcut">
<string>Alt+F4</string>
@ -185,7 +185,7 @@
<normaloff>:/pdfpagemaster/resources/clone-selection.svg</normaloff>:/pdfpagemaster/resources/clone-selection.svg</iconset>
</property>
<property name="text">
<string>Clone Selection</string>
<string>Clone &amp;Selection</string>
</property>
<property name="shortcut">
<string>Ctrl+L</string>
@ -197,7 +197,7 @@
<normaloff>:/pdfpagemaster/resources/remove-selection.svg</normaloff>:/pdfpagemaster/resources/remove-selection.svg</iconset>
</property>
<property name="text">
<string>Remove Selection</string>
<string>Re&amp;move Selection</string>
</property>
<property name="shortcut">
<string>Del</string>
@ -209,7 +209,7 @@
<normaloff>:/pdfpagemaster/resources/restore-removed-items.svg</normaloff>:/pdfpagemaster/resources/restore-removed-items.svg</iconset>
</property>
<property name="text">
<string>Restore Removed Items</string>
<string>Restore Removed &amp;Items</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+R</string>
@ -221,7 +221,7 @@
<normaloff>:/pdfpagemaster/resources/insert-page-from-pdf.svg</normaloff>:/pdfpagemaster/resources/insert-page-from-pdf.svg</iconset>
</property>
<property name="text">
<string>Insert PDF</string>
<string>Insert &amp;PDF</string>
</property>
<property name="toolTip">
<string>Insert PDF</string>
@ -236,7 +236,7 @@
<normaloff>:/pdfpagemaster/resources/insert-image.svg</normaloff>:/pdfpagemaster/resources/insert-image.svg</iconset>
</property>
<property name="text">
<string>Insert Image</string>
<string>&amp;Insert Image</string>
</property>
<property name="shortcut">
<string>Ctrl+Alt+I</string>
@ -248,7 +248,7 @@
<normaloff>:/pdfpagemaster/resources/insert-empty-page.svg</normaloff>:/pdfpagemaster/resources/insert-empty-page.svg</iconset>
</property>
<property name="text">
<string>Insert Empty Page</string>
<string>Insert &amp;Empty Page</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+I</string>
@ -260,7 +260,7 @@
<normaloff>:/pdfpagemaster/resources/cut.svg</normaloff>:/pdfpagemaster/resources/cut.svg</iconset>
</property>
<property name="text">
<string>Cut</string>
<string>Cu&amp;t</string>
</property>
<property name="shortcut">
<string>Ctrl+X</string>
@ -272,7 +272,7 @@
<normaloff>:/pdfpagemaster/resources/copy.svg</normaloff>:/pdfpagemaster/resources/copy.svg</iconset>
</property>
<property name="text">
<string>Copy</string>
<string>&amp;Copy</string>
</property>
<property name="shortcut">
<string>Ctrl+C</string>
@ -284,7 +284,7 @@
<normaloff>:/pdfpagemaster/resources/paste.svg</normaloff>:/pdfpagemaster/resources/paste.svg</iconset>
</property>
<property name="text">
<string>Paste</string>
<string>&amp;Paste</string>
</property>
<property name="shortcut">
<string>Ctrl+V</string>
@ -296,7 +296,7 @@
<normaloff>:/pdfpagemaster/resources/replace-selection.svg</normaloff>:/pdfpagemaster/resources/replace-selection.svg</iconset>
</property>
<property name="text">
<string>Replace Selection</string>
<string>Repl&amp;ace Selection</string>
</property>
<property name="shortcut">
<string>Ctrl+Alt+R</string>
@ -308,7 +308,7 @@
<normaloff>:/pdfpagemaster/resources/select-none.svg</normaloff>:/pdfpagemaster/resources/select-none.svg</iconset>
</property>
<property name="text">
<string>Select None</string>
<string>Select &amp;None</string>
</property>
<property name="shortcut">
<string>Ctrl+N</string>
@ -320,7 +320,7 @@
<normaloff>:/pdfpagemaster/resources/select-all.svg</normaloff>:/pdfpagemaster/resources/select-all.svg</iconset>
</property>
<property name="text">
<string>Select All</string>
<string>Select &amp;All</string>
</property>
<property name="shortcut">
<string>Ctrl+A</string>
@ -332,7 +332,7 @@
<normaloff>:/pdfpagemaster/resources/select-even.svg</normaloff>:/pdfpagemaster/resources/select-even.svg</iconset>
</property>
<property name="text">
<string>Select Even</string>
<string>Select &amp;Even</string>
</property>
<property name="shortcut">
<string>F9</string>
@ -344,7 +344,7 @@
<normaloff>:/pdfpagemaster/resources/select-odd.svg</normaloff>:/pdfpagemaster/resources/select-odd.svg</iconset>
</property>
<property name="text">
<string>Select Odd</string>
<string>Select &amp;Odd</string>
</property>
<property name="shortcut">
<string>F10</string>
@ -356,7 +356,7 @@
<normaloff>:/pdfpagemaster/resources/select-portrait.svg</normaloff>:/pdfpagemaster/resources/select-portrait.svg</iconset>
</property>
<property name="text">
<string>Select Portrait</string>
<string>Select &amp;Portrait</string>
</property>
<property name="shortcut">
<string>F11</string>
@ -368,7 +368,7 @@
<normaloff>:/pdfpagemaster/resources/select-landscape.svg</normaloff>:/pdfpagemaster/resources/select-landscape.svg</iconset>
</property>
<property name="text">
<string>Select Landscape</string>
<string>Select &amp;Landscape</string>
</property>
<property name="shortcut">
<string>F12</string>
@ -380,7 +380,7 @@
<normaloff>:/pdfpagemaster/resources/rotate-right.svg</normaloff>:/pdfpagemaster/resources/rotate-right.svg</iconset>
</property>
<property name="text">
<string>Rotate Right</string>
<string>Rotate &amp;Right</string>
</property>
<property name="shortcut">
<string>F4</string>
@ -392,7 +392,7 @@
<normaloff>:/pdfpagemaster/resources/rotate-left.svg</normaloff>:/pdfpagemaster/resources/rotate-left.svg</iconset>
</property>
<property name="text">
<string>Rotate Left</string>
<string>Rotate &amp;Left</string>
</property>
<property name="shortcut">
<string>Shift+F4</string>
@ -404,7 +404,7 @@
<normaloff>:/pdfpagemaster/resources/zoom-in.svg</normaloff>:/pdfpagemaster/resources/zoom-in.svg</iconset>
</property>
<property name="text">
<string>Zoom In</string>
<string>&amp;Zoom In</string>
</property>
<property name="shortcut">
<string>Ctrl++</string>
@ -416,7 +416,7 @@
<normaloff>:/pdfpagemaster/resources/zoom-out.svg</normaloff>:/pdfpagemaster/resources/zoom-out.svg</iconset>
</property>
<property name="text">
<string>Zoom Out</string>
<string>Zoo&amp;m Out</string>
</property>
<property name="shortcut">
<string>Ctrl+-</string>
@ -428,7 +428,7 @@
<normaloff>:/pdfpagemaster/resources/get-source.svg</normaloff>:/pdfpagemaster/resources/get-source.svg</iconset>
</property>
<property name="text">
<string>Get Source</string>
<string>&amp;Get Source</string>
</property>
</action>
<action name="actionAbout">
@ -437,7 +437,7 @@
<normaloff>:/pdfpagemaster/resources/about.svg</normaloff>:/pdfpagemaster/resources/about.svg</iconset>
</property>
<property name="text">
<string>About...</string>
<string>&amp;About...</string>
</property>
<property name="shortcut">
<string>F1</string>
@ -449,7 +449,7 @@
<normaloff>:/pdfpagemaster/resources/make-united-document.svg</normaloff>:/pdfpagemaster/resources/make-united-document.svg</iconset>
</property>
<property name="text">
<string>United Document...</string>
<string>&amp;United Document...</string>
</property>
<property name="shortcut">
<string>F5</string>
@ -461,7 +461,7 @@
<normaloff>:/pdfpagemaster/resources/make-separated-document.svg</normaloff>:/pdfpagemaster/resources/make-separated-document.svg</iconset>
</property>
<property name="text">
<string>Separate to Multiple Documents...</string>
<string>&amp;Separate to Multiple Documents...</string>
</property>
<property name="shortcut">
<string>F6</string>
@ -473,7 +473,7 @@
<normaloff>:/pdfpagemaster/resources/make-separated-document-from-groups.svg</normaloff>:/pdfpagemaster/resources/make-separated-document-from-groups.svg</iconset>
</property>
<property name="text">
<string>Separate to Multiple Documents (Grouped)...</string>
<string>Separate to Multiple Documents (&amp;Grouped)...</string>
</property>
<property name="shortcut">
<string>F7</string>
@ -485,7 +485,7 @@
<normaloff>:/pdfpagemaster/resources/group.svg</normaloff>:/pdfpagemaster/resources/group.svg</iconset>
</property>
<property name="text">
<string>Group</string>
<string>&amp;Group</string>
</property>
<property name="shortcut">
<string>Ctrl+G</string>
@ -497,7 +497,7 @@
<normaloff>:/pdfpagemaster/resources/ungroup.svg</normaloff>:/pdfpagemaster/resources/ungroup.svg</iconset>
</property>
<property name="text">
<string>Ungroup</string>
<string>U&amp;ngroup</string>
</property>
<property name="shortcut">
<string>Ctrl+Shift+G</string>
@ -509,7 +509,7 @@
<normaloff>:/pdfpagemaster/resources/clear.svg</normaloff>:/pdfpagemaster/resources/clear.svg</iconset>
</property>
<property name="text">
<string>Clear</string>
<string>&amp;Clear</string>
</property>
<property name="shortcut">
<string>Ctrl+W</string>
@ -521,7 +521,7 @@
<normaloff>:/pdfpagemaster/resources/regroup-even-odd.svg</normaloff>:/pdfpagemaster/resources/regroup-even-odd.svg</iconset>
</property>
<property name="text">
<string>Regroup by Even/Odd Pages</string>
<string>Regroup by &amp;Even/Odd Pages</string>
</property>
</action>
<action name="actionRegroup_by_Page_Pairs">
@ -530,7 +530,7 @@
<normaloff>:/pdfpagemaster/resources/regroup-pairs.svg</normaloff>:/pdfpagemaster/resources/regroup-pairs.svg</iconset>
</property>
<property name="text">
<string>Regroup by Page Pairs</string>
<string>Regroup by &amp;Page Pairs</string>
</property>
</action>
<action name="actionRegroup_by_Outline">
@ -539,7 +539,7 @@
<normaloff>:/pdfpagemaster/resources/regroup-outline.svg</normaloff>:/pdfpagemaster/resources/regroup-outline.svg</iconset>
</property>
<property name="text">
<string>Regroup by Outline</string>
<string>Regroup by &amp;Outline</string>
</property>
</action>
<action name="actionRegroup_by_Alternating_Pages">
@ -548,7 +548,7 @@
<normaloff>:/pdfpagemaster/resources/regroup-alternating.svg</normaloff>:/pdfpagemaster/resources/regroup-alternating.svg</iconset>
</property>
<property name="text">
<string>Regroup by Alternating Pages</string>
<string>Regroup by &amp;Alternating Pages</string>
</property>
</action>
<action name="actionRegroup_by_Alternating_Pages_Reversed_Order">
@ -557,7 +557,7 @@
<normaloff>:/pdfpagemaster/resources/regroup-alternating-reversed.svg</normaloff>:/pdfpagemaster/resources/regroup-alternating-reversed.svg</iconset>
</property>
<property name="text">
<string>Regroup by Alternating Pages (Reversed Order)</string>
<string>Regroup by Alternating Pages (&amp;Reversed Order)</string>
</property>
</action>
<action name="actionInvert_Selection">
@ -566,7 +566,7 @@
<normaloff>:/pdfpagemaster/resources/invert-selection.svg</normaloff>:/pdfpagemaster/resources/invert-selection.svg</iconset>
</property>
<property name="text">
<string>Invert Selection</string>
<string>&amp;Invert Selection</string>
</property>
</action>
<action name="actionUndo">
@ -575,7 +575,7 @@
<normaloff>:/pdfpagemaster/resources/undo.svg</normaloff>:/pdfpagemaster/resources/undo.svg</iconset>
</property>
<property name="text">
<string>Undo</string>
<string>&amp;Undo</string>
</property>
<property name="shortcut">
<string>Ctrl+Z</string>
@ -587,7 +587,7 @@
<normaloff>:/pdfpagemaster/resources/redo.svg</normaloff>:/pdfpagemaster/resources/redo.svg</iconset>
</property>
<property name="text">
<string>Redo</string>
<string>Re&amp;do</string>
</property>
<property name="shortcut">
<string>Ctrl+Y</string>
@ -595,7 +595,7 @@
</action>
<action name="actionPrepare_Icon_Theme">
<property name="text">
<string>Prepare Icon Theme</string>
<string>&amp;Prepare Icon Theme</string>
</property>
</action>
<action name="actionBecomeASponsor">
@ -604,7 +604,7 @@
<normaloff>:/pdfpagemaster/resources/wallet.svg</normaloff>:/pdfpagemaster/resources/wallet.svg</iconset>
</property>
<property name="text">
<string>Become a Sponsor</string>
<string>Become a &amp;Sponsor</string>
</property>
</action>
</widget>

View File

@ -1,4 +1,5 @@
CURRENT:
- Issue #172: access keys are missing from most menu items/action text strings
- Issue #168: When opening a PDF file or merging some PDF files, stamp will disappear.
- Issue #164: Taskbar icon not shown in linux mint.
- Issue #163: Unable to render probably valid PDF