Lite version of the viewer

This commit is contained in:
Jakub Melka 2020-12-21 18:24:17 +01:00
parent 7614ab8240
commit fd902ac525
8 changed files with 1087 additions and 1 deletions

View File

@ -26,7 +26,8 @@ SUBDIRS += \
UnitTests \ UnitTests \
Pdf4QtViewer \ Pdf4QtViewer \
Pdf4QtViewerPlugins \ Pdf4QtViewerPlugins \
Pdf4QtViewerProfi Pdf4QtViewerProfi \
Pdf4QtViewerLite
CodeGenerator.depends = Pdf4QtLib CodeGenerator.depends = Pdf4QtLib
JBIG2_Viewer.depends = Pdf4QtLib JBIG2_Viewer.depends = Pdf4QtLib
@ -36,3 +37,4 @@ UnitTests.depends = Pdf4QtLib
Pdf4QtViewer.depends = Pdf4QtLib Pdf4QtViewer.depends = Pdf4QtLib
Pdf4QtViewerPlugins.depends = Pdf4QtLib Pdf4QtViewerPlugins.depends = Pdf4QtLib
Pdf4QtViewerProfi.depends = Pdf4QtViewer Pdf4QtViewerProfi.depends = Pdf4QtViewer
Pdf4QtViewerLite.depends = Pdf4QtViewer

View File

@ -50,6 +50,7 @@ SOURCES += \
pdftexttospeech.cpp \ pdftexttospeech.cpp \
pdfundoredomanager.cpp \ pdfundoredomanager.cpp \
pdfviewermainwindow.cpp \ pdfviewermainwindow.cpp \
pdfviewermainwindowlite.cpp \
pdfviewersettings.cpp \ pdfviewersettings.cpp \
pdfviewersettingsdialog.cpp pdfviewersettingsdialog.cpp
@ -67,6 +68,7 @@ HEADERS += \
pdfundoredomanager.h \ pdfundoredomanager.h \
pdfviewerglobal.h \ pdfviewerglobal.h \
pdfviewermainwindow.h \ pdfviewermainwindow.h \
pdfviewermainwindowlite.h \
pdfviewersettings.h \ pdfviewersettings.h \
pdfviewersettingsdialog.h pdfviewersettingsdialog.h
@ -78,6 +80,7 @@ FORMS += \
pdfrendertoimagesdialog.ui \ pdfrendertoimagesdialog.ui \
pdfsidebarwidget.ui \ pdfsidebarwidget.ui \
pdfviewermainwindow.ui \ pdfviewermainwindow.ui \
pdfviewermainwindowlite.ui \
pdfviewersettingsdialog.ui pdfviewersettingsdialog.ui
CONFIG += force_debug_info CONFIG += force_debug_info

View File

