Compare commits

...

4 Commits

Author SHA1 Message Date
Christian Weiske 6257c541df
Merge debaf0081f into 1e52c0c063 2024-03-21 15:55:38 +01:00
Jakub Melka 1e52c0c063 Issue #173: errors loading file Echoplex.pdf 2024-03-21 15:29:29 +01:00
Jakub Melka 8b832ccab9 Issue #172: access keys are missing from most menu items/action text strings 2024-03-21 13:16:52 +01:00
Christian Weiske debaf0081f
Add flathub link to README 2024-01-14 12:09:46 +01:00
36 changed files with 653 additions and 429 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -67,61 +67,61 @@ void AudioBookPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(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"); m_actionCreateTextStream->setObjectName("actionAudioBook_CreateTextStream");
connect(m_actionCreateTextStream, &QAction::triggered, this, &AudioBookPlugin::onCreateTextStreamTriggered); 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->setObjectName("actionAudioBook_SynchronizeFromTableToGraphics");
m_actionSynchronizeFromTableToGraphics->setCheckable(true); m_actionSynchronizeFromTableToGraphics->setCheckable(true);
m_actionSynchronizeFromTableToGraphics->setChecked(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->setObjectName("actionAudioBook_SynchronizeFromGraphicsToTable");
m_actionSynchronizeFromGraphicsToTable->setCheckable(true); m_actionSynchronizeFromGraphicsToTable->setCheckable(true);
m_actionSynchronizeFromGraphicsToTable->setChecked(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"); m_actionActivateSelection->setObjectName("actionAudioBook_ActivateSelection");
connect(m_actionActivateSelection, &QAction::triggered, this, &AudioBookPlugin::onActivateSelection); 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"); m_actionDeactivateSelection->setObjectName("actionAudioBook_DeactivateSelection");
connect(m_actionDeactivateSelection, &QAction::triggered, this, &AudioBookPlugin::onDeactivateSelection); 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"); m_actionSelectByRectangle->setObjectName("actionAudioBook_SelectByRectangle");
connect(m_actionSelectByRectangle, &QAction::triggered, this, &AudioBookPlugin::onSelectByRectangle); 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"); m_actionSelectByContainedText->setObjectName("actionAudioBook_SelectByContainedText");
connect(m_actionSelectByContainedText, &QAction::triggered, this, &AudioBookPlugin::onSelectByContainedText); 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"); m_actionSelectByRegularExpression->setObjectName("actionAudioBook_SelectByRegularExpression");
connect(m_actionSelectByRegularExpression, &QAction::triggered, this, &AudioBookPlugin::onSelectByRegularExpression); 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"); m_actionSelectByPageList->setObjectName("actionAudioBook_SelectByPageList");
connect(m_actionSelectByPageList, &QAction::triggered, this, &AudioBookPlugin::onSelectByPageList); 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"); m_actionRestoreOriginalText->setObjectName("actionAudioBook_RestoreOriginalText");
connect(m_actionRestoreOriginalText, &QAction::triggered, this, &AudioBookPlugin::onRestoreOriginalText); 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"); m_actionMoveSelectionUp->setObjectName("actionAudioBook_MoveSelectionUp");
connect(m_actionMoveSelectionUp, &QAction::triggered, this, &AudioBookPlugin::onMoveSelectionUp); 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"); m_actionMoveSelectionDown->setObjectName("actionAudioBook_MoveSelectionDown");
connect(m_actionMoveSelectionDown, &QAction::triggered, this, &AudioBookPlugin::onMoveSelectionDown); 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"); m_actionCreateAudioBook->setObjectName("actionAudioBook_CreateAudioBook");
connect(m_actionCreateAudioBook, &QAction::triggered, this, &AudioBookPlugin::onCreateAudioBook); 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"); m_actionClear->setObjectName("actionAudioBook_Clear");
connect(m_actionClear, &QAction::triggered, this, &AudioBookPlugin::onClear); connect(m_actionClear, &QAction::triggered, this, &AudioBookPlugin::onClear);
@ -157,7 +157,12 @@ std::vector<QAction*> AudioBookPlugin::getActions() const
m_actionSynchronizeFromTableToGraphics, m_actionSynchronizeFromTableToGraphics,
m_actionSynchronizeFromGraphicsToTable, m_actionSynchronizeFromGraphicsToTable,
m_actionCreateAudioBook, m_actionCreateAudioBook,
m_actionClear }; m_actionClear };
}
QString AudioBookPlugin::getPluginMenuName() const
{
return tr("&Audio Book");
} }
void AudioBookPlugin::drawPage(QPainter* painter, void AudioBookPlugin::drawPage(QPainter* painter,

View File

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

View File

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

View File

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

View File

@ -43,13 +43,13 @@ void ObjectInspectorPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(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->setCheckable(false);
m_objectInspectorAction->setObjectName("actionObjectInspector_ObjectInspector"); m_objectInspectorAction->setObjectName("actionObjectInspector_ObjectInspector");
connect(m_objectInspectorAction, &QAction::triggered, this, &ObjectInspectorPlugin::onObjectInspectorTriggered); 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->setCheckable(false);
m_objectStatisticsAction->setObjectName("actionObjectInspector_ObjectStatistics"); m_objectStatisticsAction->setObjectName("actionObjectInspector_ObjectStatistics");
@ -78,6 +78,11 @@ std::vector<QAction*> ObjectInspectorPlugin::getActions() const
return { m_objectInspectorAction, m_objectStatisticsAction }; return { m_objectInspectorAction, m_objectStatisticsAction };
} }
QString ObjectInspectorPlugin::getPluginMenuName() const
{
return tr("Object &Inspector");
}
void ObjectInspectorPlugin::onObjectInspectorTriggered() void ObjectInspectorPlugin::onObjectInspectorTriggered()
{ {
pdf::PDFCMSPointer cms = m_cmsManager->getCurrentCMS(); pdf::PDFCMSPointer cms = m_cmsManager->getCurrentCMS();

View File

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

View File

@ -39,9 +39,9 @@ void OutputPreviewPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(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_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"); m_inkCoverageAction->setObjectName("actionOutputPreview_InkCoverage");
connect(m_outputPreviewAction, &QAction::triggered, this, &OutputPreviewPlugin::onOutputPreviewTriggered); connect(m_outputPreviewAction, &QAction::triggered, this, &OutputPreviewPlugin::onOutputPreviewTriggered);
@ -65,6 +65,11 @@ std::vector<QAction*> OutputPreviewPlugin::getActions() const
return { m_outputPreviewAction, m_inkCoverageAction }; return { m_outputPreviewAction, m_inkCoverageAction };
} }
QString OutputPreviewPlugin::getPluginMenuName() const
{
return tr("Output Previe&w");
}
void OutputPreviewPlugin::onOutputPreviewTriggered() void OutputPreviewPlugin::onOutputPreviewTriggered()
{ {
OutputPreviewDialog dialog(m_document, m_widget, m_widget); OutputPreviewDialog dialog(m_document, m_widget, m_widget);

View File

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

View File

@ -50,11 +50,11 @@ void RedactPlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(widget); BaseClass::setWidget(widget);
m_actionRedactRectangle = new QAction(QIcon(":/pdfplugins/redactplugin/redact-rectangle.svg"), tr("Redact Rectangle"), 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_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_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_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_actionCreateRedactedDocument = new QAction(QIcon(":/pdfplugins/redactplugin/redact-create-document.svg"), tr("Create Redacted &Document"), this);
m_actionRedactRectangle->setObjectName("redactplugin_RedactRectangle"); m_actionRedactRectangle->setObjectName("redactplugin_RedactRectangle");
m_actionRedactText->setObjectName("redactplugin_RedactText"); 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 }; return { m_actionRedactRectangle, m_actionRedactText, m_actionRedactTextSelection, m_actionRedactPage, m_actionCreateRedactedDocument };
} }
QString RedactPlugin::getPluginMenuName() const
{
return tr("Redac&t");
}
void RedactPlugin::updateActions() void RedactPlugin::updateActions()
{ {
m_actionRedactTextSelection->setEnabled(m_document); m_actionRedactTextSelection->setEnabled(m_document);

View File

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

View File

@ -52,22 +52,22 @@ void SignaturePlugin::setWidget(pdf::PDFWidget* widget)
BaseClass::setWidget(widget); BaseClass::setWidget(widget);
QAction* activateAction = new QAction(QIcon(":/pdfplugins/signatureplugin/activate.svg"), tr("Activate signature creator"), 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* 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* 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* 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* 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* 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* 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* 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* 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* 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* 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* 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* 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* 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* 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* certificatesAction = new QAction(QIcon(":/pdfplugins/signatureplugin/certificates.svg"), tr("Certificates &Manager"), this);
activateAction->setObjectName("signaturetool_activateAction"); activateAction->setObjectName("signaturetool_activateAction");
createTextAction->setObjectName("signaturetool_createTextAction"); createTextAction->setObjectName("signaturetool_createTextAction");
@ -189,6 +189,11 @@ std::vector<QAction*> SignaturePlugin::getActions() const
return result; return result;
} }
QString SignaturePlugin::getPluginMenuName() const
{
return tr("Si&gnature");
}
void SignaturePlugin::onSceneChanged(bool graphicsOnly) void SignaturePlugin::onSceneChanged(bool graphicsOnly)
{ {
if (!graphicsOnly) if (!graphicsOnly)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
// Copyright (C) 2019-2022 Jakub Melka // Copyright (C) 2019-2024 Jakub Melka
// //
// This file is part of PDF4QT. // This file is part of PDF4QT.
// //
@ -93,6 +93,23 @@ static constexpr std::array S_DEFAULT_CJK_FONTS =
PDF_Default_CJK_Font{ ECjkDefaultFontType::AdobeKorea, true, "Batang" }, PDF_Default_CJK_Font{ ECjkDefaultFontType::AdobeKorea, true, "Batang" },
}; };
struct PDF_Font_Replacement
{
const char* origFont;
const char* replaceFont;
};
static constexpr std::array S_FONT_REPLACEMENTS
{
PDF_Font_Replacement{"Futura", "Calibri"},
PDF_Font_Replacement{"Utopia-Bold", "Georgia"},
PDF_Font_Replacement{"Utopia-BoldItalic", "Georgia"},
PDF_Font_Replacement{"Utopia-Italic", "Georgia"},
PDF_Font_Replacement{"Utopia-Semibold", "Georgia"},
PDF_Font_Replacement{"Utopia-SemiboldItalic", "Georgia"},
PDF_Font_Replacement{"Utopia", "Georgia"},
};
/// Storage class for system fonts /// Storage class for system fonts
class PDFSystemFontInfoStorage class PDFSystemFontInfoStorage
{ {
@ -250,6 +267,22 @@ QByteArray PDFSystemFontInfoStorage::loadFont(const CIDSystemInfo* cidSystemInfo
} }
} }
if (fontData.isEmpty())
{
for (const PDF_Font_Replacement& fontReplacement : S_FONT_REPLACEMENTS)
{
if (fontName.contains(QLatin1String(fontReplacement.origFont)))
{
fontData = loadFontImpl(descriptor, QString(fontReplacement.replaceFont), StandardFontType::Invalid, reporter);
if (!fontData.isEmpty())
{
return fontData;
}
}
}
}
return fontData; return fontData;
} }

