mirror of
https://github.com/JakubMelka/PDF4QT.git
synced 2025-03-04 03:17:44 +01:00
Signature plugin: small refactoring
This commit is contained in:
parent
f4e00f2f03
commit
0f4d8d41d7
@ -72,6 +72,7 @@ SOURCES += \
|
|||||||
sources/pdfoptionalcontent.cpp \
|
sources/pdfoptionalcontent.cpp \
|
||||||
sources/pdfoutline.cpp \
|
sources/pdfoutline.cpp \
|
||||||
sources/pdfpagecontenteditortools.cpp \
|
sources/pdfpagecontenteditortools.cpp \
|
||||||
|
sources/pdfpagecontenteditorwidget.cpp \
|
||||||
sources/pdfpagecontentelements.cpp \
|
sources/pdfpagecontentelements.cpp \
|
||||||
sources/pdfpagenavigation.cpp \
|
sources/pdfpagenavigation.cpp \
|
||||||
sources/pdfpagetransition.cpp \
|
sources/pdfpagetransition.cpp \
|
||||||
@ -149,6 +150,7 @@ HEADERS += \
|
|||||||
sources/pdfoptionalcontent.h \
|
sources/pdfoptionalcontent.h \
|
||||||
sources/pdfoutline.h \
|
sources/pdfoutline.h \
|
||||||
sources/pdfpagecontenteditortools.h \
|
sources/pdfpagecontenteditortools.h \
|
||||||
|
sources/pdfpagecontenteditorwidget.h \
|
||||||
sources/pdfpagecontentelements.h \
|
sources/pdfpagecontentelements.h \
|
||||||
sources/pdfpagenavigation.h \
|
sources/pdfpagenavigation.h \
|
||||||
sources/pdfpagetransition.h \
|
sources/pdfpagetransition.h \
|
||||||
@ -197,6 +199,7 @@ HEADERS += \
|
|||||||
sources/pdfimage.h
|
sources/pdfimage.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
|
sources/pdfpagecontenteditorwidget.ui \
|
||||||
sources/pdfrenderingerrorswidget.ui \
|
sources/pdfrenderingerrorswidget.ui \
|
||||||
sources/pdfselectpagesdialog.ui
|
sources/pdfselectpagesdialog.ui
|
||||||
|
|
||||||
|
36
Pdf4QtLib/sources/pdfpagecontenteditorwidget.cpp
Normal file
36
Pdf4QtLib/sources/pdfpagecontenteditorwidget.cpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Copyright (C) 2022 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
|
||||||
|
// with the written consent of the copyright owner, 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 "pdfpagecontenteditorwidget.h"
|
||||||
|
#include "ui_pdfpagecontenteditorwidget.h"
|
||||||
|
|
||||||
|
namespace pdf
|
||||||
|
{
|
||||||
|
|
||||||
|
PDFPageContentEditorWidget::PDFPageContentEditorWidget(QWidget *parent) :
|
||||||
|
QDockWidget(parent),
|
||||||
|
ui(new Ui::PDFPageContentEditorWidget)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
PDFPageContentEditorWidget::~PDFPageContentEditorWidget()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace pdf
|
47
Pdf4QtLib/sources/pdfpagecontenteditorwidget.h
Normal file
47
Pdf4QtLib/sources/pdfpagecontenteditorwidget.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
// Copyright (C) 2022 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
|
||||||
|
// with the written consent of the copyright owner, 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 PDFPAGECONTENTEDITORWIDGET_H
|
||||||
|
#define PDFPAGECONTENTEDITORWIDGET_H
|
||||||
|
|
||||||
|
#include "pdfglobal.h"
|
||||||
|
|
||||||
|
#include <QDockWidget>
|
||||||
|
|
||||||
|
namespace Ui
|
||||||
|
{
|
||||||
|
class PDFPageContentEditorWidget;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace pdf
|
||||||
|
{
|
||||||
|
|
||||||
|
class PDF4QTLIBSHARED_EXPORT PDFPageContentEditorWidget : public QDockWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit PDFPageContentEditorWidget(QWidget* parent);
|
||||||
|
virtual ~PDFPageContentEditorWidget() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::PDFPageContentEditorWidget* ui;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace pdf
|
||||||
|
|
||||||
|
#endif // PDFPAGECONTENTEDITORWIDGET_H
|
183
Pdf4QtLib/sources/pdfpagecontenteditorwidget.ui
Normal file
183
Pdf4QtLib/sources/pdfpagecontenteditorwidget.ui
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>PDFPageContentEditorWidget</class>
|
||||||
|
<widget class="QDockWidget" name="PDFPageContentEditorWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>333</width>
|
||||||
|
<height>607</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="allowedAreas">
|
||||||
|
<set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Content editor</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="dockWidgetContents">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="toolGroupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Toolbox</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_2"/>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="adjustBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Geometry Tools</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QToolButton" name="alignVertTopButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QToolButton" name="alignVertMiddleButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QToolButton" name="alignVertBottomButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="3">
|
||||||
|
<widget class="QToolButton" name="setSameWidthButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="4">
|
||||||
|
<widget class="QToolButton" name="setSameHeightButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="5">
|
||||||
|
<widget class="QToolButton" name="setSameSizeButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QToolButton" name="alignHorLeftButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QToolButton" name="alignHorMiddleButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QToolButton" name="alignHorRightButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="3">
|
||||||
|
<widget class="QToolButton" name="centerHorizontallyButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="4">
|
||||||
|
<widget class="QToolButton" name="centerVerticallyButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="5">
|
||||||
|
<widget class="QToolButton" name="centerRectButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="layoutGroupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Layout Tools</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="layoutHorizontallyButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="layoutVerticallyButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="layoutFormButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="layoutGridButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="appearanceGroupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Appearance</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QGroupBox" name="contentGroupBox">
|
||||||
|
<property name="title">
|
||||||
|
<string>Content</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QListView" name="listView"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -122,7 +122,8 @@ void PDFPageContentElementRectangle::drawPage(QPainter* painter,
|
|||||||
}
|
}
|
||||||
|
|
||||||
PDFPageContentScene::PDFPageContentScene(QObject* parent) :
|
PDFPageContentScene::PDFPageContentScene(QObject* parent) :
|
||||||
QObject(parent)
|
QObject(parent),
|
||||||
|
m_isActive(false)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -217,6 +218,11 @@ void PDFPageContentScene::drawPage(QPainter* painter,
|
|||||||
const QMatrix& pagePointToDevicePointMatrix,
|
const QMatrix& pagePointToDevicePointMatrix,
|
||||||
QList<PDFRenderError>& errors) const
|
QList<PDFRenderError>& errors) const
|
||||||
{
|
{
|
||||||
|
if (!m_isActive)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (const auto& element : m_elements)
|
for (const auto& element : m_elements)
|
||||||
{
|
{
|
||||||
if (element->getPageIndex() != pageIndex)
|
if (element->getPageIndex() != pageIndex)
|
||||||
@ -228,6 +234,20 @@ void PDFPageContentScene::drawPage(QPainter* painter,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PDFPageContentScene::isActive() const
|
||||||
|
{
|
||||||
|
return m_isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PDFPageContentScene::setActive(bool newIsActive)
|
||||||
|
{
|
||||||
|
if (m_isActive != newIsActive)
|
||||||
|
{
|
||||||
|
m_isActive = newIsActive;
|
||||||
|
emit sceneChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PDFPageContentElementLine* PDFPageContentElementLine::clone() const
|
PDFPageContentElementLine* PDFPageContentElementLine::clone() const
|
||||||
{
|
{
|
||||||
PDFPageContentElementLine* copy = new PDFPageContentElementLine();
|
PDFPageContentElementLine* copy = new PDFPageContentElementLine();
|
||||||
@ -330,7 +350,6 @@ void PDFPageContentSvgElement::drawPage(QPainter* painter,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PDFPainterStateGuard guard(painter);
|
PDFPainterStateGuard guard(painter);
|
||||||
painter->setWorldMatrix(pagePointToDevicePointMatrix, true);
|
painter->setWorldMatrix(pagePointToDevicePointMatrix, true);
|
||||||
painter->setRenderHint(QPainter::Antialiasing);
|
painter->setRenderHint(QPainter::Antialiasing);
|
||||||
@ -378,4 +397,46 @@ void PDFPageContentSvgElement::setRectangle(const QRectF& newRectangle)
|
|||||||
m_rectangle = newRectangle;
|
m_rectangle = newRectangle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PDFPageContentElementDot* PDFPageContentElementDot::clone() const
|
||||||
|
{
|
||||||
|
PDFPageContentElementDot* copy = new PDFPageContentElementDot();
|
||||||
|
copy->setPageIndex(getPageIndex());
|
||||||
|
copy->setPen(getPen());
|
||||||
|
copy->setBrush(getBrush());
|
||||||
|
copy->setPoint(getPoint());
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PDFPageContentElementDot::drawPage(QPainter* painter,
|
||||||
|
PDFInteger pageIndex,
|
||||||
|
const PDFPrecompiledPage* compiledPage,
|
||||||
|
PDFTextLayoutGetter& layoutGetter,
|
||||||
|
const QMatrix& pagePointToDevicePointMatrix,
|
||||||
|
QList<PDFRenderError>& errors) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(compiledPage);
|
||||||
|
Q_UNUSED(layoutGetter);
|
||||||
|
Q_UNUSED(errors);
|
||||||
|
|
||||||
|
if (pageIndex != getPageIndex())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PDFPainterStateGuard guard(painter);
|
||||||
|
painter->setWorldMatrix(pagePointToDevicePointMatrix, true);
|
||||||
|
painter->setRenderHint(QPainter::Antialiasing);
|
||||||
|
painter->drawPoint(m_point);
|
||||||
|
}
|
||||||
|
|
||||||
|
QPointF PDFPageContentElementDot::getPoint() const
|
||||||
|
{
|
||||||
|
return m_point;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PDFPageContentElementDot::setPoint(QPointF newPoint)
|
||||||
|
{
|
||||||
|
m_point = newPoint;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace pdf
|
} // namespace pdf
|
||||||
|
@ -125,6 +125,28 @@ private:
|
|||||||
QLineF m_line;
|
QLineF m_line;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class PDF4QTLIBSHARED_EXPORT PDFPageContentElementDot : public PDFPageContentStyledElement
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~PDFPageContentElementDot() = default;
|
||||||
|
|
||||||
|
virtual PDFPageContentElementDot* clone() const override;
|
||||||
|
|
||||||
|
virtual void drawPage(QPainter* painter,
|
||||||
|
PDFInteger pageIndex,
|
||||||
|
const PDFPrecompiledPage* compiledPage,
|
||||||
|
PDFTextLayoutGetter& layoutGetter,
|
||||||
|
const QMatrix& pagePointToDevicePointMatrix,
|
||||||
|
QList<PDFRenderError>& errors) const override;
|
||||||
|
|
||||||
|
|
||||||
|
QPointF getPoint() const;
|
||||||
|
void setPoint(QPointF newPoint);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QPointF m_point;
|
||||||
|
};
|
||||||
|
|
||||||
class PDF4QTLIBSHARED_EXPORT PDFPageContentSvgElement : public PDFPageContentElement
|
class PDF4QTLIBSHARED_EXPORT PDFPageContentSvgElement : public PDFPageContentElement
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -196,11 +218,15 @@ public:
|
|||||||
const QMatrix& pagePointToDevicePointMatrix,
|
const QMatrix& pagePointToDevicePointMatrix,
|
||||||
QList<PDFRenderError>& errors) const override;
|
QList<PDFRenderError>& errors) const override;
|
||||||
|
|
||||||
|
bool isActive() const;
|
||||||
|
void setActive(bool newIsActive);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
/// This signal is emitted when scene has changed (including graphics)
|
/// This signal is emitted when scene has changed (including graphics)
|
||||||
void sceneChanged();
|
void sceneChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_isActive;
|
||||||
std::vector<std::unique_ptr<PDFPageContentElement>> m_elements;
|
std::vector<std::unique_ptr<PDFPageContentElement>> m_elements;
|
||||||
std::optional<QCursor> m_cursor;
|
std::optional<QCursor> m_cursor;
|
||||||
};
|
};
|
||||||
|
@ -38,7 +38,9 @@ void SignaturePlugin::setWidget(pdf::PDFWidget* widget)
|
|||||||
|
|
||||||
BaseClass::setWidget(widget);
|
BaseClass::setWidget(widget);
|
||||||
|
|
||||||
|
QAction* activateAction = new QAction(QIcon(":/pdfplugins/signaturetool/activate.svg"), tr("Activate signature creator"), this);
|
||||||
QAction* createTextAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-text.svg"), tr("Create Text Label"), this);
|
QAction* createTextAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-text.svg"), tr("Create Text Label"), this);
|
||||||
|
QAction* createFreehandCurveAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-freehand-curve.svg"), tr("Create Freehand Curve"), this);
|
||||||
QAction* createAcceptMarkAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-yes-mark.svg"), tr("Create Accept Mark"), this);
|
QAction* createAcceptMarkAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-yes-mark.svg"), tr("Create Accept Mark"), this);
|
||||||
QAction* createRejectMarkAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-no-mark.svg"), tr("Create Reject Mark"), this);
|
QAction* createRejectMarkAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-no-mark.svg"), tr("Create Reject Mark"), this);
|
||||||
QAction* createRectangleAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-rectangle.svg"), tr("Create Rectangle"), this);
|
QAction* createRectangleAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-rectangle.svg"), tr("Create Rectangle"), this);
|
||||||
@ -49,14 +51,13 @@ void SignaturePlugin::setWidget(pdf::PDFWidget* widget)
|
|||||||
QAction* createDotAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-dot.svg"), tr("Create Dot"), this);
|
QAction* createDotAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-dot.svg"), tr("Create Dot"), this);
|
||||||
QAction* createSvgImageAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-svg-image.svg"), tr("Create SVG Image"), this);
|
QAction* createSvgImageAction = new QAction(QIcon(":/pdfplugins/signaturetool/create-svg-image.svg"), tr("Create SVG Image"), this);
|
||||||
QAction* clearAction = new QAction(QIcon(":/pdfplugins/signaturetool/clear.svg"), tr("Clear All Graphics"), this);
|
QAction* clearAction = new QAction(QIcon(":/pdfplugins/signaturetool/clear.svg"), tr("Clear All Graphics"), this);
|
||||||
QAction* setColorAction = new QAction(QIcon(":/pdfplugins/signaturetool/set-color.svg"), tr("Set Color"), this);
|
|
||||||
QAction* setPenAction = new QAction(QIcon(":/pdfplugins/signaturetool/set-pen.svg"), tr("Set Pen"), this);
|
|
||||||
QAction* setBrushAction = new QAction(QIcon(":/pdfplugins/signaturetool/set-brush.svg"), tr("Set Brush"), this);
|
|
||||||
QAction* signElectronicallyAction = new QAction(QIcon(":/pdfplugins/signaturetool/sign-electronically.svg"), tr("Sign Electronically"), this);
|
QAction* signElectronicallyAction = new QAction(QIcon(":/pdfplugins/signaturetool/sign-electronically.svg"), tr("Sign Electronically"), this);
|
||||||
QAction* signDigitallyAction = new QAction(QIcon(":/pdfplugins/signaturetool/sign-digitally.svg"), tr("Sign Digitally With Certificate"), this);
|
QAction* signDigitallyAction = new QAction(QIcon(":/pdfplugins/signaturetool/sign-digitally.svg"), tr("Sign Digitally With Certificate"), this);
|
||||||
QAction* certificatesAction = new QAction(QIcon(":/pdfplugins/signaturetool/certificates.svg"), tr("Certificates Manager"), this);
|
QAction* certificatesAction = new QAction(QIcon(":/pdfplugins/signaturetool/certificates.svg"), tr("Certificates Manager"), this);
|
||||||
|
|
||||||
|
activateAction->setObjectName("signaturetool_activateAction");
|
||||||
createTextAction->setObjectName("signaturetool_createTextAction");
|
createTextAction->setObjectName("signaturetool_createTextAction");
|
||||||
|
createFreehandCurveAction->setObjectName("signaturetool_createFreehandCurveAction");
|
||||||
createAcceptMarkAction->setObjectName("signaturetool_createAcceptMarkAction");
|
createAcceptMarkAction->setObjectName("signaturetool_createAcceptMarkAction");
|
||||||
createRejectMarkAction->setObjectName("signaturetool_createRejectMarkAction");
|
createRejectMarkAction->setObjectName("signaturetool_createRejectMarkAction");
|
||||||
createRectangleAction->setObjectName("signaturetool_createRectangleAction");
|
createRectangleAction->setObjectName("signaturetool_createRectangleAction");
|
||||||
@ -67,14 +68,13 @@ void SignaturePlugin::setWidget(pdf::PDFWidget* widget)
|
|||||||
createDotAction->setObjectName("signaturetool_createDotAction");
|
createDotAction->setObjectName("signaturetool_createDotAction");
|
||||||
createSvgImageAction->setObjectName("signaturetool_createSvgImageAction");
|
createSvgImageAction->setObjectName("signaturetool_createSvgImageAction");
|
||||||
clearAction->setObjectName("signaturetool_clearAction");
|
clearAction->setObjectName("signaturetool_clearAction");
|
||||||
setColorAction->setObjectName("signaturetool_setColorAction");
|
|
||||||
setPenAction->setObjectName("signaturetool_setPenAction");
|
|
||||||
setBrushAction->setObjectName("signaturetool_setBrushAction");
|
|
||||||
signElectronicallyAction->setObjectName("signaturetool_signElectronicallyAction");
|
signElectronicallyAction->setObjectName("signaturetool_signElectronicallyAction");
|
||||||
signDigitallyAction->setObjectName("signaturetool_signDigitallyAction");
|
signDigitallyAction->setObjectName("signaturetool_signDigitallyAction");
|
||||||
certificatesAction->setObjectName("signaturetool_certificatesAction");
|
certificatesAction->setObjectName("signaturetool_certificatesAction");
|
||||||
|
|
||||||
|
activateAction->setCheckable(true);
|
||||||
createTextAction->setCheckable(true);
|
createTextAction->setCheckable(true);
|
||||||
|
createFreehandCurveAction->setCheckable(true);
|
||||||
createAcceptMarkAction->setCheckable(true);
|
createAcceptMarkAction->setCheckable(true);
|
||||||
createRejectMarkAction->setCheckable(true);
|
createRejectMarkAction->setCheckable(true);
|
||||||
createRectangleAction->setCheckable(true);
|
createRectangleAction->setCheckable(true);
|
||||||
@ -85,7 +85,9 @@ void SignaturePlugin::setWidget(pdf::PDFWidget* widget)
|
|||||||
createDotAction->setCheckable(true);
|
createDotAction->setCheckable(true);
|
||||||
createSvgImageAction->setCheckable(true);
|
createSvgImageAction->setCheckable(true);
|
||||||
|
|
||||||
|
m_actions[Activate] = activateAction;
|
||||||
m_actions[Text] = createTextAction;
|
m_actions[Text] = createTextAction;
|
||||||
|
m_actions[FreehandCurve] = createFreehandCurveAction;
|
||||||
m_actions[AcceptMark] = createAcceptMarkAction;
|
m_actions[AcceptMark] = createAcceptMarkAction;
|
||||||
m_actions[RejectMark] = createRejectMarkAction;
|
m_actions[RejectMark] = createRejectMarkAction;
|
||||||
m_actions[Rectangle] = createRectangleAction;
|
m_actions[Rectangle] = createRectangleAction;
|
||||||
@ -96,12 +98,9 @@ void SignaturePlugin::setWidget(pdf::PDFWidget* widget)
|
|||||||
m_actions[Dot] = createDotAction;
|
m_actions[Dot] = createDotAction;
|
||||||
m_actions[SvgImage] = createSvgImageAction;
|
m_actions[SvgImage] = createSvgImageAction;
|
||||||
m_actions[Clear] = clearAction;
|
m_actions[Clear] = clearAction;
|
||||||
m_actions[SetColor] = setColorAction;
|
|
||||||
m_actions[SetPen] = setPenAction;
|
|
||||||
m_actions[SetBrush] = setBrushAction;
|
|
||||||
m_actions[SignElectronically] = signElectronicallyAction;
|
m_actions[SignElectronically] = signElectronicallyAction;
|
||||||
m_actions[SignDigitally] = signDigitallyAction;
|
m_actions[SignDigitally] = signDigitallyAction;
|
||||||
m_actions[Ceritificates] = certificatesAction;
|
m_actions[Certificates] = certificatesAction;
|
||||||
|
|
||||||
QFile acceptMarkFile(":/pdfplugins/signatureplugin/accept-mark.svg");
|
QFile acceptMarkFile(":/pdfplugins/signatureplugin/accept-mark.svg");
|
||||||
QByteArray acceptMarkContent;
|
QByteArray acceptMarkContent;
|
||||||
@ -134,6 +133,9 @@ void SignaturePlugin::setWidget(pdf::PDFWidget* widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_widget->getDrawWidgetProxy()->registerDrawInterface(&m_scene);
|
m_widget->getDrawWidgetProxy()->registerDrawInterface(&m_scene);
|
||||||
|
connect(&m_scene, &pdf::PDFPageContentScene::sceneChanged, this, &SignaturePlugin::onSceneChanged);
|
||||||
|
connect(clearAction, &QAction::triggered, &m_scene, &pdf::PDFPageContentScene::clear);
|
||||||
|
connect(activateAction, &QAction::triggered, this, &SignaturePlugin::setActive);
|
||||||
|
|
||||||
updateActions();
|
updateActions();
|
||||||
}
|
}
|
||||||
@ -144,7 +146,7 @@ void SignaturePlugin::setDocument(const pdf::PDFModifiedDocument& document)
|
|||||||
|
|
||||||
if (document.hasReset())
|
if (document.hasReset())
|
||||||
{
|
{
|
||||||
m_scene.clear();
|
setActive(false);
|
||||||
updateActions();
|
updateActions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,7 +155,9 @@ std::vector<QAction*> SignaturePlugin::getActions() const
|
|||||||
{
|
{
|
||||||
std::vector<QAction*> result;
|
std::vector<QAction*> result;
|
||||||
|
|
||||||
|
result.push_back(m_actions[Activate]);
|
||||||
result.push_back(m_actions[Text]);
|
result.push_back(m_actions[Text]);
|
||||||
|
result.push_back(m_actions[FreehandCurve]);
|
||||||
result.push_back(m_actions[AcceptMark]);
|
result.push_back(m_actions[AcceptMark]);
|
||||||
result.push_back(m_actions[RejectMark]);
|
result.push_back(m_actions[RejectMark]);
|
||||||
result.push_back(m_actions[Rectangle]);
|
result.push_back(m_actions[Rectangle]);
|
||||||
@ -164,21 +168,87 @@ std::vector<QAction*> SignaturePlugin::getActions() const
|
|||||||
result.push_back(m_actions[Dot]);
|
result.push_back(m_actions[Dot]);
|
||||||
result.push_back(m_actions[Clear]);
|
result.push_back(m_actions[Clear]);
|
||||||
result.push_back(nullptr);
|
result.push_back(nullptr);
|
||||||
result.push_back(m_actions[SetColor]);
|
|
||||||
result.push_back(m_actions[SetPen]);
|
|
||||||
result.push_back(m_actions[SetBrush]);
|
|
||||||
result.push_back(nullptr);
|
|
||||||
result.push_back(m_actions[SignElectronically]);
|
result.push_back(m_actions[SignElectronically]);
|
||||||
result.push_back(m_actions[SignDigitally]);
|
result.push_back(m_actions[SignDigitally]);
|
||||||
result.push_back(m_actions[Ceritificates]);
|
result.push_back(m_actions[Certificates]);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SignaturePlugin::onSceneChanged()
|
||||||
|
{
|
||||||
|
updateActions();
|
||||||
|
updateGraphics();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SignaturePlugin::setActive(bool active)
|
||||||
|
{
|
||||||
|
if (m_scene.isActive() != active)
|
||||||
|
{
|
||||||
|
// Abort active tool, if we are deactivating the plugin
|
||||||
|
if (!active)
|
||||||
|
{
|
||||||
|
if (pdf::PDFWidgetTool* tool = m_widget->getToolManager()->getActiveTool())
|
||||||
|
{
|
||||||
|
auto it = std::find(m_tools.cbegin(), m_tools.cend(), tool);
|
||||||
|
if (it == m_tools.cend())
|
||||||
|
{
|
||||||
|
m_widget->getToolManager()->setActiveTool(nullptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_scene.setActive(active);
|
||||||
|
if (!active)
|
||||||
|
{
|
||||||
|
m_scene.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
m_actions[Activate]->setChecked(active);
|
||||||
|
updateActions();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SignaturePlugin::updateActions()
|
void SignaturePlugin::updateActions()
|
||||||
{
|
{
|
||||||
|
m_actions[Activate]->setEnabled(m_document);
|
||||||
|
|
||||||
|
if (!m_scene.isActive() || !m_document)
|
||||||
|
{
|
||||||
|
// Inactive scene - disable all except activate action and certificates
|
||||||
|
for (QAction* action : m_actions)
|
||||||
|
{
|
||||||
|
if (action == m_actions[Activate] ||
|
||||||
|
action == m_actions[Certificates])
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
action->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool isSceneNonempty = !m_scene.isEmpty();
|
||||||
|
|
||||||
|
// Tool actions
|
||||||
|
for (auto actionId : { Text, FreehandCurve, AcceptMark, RejectMark,
|
||||||
|
Rectangle, RoundedRectangle, HorizontalLine,
|
||||||
|
VerticalLine, Line, Dot, SvgImage })
|
||||||
|
{
|
||||||
|
m_actions[actionId]->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear action
|
||||||
QAction* clearAction = m_actions[Clear];
|
QAction* clearAction = m_actions[Clear];
|
||||||
clearAction->setEnabled(!m_scene.isEmpty());
|
clearAction->setEnabled(isSceneNonempty);
|
||||||
|
|
||||||
|
// Sign actions
|
||||||
|
QAction* signElectronicallyAction = m_actions[SignElectronically];
|
||||||
|
signElectronicallyAction->setEnabled(isSceneNonempty);
|
||||||
|
QAction* signDigitallyAction = m_actions[SignDigitally];
|
||||||
|
signDigitallyAction->setEnabled(isSceneNonempty);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignaturePlugin::updateGraphics()
|
void SignaturePlugin::updateGraphics()
|
||||||
|
@ -43,11 +43,16 @@ public:
|
|||||||
virtual std::vector<QAction*> getActions() const override;
|
virtual std::vector<QAction*> getActions() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void onSceneChanged();
|
||||||
|
|
||||||
enum Action
|
enum Action
|
||||||
{
|
{
|
||||||
|
// Activate action
|
||||||
|
Activate,
|
||||||
|
|
||||||
// Create graphics actions
|
// Create graphics actions
|
||||||
Text,
|
Text,
|
||||||
|
FreehandCurve,
|
||||||
AcceptMark,
|
AcceptMark,
|
||||||
RejectMark,
|
RejectMark,
|
||||||
Rectangle,
|
Rectangle,
|
||||||
@ -59,15 +64,10 @@ private:
|
|||||||
SvgImage,
|
SvgImage,
|
||||||
Clear,
|
Clear,
|
||||||
|
|
||||||
// Settings actions
|
|
||||||
SetColor,
|
|
||||||
SetPen,
|
|
||||||
SetBrush,
|
|
||||||
|
|
||||||
// Sign actions
|
// Sign actions
|
||||||
SignElectronically,
|
SignElectronically,
|
||||||
SignDigitally,
|
SignDigitally,
|
||||||
Ceritificates,
|
Certificates,
|
||||||
|
|
||||||
LastAction
|
LastAction
|
||||||
};
|
};
|
||||||
@ -84,6 +84,8 @@ private:
|
|||||||
LastTool
|
LastTool
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void setActive(bool active);
|
||||||
|
|
||||||
void updateActions();
|
void updateActions();
|
||||||
void updateGraphics();
|
void updateGraphics();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user