@ -0,0 +1,441 @@
// Copyright (C) 2020 Jakub Melka
//
// This file is part of Pdf4Qt.
//
// Pdf4Qt is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Pdf4Qt is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with Pdf4Qt. If not, see <https://www.gnu.org/licenses/>.
#include "PDFViewerMainWindowLite.h"
#include "ui_PDFViewerMainWindowLite.h"
#include "pdfaboutdialog.h"
#include "pdfsidebarwidget.h"
#include "pdfadvancedfindwidget.h"
#include "pdfviewersettingsdialog.h"
#include "pdfdocumentpropertiesdialog.h"
#include "pdfrendertoimagesdialog.h"
#include "pdfoptimizedocumentdialog.h"
#include "pdfdocumentreader.h"
#include "pdfvisitor.h"
#include "pdfstreamfilters.h"
#include "pdfdrawwidget.h"
#include "pdfdrawspacecontroller.h"
#include "pdfrenderingerrorswidget.h"
#include "pdffont.h"
#include "pdfitemmodels.h"
#include "pdfutils.h"
#include "pdfsendmail.h"
#include "pdfexecutionpolicy.h"
#include "pdfwidgetutils.h"
#include "pdfdocumentwriter.h"
#include "pdfsignaturehandler.h"
#include "pdfadvancedtools.h"
#include "pdfwidgetutils.h"
#include <QPainter>
#include <QSettings>
#include <QFileDialog>
#include <QMessageBox>
#include <QCloseEvent>
#include <QApplication>
#include <QDesktopWidget>
#include <QStandardPaths>
#include <QDockWidget>
#include <QTreeView>
#include <QLayout>
#include <QHeaderView>
#include <QInputDialog>
#include <QSpinBox>
#include <QLabel>
#include <QDoubleSpinBox>
#include <QDesktopServices>
#include <QFileDialog>
#include <QLockFile>
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrintDialog>
#include <QtConcurrent/QtConcurrent>
#include <QPluginLoader>
#include <QToolButton>
#include <QActionGroup>
#ifdef Q_OS_WIN
#include "Windows.h"
#endif
namespace pdfviewer
{
PDFViewerMainWindowLite::PDFViewerMainWindowLite(QWidget* parent) :
QMainWindow(parent),
ui(new Ui::PDFViewerMainWindowLite),
m_actionManager(new PDFActionManager(this)),
m_programController(new PDFProgramController(this)),
m_sidebarWidget(nullptr),
m_sidebarDockWidget(nullptr),
m_pageNumberSpinBox(nullptr),
m_pageNumberLabel(nullptr),
m_pageZoomSpinBox(nullptr),
m_isLoadingUI(false),
m_progress(new pdf::PDFProgress(this)),
m_taskbarButton(new QWinTaskbarButton(this)),
m_progressTaskbarIndicator(nullptr),
m_progressDialog(nullptr),
m_isChangingProgressStep(false)
{
ui->setupUi(this);
setAcceptDrops(true);
// Initialize toolbar icon size
adjustToolbar(ui->mainToolBar);
// Initialize task bar progress
m_progressTaskbarIndicator = m_taskbarButton->progress();
// Initialize actions
m_actionManager->setAction(PDFActionManager::Open, ui->actionOpen);
m_actionManager->setAction(PDFActionManager::Close, ui->actionClose);
m_actionManager->setAction(PDFActionManager::Quit, ui->actionQuit);
m_actionManager->setAction(PDFActionManager::ZoomIn, ui->actionZoom_In);
m_actionManager->setAction(PDFActionManager::ZoomOut, ui->actionZoom_Out);
m_actionManager->setAction(PDFActionManager::RotateRight, ui->actionRotateRight);
m_actionManager->setAction(PDFActionManager::RotateLeft, ui->actionRotateLeft);
m_actionManager->setAction(PDFActionManager::Print, ui->actionPrint);
m_actionManager->setAction(PDFActionManager::GoToDocumentStart, ui->actionGoToDocumentStart);
m_actionManager->setAction(PDFActionManager::GoToDocumentEnd, ui->actionGoToDocumentEnd);
m_actionManager->setAction(PDFActionManager::GoToNextPage, ui->actionGoToNextPage);
m_actionManager->setAction(PDFActionManager::GoToPreviousPage, ui->actionGoToPreviousPage);
m_actionManager->setAction(PDFActionManager::GoToNextLine, ui->actionGoToNextLine);
m_actionManager->setAction(PDFActionManager::GoToPreviousLine, ui->actionGoToPreviousLine);
m_actionManager->setAction(PDFActionManager::RenderOptionAntialiasing, ui->actionRenderOptionAntialiasing);
m_actionManager->setAction(PDFActionManager::RenderOptionTextAntialiasing, ui->actionRenderOptionTextAntialiasing);
m_actionManager->setAction(PDFActionManager::RenderOptionSmoothPictures, ui->actionRenderOptionSmoothPictures);
m_actionManager->setAction(PDFActionManager::RenderOptionIgnoreOptionalContentSettings, ui->actionRenderOptionIgnoreOptionalContentSettings);
m_actionManager->setAction(PDFActionManager::RenderOptionDisplayAnnotations, ui->actionRenderOptionDisplayAnnotations);
m_actionManager->setAction(PDFActionManager::RenderOptionInvertColors, ui->actionInvertColors);
m_actionManager->setAction(PDFActionManager::Properties, ui->actionProperties);
m_actionManager->setAction(PDFActionManager::Options, ui->actionOptions);
m_actionManager->setAction(PDFActionManager::About, ui->actionAbout);
m_actionManager->setAction(PDFActionManager::SendByMail, ui->actionSend_by_E_Mail);
m_actionManager->setAction(PDFActionManager::FitPage, ui->actionFitPage);
m_actionManager->setAction(PDFActionManager::FitWidth, ui->actionFitWidth);
m_actionManager->setAction(PDFActionManager::FitHeight, ui->actionFitHeight);
m_actionManager->setAction(PDFActionManager::ShowRenderingErrors, ui->actionRendering_Errors);
m_actionManager->setAction(PDFActionManager::PageLayoutSinglePage, ui->actionPageLayoutSinglePage);
m_actionManager->setAction(PDFActionManager::PageLayoutContinuous, ui->actionPageLayoutContinuous);
m_actionManager->setAction(PDFActionManager::PageLayoutTwoPages, ui->actionPageLayoutTwoPages);
m_actionManager->setAction(PDFActionManager::PageLayoutTwoColumns, ui->actionPageLayoutTwoColumns);
m_actionManager->setAction(PDFActionManager::PageLayoutFirstPageOnRightSide, ui->actionFirstPageOnRightSide);
m_actionManager->initActions(pdf::PDFWidgetUtils::scaleDPI(this, QSize(24, 24)), true);
for (QAction* action : m_programController->getRecentFileManager()->getActions())
{
ui->menuFile->insertAction(ui->actionQuit, action);
}
ui->menuFile->insertSeparator(ui->actionQuit);
connect(ui->actionQuit, &QAction::triggered, this, &PDFViewerMainWindowLite::onActionQuitTriggered);
m_pageNumberSpinBox = new QSpinBox(this);
m_pageNumberLabel = new QLabel(this);
m_pageNumberSpinBox->setFixedWidth(pdf::PDFWidgetUtils::scaleDPI_x(m_pageNumberSpinBox, 80));
m_pageNumberSpinBox->setAlignment(Qt::AlignCenter);
connect(m_pageNumberSpinBox, &QSpinBox::editingFinished, this, &PDFViewerMainWindowLite::onPageNumberSpinboxEditingFinished);
// Page control
ui->mainToolBar->addSeparator();
ui->mainToolBar->addAction(ui->actionGoToDocumentStart);
ui->mainToolBar->addAction(ui->actionGoToPreviousPage);
ui->mainToolBar->addWidget(m_pageNumberSpinBox);
ui->mainToolBar->addWidget(m_pageNumberLabel);
ui->mainToolBar->addAction(ui->actionGoToNextPage);
ui->mainToolBar->addAction(ui->actionGoToDocumentEnd);
// Zoom
ui->mainToolBar->addSeparator();
ui->mainToolBar->addAction(ui->actionZoom_In);
ui->mainToolBar->addAction(ui->actionZoom_Out);
m_pageZoomSpinBox = new QDoubleSpinBox(this);
m_pageZoomSpinBox->setMinimum(pdf::PDFDrawWidgetProxy::getMinZoom() * 100);
m_pageZoomSpinBox->setMaximum(pdf::PDFDrawWidgetProxy::getMaxZoom() * 100);
m_pageZoomSpinBox->setDecimals(2);
m_pageZoomSpinBox->setSuffix(tr("%"));
m_pageZoomSpinBox->setFixedWidth(pdf::PDFWidgetUtils::scaleDPI_x(m_pageNumberSpinBox, 80));
m_pageZoomSpinBox->setAlignment(Qt::AlignVCenter | Qt::AlignRight);
connect(m_pageZoomSpinBox, &QDoubleSpinBox::editingFinished, this, &PDFViewerMainWindowLite::onPageZoomSpinboxEditingFinished);
ui->mainToolBar->addWidget(m_pageZoomSpinBox);
// Fit page, width, height
ui->mainToolBar->addAction(ui->actionFitPage);
ui->mainToolBar->addAction(ui->actionFitWidth);
ui->mainToolBar->addAction(ui->actionFitHeight);
ui->mainToolBar->addSeparator();
// Special tools
m_programController->initialize(PDFProgramController::TextToSpeech, this, this, m_actionManager, m_progress);
setCentralWidget(m_programController->getPdfWidget());
setFocusProxy(m_programController->getPdfWidget());
m_sidebarWidget = new PDFSidebarWidget(m_programController->getPdfWidget()->getDrawWidgetProxy(), m_programController->getTextToSpeech(), m_programController->getCertificateStore(), m_programController->getSettings(), this);
m_sidebarDockWidget = new QDockWidget(tr("Sidebar"), this);
m_sidebarDockWidget->setObjectName("SidebarDockWidget");
m_sidebarDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_sidebarDockWidget->setWidget(m_sidebarWidget);
addDockWidget(Qt::LeftDockWidgetArea, m_sidebarDockWidget);
m_sidebarDockWidget->hide();
connect(m_sidebarWidget, &PDFSidebarWidget::actionTriggered, m_programController, &PDFProgramController::onActionTriggered);
ui->menuView->addSeparator();
ui->menuView->addAction(m_sidebarDockWidget->toggleViewAction());
m_sidebarDockWidget->toggleViewAction()->setObjectName("actionSidebar");
m_actionManager->addAdditionalAction(m_sidebarDockWidget->toggleViewAction());
connect(m_progress, &pdf::PDFProgress::progressStarted, this, &PDFViewerMainWindowLite::onProgressStarted);
connect(m_progress, &pdf::PDFProgress::progressStep, this, &PDFViewerMainWindowLite::onProgressStep);
connect(m_progress, &pdf::PDFProgress::progressFinished, this, &PDFViewerMainWindowLite::onProgressFinished);
m_programController->finishInitialization();
if (pdf::PDFToolManager* toolManager = m_programController->getToolManager())
{
connect(toolManager, &pdf::PDFToolManager::messageDisplayRequest, statusBar(), &QStatusBar::showMessage);
}
}
PDFViewerMainWindowLite::~PDFViewerMainWindowLite()
{
delete m_programController;
m_programController = nullptr;
delete m_actionManager;
m_actionManager = nullptr;
delete ui;
}
void PDFViewerMainWindowLite::onActionQuitTriggered()
{
close();
}
void PDFViewerMainWindowLite::onPageNumberSpinboxEditingFinished()
{
if (m_isLoadingUI)
{
return;
}
if (m_pageNumberSpinBox->hasFocus())
{
m_programController->getPdfWidget()->setFocus();
}
m_programController->getPdfWidget()->getDrawWidgetProxy()->goToPage(m_pageNumberSpinBox->value() - 1);
}
void PDFViewerMainWindowLite::onPageZoomSpinboxEditingFinished()
{
if (m_isLoadingUI)
{
return;
}
if (m_pageZoomSpinBox->hasFocus())
{
m_programController->getPdfWidget()->setFocus();
}
m_programController->getPdfWidget()->getDrawWidgetProxy()->zoom(m_pageZoomSpinBox->value() / 100.0);
}
void PDFViewerMainWindowLite::onProgressStarted(pdf::ProgressStartupInfo info)
{
Q_ASSERT(!m_progressDialog);
if (info.showDialog)
{
m_progressDialog = new QProgressDialog(info.text, QString(), 0, 100, this);
m_progressDialog->setWindowModality(Qt::WindowModal);
m_progressDialog->setCancelButton(nullptr);
}
m_progressTaskbarIndicator->setRange(0, 100);
m_progressTaskbarIndicator->reset();
m_progressTaskbarIndicator->show();
m_programController->setIsBusy(true);
m_programController->updateActionsAvailability();
}
void PDFViewerMainWindowLite::onProgressStep(int percentage)
{
if (m_isChangingProgressStep)
{
return;
}
pdf::PDFTemporaryValueChange guard(&m_isChangingProgressStep, true);
if (m_progressDialog)
{
m_progressDialog->setValue(percentage);
}
m_progressTaskbarIndicator->setValue(percentage);
}
void PDFViewerMainWindowLite::onProgressFinished()
{
if (m_progressDialog)
{
m_progressDialog->hide();
m_progressDialog->deleteLater();
m_progressDialog = nullptr;
}
m_progressTaskbarIndicator->hide();
m_programController->setIsBusy(false);
m_programController->updateActionsAvailability();
}
void PDFViewerMainWindowLite::updateUI(bool fullUpdate)
{
pdf::PDFTemporaryValueChange guard(&m_isLoadingUI, true);
if (fullUpdate)
{
if (pdf::PDFDocument* document = m_programController->getDocument())
{
size_t pageCount = document->getCatalog()->getPageCount();
m_pageNumberSpinBox->setMinimum(1);
m_pageNumberSpinBox->setMaximum(static_cast<int>(pageCount));
m_pageNumberSpinBox->setEnabled(true);
m_pageNumberLabel->setText(tr(" / %1").arg(pageCount));
}
else
{
m_pageNumberSpinBox->setEnabled(false);
m_pageNumberLabel->setText(QString());
}
}
else
{
std::vector<pdf::PDFInteger> currentPages = m_programController->getPdfWidget()->getDrawWidget()->getCurrentPages();
if (!currentPages.empty())
{
m_pageNumberSpinBox->setValue(currentPages.front() + 1);
// Prefetch pages, if it is enabled
if (m_programController->getSettings()->isPagePrefetchingEnabled())
{
m_programController->getPdfWidget()->getDrawWidgetProxy()->prefetchPages(currentPages.back());
}
}
m_sidebarWidget->setCurrentPages(currentPages);
}
m_pageZoomSpinBox->setValue(m_programController->getPdfWidget()->getDrawWidgetProxy()->getZoom() * 100);
}
QMenu* PDFViewerMainWindowLite::addToolMenu(QString name)
{
return ui->menuTools->addMenu(name);
}
void PDFViewerMainWindowLite::setStatusBarMessage(QString message, int time)
{
statusBar()->showMessage(message, time);
}
void PDFViewerMainWindowLite::setDocument(const pdf::PDFModifiedDocument& document)
{
if (m_sidebarWidget)
{
m_sidebarWidget->setDocument(document, *m_programController->getSignatures());
}
if (m_sidebarWidget)
{
if (m_sidebarWidget->isEmpty())
{
m_sidebarDockWidget->hide();
}
else
{
m_sidebarDockWidget->show();
}
}
}
void PDFViewerMainWindowLite::adjustToolbar(QToolBar* toolbar)
{
QSize iconSize = pdf::PDFWidgetUtils::scaleDPI(this, QSize(24, 24));
toolbar->setIconSize(iconSize);
}
void PDFViewerMainWindowLite::closeEvent(QCloseEvent* event)
{
if (!m_programController->canClose())
{
// Jakub Melka: Do not allow to close the application, if document
// reading is running.
event->ignore();
}
else
{
m_programController->writeSettings();
m_programController->closeDocument();
event->accept();
}
}
void PDFViewerMainWindowLite::showEvent(QShowEvent* event)
{
Q_UNUSED(event);
m_taskbarButton->setWindow(windowHandle());
}
void PDFViewerMainWindowLite::dragEnterEvent(QDragEnterEvent* event)
{
if (event->mimeData()->hasUrls())
{
event->setDropAction(Qt::LinkAction);
event->accept();
}
}
void PDFViewerMainWindowLite::dragMoveEvent(QDragMoveEvent* event)
{
if (event->mimeData()->hasUrls())
{
event->setDropAction(Qt::LinkAction);
event->accept();
}
}
void PDFViewerMainWindowLite::dropEvent(QDropEvent* event)
{
if (event->mimeData()->hasUrls())
{
QList<QUrl> urls = event->mimeData()->urls();
if (urls.size() == 1)
{
m_programController->openDocument(urls.front().toLocalFile());
event->acceptProposedAction();
}
}
}
} // namespace pdfviewer