View File

@ -1,4 +1,4 @@
// Copyright (C) 2019-2021 Jakub Melka // Copyright (C) 2019-2024 Jakub Melka
// //
// This file is part of PDF4QT. // This file is part of PDF4QT.
// //

View File

@ -658,7 +658,7 @@ PDFObjectEditorAnnotationsModel::PDFObjectEditorAnnotationsModel(QObject* parent
PDFObjectFactory factory; PDFObjectFactory factory;
factory << stampType; 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); m_attributes.back().enumItems = qMove(stampNameEnumItems);

View File

@ -81,6 +81,7 @@ public:
virtual void setCMSManager(PDFCMSManager* manager); virtual void setCMSManager(PDFCMSManager* manager);
virtual void setDocument(const PDFModifiedDocument& document); virtual void setDocument(const PDFModifiedDocument& document);
virtual std::vector<QAction*> getActions() const; virtual std::vector<QAction*> getActions() const;
virtual QString getPluginMenuName() const = 0;
protected: protected:
IPluginDataExchange* m_dataExchangeInterface; 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. // This file is part of PDF4QT.
// //
@ -63,7 +63,6 @@
#include <QtPrintSupport/QPrinter> #include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog> #include <QtPrintSupport/QPrintDialog>
#include <QtConcurrent/QtConcurrent> #include <QtConcurrent/QtConcurrent>
#include <QPluginLoader>
#include <QToolButton> #include <QToolButton>
#include <QActionGroup> #include <QActionGroup>
@ -278,7 +277,7 @@ PDFEditorMainWindow::PDFEditorMainWindow(QWidget* parent) :
setFocusProxy(m_programController->getPdfWidget()); 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_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->setObjectName("SidebarDockWidget");
m_sidebarDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); m_sidebarDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_sidebarDockWidget->setWidget(m_sidebarWidget); m_sidebarDockWidget->setWidget(m_sidebarWidget);
@ -296,7 +295,7 @@ PDFEditorMainWindow::PDFEditorMainWindow(QWidget* parent) :
m_advancedFindDockWidget->hide(); m_advancedFindDockWidget->hide();
QAction* toggleAdvancedFindAction = m_advancedFindDockWidget->toggleViewAction(); QAction* toggleAdvancedFindAction = m_advancedFindDockWidget->toggleViewAction();
toggleAdvancedFindAction->setObjectName("actionAdvancedFind"); toggleAdvancedFindAction->setObjectName("actionAdvancedFind");
toggleAdvancedFindAction->setText(tr("Advanced Find...")); toggleAdvancedFindAction->setText(tr("Ad&vanced Find..."));
toggleAdvancedFindAction->setShortcut(QKeySequence("Ctrl+Shift+F")); toggleAdvancedFindAction->setShortcut(QKeySequence("Ctrl+Shift+F"));
toggleAdvancedFindAction->setIcon(QIcon(":/resources/find-advanced.svg")); toggleAdvancedFindAction->setIcon(QIcon(":/resources/find-advanced.svg"));
ui->menuEdit->insertAction(nullptr, toggleAdvancedFindAction); ui->menuEdit->insertAction(nullptr, toggleAdvancedFindAction);
@ -324,6 +323,10 @@ PDFEditorMainWindow::PDFEditorMainWindow(QWidget* parent) :
m_actionManager->styleActions(); m_actionManager->styleActions();
m_programController->initActionComboBox(actionComboBox); m_programController->initActionComboBox(actionComboBox);
#ifndef NDEBUG
pdf::PDFWidgetUtils::checkMenuAccessibility(this);
#endif
} }
PDFEditorMainWindow::~PDFEditorMainWindow() 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) 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); QAction* action = new QAction(text, this);
action->setObjectName(QString("actionCreateStamp_%1").arg(int(stamp))); action->setObjectName(QString("actionCreateStamp_%1").arg(int(stamp)));
action->setData(int(stamp)); action->setData(int(stamp));
@ -2222,7 +2222,7 @@ void PDFProgramController::loadPlugins()
QToolBar* toolBar = m_mainWindow->addToolBar(plugin.first.name); QToolBar* toolBar = m_mainWindow->addToolBar(plugin.first.name);
toolBar->setObjectName(QString("Plugin_Toolbar_%1").arg(plugin.first.name)); toolBar->setObjectName(QString("Plugin_Toolbar_%1").arg(plugin.first.name));
m_mainWindowInterface->adjustToolbar(toolBar); m_mainWindowInterface->adjustToolbar(toolBar);
QMenu* menu = m_mainWindowInterface->addToolMenu(plugin.first.name); QMenu* menu = m_mainWindowInterface->addToolMenu(plugin.second->getPluginMenuName());
for (QAction* action : actions) for (QAction* action : actions)
{ {
if (!action) if (!action)

View File

@ -79,13 +79,13 @@ void PDFRecentFileManager::update()
if (i < m_recentFiles.size()) if (i < m_recentFiles.size())
{ {
recentFileAction->setData(m_recentFiles[i]); 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); recentFileAction->setVisible(true);
} }
else else
{ {
recentFileAction->setData(QVariant()); 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); recentFileAction->setVisible(false);
} }
} }