View File

@ -0,0 +1,125 @@
// Copyright (C) 2020 Jakub Melka
//
// This file is part of Pdf4Qt.
//
// Pdf4Qt is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Pdf4Qt is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with Pdf4Qt. If not, see <https://www.gnu.org/licenses/>.
#ifndef PDFVIEWERMAINWINDOWLITE_H
#define PDFVIEWERMAINWINDOWLITE_H
#include "pdfviewerglobal.h"
#include "pdfcatalog.h"
#include "pdfrenderer.h"
#include "pdfprogress.h"
#include "pdfdocument.h"
#include "pdfviewersettings.h"
#include "pdfdocumentreader.h"
#include "pdfdocumentpropertiesdialog.h"
#include "pdfwidgettool.h"
#include "pdfrecentfilemanager.h"
#include "pdftexttospeech.h"
#include "pdfannotation.h"
#include "pdfform.h"
#include "pdfundoredomanager.h"
#include "pdfplugin.h"
#include "pdfprogramcontroller.h"
#include <QFuture>
#include <QTreeView>
#include <QMainWindow>
#include <QWinTaskbarButton>
#include <QWinTaskbarProgress>
#include <QFutureWatcher>
#include <QProgressDialog>
class QLabel;
class QSpinBox;
class QSettings;
class QDoubleSpinBox;
namespace Ui
{
class PDFViewerMainWindowLite;
}
namespace pdf
{
class PDFAction;
class PDFWidget;
class PDFDocument;
class PDFOptionalContentTreeItemModel;
}
namespace pdfviewer
{
class PDFSidebarWidget;
class PDFAdvancedFindWidget;
class Pdf4QtVIEWERLIBSHARED_EXPORT PDFViewerMainWindowLite : public QMainWindow, public IMainWindow
{
Q_OBJECT
public:
explicit PDFViewerMainWindowLite(QWidget *parent = nullptr);
virtual ~PDFViewerMainWindowLite() override;
virtual void closeEvent(QCloseEvent* event) override;
virtual void showEvent(QShowEvent* event) override;
PDFProgramController* getProgramController() const { return m_programController; }
virtual void updateUI(bool fullUpdate) override;
virtual QMenu* addToolMenu(QString name) override;
virtual void setStatusBarMessage(QString message, int time) override;
virtual void setDocument(const pdf::PDFModifiedDocument& document) override;
virtual void adjustToolbar(QToolBar* toolbar) override;
protected:
virtual void dragEnterEvent(QDragEnterEvent* event) override;
virtual void dragMoveEvent(QDragMoveEvent* event) override;
virtual void dropEvent(QDropEvent* event) override;
private:
void onActionQuitTriggered();
void onPageNumberSpinboxEditingFinished();
void onPageZoomSpinboxEditingFinished();
void onProgressStarted(pdf::ProgressStartupInfo info);
void onProgressStep(int percentage);
void onProgressFinished();
QIcon createStickyNoteIcon(QString key) const;
Ui::PDFViewerMainWindowLite* ui;
PDFActionManager* m_actionManager;
PDFProgramController* m_programController;
PDFSidebarWidget* m_sidebarWidget;
QDockWidget* m_sidebarDockWidget;
QSpinBox* m_pageNumberSpinBox;
QLabel* m_pageNumberLabel;
QDoubleSpinBox* m_pageZoomSpinBox;
bool m_isLoadingUI;
pdf::PDFProgress* m_progress;
QWinTaskbarButton* m_taskbarButton;
QWinTaskbarProgress* m_progressTaskbarIndicator;
QProgressDialog* m_progressDialog;
bool m_isChangingProgressStep;
};
} // namespace pdfviewer
#endif // PDFVIEWERMAINWINDOWLITE_H