View File

@ -212,7 +212,7 @@ PDFViewerMainWindow::PDFViewerMainWindow(QWidget* parent) :
setFocusProxy(m_programController->getPdfWidget()); 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_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->setObjectName("SidebarDockWidget");
m_sidebarDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); m_sidebarDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_sidebarDockWidget->setWidget(m_sidebarWidget); m_sidebarDockWidget->setWidget(m_sidebarWidget);
@ -241,6 +241,10 @@ PDFViewerMainWindow::PDFViewerMainWindow(QWidget* parent) :
m_actionManager->styleActions(); m_actionManager->styleActions();
m_programController->initActionComboBox(actionComboBox); m_programController->initActionComboBox(actionComboBox);
#ifndef NDEBUG
pdf::PDFWidgetUtils::checkMenuAccessibility(this);
#endif
} }
PDFViewerMainWindow::~PDFViewerMainWindow() PDFViewerMainWindow::~PDFViewerMainWindow()

View File

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

View File

@ -18,11 +18,17 @@
#include "pdfwidgetutils.h" #include "pdfwidgetutils.h"
#include "pdfcolorconvertor.h" #include "pdfcolorconvertor.h"
#include <map>
#include <set>
#include <QMenu>
#include <QAction>
#include <QDialog> #include <QDialog>
#include <QLayout> #include <QLayout>
#include <QPainter> #include <QPainter>
#include <QPixmap> #include <QPixmap>
#include <QGroupBox> #include <QGroupBox>
#include <QMessageBox>
#include <QApplication> #include <QApplication>
#include "pdfdbgheap.h" #include "pdfdbgheap.h"
@ -210,4 +216,73 @@ QIcon PDFWidgetUtils::convertIconForDarkTheme(QIcon icon, QSize iconSize, qreal
return QIcon(pixmap); 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 } // namespace pdf