View File

@ -0,0 +1,437 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PDFViewerMainWindowLite</class>
<widget class="QMainWindow" name="PDFViewerMainWindowLite">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>770</width>
<height>572</height>
</rect>
</property>
<property name="windowTitle">
<string>PDF Viewer</string>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>770</width>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
<addaction name="actionOpen"/>
<addaction name="actionClose"/>
<addaction name="separator"/>
<addaction name="separator"/>
<addaction name="actionSend_by_E_Mail"/>
<addaction name="actionPrint"/>
<addaction name="separator"/>
<addaction name="actionProperties"/>
<addaction name="separator"/>
<addaction name="actionQuit"/>
</widget>
<widget class="QMenu" name="menuGoTo">
<property name="title">
<string>Go To</string>
</property>
<addaction name="actionGoToDocumentStart"/>
<addaction name="actionGoToDocumentEnd"/>
<addaction name="actionGoToPreviousPage"/>
<addaction name="actionGoToNextPage"/>
<addaction name="actionGoToPreviousLine"/>
<addaction name="actionGoToNextLine"/>
</widget>
<widget class="QMenu" name="menuView">
<property name="title">
<string>View</string>
</property>
<widget class="QMenu" name="menuPage_Layout">
<property name="title">
<string>Page Layout</string>
</property>
<addaction name="actionPageLayoutSinglePage"/>
<addaction name="actionPageLayoutContinuous"/>
<addaction name="actionPageLayoutTwoPages"/>
<addaction name="actionPageLayoutTwoColumns"/>
<addaction name="separator"/>
<addaction name="actionFirstPageOnRightSide"/>
</widget>
<widget class="QMenu" name="menuRendering_Options">
<property name="title">
<string>Rendering Options</string>
</property>
<addaction name="actionRenderOptionAntialiasing"/>
<addaction name="actionRenderOptionTextAntialiasing"/>
<addaction name="actionRenderOptionSmoothPictures"/>
<addaction name="actionRenderOptionIgnoreOptionalContentSettings"/>
<addaction name="actionRenderOptionDisplayAnnotations"/>
</widget>
<addaction name="menuPage_Layout"/>
<addaction name="menuRendering_Options"/>
<addaction name="separator"/>
<addaction name="actionRotateRight"/>
<addaction name="actionRotateLeft"/>
<addaction name="separator"/>
<addaction name="actionZoom_In"/>
<addaction name="actionZoom_Out"/>
<addaction name="separator"/>
<addaction name="actionFitPage"/>
<addaction name="actionFitWidth"/>
<addaction name="actionFitHeight"/>
<addaction name="separator"/>
<addaction name="actionInvertColors"/>
</widget>
<widget class="QMenu" name="menuTools">
<property name="title">
<string>Tools</string>
</property>
<addaction name="separator"/>
<addaction name="actionRendering_Errors"/>
<addaction name="separator"/>
<addaction name="actionOptions"/>
</widget>
<widget class="QMenu" name="menuHelp">
<property name="title">
<string>Help</string>
</property>
<addaction name="actionAbout"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuView"/>
<addaction name="menuGoTo"/>
<addaction name="menuTools"/>
<addaction name="menuHelp"/>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="actionOpen"/>
</widget>
<widget class="QStatusBar" name="statusBar"/>
<action name="actionOpen">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/open.svg</normaloff>:/resources/open.svg</iconset>
</property>
<property name="text">
<string>Open</string>
</property>
</action>
<action name="actionClose">
<property name="text">
<string>Close</string>
</property>
</action>
<action name="actionQuit">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/quit.svg</normaloff>:/resources/quit.svg</iconset>
</property>
<property name="text">
<string>Quit</string>
</property>
</action>
<action name="actionPageLayoutSinglePage">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Single Page</string>
</property>
<property name="shortcut">
<string>Ctrl+1</string>
</property>
</action>
<action name="actionPageLayoutContinuous">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Continuous</string>
</property>
<property name="shortcut">
<string>Ctrl+2</string>
</property>
</action>
<action name="actionPageLayoutTwoPages">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Two Pages</string>
</property>
<property name="shortcut">
<string>Ctrl+3</string>
</property>
</action>
<action name="actionPageLayoutTwoColumns">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Two columns</string>
</property>
<property name="shortcut">
<string>Ctrl+4</string>
</property>
</action>
<action name="actionFirstPageOnRightSide">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>First page on right side</string>
</property>
<property name="toolTip">
<string>First page on right side</string>
</property>
<property name="shortcut">
<string>Ctrl+5</string>
</property>
</action>
<action name="actionRendering_Errors">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/rendering-errors.svg</normaloff>:/resources/rendering-errors.svg</iconset>
</property>
<property name="text">
<string>Rendering Errors</string>
</property>
<property name="shortcut">
<string>Ctrl+E</string>
</property>
</action>
<action name="actionRenderOptionAntialiasing">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Antialiasing</string>
</property>
</action>
<action name="actionRenderOptionTextAntialiasing">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Text Antialiasing</string>
</property>
</action>
<action name="actionRenderOptionSmoothPictures">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Smooth Pictures</string>
</property>
</action>
<action name="actionRenderOptionIgnoreOptionalContentSettings">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Ignore Optional Content Settings</string>
</property>
</action>
<action name="actionOptions">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/settings.svg</normaloff>:/resources/settings.svg</iconset>
</property>
<property name="text">
<string>Options...</string>
</property>
<property name="shortcut">
<string>Ctrl+K</string>
</property>
</action>
<action name="actionZoom_In">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/zoom-in.svg</normaloff>:/resources/zoom-in.svg</iconset>
</property>
<property name="text">
<string>Zoom In</string>
</property>
</action>
<action name="actionZoom_Out">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/zoom-out.svg</normaloff>:/resources/zoom-out.svg</iconset>
</property>
<property name="text">
<string>Zoom Out</string>
</property>
</action>
<action name="actionAbout">
<property name="text">
<string>About</string>
</property>
</action>
<action name="actionFitPage">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/zoom-fit.svg</normaloff>:/resources/zoom-fit.svg</iconset>
</property>
<property name="text">
<string>Fit Page</string>
</property>
</action>
<action name="actionFitWidth">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/zoom-fit-horizontal.svg</normaloff>:/resources/zoom-fit-horizontal.svg</iconset>
</property>
<property name="text">
<string>Fit Width</string>
</property>
<property name="shortcut">
<string>W</string>
</property>
</action>
<action name="actionFitHeight">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/zoom-fit-vertical.svg</normaloff>:/resources/zoom-fit-vertical.svg</iconset>
</property>
<property name="text">
<string>Fit Height</string>
</property>
<property name="shortcut">
<string>H</string>
</property>
</action>
<action name="actionProperties">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/info.svg</normaloff>:/resources/info.svg</iconset>
</property>
<property name="text">
<string>Properties</string>
</property>
</action>
<action name="actionSend_by_E_Mail">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/send-mail.svg</normaloff>:/resources/send-mail.svg</iconset>
</property>
<property name="text">
<string>Send by E-Mail</string>
</property>
</action>
<action name="actionInvertColors">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Invert Colors</string>
</property>
</action>
<action name="actionRotateRight">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/rotate-right.svg</normaloff>:/resources/rotate-right.svg</iconset>
</property>
<property name="text">
<string>Rotate Right</string>
</property>
</action>
<action name="actionRotateLeft">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/rotate-left.svg</normaloff>:/resources/rotate-left.svg</iconset>
</property>
<property name="text">
<string>Rotate Left</string>
</property>
</action>
<action name="actionPrint">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/print.svg</normaloff>:/resources/print.svg</iconset>
</property>
<property name="text">
<string>Print</string>
</property>
</action>
<action name="actionRenderOptionDisplayAnnotations">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Display Annotations</string>
</property>
</action>
<action name="actionGoToDocumentStart">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/previous-start.svg</normaloff>:/resources/previous-start.svg</iconset>
</property>
<property name="text">
<string>Go to document start</string>
</property>
</action>
<action name="actionGoToDocumentEnd">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/next-end.svg</normaloff>:/resources/next-end.svg</iconset>
</property>
<property name="text">
<string>Go to document end</string>
</property>
</action>
<action name="actionGoToNextPage">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/next-page.svg</normaloff>:/resources/next-page.svg</iconset>
</property>
<property name="text">
<string>Go to next page</string>
</property>
</action>
<action name="actionGoToPreviousPage">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/previous-page.svg</normaloff>:/resources/previous-page.svg</iconset>
</property>
<property name="text">
<string>Go to previous page</string>
</property>
</action>
<action name="actionGoToNextLine">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/next.svg</normaloff>:/resources/next.svg</iconset>
</property>
<property name="text">
<string>Go to next line</string>
</property>
</action>
<action name="actionGoToPreviousLine">
<property name="icon">
<iconset resource="pdf4qtviewer.qrc">
<normaloff>:/resources/previous.svg</normaloff>:/resources/previous.svg</iconset>
</property>
<property name="text">
<string>Go to previous line</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources>
<include location="pdf4qtviewer.qrc"/>
</resources>
<connections/>
</ui>

View File

@ -0,0 +1,44 @@
# Copyright (C) 2018-2020 Jakub Melka
#
# This file is part of Pdf4Qt.
#
# Pdf4Qt is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Pdf4Qt is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Pdf4Qt. If not, see <https://www.gnu.org/licenses/>.
QT += core gui widgets winextras
TARGET = Pdf4QtViewerLite
TEMPLATE = app
VERSION = 1.0.0
RC_ICONS = $$PWD/app-icon.ico
QMAKE_TARGET_DESCRIPTION = "PDF viewer for Qt, Lite version"
QMAKE_TARGET_COPYRIGHT = "(c) Jakub Melka 2018-2020"
DEFINES += QT_DEPRECATED_WARNINGS
QMAKE_CXXFLAGS += /std:c++latest /utf-8
INCLUDEPATH += $$PWD/../PDF4QtLib/Sources $$PWD/../PDF4QtViewer
DESTDIR = $$OUT_PWD/..
LIBS += -L$$OUT_PWD/..
LIBS += -lPDF4QtLib -lPDF4QtViewer
CONFIG += force_debug_info
application.files = $$DESTDIR/Pdf4QtViewerLite.exe
application.path = $$DESTDIR/install
INSTALLS += application
SOURCES += \
main.cpp

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

34
Pdf4QtViewerLite/main.cpp Normal file
View File

@ -0,0 +1,34 @@
#include "pdfviewermainwindowlite.h"
#include <QApplication>
#include <QCommandLineParser>
int main(int argc, char *argv[])
{
QApplication::setAttribute(Qt::AA_CompressHighFrequencyEvents, true);
QApplication::setAttribute(Qt::AA_DisableHighDpiScaling, true);
QApplication::setAttribute(Qt::AA_DontCheckOpenGLContextThreadAffinity, true);
QApplication application(argc, argv);
QCoreApplication::setOrganizationName("MelkaJ");
QCoreApplication::setApplicationName("PDF4QT Viewer Lite");
QCoreApplication::setApplicationVersion("1.0.0");
QApplication::setApplicationDisplayName(QApplication::translate("Application", "PDF4QT Viewer Lite"));
QCommandLineParser parser;
parser.setApplicationDescription(QCoreApplication::applicationName());
parser.addHelpOption();
parser.addVersionOption();
parser.addPositionalArgument("file", "The PDF file to open.");
parser.process(application);
pdfviewer::PDFViewerMainWindowLite mainWindow;
mainWindow.show();
QStringList arguments = application.arguments();
if (arguments.size() > 1)
{
mainWindow.getProgramController()->openDocument(arguments[1]);
}
return application.exec();
}