View File

@ -88,6 +88,14 @@ public:
convertActionForDarkTheme(action, iconSize, devicePixelRatioF); 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 } // namespace pdf

View File

@ -145,7 +145,7 @@ MainWindow::MainWindow(QWidget* parent) :
m_iconTheme.setPrefix(":/pdfpagemaster/resources/"); m_iconTheme.setPrefix(":/pdfpagemaster/resources/");
m_iconTheme.loadTheme(); m_iconTheme.loadTheme();
QToolBar* mainToolbar = addToolBar(tr("Main")); QToolBar* mainToolbar = addToolBar(tr("&Main"));
mainToolbar->setObjectName("main_toolbar"); mainToolbar->setObjectName("main_toolbar");
mainToolbar->addAction(ui->actionAddDocuments); mainToolbar->addAction(ui->actionAddDocuments);
mainToolbar->addSeparator(); mainToolbar->addSeparator();
@ -156,19 +156,19 @@ MainWindow::MainWindow(QWidget* parent) :
mainToolbar->addActions({ ui->actionCut, ui->actionCopy, ui->actionPaste }); mainToolbar->addActions({ ui->actionCut, ui->actionCopy, ui->actionPaste });
mainToolbar->addSeparator(); mainToolbar->addSeparator();
mainToolbar->addActions({ ui->actionGroup, ui->actionUngroup }); mainToolbar->addActions({ ui->actionGroup, ui->actionUngroup });
QToolBar* insertToolbar = addToolBar(tr("Insert")); QToolBar* insertToolbar = addToolBar(tr("&Insert"));
insertToolbar->setObjectName("insert_toolbar"); insertToolbar->setObjectName("insert_toolbar");
insertToolbar->addActions({ ui->actionInsert_PDF, ui->actionInsert_Image, ui->actionInsert_Empty_Page }); 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->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 }); 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->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 }); 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->setObjectName("zoom_toolbar");
zoomToolbar->addActions({ ui->actionZoom_In, ui->actionZoom_Out }); zoomToolbar->addActions({ ui->actionZoom_In, ui->actionZoom_Out });
QToolBar* makeToolbar = addToolBar(tr("Make")); QToolBar* makeToolbar = addToolBar(tr("Ma&ke"));
makeToolbar->setObjectName("make_toolbar"); makeToolbar->setObjectName("make_toolbar");
makeToolbar->addActions({ ui->actionUnited_Document, ui->actionSeparate_to_Multiple_Documents, ui->actionSeparate_to_Multiple_Documents_Grouped }); 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(); loadSettings();
updateActions(); updateActions();
#ifndef NDEBUG
pdf::PDFWidgetUtils::checkMenuAccessibility(this);
#endif
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()

View File

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

View File

@ -95,6 +95,10 @@ The [Release page](https://github.com/JakubMelka/PDF4QT/releases) lists binaries
A [pdf4qt-git](https://aur.archlinux.org/packages/pdf4qt-git) package is available in the AUR. A [pdf4qt-git](https://aur.archlinux.org/packages/pdf4qt-git) package is available in the AUR.
### Linux
PDF4QT can be installed via `flatpak`: https://flathub.org/apps/io.github.JakubMelka.Pdf4qt
## 7. COMPILING ## 7. COMPILING
This software can be compiled on both Windows and Linux. A compiler supporting the C++20 standard is needed. This software can be compiled on both Windows and Linux. A compiler supporting the C++20 standard is needed.

View File

@ -1,4 +1,6 @@
CURRENT: CURRENT:
- Issue #173: errors loading file Echoplex.pdf
- 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 #168: When opening a PDF file or merging some PDF files, stamp will disappear.
- Issue #164: Taskbar icon not shown in linux mint. - Issue #164: Taskbar icon not shown in linux mint.
- Issue #163: Unable to render probably valid PDF - Issue #163: Unable to render probably valid PDF