Issue #159: Renaming applications
49
Pdf4QtDiff/CMakeLists.txt
Normal file
@@ -0,0 +1,49 @@
|
||||
# Copyright (C) 2022-2024 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/>.
|
||||
|
||||
add_executable(Pdf4QtDiff
|
||||
aboutdialog.cpp
|
||||
aboutdialog.h
|
||||
differencesdockwidget.cpp
|
||||
differencesdockwidget.h
|
||||
main.cpp
|
||||
mainwindow.cpp
|
||||
mainwindow.h
|
||||
settingsdockwidget.cpp
|
||||
settingsdockwidget.h
|
||||
utils.cpp
|
||||
utils.h
|
||||
aboutdialog.ui
|
||||
differencesdockwidget.ui
|
||||
mainwindow.ui
|
||||
settingsdockwidget.ui
|
||||
resources.qrc
|
||||
icon.rc
|
||||
app.qrc
|
||||
settings.h
|
||||
)
|
||||
|
||||
target_link_libraries(Pdf4QtDiff PRIVATE Pdf4QtLibCore Pdf4QtLibWidgets Qt6::Core Qt6::Gui Qt6::Widgets)
|
||||
|
||||
set_target_properties(Pdf4QtDiff PROPERTIES
|
||||
WIN32_EXECUTABLE ON
|
||||
MACOSX_BUNDLE ON
|
||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${PDF4QT_INSTALL_LIB_DIR}
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${PDF4QT_INSTALL_BIN_DIR}
|
||||
)
|
||||
|
||||
install(TARGETS Pdf4QtDiff RUNTIME DESTINATION ${PDF4QT_INSTALL_BIN_DIR} LIBRARY DESTINATION ${PDF4QT_INSTALL_LIB_DIR})
|
64
Pdf4QtDiff/aboutdialog.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
// Copyright (C) 2021 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 "aboutdialog.h"
|
||||
#include "ui_aboutdialog.h"
|
||||
|
||||
#include "pdfutils.h"
|
||||
#include "pdfwidgetutils.h"
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
PDFAboutDialog::PDFAboutDialog(QWidget* parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::PDFAboutDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
QString html = ui->copyrightLabel->text();
|
||||
html.replace("PdfForQtViewer", QString("%1 %2").arg(QApplication::applicationDisplayName(), QApplication::applicationVersion()));
|
||||
ui->copyrightLabel->setText(html);
|
||||
|
||||
std::vector<pdf::PDFDependentLibraryInfo> infos = pdf::PDFDependentLibraryInfo::getLibraryInfo();
|
||||
|
||||
ui->tableWidget->setColumnCount(4);
|
||||
ui->tableWidget->setRowCount(static_cast<int>(infos.size()));
|
||||
ui->tableWidget->setHorizontalHeaderLabels(QStringList() << tr("Library") << tr("Version") << tr("License") << tr("URL"));
|
||||
ui->tableWidget->setEditTriggers(QTableWidget::NoEditTriggers);
|
||||
ui->tableWidget->setSelectionMode(QTableView::SingleSelection);
|
||||
ui->tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
|
||||
|
||||
for (int i = 0; i < infos.size(); ++i)
|
||||
{
|
||||
const pdf::PDFDependentLibraryInfo& info = infos[i];
|
||||
ui->tableWidget->setItem(i, 0, new QTableWidgetItem(info.library));
|
||||
ui->tableWidget->setItem(i, 1, new QTableWidgetItem(info.version));
|
||||
ui->tableWidget->setItem(i, 2, new QTableWidgetItem(info.license));
|
||||
ui->tableWidget->setItem(i, 3, new QTableWidgetItem(info.url));
|
||||
}
|
||||
|
||||
pdf::PDFWidgetUtils::scaleWidget(this, QSize(750, 600));
|
||||
pdf::PDFWidgetUtils::style(this);
|
||||
}
|
||||
|
||||
PDFAboutDialog::~PDFAboutDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
} // namespace pdfdiff
|
45
Pdf4QtDiff/aboutdialog.h
Normal file
@@ -0,0 +1,45 @@
|
||||
// Copyright (C) 2021 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 PDFDIFF_PDFABOUTDIALOG_H
|
||||
#define PDFDIFF_PDFABOUTDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class PDFAboutDialog;
|
||||
}
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
class PDFAboutDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit PDFAboutDialog(QWidget* parent);
|
||||
virtual ~PDFAboutDialog() override;
|
||||
|
||||
private:
|
||||
Ui::PDFAboutDialog* ui;
|
||||
};
|
||||
|
||||
} // namespace pdfdiff
|
||||
|
||||
#endif // PDFDIFF_PDFABOUTDIALOG_H
|
272
Pdf4QtDiff/aboutdialog.ui
Normal file
@@ -0,0 +1,272 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>PDFAboutDialog</class>
|
||||
<widget class="QDialog" name="PDFAboutDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>900</width>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>900</width>
|
||||
<height>600</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>About</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="copyrightLabel">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p><span style=" font-weight:600;">PdfForQtViewer</span></p><p>Copyright 2018-2024 Jakub Melka. All rights reserved.</p><p>THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p></body></html></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTextEdit" name="textEdit">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="html">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
hr { height: 1px; border-width: 0; }
|
||||
li.unchecked::marker { content: "\2610"; }
|
||||
li.checked::marker { content: "\2612"; }
|
||||
</style></head><body style=" font-family:'Segoe UI'; font-size:9pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> GNU LESSER GENERAL PUBLIC LICENSE</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Version 3, 29 June 2007</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Copyright (C) 2007 Free Software Foundation, Inc. &lt;https://fsf.org/&gt;</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Everyone is permitted to copy and distribute verbatim copies</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> of this license document, but changing it is not allowed.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> This version of the GNU Lesser General Public License incorporates</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">the terms and conditions of version 3 of the GNU General Public</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">License, supplemented by the additional permissions listed below.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> 0. Additional Definitions.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> As used herein, &quot;this License&quot; refers to version 3 of the GNU Lesser</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">General Public License, and the &quot;GNU GPL&quot; refers to version 3 of the GNU</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">General Public License.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> &quot;The Library&quot; refers to a covered work governed by this License,</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">other than an Application or a Combined Work as defined below.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> An &quot;Application&quot; is any work that makes use of an interface provided</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">by the Library, but which is not otherwise based on the Library.</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">Defining a subclass of a class defined by the Library is deemed a mode</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">of using an interface provided by the Library.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> A &quot;Combined Work&quot; is a work produced by combining or linking an</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">Application with the Library. The particular version of the Library</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">with which the Combined Work was made is also called the &quot;Linked</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">Version&quot;.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> The &quot;Minimal Corresponding Source&quot; for a Combined Work means the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">Corresponding Source for the Combined Work, excluding any source code</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">for portions of the Combined Work that, considered in isolation, are</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">based on the Application, and not on the Linked Version.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> The &quot;Corresponding Application Code&quot; for a Combined Work means the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">object code and/or source code for the Application, including any data</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">and utility programs needed for reproducing the Combined Work from the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">Application, but excluding the System Libraries of the Combined Work.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> 1. Exception to Section 3 of the GNU GPL.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> You may convey a covered work under sections 3 and 4 of this License</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">without being bound by section 3 of the GNU GPL.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> 2. Conveying Modified Versions.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> If you modify a copy of the Library, and, in your modifications, a</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">facility refers to a function or data to be supplied by an Application</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">that uses the facility (other than as an argument passed when the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">facility is invoked), then you may convey a copy of the modified</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">version:</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> a) under this License, provided that you make a good faith effort to</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> ensure that, in the event an Application does not supply the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> function or data, the facility still operates, and performs</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> whatever part of its purpose remains meaningful, or</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> b) under the GNU GPL, with none of the additional permissions of</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> this License applicable to that copy.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> 3. Object Code Incorporating Material from Library Header Files.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> The object code form of an Application may incorporate material from</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">a header file that is part of the Library. You may convey such object</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">code under terms of your choice, provided that, if the incorporated</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">material is not limited to numerical parameters, data structure</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">layouts and accessors, or small macros, inline functions and templates</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">(ten or fewer lines in length), you do both of the following:</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> a) Give prominent notice with each copy of the object code that the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Library is used in it and that the Library and its use are</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> covered by this License.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> b) Accompany the object code with a copy of the GNU GPL and this license</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> document.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> 4. Combined Works.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> You may convey a Combined Work under terms of your choice that,</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">taken together, effectively do not restrict modification of the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">portions of the Library contained in the Combined Work and reverse</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">engineering for debugging such modifications, if you also do each of</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">the following:</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> a) Give prominent notice with each copy of the Combined Work that</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> the Library is used in it and that the Library and its use are</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> covered by this License.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> b) Accompany the Combined Work with a copy of the GNU GPL and this license</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> document.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> c) For a Combined Work that displays copyright notices during</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> execution, include the copyright notice for the Library among</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> these notices, as well as a reference directing the user to the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> copies of the GNU GPL and this license document.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> d) Do one of the following:</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> 0) Convey the Minimal Corresponding Source under the terms of this</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> License, and the Corresponding Application Code in a form</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> suitable for, and under terms that permit, the user to</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> recombine or relink the Application with a modified version of</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> the Linked Version to produce a modified Combined Work, in the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> manner specified by section 6 of the GNU GPL for conveying</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Corresponding Source.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> 1) Use a suitable shared library mechanism for linking with the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Library. A suitable mechanism is one that (a) uses at run time</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> a copy of the Library already present on the user's computer</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> system, and (b) will operate properly with a modified version</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> of the Library that is interface-compatible with the Linked</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Version.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> e) Provide Installation Information, but only if you would otherwise</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> be required to provide such information under section 6 of the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> GNU GPL, and only to the extent that such information is</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> necessary to install and execute a modified version of the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Combined Work produced by recombining or relinking the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Application with a modified version of the Linked Version. (If</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> you use option 4d0, the Installation Information must accompany</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> the Minimal Corresponding Source and Corresponding Application</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Code. If you use option 4d1, you must provide the Installation</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Information in the manner specified by section 6 of the GNU GPL</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> for conveying Corresponding Source.)</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> 5. Combined Libraries.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> You may place library facilities that are a work based on the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">Library side by side in a single library together with other library</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">facilities that are not Applications and are not covered by this</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">License, and convey such a combined library under terms of your</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">choice, if you do both of the following:</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> a) Accompany the combined library with a copy of the same work based</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> on the Library, uncombined with any other library facilities,</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> conveyed under the terms of this License.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> b) Give prominent notice with the combined library that part of it</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> is a work based on the Library, and explaining where to find the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> accompanying uncombined form of the same work.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> 6. Revised Versions of the GNU Lesser General Public License.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> The Free Software Foundation may publish revised and/or new versions</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">of the GNU Lesser General Public License from time to time. Such new</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">versions will be similar in spirit to the present version, but may</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">differ in detail to address new problems or concerns.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> Each version is given a distinguishing version number. If the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">Library as you received it specifies that a certain numbered version</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">of the GNU Lesser General Public License &quot;or any later version&quot;</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">applies to it, you have the option of following the terms and</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">conditions either of that published version or of any later version</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">published by the Free Software Foundation. If the Library as you</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">received it does not specify a version number of the GNU Lesser</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">General Public License, you may choose any version of the GNU Lesser</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">General Public License ever published by the Free Software Foundation.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;"> If the Library as you received it specifies that a proxy can decide</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">whether future versions of the GNU Lesser General Public License shall</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">apply, that proxy's public statement of acceptance of any version is</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">permanent authorization for you to choose that version for the</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:7.875pt;">Library.</span></p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:7.875pt;"><br /></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="usedLibrariesLabel">
|
||||
<property name="text">
|
||||
<string>Used libraries</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTableWidget" name="tableWidget"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>PDFAboutDialog</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>PDFAboutDialog</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
BIN
Pdf4QtDiff/app-icon.ico
Normal file
After Width: | Height: | Size: 3.7 KiB |
18
Pdf4QtDiff/app-icon.svg
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="256px" height="256px" viewBox="0 0 256 256" enable-background="new 0 0 256 256" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<polygon fill="#C53620" points="146.424,82.456 146.424,0.012 41.555,0.012 41.555,132.479 41.555,134.878 41.555,136.484
|
||||
41.555,149.736 41.555,164.563 41.555,210.882 41.555,222.341 41.555,232.551 41.555,238.803 41.555,249.243 41.555,255.993
|
||||
214.445,255.993 214.445,82.456 "/>
|
||||
<polygon fill="#6CBD45" points="155.248,0.055 155.248,73.621 214.445,73.621 "/>
|
||||
</g>
|
||||
<path fill="#FFFFFF" d="M172.148,135.116c-7.619,0-15.232,0.008-22.668,0.03c0.023-3.642,0.023-7.27,0.017-10.908l-0.009-11.133
|
||||
l-31.014,30.836l31.006,30.727v-22.006h44.615v-17.538L172.148,135.116z"/>
|
||||
<path fill="#FFFFFF" d="M137.501,195.057l-30.951-30.662v21.92l-44.649-0.022v17.405l2.818,0.129
|
||||
c0.396,0.027,0.799,0.048,1.19,0.048l40.688,0.008v21.894L137.501,195.057z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
5
Pdf4QtDiff/app.qrc
Normal file
@@ -0,0 +1,5 @@
|
||||
<RCC>
|
||||
<qresource prefix="/">
|
||||
<file>app-icon.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
305
Pdf4QtDiff/differencesdockwidget.cpp
Normal file
@@ -0,0 +1,305 @@
|
||||
// Copyright (C) 2021 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 "differencesdockwidget.h"
|
||||
#include "ui_differencesdockwidget.h"
|
||||
|
||||
#include "pdfdiff.h"
|
||||
#include "pdfwidgetutils.h"
|
||||
|
||||
#include <QPixmap>
|
||||
#include <QPainter>
|
||||
#include <QTreeWidgetItem>
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
DifferenceItemDelegate::DifferenceItemDelegate(QObject* parent) :
|
||||
BaseClass(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DifferenceItemDelegate::paint(QPainter* painter,
|
||||
const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
BaseClass::paint(painter, option, index);
|
||||
}
|
||||
|
||||
QSize DifferenceItemDelegate::sizeHint(const QStyleOptionViewItem& option,
|
||||
const QModelIndex& index) const
|
||||
{
|
||||
QStyleOptionViewItem adjustedOption = option;
|
||||
|
||||
if (!option.rect.isValid())
|
||||
{
|
||||
// Jakub Melka: Why this? We need to use text wrapping. Unfortunately,
|
||||
// standard delegate needs correct text rectangle (at least rectangle width),
|
||||
// for word wrap calculation. So we must manually calculate rectangle width.
|
||||
// Of course, we cant use visualRect of the tree widget, because of cyclical
|
||||
// dependence.
|
||||
|
||||
const QTreeWidget* treeWidget = qobject_cast<const QTreeWidget*>(option.widget);
|
||||
int xOffset = treeWidget->columnViewportPosition(index.column());
|
||||
int height = option.fontMetrics.lineSpacing();
|
||||
int yOffset = 0;
|
||||
int width = treeWidget->columnWidth(index.column());
|
||||
|
||||
int level = treeWidget->rootIsDecorated() ? 1 : 0;
|
||||
QModelIndex currentIndex = index.parent();
|
||||
while (currentIndex.isValid())
|
||||
{
|
||||
++level;
|
||||
currentIndex = currentIndex.parent();
|
||||
}
|
||||
|
||||
xOffset += level * treeWidget->indentation();
|
||||
adjustedOption.rect = QRect(xOffset, yOffset, width - xOffset, height);
|
||||
}
|
||||
|
||||
return BaseClass::sizeHint(adjustedOption, index);
|
||||
}
|
||||
|
||||
DifferencesDockWidget::DifferencesDockWidget(QWidget* parent,
|
||||
pdf::PDFDiffResult* unfilteredDiffResult,
|
||||
pdf::PDFDiffResult* diffResult,
|
||||
pdf::PDFDiffResultNavigator* diffNavigator,
|
||||
Settings* settings) :
|
||||
QDockWidget(parent),
|
||||
ui(new Ui::DifferencesDockWidget),
|
||||
m_unfilteredDiffResult(unfilteredDiffResult),
|
||||
m_diffResult(diffResult),
|
||||
m_diffNavigator(diffNavigator),
|
||||
m_settings(settings),
|
||||
m_disableChangeSelectedResultIndex(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
ui->differencesTreeWidget->setItemDelegate(new DifferenceItemDelegate(this));
|
||||
ui->differencesTreeWidget->setIconSize(pdf::PDFWidgetUtils::scaleDPI(ui->differencesTreeWidget, QSize(16, 16)));
|
||||
connect(diffNavigator, &pdf::PDFDiffResultNavigator::selectionChanged, this, &DifferencesDockWidget::onSelectionChanged);
|
||||
connect(ui->differencesTreeWidget, &QTreeWidget::currentItemChanged, this, &DifferencesDockWidget::onCurrentItemChanged);
|
||||
|
||||
setMinimumWidth(pdf::PDFWidgetUtils::scaleDPI_x(this, 120));
|
||||
}
|
||||
|
||||
DifferencesDockWidget::~DifferencesDockWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
QColor DifferencesDockWidget::getColorForIndex(size_t index) const
|
||||
{
|
||||
QColor color;
|
||||
|
||||
const size_t resultIndex = index;
|
||||
|
||||
if (m_diffResult->isReplaceDifference(resultIndex))
|
||||
{
|
||||
color = m_settings->colorReplaced;
|
||||
}
|
||||
else if (m_diffResult->isRemoveDifference(resultIndex))
|
||||
{
|
||||
color = m_settings->colorRemoved;
|
||||
}
|
||||
else if (m_diffResult->isAddDifference(resultIndex))
|
||||
{
|
||||
color = m_settings->colorAdded;
|
||||
}
|
||||
else if (m_diffResult->isPageMoveDifference(resultIndex))
|
||||
{
|
||||
color = m_settings->colorPageMove;
|
||||
}
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
QModelIndex DifferencesDockWidget::findResultIndex(size_t index) const
|
||||
{
|
||||
QAbstractItemModel* model = ui->differencesTreeWidget->model();
|
||||
const int count = ui->differencesTreeWidget->topLevelItemCount();
|
||||
|
||||
for (int i = 0; i < count; ++i)
|
||||
{
|
||||
QModelIndex parentIndex = model->index(i, 0);
|
||||
if (parentIndex.isValid())
|
||||
{
|
||||
const int childCount = model->rowCount(parentIndex);
|
||||
for (int j = 0; j < childCount; ++j)
|
||||
{
|
||||
QModelIndex childIndex = model->index(j, 0, parentIndex);
|
||||
QVariant childUserData = childIndex.data(Qt::UserRole);
|
||||
if (childUserData.isValid())
|
||||
{
|
||||
if (childUserData.toULongLong() == index)
|
||||
{
|
||||
return childIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return QModelIndex();
|
||||
}
|
||||
|
||||
void DifferencesDockWidget::update()
|
||||
{
|
||||
ui->differencesTreeWidget->clear();
|
||||
|
||||
QList<QTreeWidgetItem*> topItems;
|
||||
|
||||
QLocale locale;
|
||||
|
||||
if (m_diffResult && !m_diffResult->isSame())
|
||||
{
|
||||
std::map<QRgb, QIcon> icons;
|
||||
auto getIcon = [this, &icons](QColor color)
|
||||
{
|
||||
auto it = icons.find(color.rgb());
|
||||
if (it == icons.end())
|
||||
{
|
||||
QPixmap pixmap(ui->differencesTreeWidget->iconSize());
|
||||
pixmap.fill(Qt::transparent);
|
||||
|
||||
QPainter painter(&pixmap);
|
||||
painter.setPen(Qt::NoPen);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
painter.setBrush(QBrush(color));
|
||||
painter.drawEllipse(0, 0, pixmap.width(), pixmap.height());
|
||||
painter.end();
|
||||
|
||||
QIcon icon(pixmap);
|
||||
it = icons.insert(std::make_pair(color.rgb(), std::move(icon))).first;
|
||||
}
|
||||
|
||||
return it->second;
|
||||
};
|
||||
|
||||
const size_t differenceCount = m_diffResult->getDifferencesCount();
|
||||
const size_t unfilteredDifferenceCount = m_unfilteredDiffResult->getDifferencesCount();
|
||||
const size_t hiddenDifferences = unfilteredDifferenceCount - differenceCount;
|
||||
|
||||
if (hiddenDifferences > 0)
|
||||
{
|
||||
ui->infoTextLabel->setText(tr("%1 Differences (+%2 hidden)").arg(differenceCount).arg(hiddenDifferences));
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->infoTextLabel->setText(tr("%1 Differences").arg(differenceCount));
|
||||
}
|
||||
|
||||
pdf::PDFInteger lastLeftPageIndex = -1;
|
||||
pdf::PDFInteger lastRightPageIndex = -1;
|
||||
|
||||
for (size_t i = 0; i < differenceCount; ++i)
|
||||
{
|
||||
pdf::PDFInteger pageIndexLeft = m_diffResult->getLeftPage(i);
|
||||
pdf::PDFInteger pageIndexRight = m_diffResult->getRightPage(i);
|
||||
|
||||
if (lastLeftPageIndex != pageIndexLeft ||
|
||||
lastRightPageIndex != pageIndexRight ||
|
||||
topItems.empty())
|
||||
{
|
||||
// Create new top level item
|
||||
QStringList captionParts;
|
||||
captionParts << QString("#%1:").arg(topItems.size() + 1);
|
||||
|
||||
if (pageIndexLeft == pageIndexRight)
|
||||
{
|
||||
captionParts << tr("Page %1").arg(locale.toString(pageIndexLeft + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pageIndexLeft != -1)
|
||||
{
|
||||
captionParts << tr("Left %1").arg(locale.toString(pageIndexLeft + 1));
|
||||
}
|
||||
|
||||
if (pageIndexRight != -1)
|
||||
{
|
||||
captionParts << tr("Right %1").arg(locale.toString(pageIndexRight + 1));
|
||||
}
|
||||
}
|
||||
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem(QStringList() << captionParts.join(" "));
|
||||
topItems << item;
|
||||
|
||||
lastLeftPageIndex = pageIndexLeft;
|
||||
lastRightPageIndex = pageIndexRight;
|
||||
}
|
||||
|
||||
Q_ASSERT(!topItems.isEmpty());
|
||||
QTreeWidgetItem* parent = topItems.back();
|
||||
|
||||
QTreeWidgetItem* item = new QTreeWidgetItem(parent, QStringList() << m_diffResult->getMessage(i));
|
||||
item->setData(0, Qt::UserRole, QVariant(static_cast<qint64>(i)));
|
||||
|
||||
QColor color = getColorForIndex(i);
|
||||
|
||||
if (color.isValid())
|
||||
{
|
||||
item->setData(0, Qt::DecorationRole, getIcon(color));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->infoTextLabel->setText(tr("No Differences Found!"));
|
||||
}
|
||||
|
||||
ui->differencesTreeWidget->addTopLevelItems(topItems);
|
||||
ui->differencesTreeWidget->expandAll();
|
||||
}
|
||||
|
||||
void DifferencesDockWidget::onSelectionChanged(size_t currentIndex)
|
||||
{
|
||||
if (m_disableChangeSelectedResultIndex)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
pdf::PDFTemporaryValueChange guard(&m_disableChangeSelectedResultIndex, true);
|
||||
|
||||
QModelIndex index = findResultIndex(currentIndex);
|
||||
if (index.isValid())
|
||||
{
|
||||
ui->differencesTreeWidget->scrollTo(index);
|
||||
ui->differencesTreeWidget->setCurrentIndex(index);
|
||||
}
|
||||
}
|
||||
|
||||
void DifferencesDockWidget::onCurrentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous)
|
||||
{
|
||||
Q_UNUSED(previous);
|
||||
|
||||
if (m_disableChangeSelectedResultIndex || !current)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
pdf::PDFTemporaryValueChange guard(&m_disableChangeSelectedResultIndex, true);
|
||||
QVariant childUserData = current->data(0, Qt::UserRole);
|
||||
|
||||
if (childUserData.isValid())
|
||||
{
|
||||
m_diffNavigator->select(childUserData.toULongLong());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace pdfdiff
|
89
Pdf4QtDiff/differencesdockwidget.h
Normal file
@@ -0,0 +1,89 @@
|
||||
// Copyright (C) 2021 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 PDFDIFF_DIFFERENCESDOCKWIDGET_H
|
||||
#define PDFDIFF_DIFFERENCESDOCKWIDGET_H
|
||||
|
||||
#include "settings.h"
|
||||
|
||||
#include <QDockWidget>
|
||||
#include <QItemDelegate>
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class DifferencesDockWidget;
|
||||
}
|
||||
|
||||
class QTreeWidgetItem;
|
||||
|
||||
namespace pdf
|
||||
{
|
||||
class PDFDiffResult;
|
||||
class PDFDiffResultNavigator;
|
||||
}
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
class DifferenceItemDelegate : public QItemDelegate
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
using BaseClass = QItemDelegate;
|
||||
|
||||
public:
|
||||
DifferenceItemDelegate(QObject* parent);
|
||||
|
||||
virtual void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||
virtual QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override;
|
||||
};
|
||||
|
||||
class DifferencesDockWidget : public QDockWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DifferencesDockWidget(QWidget* parent,
|
||||
pdf::PDFDiffResult* unfilteredDiffResult,
|
||||
pdf::PDFDiffResult* diffResult,
|
||||
pdf::PDFDiffResultNavigator* diffNavigator,
|
||||
Settings* settings);
|
||||
virtual ~DifferencesDockWidget() override;
|
||||
|
||||
void update();
|
||||
|
||||
private slots:
|
||||
void onSelectionChanged(size_t currentIndex);
|
||||
void onCurrentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous);
|
||||
|
||||
private:
|
||||
Ui::DifferencesDockWidget* ui;
|
||||
|
||||
QColor getColorForIndex(size_t index) const;
|
||||
QModelIndex findResultIndex(size_t index) const;
|
||||
|
||||
pdf::PDFDiffResult* m_unfilteredDiffResult;
|
||||
pdf::PDFDiffResult* m_diffResult;
|
||||
pdf::PDFDiffResultNavigator* m_diffNavigator;
|
||||
Settings* m_settings;
|
||||
bool m_disableChangeSelectedResultIndex;
|
||||
};
|
||||
|
||||
} // namespace pdfdiff
|
||||
|
||||
#endif // PDFDIFF_DIFFERENCESDOCKWIDGET_H
|
55
Pdf4QtDiff/differencesdockwidget.ui
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>DifferencesDockWidget</class>
|
||||
<widget class="QDockWidget" name="DifferencesDockWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>562</width>
|
||||
<height>537</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Differences</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="dockWidgetContents">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="infoTextLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>16</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTreeWidget" name="differencesTreeWidget">
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<attribute name="headerVisible">
|
||||
<bool>false</bool>
|
||||
</attribute>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string notr="true">1</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
1
Pdf4QtDiff/icon.rc
Normal file
@@ -0,0 +1 @@
|
||||
IDI_ICON1 ICON DISCARDABLE "app-icon.ico"
|
48
Pdf4QtDiff/main.cpp
Normal file
@@ -0,0 +1,48 @@
|
||||
// Copyright (C) 2021 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 "pdfconstants.h"
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QCommandLineParser>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication::setAttribute(Qt::AA_CompressHighFrequencyEvents, true);
|
||||
QApplication application(argc, argv);
|
||||
|
||||
QCoreApplication::setOrganizationName("MelkaJ");
|
||||
QCoreApplication::setApplicationName("PDF4QT Document Diff");
|
||||
QCoreApplication::setApplicationVersion(pdf::PDF_LIBRARY_VERSION);
|
||||
QApplication::setApplicationDisplayName(QApplication::translate("Application", "PDF4QT Document Diff"));
|
||||
QCommandLineParser parser;
|
||||
parser.setApplicationDescription(QCoreApplication::applicationName());
|
||||
parser.addHelpOption();
|
||||
parser.addVersionOption();
|
||||
parser.addPositionalArgument("file1", "The PDF file to be compared.");
|
||||
parser.addPositionalArgument("file2", "The PDF file to be compared.");
|
||||
parser.process(application);
|
||||
|
||||
QIcon appIcon(":/app-icon.svg");
|
||||
QApplication::setWindowIcon(appIcon);
|
||||
|
||||
pdfdiff::MainWindow mainWindow(nullptr);
|
||||
mainWindow.show();
|
||||
|
||||
return application.exec();
|
||||
}
|
895
Pdf4QtDiff/mainwindow.cpp
Normal file
@@ -0,0 +1,895 @@
|
||||
// Copyright (C) 2021 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 "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
|
||||
#include "aboutdialog.h"
|
||||
#include "differencesdockwidget.h"
|
||||
#include "settingsdockwidget.h"
|
||||
|
||||
#include "pdfwidgetutils.h"
|
||||
#include "pdfdocumentreader.h"
|
||||
#include "pdfdrawspacecontroller.h"
|
||||
#include "pdfdocumentmanipulator.h"
|
||||
#include "pdfdocumentbuilder.h"
|
||||
#include "pdfdocumentwriter.h"
|
||||
#include "pdfwidgetutils.h"
|
||||
|
||||
#include <QToolBar>
|
||||
#include <QDesktopServices>
|
||||
#include <QMessageBox>
|
||||
#include <QInputDialog>
|
||||
#include <QFileDialog>
|
||||
#include <QVBoxLayout>
|
||||
#include <QActionGroup>
|
||||
#include <QScreen>
|
||||
#include <QSettings>
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
MainWindow::MainWindow(QWidget* parent) :
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow),
|
||||
m_progress(new pdf::PDFProgress(this)),
|
||||
#ifdef WIN_TASKBAR_BUTTON
|
||||
m_taskbarButton(new QWinTaskbarButton(this)),
|
||||
m_progressTaskbarIndicator(nullptr),
|
||||
#endif
|
||||
m_cmsManager(nullptr),
|
||||
m_pdfWidget(nullptr),
|
||||
m_settingsDockWidget(nullptr),
|
||||
m_differencesDockWidget(nullptr),
|
||||
m_optionalContentActivity(nullptr),
|
||||
m_diff(nullptr),
|
||||
m_isChangingProgressStep(false),
|
||||
m_dontDisplayErrorMessage(false),
|
||||
m_diffNavigator(nullptr),
|
||||
m_drawInterface(&m_settings, &m_documentMapper, &m_filteredDiffResult)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
setMinimumSize(pdf::PDFWidgetUtils::scaleDPI(this, QSize(800, 600)));
|
||||
|
||||
// Initialize task bar progress
|
||||
#ifdef WIN_TASKBAR_BUTTON
|
||||
m_progressTaskbarIndicator = m_taskbarButton->progress();
|
||||
#endif
|
||||
|
||||
m_settingsDockWidget = new SettingsDockWidget(&m_settings, this);
|
||||
addDockWidget(Qt::LeftDockWidgetArea, m_settingsDockWidget);;
|
||||
connect(m_settingsDockWidget, &SettingsDockWidget::colorsChanged, this, &MainWindow::onColorsChanged);
|
||||
connect(m_settingsDockWidget, &SettingsDockWidget::transparencySliderChanged, this, &MainWindow::updateOverlayTransparency);
|
||||
|
||||
m_differencesDockWidget = new DifferencesDockWidget(this, &m_diffResult, &m_filteredDiffResult, &m_diffNavigator, &m_settings);
|
||||
addDockWidget(Qt::LeftDockWidgetArea, m_differencesDockWidget);
|
||||
|
||||
ui->documentFrame->setLayout(new QVBoxLayout);
|
||||
|
||||
m_cmsManager = new pdf::PDFCMSManager(this);
|
||||
m_pdfWidget = new pdf::PDFWidget(m_cmsManager, pdf::RendererEngine::QPainter, ui->documentFrame);
|
||||
m_pdfWidget->getDrawWidgetProxy()->setProgress(m_progress);
|
||||
ui->documentFrame->layout()->addWidget(m_pdfWidget);
|
||||
m_pdfWidget->getDrawWidgetProxy()->registerDrawInterface(&m_drawInterface);
|
||||
|
||||
ui->menuView->addSeparator();
|
||||
ui->menuView->addAction(m_settingsDockWidget->toggleViewAction());
|
||||
ui->menuView->addAction(m_differencesDockWidget->toggleViewAction());
|
||||
|
||||
ui->actionGet_Source->setData(int(Operation::GetSource));
|
||||
ui->actionBecomeASponsor->setData(int(Operation::BecomeSponsor));
|
||||
ui->actionAbout->setData(int(Operation::About));
|
||||
ui->actionOpen_Left->setData(int(Operation::OpenLeft));
|
||||
ui->actionOpen_Right->setData(int(Operation::OpenRight));
|
||||
ui->actionCompare->setData(int(Operation::Compare));
|
||||
ui->actionClose->setData(int(Operation::Close));
|
||||
ui->actionPrevious_Difference->setData(int(Operation::PreviousDifference));
|
||||
ui->actionNext_Difference->setData(int(Operation::NextDifference));
|
||||
ui->actionCreate_Compare_Report->setData(int(Operation::CreateCompareReport));
|
||||
ui->actionFilter_Text->setData(int(Operation::FilterText));
|
||||
ui->actionFilter_Vector_Graphics->setData(int(Operation::FilterVectorGraphics));
|
||||
ui->actionFilter_Images->setData(int(Operation::FilterImages));
|
||||
ui->actionFilter_Shading->setData(int(Operation::FilterShading));
|
||||
ui->actionFilter_Page_Movement->setData(int(Operation::FilterPageMovement));
|
||||
ui->actionView_Differences->setData(int(Operation::ViewDifferences));
|
||||
ui->actionView_Left->setData(int(Operation::ViewLeft));
|
||||
ui->actionView_Right->setData(int(Operation::ViewRight));
|
||||
ui->actionView_Overlay->setData(int(Operation::ViewOverlay));
|
||||
ui->actionShow_Pages_with_Differences->setData(int(Operation::ShowPageswithDifferences));
|
||||
ui->actionSave_Differences_to_XML->setData(int(Operation::SaveDifferencesToXML));
|
||||
ui->actionDisplay_Differences->setData(int(Operation::DisplayDifferences));
|
||||
ui->actionDisplay_Markers->setData(int(Operation::DisplayMarkers));
|
||||
|
||||
ui->actionSynchronize_View_with_Differences->setChecked(true);
|
||||
|
||||
QActionGroup* actionGroup = new QActionGroup(this);
|
||||
actionGroup->setExclusionPolicy(QActionGroup::ExclusionPolicy::Exclusive);
|
||||
actionGroup->addAction(ui->actionView_Differences);
|
||||
actionGroup->addAction(ui->actionView_Left);
|
||||
actionGroup->addAction(ui->actionView_Right);
|
||||
actionGroup->addAction(ui->actionView_Overlay);
|
||||
ui->actionView_Differences->setChecked(true);
|
||||
|
||||
QToolBar* mainToolbar = addToolBar(tr("Main"));
|
||||
mainToolbar->setObjectName("main_toolbar");
|
||||
mainToolbar->addActions({ ui->actionOpen_Left, ui->actionOpen_Right });
|
||||
mainToolbar->addSeparator();
|
||||
mainToolbar->addAction(ui->actionCompare);
|
||||
mainToolbar->addAction(ui->actionCreate_Compare_Report);
|
||||
mainToolbar->addAction(ui->actionSave_Differences_to_XML);
|
||||
|
||||
QToolBar* differencesToolbar = addToolBar(tr("Differences"));
|
||||
differencesToolbar->setObjectName("differences_toolbar");
|
||||
differencesToolbar->addActions({ ui->actionPrevious_Difference, ui->actionNext_Difference });
|
||||
|
||||
QToolBar* viewToolbar = addToolBar(tr("View"));
|
||||
viewToolbar->setObjectName("view_toolbar");
|
||||
viewToolbar->addActions({ ui->actionView_Differences, ui->actionView_Left, ui->actionView_Right, ui->actionView_Overlay });
|
||||
viewToolbar->addSeparator();
|
||||
viewToolbar->addActions({ ui->actionShow_Pages_with_Differences, ui->actionSynchronize_View_with_Differences });
|
||||
viewToolbar->addSeparator();
|
||||
viewToolbar->addActions({ ui->actionFilter_Text, ui->actionFilter_Vector_Graphics, ui->actionFilter_Images, ui->actionFilter_Shading, ui->actionFilter_Page_Movement });
|
||||
|
||||
QSize iconSize = pdf::PDFWidgetUtils::scaleDPI(this, QSize(24, 24));
|
||||
auto toolbars = findChildren<QToolBar*>();
|
||||
for (QToolBar* toolbar : toolbars)
|
||||
{
|
||||
toolbar->setIconSize(iconSize);
|
||||
ui->menuToolbars->addAction(toolbar->toggleViewAction());
|
||||
}
|
||||
|
||||
connect(&m_mapper, &QSignalMapper::mappedInt, this, &MainWindow::onMappedActionTriggered);
|
||||
|
||||
QList<QAction*> actions = findChildren<QAction*>();
|
||||
for (QAction* action : actions)
|
||||
{
|
||||
QVariant actionData = action->data();
|
||||
if (actionData.isValid())
|
||||
{
|
||||
connect(action, &QAction::triggered, &m_mapper, QOverload<>::of(&QSignalMapper::map));
|
||||
m_mapper.setMapping(action, actionData.toInt());
|
||||
}
|
||||
}
|
||||
|
||||
if (pdf::PDFWidgetUtils::isDarkTheme())
|
||||
{
|
||||
pdf::PDFWidgetUtils::convertActionsForDarkTheme(actions, iconSize, qGuiApp->devicePixelRatio());
|
||||
}
|
||||
|
||||
connect(m_progress, &pdf::PDFProgress::progressStarted, this, &MainWindow::onProgressStarted);
|
||||
connect(m_progress, &pdf::PDFProgress::progressStep, this, &MainWindow::onProgressStep);
|
||||
connect(m_progress, &pdf::PDFProgress::progressFinished, this, &MainWindow::onProgressFinished);
|
||||
|
||||
m_diff.setProgress(m_progress);
|
||||
m_diff.setOption(pdf::PDFDiff::Asynchronous, true);
|
||||
connect(&m_diff, &pdf::PDFDiff::comparationFinished, this, &MainWindow::onComparationFinished);
|
||||
|
||||
m_diff.setLeftDocument(&m_leftDocument);
|
||||
m_diff.setRightDocument(&m_rightDocument);
|
||||
|
||||
m_diffNavigator.setResult(&m_filteredDiffResult);
|
||||
connect(&m_diffNavigator, &pdf::PDFDiffResultNavigator::selectionChanged, this, &MainWindow::onSelectionChanged);
|
||||
|
||||
loadSettings();
|
||||
updateAll(false);
|
||||
updateOverlayTransparency();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
saveSettings();
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::showEvent(QShowEvent* event)
|
||||
{
|
||||
Q_UNUSED(event);
|
||||
#ifdef WIN_TASKBAR_BUTTON
|
||||
m_taskbarButton->setWindow(windowHandle());
|
||||
#endif
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent* event)
|
||||
{
|
||||
BaseClass::closeEvent(event);
|
||||
m_diff.stop();
|
||||
}
|
||||
|
||||
void MainWindow::onMappedActionTriggered(int actionId)
|
||||
{
|
||||
performOperation(static_cast<Operation>(actionId));
|
||||
}
|
||||
|
||||
void MainWindow::onComparationFinished()
|
||||
{
|
||||
clear(false, false);
|
||||
|
||||
m_diffResult = m_diff.getResult();
|
||||
|
||||
if (!m_dontDisplayErrorMessage)
|
||||
{
|
||||
if (!m_diffResult.getResult())
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), m_diffResult.getResult().getErrorMessage());
|
||||
}
|
||||
if (m_diffResult.isSame())
|
||||
{
|
||||
QMessageBox::information(this, tr("Info"), tr("No differences found between the compared documents."), QMessageBox::Ok);
|
||||
}
|
||||
}
|
||||
|
||||
// Create merged document
|
||||
pdf::PDFDocumentManipulator manipulator;
|
||||
manipulator.setOutlineMode(pdf::PDFDocumentManipulator::OutlineMode::NoOutline);
|
||||
manipulator.addDocument(1, &m_leftDocument);
|
||||
manipulator.addDocument(2, &m_rightDocument);
|
||||
|
||||
pdf::PDFDocumentManipulator::AssembledPages assembledPages1 = pdf::PDFDocumentManipulator::createAllDocumentPages(1, &m_leftDocument);
|
||||
pdf::PDFDocumentManipulator::AssembledPages assembledPages2 = pdf::PDFDocumentManipulator::createAllDocumentPages(2, &m_rightDocument);
|
||||
assembledPages1.insert(assembledPages1.end(), std::make_move_iterator(assembledPages2.begin()), std::make_move_iterator(assembledPages2.end()));
|
||||
|
||||
if (manipulator.assemble(assembledPages1))
|
||||
{
|
||||
m_combinedDocument = manipulator.takeAssembledDocument();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_combinedDocument = pdf::PDFDocument();
|
||||
}
|
||||
|
||||
updateAll(true);
|
||||
}
|
||||
|
||||
void MainWindow::onColorsChanged()
|
||||
{
|
||||
updateFilteredResult();
|
||||
m_pdfWidget->update();
|
||||
}
|
||||
|
||||
void MainWindow::updateActions()
|
||||
{
|
||||
QList<QAction*> actions = findChildren<QAction*>();
|
||||
for (QAction* action : actions)
|
||||
{
|
||||
QVariant actionData = action->data();
|
||||
if (actionData.isValid())
|
||||
{
|
||||
bool canPerformAction = canPerformOperation(static_cast<Operation>(actionData.toInt()));
|
||||
action->setEnabled(canPerformAction);
|
||||
|
||||
if (!canPerformAction && action->isCheckable())
|
||||
{
|
||||
action->setChecked(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::onSelectionChanged(size_t currentIndex)
|
||||
{
|
||||
if (ui->actionSynchronize_View_with_Differences->isChecked())
|
||||
{
|
||||
pdf::PDFInteger destinationPage = -1;
|
||||
|
||||
if (destinationPage == -1)
|
||||
{
|
||||
pdf::PDFInteger leftPageIndex = m_filteredDiffResult.getLeftPage(currentIndex);
|
||||
if (leftPageIndex != -1)
|
||||
{
|
||||
destinationPage = m_documentMapper.getPageIndexFromLeftPageIndex(leftPageIndex);
|
||||
}
|
||||
}
|
||||
|
||||
if (destinationPage == -1)
|
||||
{
|
||||
pdf::PDFInteger rightPageIndex = m_filteredDiffResult.getRightPage(currentIndex);
|
||||
if (rightPageIndex != -1)
|
||||
{
|
||||
destinationPage = m_documentMapper.getPageIndexFromRightPageIndex(rightPageIndex);
|
||||
}
|
||||
}
|
||||
|
||||
if (destinationPage != -1)
|
||||
{
|
||||
m_pdfWidget->getDrawWidgetProxy()->goToPage(destinationPage);
|
||||
}
|
||||
}
|
||||
|
||||
updateActions();
|
||||
}
|
||||
|
||||
void MainWindow::loadSettings()
|
||||
{
|
||||
QSettings settings(QSettings::IniFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
|
||||
settings.beginGroup("MainWindow");
|
||||
QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray();
|
||||
if (geometry.isEmpty())
|
||||
{
|
||||
QRect availableGeometry = QApplication::primaryScreen()->availableGeometry();
|
||||
QRect windowRect(0, 0, availableGeometry.width() / 2, availableGeometry.height() / 2);
|
||||
windowRect = windowRect.translated(availableGeometry.center() - windowRect.center());
|
||||
setGeometry(windowRect);
|
||||
}
|
||||
else
|
||||
{
|
||||
restoreGeometry(geometry);
|
||||
}
|
||||
|
||||
QByteArray state = settings.value("windowState", QByteArray()).toByteArray();
|
||||
if (!state.isEmpty())
|
||||
{
|
||||
restoreState(state);
|
||||
}
|
||||
settings.endGroup();
|
||||
|
||||
settings.beginGroup("Settings");
|
||||
m_settings.directory = settings.value("directory").toString();
|
||||
m_settings.colorPageMove = settings.value("colorPageMove", m_settings.colorPageMove).value<QColor>();
|
||||
m_settings.colorAdded = settings.value("colorAdded", m_settings.colorAdded).value<QColor>();
|
||||
m_settings.colorRemoved = settings.value("colorRemoved", m_settings.colorRemoved).value<QColor>();
|
||||
m_settings.colorReplaced = settings.value("colorReplaced", m_settings.colorReplaced).value<QColor>();
|
||||
m_settings.displayDifferences = settings.value("displayDifferences", m_settings.displayDifferences).toBool();
|
||||
m_settings.displayMarkers = settings.value("displayMarkers", m_settings.displayDifferences).toBool();
|
||||
settings.endGroup();
|
||||
|
||||
settings.beginGroup("Compare");
|
||||
m_settingsDockWidget->setCompareTextsAsVectorGraphics(settings.value("compareTextsAsVectorGraphics", false).toBool());
|
||||
m_settingsDockWidget->setCompareTextCharactersInsteadOfWords(settings.value("compareTextCharactersInsteadOfWords", false).toBool());
|
||||
settings.endGroup();
|
||||
|
||||
ui->actionDisplay_Differences->setChecked(m_settings.displayDifferences);
|
||||
ui->actionDisplay_Markers->setChecked(m_settings.displayMarkers);
|
||||
|
||||
m_settingsDockWidget->loadColors();
|
||||
}
|
||||
|
||||
void MainWindow::saveSettings()
|
||||
{
|
||||
QSettings settings(QSettings::IniFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
|
||||
settings.beginGroup("MainWindow");
|
||||
settings.setValue("geometry", saveGeometry());
|
||||
settings.setValue("windowState", saveState());
|
||||
settings.endGroup();
|
||||
|
||||
settings.beginGroup("Settings");
|
||||
settings.setValue("directory", m_settings.directory);
|
||||
settings.setValue("colorPageMove", m_settings.colorPageMove);
|
||||
settings.setValue("colorAdded", m_settings.colorAdded);
|
||||
settings.setValue("colorRemoved", m_settings.colorRemoved);
|
||||
settings.setValue("colorReplaced", m_settings.colorReplaced);
|
||||
settings.setValue("displayDifferences", m_settings.displayDifferences);
|
||||
settings.setValue("displayMarkers", m_settings.displayMarkers);
|
||||
settings.endGroup();
|
||||
|
||||
settings.beginGroup("Compare");
|
||||
settings.setValue("compareTextsAsVectorGraphics", m_settingsDockWidget->isCompareTextAsVectorGraphics());
|
||||
settings.setValue("compareTextCharactersInsteadOfWords", m_settingsDockWidget->isCompareTextCharactersInsteadOfWords());
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
bool MainWindow::canPerformOperation(Operation operation) const
|
||||
{
|
||||
switch (operation)
|
||||
{
|
||||
case Operation::OpenLeft:
|
||||
case Operation::OpenRight:
|
||||
case Operation::Compare:
|
||||
case Operation::Close:
|
||||
case Operation::GetSource:
|
||||
case Operation::BecomeSponsor:
|
||||
case Operation::About:
|
||||
return true;
|
||||
|
||||
case Operation::ViewDifferences:
|
||||
case Operation::ViewLeft:
|
||||
case Operation::ViewRight:
|
||||
case Operation::ViewOverlay:
|
||||
return true; // Allow always to change a view
|
||||
|
||||
case Operation::FilterText:
|
||||
return m_diffResult.hasTextDifferences();
|
||||
|
||||
case Operation::FilterVectorGraphics:
|
||||
return m_diffResult.hasVectorGraphicsDifferences();
|
||||
|
||||
case Operation::FilterImages:
|
||||
return m_diffResult.hasImageDifferences();
|
||||
|
||||
case Operation::FilterShading:
|
||||
return m_diffResult.hasShadingDifferences();
|
||||
|
||||
case Operation::FilterPageMovement:
|
||||
return m_diffResult.hasPageMoveDifferences();
|
||||
|
||||
case Operation::PreviousDifference:
|
||||
return m_diffNavigator.canGoPrevious();
|
||||
|
||||
case Operation::NextDifference:
|
||||
return m_diffNavigator.canGoNext();
|
||||
|
||||
case Operation::CreateCompareReport:
|
||||
case Operation::SaveDifferencesToXML:
|
||||
return m_filteredDiffResult.isChanged();
|
||||
|
||||
case Operation::ShowPageswithDifferences:
|
||||
return m_diffResult.isChanged();
|
||||
|
||||
case Operation::DisplayDifferences:
|
||||
case Operation::DisplayMarkers:
|
||||
return true;
|
||||
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void MainWindow::performOperation(Operation operation)
|
||||
{
|
||||
switch (operation)
|
||||
{
|
||||
case Operation::OpenLeft:
|
||||
{
|
||||
pdf::PDFTemporaryValueChange guard(&m_dontDisplayErrorMessage, true);
|
||||
m_diff.stop();
|
||||
|
||||
std::optional<pdf::PDFDocument> document = openDocument();
|
||||
if (document)
|
||||
{
|
||||
clear(true, false);
|
||||
m_leftDocument = std::move(*document);
|
||||
|
||||
const size_t pageCount = m_leftDocument.getCatalog()->getPageCount();
|
||||
if (pageCount > 1)
|
||||
{
|
||||
m_settingsDockWidget->getLeftPageSelectionEdit()->setText(QString("1-%2").arg(pageCount));
|
||||
}
|
||||
else if (pageCount == 1)
|
||||
{
|
||||
m_settingsDockWidget->getLeftPageSelectionEdit()->setText("1");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_settingsDockWidget->getLeftPageSelectionEdit()->clear();
|
||||
}
|
||||
|
||||
updateViewDocument();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Operation::OpenRight:
|
||||
{
|
||||
pdf::PDFTemporaryValueChange guard(&m_dontDisplayErrorMessage, true);
|
||||
m_diff.stop();
|
||||
|
||||
std::optional<pdf::PDFDocument> document = openDocument();
|
||||
if (document)
|
||||
{
|
||||
clear(false, true);
|
||||
m_rightDocument = std::move(*document);
|
||||
|
||||
const size_t pageCount = m_rightDocument.getCatalog()->getPageCount();
|
||||
if (pageCount > 1)
|
||||
{
|
||||
m_settingsDockWidget->getRightPageSelectionEdit()->setText(QString("1-%2").arg(pageCount));
|
||||
}
|
||||
else if (pageCount == 1)
|
||||
{
|
||||
m_settingsDockWidget->getRightPageSelectionEdit()->setText("1");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_settingsDockWidget->getRightPageSelectionEdit()->clear();
|
||||
}
|
||||
|
||||
updateViewDocument();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Operation::Compare:
|
||||
{
|
||||
pdf::PDFTemporaryValueChange guard(&m_dontDisplayErrorMessage, true);
|
||||
m_diff.stop();
|
||||
|
||||
m_diff.setOption(pdf::PDFDiff::CompareTextsAsVector, m_settingsDockWidget->isCompareTextAsVectorGraphics());
|
||||
m_diff.setOption(pdf::PDFDiff::CompareWords, !m_settingsDockWidget->isCompareTextCharactersInsteadOfWords());
|
||||
|
||||
QString errorMessage;
|
||||
|
||||
pdf::PDFClosedIntervalSet rightPageIndices;
|
||||
pdf::PDFClosedIntervalSet leftPageIndices = pdf::PDFClosedIntervalSet::parse(1, qMax<pdf::PDFInteger>(1, m_leftDocument.getCatalog()->getPageCount()), m_settingsDockWidget->getLeftPageSelectionEdit()->text(), &errorMessage);
|
||||
|
||||
if (errorMessage.isEmpty())
|
||||
{
|
||||
rightPageIndices = pdf::PDFClosedIntervalSet::parse(1, qMax<pdf::PDFInteger>(1, m_rightDocument.getCatalog()->getPageCount()), m_settingsDockWidget->getRightPageSelectionEdit()->text(), &errorMessage);
|
||||
}
|
||||
|
||||
// Check if pages are succesfully parsed
|
||||
if (!errorMessage.isEmpty())
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), errorMessage);
|
||||
break;
|
||||
}
|
||||
|
||||
leftPageIndices.translate(-1);
|
||||
rightPageIndices.translate(-1);
|
||||
|
||||
m_diff.setPagesForLeftDocument(std::move(leftPageIndices));
|
||||
m_diff.setPagesForRightDocument(std::move(rightPageIndices));
|
||||
|
||||
m_diff.start();
|
||||
break;
|
||||
}
|
||||
|
||||
case Operation::Close:
|
||||
{
|
||||
close();
|
||||
break;
|
||||
}
|
||||
|
||||
case Operation::GetSource:
|
||||
{
|
||||
QDesktopServices::openUrl(QUrl("https://github.com/JakubMelka/PDF4QT"));
|
||||
break;
|
||||
}
|
||||
|
||||
case Operation::BecomeSponsor:
|
||||
{
|
||||
QDesktopServices::openUrl(QUrl("https://github.com/sponsors/JakubMelka"));
|
||||
break;
|
||||
}
|
||||
|
||||
case Operation::About:
|
||||
{
|
||||
PDFAboutDialog aboutDialog(this);
|
||||
aboutDialog.exec();
|
||||
break;
|
||||
}
|
||||
|
||||
case Operation::PreviousDifference:
|
||||
m_diffNavigator.goPrevious();
|
||||
break;
|
||||
|
||||
case Operation::NextDifference:
|
||||
m_diffNavigator.goNext();
|
||||
break;
|
||||
|
||||
case Operation::FilterText:
|
||||
case Operation::FilterVectorGraphics:
|
||||
case Operation::FilterImages:
|
||||
case Operation::FilterShading:
|
||||
case Operation::FilterPageMovement:
|
||||
{
|
||||
updateFilteredResult();
|
||||
|
||||
if (ui->actionShow_Pages_with_Differences->isChecked())
|
||||
{
|
||||
updateCustomPageLayout();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Operation::ViewDifferences:
|
||||
case Operation::ViewLeft:
|
||||
case Operation::ViewRight:
|
||||
case Operation::ViewOverlay:
|
||||
updateViewDocument();
|
||||
break;
|
||||
|
||||
case Operation::ShowPageswithDifferences:
|
||||
updateCustomPageLayout();
|
||||
break;
|
||||
|
||||
case Operation::DisplayDifferences:
|
||||
m_settings.displayDifferences = ui->actionDisplay_Differences->isChecked();
|
||||
m_pdfWidget->update();
|
||||
break;
|
||||
|
||||
case Operation::DisplayMarkers:
|
||||
m_settings.displayMarkers = ui->actionDisplay_Markers->isChecked();
|
||||
m_pdfWidget->update();
|
||||
break;
|
||||
|
||||
case Operation::SaveDifferencesToXML:
|
||||
{
|
||||
if (!m_filteredDiffResult.isSame())
|
||||
{
|
||||
QString fileName = QFileDialog::getSaveFileName(this, tr("Select PDF document"), m_settings.directory, tr("XML file (*.xml)"));
|
||||
if (!fileName.isEmpty())
|
||||
{
|
||||
QFile file(fileName);
|
||||
if (file.open(QFile::WriteOnly | QFile::Truncate))
|
||||
{
|
||||
m_filteredDiffResult.saveToXML(&file);
|
||||
file.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), tr("File '%1' cannot be opened. %2").arg(fileName, file.errorString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::information(this, tr("Save results to XML"), tr("Displayed results are empty. Cannot save empty results."));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Operation::CreateCompareReport:
|
||||
{
|
||||
if (m_filteredDiffResult.isSame())
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
QString saveFileName = QFileDialog::getSaveFileName(this, tr("Save As"), m_settings.directory, tr("Portable Document (*.pdf);;All files (*.*)"));
|
||||
if (!saveFileName.isEmpty())
|
||||
{
|
||||
pdf::PDFDocumentBuilder builder(m_pdfWidget->getDrawWidgetProxy()->getDocument());
|
||||
m_drawInterface.drawAnnotations(m_pdfWidget->getDrawWidgetProxy()->getDocument(), &builder);
|
||||
|
||||
pdf::PDFDocument document = builder.build();
|
||||
pdf::PDFDocumentWriter writer(m_progress);
|
||||
pdf::PDFOperationResult result = writer.write(saveFileName, &document, QFile::exists(saveFileName));
|
||||
if (!result)
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), result.getErrorMessage());
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
Q_ASSERT(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
updateActions();
|
||||
}
|
||||
|
||||
void MainWindow::setViewDocument(pdf::PDFDocument* document, bool updateCustomPageLayout)
|
||||
{
|
||||
if (document != m_pdfWidget->getDrawWidgetProxy()->getDocument())
|
||||
{
|
||||
m_optionalContentActivity->deleteLater();
|
||||
m_optionalContentActivity = nullptr;
|
||||
|
||||
if (document)
|
||||
{
|
||||
m_optionalContentActivity = new pdf::PDFOptionalContentActivity(document, pdf::OCUsage::View, this);
|
||||
}
|
||||
|
||||
if (document)
|
||||
{
|
||||
pdf::PDFModifiedDocument modifiedDocument(document, m_optionalContentActivity);
|
||||
m_pdfWidget->setDocument(modifiedDocument);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pdfWidget->setDocument(pdf::PDFModifiedDocument());
|
||||
}
|
||||
}
|
||||
|
||||
if (updateCustomPageLayout)
|
||||
{
|
||||
this->updateCustomPageLayout();
|
||||
}
|
||||
}
|
||||
|
||||
ComparedDocumentMapper::Mode MainWindow::getDocumentViewMode() const
|
||||
{
|
||||
if (ui->actionView_Left->isChecked())
|
||||
{
|
||||
return ComparedDocumentMapper::Mode::Left;
|
||||
}
|
||||
|
||||
if (ui->actionView_Right->isChecked())
|
||||
{
|
||||
return ComparedDocumentMapper::Mode::Right;
|
||||
}
|
||||
|
||||
if (ui->actionView_Overlay->isChecked())
|
||||
{
|
||||
return ComparedDocumentMapper::Mode::Overlay;
|
||||
}
|
||||
|
||||
return ComparedDocumentMapper::Mode::Combined;
|
||||
}
|
||||
|
||||
void MainWindow::clear(bool clearLeftDocument, bool clearRightDocument)
|
||||
{
|
||||
setViewDocument(nullptr, true);
|
||||
|
||||
if (clearLeftDocument)
|
||||
{
|
||||
m_leftDocument = pdf::PDFDocument();
|
||||
m_settingsDockWidget->getLeftPageSelectionEdit()->clear();
|
||||
}
|
||||
|
||||
if (clearRightDocument)
|
||||
{
|
||||
m_rightDocument = pdf::PDFDocument();
|
||||
m_settingsDockWidget->getRightPageSelectionEdit()->clear();
|
||||
}
|
||||
|
||||
m_diffResult = pdf::PDFDiffResult();
|
||||
m_filteredDiffResult = pdf::PDFDiffResult();
|
||||
m_diffNavigator.update();
|
||||
|
||||
updateAll(false);
|
||||
}
|
||||
|
||||
void MainWindow::updateAll(bool resetFilters)
|
||||
{
|
||||
if (resetFilters)
|
||||
{
|
||||
ui->actionFilter_Page_Movement->setChecked(m_diffResult.hasPageMoveDifferences());
|
||||
ui->actionFilter_Text->setChecked(m_diffResult.hasTextDifferences());
|
||||
ui->actionFilter_Vector_Graphics->setChecked(m_diffResult.hasVectorGraphicsDifferences());
|
||||
ui->actionFilter_Images->setChecked(m_diffResult.hasImageDifferences());
|
||||
ui->actionFilter_Shading->setChecked(m_diffResult.hasShadingDifferences());
|
||||
}
|
||||
|
||||
updateFilteredResult();
|
||||
updateViewDocument();
|
||||
}
|
||||
|
||||
void MainWindow::updateFilteredResult()
|
||||
{
|
||||
m_filteredDiffResult = m_diffResult.filter(ui->actionFilter_Page_Movement->isChecked(),
|
||||
ui->actionFilter_Text->isChecked(),
|
||||
ui->actionFilter_Vector_Graphics->isChecked(),
|
||||
ui->actionFilter_Images->isChecked(),
|
||||
ui->actionFilter_Shading->isChecked());
|
||||
m_diffNavigator.update();
|
||||
|
||||
if (m_differencesDockWidget)
|
||||
{
|
||||
m_differencesDockWidget->update();
|
||||
}
|
||||
|
||||
updateActions();
|
||||
}
|
||||
|
||||
void MainWindow::updateViewDocument()
|
||||
{
|
||||
pdf::PDFDocument* document = nullptr;
|
||||
|
||||
switch (getDocumentViewMode())
|
||||
{
|
||||
case ComparedDocumentMapper::Mode::Left:
|
||||
document = &m_leftDocument;
|
||||
break;
|
||||
|
||||
case ComparedDocumentMapper::Mode::Right:
|
||||
document = &m_rightDocument;
|
||||
break;
|
||||
|
||||
case ComparedDocumentMapper::Mode::Combined:
|
||||
case ComparedDocumentMapper::Mode::Overlay:
|
||||
document = &m_combinedDocument;
|
||||
break;
|
||||
}
|
||||
|
||||
setViewDocument(document, true);
|
||||
}
|
||||
|
||||
void MainWindow::updateCustomPageLayout()
|
||||
{
|
||||
m_documentMapper.update(getDocumentViewMode(),
|
||||
ui->actionShow_Pages_with_Differences->isChecked(),
|
||||
m_filteredDiffResult,
|
||||
&m_leftDocument,
|
||||
&m_rightDocument,
|
||||
m_pdfWidget->getDrawWidgetProxy()->getDocument());
|
||||
|
||||
|
||||
m_pdfWidget->getDrawWidgetProxy()->setCustomPageLayout(m_documentMapper.getLayout());
|
||||
m_pdfWidget->getDrawWidgetProxy()->setPageLayout(pdf::PageLayout::Custom);
|
||||
}
|
||||
|
||||
void MainWindow::updateOverlayTransparency()
|
||||
{
|
||||
const pdf::PDFReal value = m_settingsDockWidget->getTransparencySliderValue() * 0.01;
|
||||
m_pdfWidget->getDrawWidgetProxy()->setGroupTransparency(1, true, 1.0 - value);
|
||||
m_pdfWidget->getDrawWidgetProxy()->setGroupTransparency(2, false, value);
|
||||
m_pdfWidget->update();
|
||||
}
|
||||
|
||||
std::optional<pdf::PDFDocument> MainWindow::openDocument()
|
||||
{
|
||||
QString fileName = QFileDialog::getOpenFileName(this, tr("Select PDF document"), m_settings.directory, tr("PDF document (*.pdf)"));
|
||||
if (fileName.isEmpty())
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
auto queryPassword = [this](bool* ok)
|
||||
{
|
||||
*ok = false;
|
||||
return QInputDialog::getText(this, tr("Encrypted document"), tr("Enter password to access document content"), QLineEdit::Password, QString(), ok);
|
||||
};
|
||||
|
||||
// Mark current directory as this
|
||||
QFileInfo fileInfo(fileName);
|
||||
m_settings.directory = fileInfo.dir().absolutePath();
|
||||
|
||||
// Try to open a new document
|
||||
pdf::PDFDocumentReader reader(nullptr, qMove(queryPassword), true, false);
|
||||
pdf::PDFDocument document = reader.readFromFile(fileName);
|
||||
|
||||
QString errorMessage = reader.getErrorMessage();
|
||||
pdf::PDFDocumentReader::Result result = reader.getReadingResult();
|
||||
if (result == pdf::PDFDocumentReader::Result::OK)
|
||||
{
|
||||
return document;
|
||||
}
|
||||
else if (result == pdf::PDFDocumentReader::Result::Failed)
|
||||
{
|
||||
QMessageBox::critical(this, tr("Error"), errorMessage);
|
||||
}
|
||||
|
||||
return pdf::PDFDocument();
|
||||
}
|
||||
|
||||
void MainWindow::onProgressStarted(pdf::ProgressStartupInfo info)
|
||||
{
|
||||
#ifdef WIN_TASKBAR_BUTTON
|
||||
m_progressTaskbarIndicator->setRange(0, 100);
|
||||
m_progressTaskbarIndicator->reset();
|
||||
m_progressTaskbarIndicator->show();
|
||||
#else
|
||||
Q_UNUSED(info);
|
||||
#endif
|
||||
}
|
||||
|
||||
void MainWindow::onProgressStep(int percentage)
|
||||
{
|
||||
if (m_isChangingProgressStep)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
pdf::PDFTemporaryValueChange guard(&m_isChangingProgressStep, true);
|
||||
#ifdef WIN_TASKBAR_BUTTON
|
||||
m_progressTaskbarIndicator->setValue(percentage);
|
||||
#else
|
||||
Q_UNUSED(percentage);
|
||||
#endif
|
||||
}
|
||||
|
||||
void MainWindow::onProgressFinished()
|
||||
{
|
||||
#ifdef WIN_TASKBAR_BUTTON
|
||||
m_progressTaskbarIndicator->hide();
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace pdfdiff
|
156
Pdf4QtDiff/mainwindow.h
Normal file
@@ -0,0 +1,156 @@
|
||||
// Copyright (C) 2021 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 PDFDIFF_MAINWINDOW_H
|
||||
#define PDFDIFF_MAINWINDOW_H
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
#include "pdfdocument.h"
|
||||
#include "pdfdrawwidget.h"
|
||||
#include "pdfcms.h"
|
||||
#include "pdfoptionalcontent.h"
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <QSignalMapper>
|
||||
#ifdef WIN_TASKBAR_BUTTON
|
||||
#include <QWinTaskbarButton>
|
||||
#include <QWinTaskbarProgress>
|
||||
#endif
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class MainWindow;
|
||||
}
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
class SettingsDockWidget;
|
||||
class DifferencesDockWidget;
|
||||
|
||||
class MainWindow : public QMainWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
using BaseClass = QMainWindow;
|
||||
|
||||
public:
|
||||
explicit MainWindow(QWidget* parent);
|
||||
virtual ~MainWindow() override;
|
||||
|
||||
enum class Operation
|
||||
{
|
||||
OpenLeft,
|
||||
OpenRight,
|
||||
Compare,
|
||||
Close,
|
||||
GetSource,
|
||||
BecomeSponsor,
|
||||
About,
|
||||
PreviousDifference,
|
||||
NextDifference,
|
||||
CreateCompareReport,
|
||||
FilterText,
|
||||
FilterVectorGraphics,
|
||||
FilterImages,
|
||||
FilterShading,
|
||||
FilterPageMovement,
|
||||
ViewDifferences,
|
||||
ViewLeft,
|
||||
ViewRight,
|
||||
ViewOverlay,
|
||||
ShowPageswithDifferences,
|
||||
SaveDifferencesToXML,
|
||||
DisplayDifferences,
|
||||
DisplayMarkers
|
||||
};
|
||||
|
||||
virtual void showEvent(QShowEvent* event) override;
|
||||
virtual void closeEvent(QCloseEvent* event) override;
|
||||
|
||||
private slots:
|
||||
void updateActions();
|
||||
void onSelectionChanged(size_t currentIndex);
|
||||
|
||||
private:
|
||||
void onMappedActionTriggered(int actionId);
|
||||
void onComparationFinished();
|
||||
void onColorsChanged();
|
||||
|
||||
void onProgressStarted(pdf::ProgressStartupInfo info);
|
||||
void onProgressStep(int percentage);
|
||||
void onProgressFinished();
|
||||
|
||||
void loadSettings();
|
||||
void saveSettings();
|
||||
|
||||
bool canPerformOperation(Operation operation) const;
|
||||
void performOperation(Operation operation);
|
||||
|
||||
void setViewDocument(pdf::PDFDocument* document, bool updateCustomPageLayout);
|
||||
|
||||
ComparedDocumentMapper::Mode getDocumentViewMode() const;
|
||||
|
||||
/// Clears all data, and possibly documents also.
|
||||
/// View document is set to nullptr.
|
||||
/// \param clearLeftDocument Clear left document?
|
||||
/// \param clearRightDocument Clear left document?
|
||||
void clear(bool clearLeftDocument, bool clearRightDocument);
|
||||
|
||||
void updateAll(bool resetFilters);
|
||||
void updateFilteredResult();
|
||||
void updateViewDocument();
|
||||
void updateCustomPageLayout();
|
||||
void updateOverlayTransparency();
|
||||
|
||||
std::optional<pdf::PDFDocument> openDocument();
|
||||
|
||||
Ui::MainWindow* ui;
|
||||
|
||||
pdf::PDFProgress* m_progress;
|
||||
#ifdef WIN_TASKBAR_BUTTON
|
||||
QWinTaskbarButton* m_taskbarButton;
|
||||
QWinTaskbarProgress* m_progressTaskbarIndicator;
|
||||
#endif
|
||||
pdf::PDFCMSManager* m_cmsManager;
|
||||
pdf::PDFWidget* m_pdfWidget;
|
||||
SettingsDockWidget* m_settingsDockWidget;
|
||||
DifferencesDockWidget* m_differencesDockWidget;
|
||||
pdf::PDFOptionalContentActivity* m_optionalContentActivity;
|
||||
|
||||
Settings m_settings;
|
||||
QSignalMapper m_mapper;
|
||||
pdf::PDFDiff m_diff;
|
||||
bool m_isChangingProgressStep;
|
||||
bool m_dontDisplayErrorMessage;
|
||||
|
||||
pdf::PDFDocument m_leftDocument;
|
||||
pdf::PDFDocument m_rightDocument;
|
||||
pdf::PDFDocument m_combinedDocument;
|
||||
|
||||
pdf::PDFDiffResult m_diffResult;
|
||||
pdf::PDFDiffResult m_filteredDiffResult; ///< Difference result with filters applied
|
||||
pdf::PDFDiffResultNavigator m_diffNavigator; ///< Difference navigator
|
||||
ComparedDocumentMapper m_documentMapper;
|
||||
DifferencesDrawInterface m_drawInterface;
|
||||
};
|
||||
|
||||
} // namespace pdfdiff
|
||||
|
||||
#endif // PDFDIFF_MAINWINDOW_H
|
380
Pdf4QtDiff/mainwindow.ui
Normal file
@@ -0,0 +1,380 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>864</width>
|
||||
<height>638</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Workspace</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<layout class="QGridLayout" name="gridLayout" rowstretch="0">
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QFrame" name="documentFrame"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>864</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
<property name="title">
|
||||
<string>File</string>
|
||||
</property>
|
||||
<addaction name="actionOpen_Left"/>
|
||||
<addaction name="actionOpen_Right"/>
|
||||
<addaction name="actionClose"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuHelp">
|
||||
<property name="title">
|
||||
<string>Help</string>
|
||||
</property>
|
||||
<addaction name="actionGet_Source"/>
|
||||
<addaction name="actionBecomeASponsor"/>
|
||||
<addaction name="actionAbout"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuToolbars">
|
||||
<property name="title">
|
||||
<string>Toolbars</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuCompare">
|
||||
<property name="title">
|
||||
<string>Compare</string>
|
||||
</property>
|
||||
<addaction name="actionCompare"/>
|
||||
<addaction name="actionCreate_Compare_Report"/>
|
||||
<addaction name="actionSave_Differences_to_XML"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuView">
|
||||
<property name="title">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuView_2">
|
||||
<property name="title">
|
||||
<string>View</string>
|
||||
</property>
|
||||
<addaction name="actionView_Differences"/>
|
||||
<addaction name="actionView_Left"/>
|
||||
<addaction name="actionView_Right"/>
|
||||
<addaction name="actionView_Overlay"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuFilter">
|
||||
<property name="title">
|
||||
<string>Filter</string>
|
||||
</property>
|
||||
<addaction name="actionFilter_Text"/>
|
||||
<addaction name="actionFilter_Vector_Graphics"/>
|
||||
<addaction name="actionFilter_Images"/>
|
||||
<addaction name="actionFilter_Shading"/>
|
||||
<addaction name="actionFilter_Page_Movement"/>
|
||||
</widget>
|
||||
<addaction name="actionPrevious_Difference"/>
|
||||
<addaction name="actionNext_Difference"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="menuView_2"/>
|
||||
<addaction name="menuFilter"/>
|
||||
<addaction name="actionShow_Pages_with_Differences"/>
|
||||
<addaction name="actionSynchronize_View_with_Differences"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionDisplay_Differences"/>
|
||||
<addaction name="actionDisplay_Markers"/>
|
||||
</widget>
|
||||
<addaction name="menuFile"/>
|
||||
<addaction name="menuView"/>
|
||||
<addaction name="menuCompare"/>
|
||||
<addaction name="menuToolbars"/>
|
||||
<addaction name="menuHelp"/>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
<action name="actionGet_Source">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/get-source.svg</normaloff>:/pdfdiff/resources/get-source.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Get Source</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionAbout">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/about.svg</normaloff>:/pdfdiff/resources/about.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>About...</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>F1</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionOpen_Left">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/open-left.svg</normaloff>:/pdfdiff/resources/open-left.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open Left...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionOpen_Right">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/open-right.svg</normaloff>:/pdfdiff/resources/open-right.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Open Right...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionCompare">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/compare.svg</normaloff>:/pdfdiff/resources/compare.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Compare</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>F5</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionClose">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/close.svg</normaloff>:/pdfdiff/resources/close.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Close</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+F4</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionPrevious_Difference">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/prev-diff.svg</normaloff>:/pdfdiff/resources/prev-diff.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Previous Difference</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Shift+F6</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionNext_Difference">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/next-diff.svg</normaloff>:/pdfdiff/resources/next-diff.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Next Difference</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>F6</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionCreate_Compare_Report">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/create-compare-report.svg</normaloff>:/pdfdiff/resources/create-compare-report.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Create Compare Report...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionFilter_Text">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/filter-text.svg</normaloff>:/pdfdiff/resources/filter-text.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Filter Text</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionFilter_Vector_Graphics">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/filter-vector-graphics.svg</normaloff>:/pdfdiff/resources/filter-vector-graphics.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Filter Vector Graphics</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionFilter_Images">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/filter-images.svg</normaloff>:/pdfdiff/resources/filter-images.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Filter Images</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionFilter_Shading">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/filter-shading.svg</normaloff>:/pdfdiff/resources/filter-shading.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Filter Shading</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionFilter_Page_Movement">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/filter-page-movement.svg</normaloff>:/pdfdiff/resources/filter-page-movement.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Filter Page Movement</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionView_Differences">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/view-differences.svg</normaloff>:/pdfdiff/resources/view-differences.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View Differences</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionView_Left">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/view-left.svg</normaloff>:/pdfdiff/resources/view-left.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View Left</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionView_Right">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/view-right.svg</normaloff>:/pdfdiff/resources/view-right.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View Right</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionView_Overlay">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/view-overlay.svg</normaloff>:/pdfdiff/resources/view-overlay.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>View Overlay</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionShow_Pages_with_Differences">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/show-p-with-diff.svg</normaloff>:/pdfdiff/resources/show-p-with-diff.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show Pages with Differences</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Show Pages with Differences</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSave_Differences_to_XML">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/save-diff-to-xml.svg</normaloff>:/pdfdiff/resources/save-diff-to-xml.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Save Differences to XML...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSynchronize_View_with_Differences">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/synchronize-view.svg</normaloff>:/pdfdiff/resources/synchronize-view.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Synchronize View with Differences</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDisplay_Differences">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/display-differences.svg</normaloff>:/pdfdiff/resources/display-differences.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Display Differences</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDisplay_Markers">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/display-markers.svg</normaloff>:/pdfdiff/resources/display-markers.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Display Markers</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionBecomeASponsor">
|
||||
<property name="icon">
|
||||
<iconset resource="resources.qrc">
|
||||
<normaloff>:/pdfdiff/resources/wallet.svg</normaloff>:/pdfdiff/resources/wallet.svg</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Become a Sponsor</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="resources.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
28
Pdf4QtDiff/resources.qrc
Normal file
@@ -0,0 +1,28 @@
|
||||
<RCC>
|
||||
<qresource prefix="/pdfdiff">
|
||||
<file>resources/about.svg</file>
|
||||
<file>resources/close.svg</file>
|
||||
<file>resources/compare.svg</file>
|
||||
<file>resources/get-source.svg</file>
|
||||
<file>resources/open-left.svg</file>
|
||||
<file>resources/open-right.svg</file>
|
||||
<file>resources/create-compare-report.svg</file>
|
||||
<file>resources/filter-images.svg</file>
|
||||
<file>resources/filter-page-movement.svg</file>
|
||||
<file>resources/filter-shading.svg</file>
|
||||
<file>resources/filter-text.svg</file>
|
||||
<file>resources/filter-vector-graphics.svg</file>
|
||||
<file>resources/next-diff.svg</file>
|
||||
<file>resources/prev-diff.svg</file>
|
||||
<file>resources/save-diff-to-xml.svg</file>
|
||||
<file>resources/show-p-with-diff.svg</file>
|
||||
<file>resources/synchronize-view.svg</file>
|
||||
<file>resources/view-differences.svg</file>
|
||||
<file>resources/view-left.svg</file>
|
||||
<file>resources/view-overlay.svg</file>
|
||||
<file>resources/view-right.svg</file>
|
||||
<file>resources/display-differences.svg</file>
|
||||
<file>resources/display-markers.svg</file>
|
||||
<file>resources/wallet.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
59
Pdf4QtDiff/resources/about.svg
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="23.693px" height="23.693px" viewBox="0 0 23.693 23.693" enable-background="new 0 0 23.693 23.693" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M13.38,18.655c-0.059-0.104-0.113-0.197-0.162-0.295
|
||||
c-0.049-0.094-0.094-0.193-0.15-0.314c2.381-1.055,4.846-1.551,7.473-1.291c-0.025,0.234-0.049,0.439-0.074,0.674
|
||||
c-1.223-0.115-2.428-0.063-3.627,0.16C15.644,17.807,14.491,18.167,13.38,18.655z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M13.365,6.439c-0.098-0.202-0.193-0.391-0.299-0.61
|
||||
c2.379-1.049,4.842-1.556,7.473-1.296c-0.025,0.234-0.049,0.452-0.072,0.681C17.98,4.965,15.642,5.462,13.365,6.439z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M20.54,6.982c-0.025,0.234-0.049,0.444-0.074,0.674
|
||||
c-2.48-0.245-4.826,0.247-7.096,1.227c-0.104-0.201-0.199-0.394-0.307-0.61C15.448,7.219,17.909,6.72,20.54,6.982z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M20.54,14.333c-0.027,0.221-0.051,0.422-0.076,0.654
|
||||
c-2.477-0.236-4.82,0.238-7.094,1.227c-0.078-0.154-0.168-0.303-0.223-0.467c-0.02-0.047,0.047-0.166,0.102-0.191
|
||||
c0.344-0.158,0.693-0.316,1.047-0.447c1.043-0.377,2.113-0.629,3.211-0.766c0.965-0.119,1.936-0.137,2.904-0.043
|
||||
C20.445,14.305,20.482,14.319,20.54,14.333z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M20.538,11.866c-0.021,0.214-0.043,0.388-0.055,0.562
|
||||
c-0.01,0.098-0.063,0.117-0.146,0.109c-0.217-0.018-0.438-0.033-0.654-0.045c-1.076-0.061-2.139,0.057-3.195,0.273
|
||||
c-1.07,0.223-2.105,0.553-3.115,1.01c-0.102-0.199-0.199-0.395-0.309-0.615C15.445,12.099,17.913,11.617,20.538,11.866z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M20.544,9.427c-0.031,0.234-0.061,0.441-0.092,0.672
|
||||
c-2.473-0.264-4.803,0.258-7.082,1.224c-0.098-0.189-0.197-0.386-0.307-0.605C15.441,9.657,17.909,9.173,20.544,9.427z"/>
|
||||
</g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M22.095,1.856c-1.793,0.011-3.576,0.119-5.346,0.417
|
||||
c-1.654,0.278-3.273,0.676-4.799,1.397c-0.059,0.029-0.152,0.023-0.214-0.002c-0.229-0.091-0.447-0.206-0.676-0.297
|
||||
C9.561,2.771,7.998,2.426,6.405,2.191C4.816,1.956,3.219,1.867,1.617,1.856c-0.35-0.003-0.456,0.103-0.456,0.455v4.46
|
||||
c0.001,2.629,0.004,5.255,0.006,7.883c0,1.59-0.004,3.18-0.004,4.771c-0.001,0.26,0.13,0.391,0.389,0.393
|
||||
c1.489,0.002,2.97,0.088,4.444,0.287c1.208,0.162,2.4,0.404,3.569,0.752c0.137,0.041,0.274,0.088,0.412,0.135l0.04,0.008
|
||||
c0.898,0.32,1.832,0.836,1.832,0.836c0.218-0.205,1.208-0.6,1.697-0.783c0.098-0.039,0.174-0.068,0.221-0.084
|
||||
c0.029-0.012,0.049-0.018,0.049-0.018c1.018-0.318,2.055-0.557,3.111-0.732c1.701-0.279,3.418-0.396,5.146-0.4
|
||||
c0.352,0,0.461-0.113,0.461-0.467V2.293C22.532,1.975,22.413,1.854,22.095,1.856z M1.853,19.13c0-5.527,0-11.044,0-16.584
|
||||
c0.081,0,0.156,0,0.233,0c1.458,0.01,2.908,0.122,4.349,0.343c1.626,0.249,3.221,0.625,4.743,1.271
|
||||
c0.244,0.104,0.337,0.218,0.336,0.498c-0.013,3.92-0.009,7.84-0.009,11.76c0,1.396,0,2.799,0,4.199c0,0.063,0,0.129,0,0.213
|
||||
C8.405,19.534,5.158,19.2,1.853,19.13z M21.841,19.128c-3.295,0.072-6.543,0.404-9.652,1.701c0-0.104,0-0.18,0-0.258
|
||||
c0-5.324,0.002-10.65-0.006-15.977c0-0.232,0.081-0.321,0.273-0.405c1.162-0.506,2.371-0.841,3.611-1.089
|
||||
c1.842-0.371,3.705-0.534,5.582-0.555c0.061,0,0.119,0,0.191,0C21.841,8.075,21.841,13.593,21.841,19.128z"/>
|
||||
<g>
|
||||
<title>info@1x</title>
|
||||
<g id="Layer_2">
|
||||
<g id="General">
|
||||
<g id="Info_2x.png">
|
||||
<path fill="#292D32" d="M7.755,15.067c-0.187,0.016-0.375-0.027-0.537-0.125c-0.118-0.119-0.175-0.289-0.153-0.457
|
||||
c0.004-0.141,0.021-0.279,0.049-0.416c0.028-0.158,0.064-0.314,0.109-0.467l0.491-1.69c0.05-0.168,0.084-0.339,0.099-0.513
|
||||
c0-0.188,0.025-0.317,0.025-0.392c0.01-0.335-0.133-0.655-0.387-0.873c-0.314-0.239-0.706-0.358-1.1-0.332
|
||||
c-0.283,0.003-0.563,0.05-0.833,0.139c-0.294,0.09-0.604,0.199-0.929,0.328l-0.142,0.549c0.095-0.034,0.212-0.071,0.345-0.112
|
||||
c0.126-0.037,0.259-0.057,0.392-0.058c0.186-0.021,0.374,0.024,0.528,0.128c0.107,0.127,0.157,0.291,0.139,0.453
|
||||
c-0.002,0.141-0.017,0.281-0.047,0.417c-0.029,0.146-0.066,0.3-0.112,0.462l-0.496,1.701c-0.04,0.156-0.072,0.318-0.096,0.479
|
||||
c-0.019,0.137-0.029,0.275-0.029,0.416c-0.001,0.336,0.152,0.654,0.417,0.863c0.319,0.244,0.716,0.367,1.117,0.342
|
||||
c0.283,0.004,0.564-0.035,0.833-0.121c0.238-0.08,0.552-0.195,0.946-0.346l0.133-0.527c-0.107,0.047-0.217,0.082-0.329,0.109
|
||||
C8.047,15.059,7.901,15.073,7.755,15.067z M7.443,6.733C7.135,6.725,6.837,6.837,6.61,7.044
|
||||
c-0.417,0.36-0.463,0.989-0.104,1.405C6.538,8.486,6.573,8.522,6.61,8.553c0.475,0.424,1.191,0.424,1.666,0
|
||||
c0.417-0.363,0.46-0.994,0.098-1.411C8.343,7.108,8.311,7.075,8.276,7.044C8.05,6.837,7.751,6.724,7.443,6.733z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.0 KiB |
29
Pdf4QtDiff/resources/close.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="23.693px" height="23.693px" viewBox="0 0 23.693 23.693" enable-background="new 0 0 23.693 23.693" xml:space="preserve">
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M13.472,11.669c-0.259,0-0.498,0-0.748,0
|
||||
c-0.014,0.076-0.025,0.136-0.037,0.194c-0.098,0.54-0.514,0.781-1.03,0.602c-0.233-0.081-0.406-0.433-0.4-0.815
|
||||
c0.005-0.395,0.18-0.725,0.423-0.8c0.029-0.009,0.061-0.014,0.092-0.014c0.562-0.001,1.123-0.001,1.701-0.001
|
||||
C13.472,11.11,13.472,11.371,13.472,11.669z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M19.456,21.147c0-6.753,0-13.484,0-20.231
|
||||
c-0.121,0-0.217,0-0.312,0c-2.31,0-4.617,0.002-6.926-0.003c-0.149,0-0.303-0.025-0.445-0.067
|
||||
c-0.534-0.159-1.064-0.328-1.628-0.504c0,0.207,0,0.387,0,0.581c-1.982,0-3.938,0-5.89,0C4.244,0.96,4.23,0.982,4.23,1.005
|
||||
C4.229,1.726,4.229,2.448,4.228,3.17l0,0V18c-0.003,0.032-0.006,0.067-0.006,0.104c0.009,0.926,0.004,1.853,0.004,2.778
|
||||
c0,0.086,0,0.169,0,0.279c-0.582,0-1.129,0-1.673,0c0,0.295,0,0.561,0,0.85c2.538,0,5.059,0,7.604,0c0,0.456,0,0.892,0,1.34
|
||||
c1.852-0.346,3.683-0.675,5.505-1.032c1.045-0.204,2.087-0.368,3.157-0.319c0.686,0.031,1.373,0.005,2.063,0.005
|
||||
c0.084,0,0.167,0,0.26,0c0-0.299,0-0.566,0-0.857C20.575,21.147,20.028,21.147,19.456,21.147z M10.135,21.141
|
||||
c-1.128,0-2.235,0-3.379,0c0-0.848,0-1.691,0-2.533c0-1.087,0-2.169,0-3.252V6.721C6.758,6.72,6.76,6.719,6.762,6.718
|
||||
c0-1.079,0-2.16,0-3.253c1.143,0,2.256,0,3.373,0C10.135,9.366,10.135,15.256,10.135,21.141z M10.137,2.611
|
||||
c-1.409,0-2.803,0-4.211,0c0,0.576,0,1.145,0,1.71l0,0v13.737c-0.002,0.931,0,1.858,0,2.789c0,0.095,0,0.188,0,0.295
|
||||
c-0.294,0-0.563,0-0.847,0c0-0.741,0-1.48,0-2.216c0-0.63,0-1.26,0-1.888V5.111c0.002,0.001,0.002,0.002,0.006,0.004
|
||||
c0-1.167,0-2.25,0-3.341c1.694,0,3.367,0,5.052,0C10.137,2.053,10.137,2.319,10.137,2.611z M16.922,21.021c0,0.063,0,0.126,0,0.211
|
||||
c-1.972,0.368-3.927,0.733-5.904,1.103c0-6.951,0-13.883,0-20.839c0.669,0.208,1.321,0.412,1.975,0.616
|
||||
c1.242,0.386,2.482,0.774,3.727,1.155c0.158,0.048,0.207,0.116,0.207,0.281C16.922,9.372,16.923,15.196,16.922,21.021z
|
||||
M18.607,21.144c-0.283,0-0.543,0-0.834,0c0-0.11,0-0.213,0-0.313c0-5.943-0.001-11.888,0.007-17.832
|
||||
c0-0.227-0.069-0.31-0.28-0.372c-0.811-0.238-1.615-0.498-2.421-0.75c-0.06-0.019-0.116-0.04-0.172-0.093c1.227,0,2.454,0,3.7,0
|
||||
C18.607,8.231,18.607,14.675,18.607,21.144z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.7 KiB |
16
Pdf4QtDiff/resources/compare.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M17.279,10.45L21,6.729
|
||||
l-3.721-3.72"/>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M6.72,13.55L3,17.27
|
||||
l3.72,3.721"/>
|
||||
<g>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M3,6.729h18"/>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M21,17.27H3"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1022 B |
34
Pdf4QtDiff/resources/create-compare-report.svg
Normal file
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M14.596,15.352c-0.132,0-0.264-0.051-0.363-0.151c-0.201-0.2-0.201-0.526,0-0.728l1.465-1.467
|
||||
l-1.465-1.465c-0.201-0.201-0.201-0.527,0-0.728c0.2-0.201,0.526-0.201,0.727,0l1.83,1.829c0.201,0.201,0.201,0.526,0,0.728
|
||||
l-1.83,1.831C14.858,15.301,14.728,15.352,14.596,15.352z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M9.404,20.532c-0.131,0-0.264-0.05-0.364-0.15l-1.829-1.83c-0.201-0.201-0.201-0.526,0-0.728l1.829-1.829
|
||||
c0.201-0.201,0.527-0.201,0.728,0s0.201,0.526,0,0.728l-1.465,1.466l1.465,1.466c0.201,0.201,0.201,0.526,0,0.728
|
||||
C9.667,20.482,9.536,20.532,9.404,20.532z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M16.425,13.52h-8.85c-0.284,0-0.515-0.23-0.515-0.514c0-0.285,0.23-0.515,0.515-0.515h8.85
|
||||
c0.284,0,0.515,0.23,0.515,0.515C16.939,13.289,16.709,13.52,16.425,13.52z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M16.425,18.703h-8.85c-0.284,0-0.515-0.23-0.515-0.515s0.23-0.515,0.515-0.515h8.85
|
||||
c0.284,0,0.515,0.23,0.515,0.515S16.709,18.703,16.425,18.703z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M22,10v5c0,5-2,7-7,7H9
|
||||
c-5,0-7-2-7-7V9c0-5,2-7,7-7h5"/>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M22,10h-4c-3,0-4-1-4-4
|
||||
V2L22,10z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
13
Pdf4QtDiff/resources/display-differences.svg
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="#292D32" d="M22.596,9.102c0-5.328-2.373-7.704-7.693-7.704H9.098c-5.321,0-7.693,2.375-7.693,7.704v5.805
|
||||
c0,5.321,2.373,7.694,7.693,7.694h5.805c5.32,0,7.693-2.373,7.693-7.694V9.102z M20.739,14.907c0,4.364-1.473,5.837-5.837,5.837
|
||||
H9.098c-4.365,0-5.838-1.473-5.838-5.837V9.102c0-4.328,1.449-5.812,5.729-5.836v0l0.108-0.011h5.805
|
||||
c4.364,0,5.837,1.476,5.837,5.848V14.907z"/>
|
||||
<rect x="6.734" y="7.443" fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="10.531" height="0.781"/>
|
||||
<rect x="6.734" y="11.662" fill="none" stroke="#E5FF32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="10.531" height="0.781"/>
|
||||
<rect x="6.734" y="15.775" fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="10.531" height="0.781"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
16
Pdf4QtDiff/resources/display-markers.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="#292D32" d="M22.596,9.102c0-5.328-2.373-7.704-7.693-7.704H9.098c-5.321,0-7.693,2.375-7.693,7.704v5.805
|
||||
c0,5.321,2.373,7.694,7.693,7.694h5.805c5.32,0,7.693-2.373,7.693-7.694V9.102z M20.739,14.907c0,4.364-1.473,5.837-5.837,5.837
|
||||
H9.098c-4.365,0-5.838-1.473-5.838-5.837V9.102c0-4.328,1.449-5.812,5.729-5.836v0l0.108-0.011h5.805
|
||||
c4.364,0,5.837,1.476,5.837,5.848V14.907z"/>
|
||||
<rect x="6.734" y="7.443" fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="10.531" height="0.781"/>
|
||||
<rect x="6.734" y="11.662" fill="none" stroke="#E5FF32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="0.625" height="0.781"/>
|
||||
<rect x="6.734" y="15.775" fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="10.531" height="0.781"/>
|
||||
<rect x="9.5" y="11.662" fill="none" stroke="#E5FF32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="0.625" height="0.781"/>
|
||||
<rect x="12.266" y="11.662" fill="none" stroke="#E5FF32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="0.625" height="0.781"/>
|
||||
<rect x="15.063" y="11.662" fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" width="2.203" height="0.781"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
36
Pdf4QtDiff/resources/filter-images.svg
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="#292D32" d="M7.08,16.1c-0.36,0-0.72-0.09-1.05-0.279C5.36,15.44,4.96,14.76,4.96,14v-3.57c0-0.26-0.17-0.7-0.38-0.95
|
||||
L2.06,6.83C1.59,6.37,1.25,5.57,1.25,4.96V3.41c0-1.21,0.92-2.17,2.1-2.17h8.9c1.16,0,2.1,0.94,2.1,2.1v1.48
|
||||
c0,0.78-0.449,1.64-0.89,2.08l-2.93,2.59c-0.23,0.19-0.42,0.65-0.42,0.99v2.9c0,0.689-0.42,1.459-0.97,1.789l-0.92,0.6
|
||||
C7.86,15.99,7.47,16.1,7.08,16.1z M3.35,2.75c-0.34,0-0.6,0.29-0.6,0.67v1.55c0,0.17,0.17,0.6,0.39,0.82L5.72,8.5
|
||||
c0.38,0.47,0.75,1.24,0.75,1.93V14c0,0.301,0.19,0.45,0.31,0.51c0.16,0.09,0.42,0.141,0.64,0l0.93-0.6
|
||||
c0.12-0.07,0.26-0.35,0.26-0.52v-2.9C8.61,9.7,9,8.83,9.55,8.36l2.88-2.55c0.179-0.18,0.419-0.67,0.419-0.99V3.34
|
||||
c0-0.33-0.27-0.6-0.6-0.6h-8.9V2.75z"/>
|
||||
<path fill="#292D32" d="M15,22.75H9c-5.43,0-7.75-2.32-7.75-7.75v-3c0-0.41,0.34-0.75,0.75-0.75S2.75,11.59,2.75,12v3
|
||||
c0,4.609,1.64,6.25,6.25,6.25h6c4.609,0,6.25-1.641,6.25-6.25V9c0-2.9-0.68-4.58-2.21-5.45c-0.16-0.09-0.69-0.33-2.21-0.57
|
||||
c-0.41-0.06-0.689-0.45-0.62-0.86c0.069-0.41,0.46-0.69,0.86-0.62c1.31,0.21,2.199,0.45,2.709,0.74C21.8,3.39,22.75,5.54,22.75,9v6
|
||||
C22.75,20.43,20.43,22.75,15,22.75z"/>
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M18.508,18.134c0.512-0.001,0.788-0.274,0.788-0.782
|
||||
c0.001-1.741,0.001-3.483,0-5.225c0-0.51-0.271-0.78-0.787-0.78c-2.307-0.001-4.613-0.001-6.92,0c-0.51,0-0.782,0.274-0.783,0.788
|
||||
c0,1.736,0,3.472,0,5.208c0,0.519,0.276,0.79,0.797,0.791c1.152,0,2.301,0,3.453,0C16.206,18.134,17.357,18.134,18.508,18.134z
|
||||
M11.602,17.579c-0.216-0.001-0.252-0.036-0.252-0.258c0-1.721,0-3.441,0-5.162c0-0.226,0.039-0.264,0.263-0.264
|
||||
c2.292,0,4.583,0,6.874,0c0.233,0,0.269,0.036,0.269,0.275c0,1.714,0,3.43,0,5.146c0,0.228-0.035,0.262-0.265,0.262
|
||||
c-1.15,0-2.301,0-3.452,0C13.893,17.579,12.747,17.579,11.602,17.579z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M18.059,14.914c-0.536-0.528-1.067-1.062-1.601-1.594
|
||||
c-0.039-0.039-0.081-0.078-0.138-0.132c-0.754,0.761-1.498,1.513-2.262,2.283c-0.24-0.254-0.466-0.492-0.702-0.744
|
||||
c-0.471,0.475-0.916,0.924-1.359,1.373c-0.024,0.025-0.05,0.061-0.05,0.093c-0.004,0.264-0.003,0.528-0.003,0.795
|
||||
c2.083,0,4.145,0,6.218,0c0-0.068,0-0.125,0-0.183c0-0.543-0.003-1.087,0.002-1.631C18.165,15.067,18.136,14.991,18.059,14.914z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M12.782,14.161c0.471-0.001,0.834-0.363,0.837-0.834
|
||||
c0.003-0.479-0.362-0.844-0.841-0.843c-0.47,0-0.833,0.361-0.835,0.832C11.94,13.794,12.306,14.162,12.782,14.161z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M20.117,13.062c0-0.076-0.001-0.156-0.009-0.234
|
||||
c-0.026-0.273-0.283-0.521-0.533-0.562v0.758c0.002,0.012,0.003,0.022,0.003,0.034c0.006,1.679,0.004,3.357,0.004,5.036
|
||||
c0,0.264-0.021,0.285-0.287,0.285c-1.414,0.001-2.827,0.011-4.24,0.001v-0.005h-0.534c-0.119-0.001-0.237-0.002-0.355-0.004
|
||||
c-0.096-0.002-0.193,0-0.288,0.004h-1.228h-0.566h-0.284c0.004,0.025,0.009,0.05,0.017,0.073c0.096,0.3,0.357,0.472,0.716,0.472
|
||||
c2.255,0.001,4.509-0.007,6.763,0.007c0.462,0.003,0.835-0.261,0.829-0.828C20.105,16.42,20.117,14.74,20.117,13.062z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.5 KiB |
67
Pdf4QtDiff/resources/filter-page-movement.svg
Normal file
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="#292D32" d="M7.08,16.1c-0.36,0-0.72-0.09-1.05-0.279C5.36,15.44,4.96,14.76,4.96,14v-3.57c0-0.26-0.17-0.7-0.38-0.95
|
||||
L2.06,6.83C1.59,6.37,1.25,5.57,1.25,4.96V3.41c0-1.21,0.92-2.17,2.1-2.17h8.9c1.16,0,2.1,0.94,2.1,2.1v1.48
|
||||
c0,0.78-0.449,1.64-0.89,2.08l-2.93,2.59c-0.23,0.19-0.42,0.65-0.42,0.99v2.9c0,0.689-0.42,1.459-0.97,1.789l-0.92,0.6
|
||||
C7.86,15.99,7.47,16.1,7.08,16.1z M3.35,2.75c-0.34,0-0.6,0.29-0.6,0.67v1.55c0,0.17,0.17,0.6,0.39,0.82L5.72,8.5
|
||||
c0.38,0.47,0.75,1.24,0.75,1.93V14c0,0.301,0.19,0.45,0.31,0.51c0.16,0.09,0.42,0.141,0.64,0l0.93-0.6
|
||||
c0.12-0.07,0.26-0.35,0.26-0.52v-2.9C8.61,9.7,9,8.83,9.55,8.36l2.88-2.55c0.179-0.18,0.419-0.67,0.419-0.99V3.34
|
||||
c0-0.33-0.27-0.6-0.6-0.6h-8.9V2.75z"/>
|
||||
<path fill="#292D32" d="M15,22.75H9c-5.43,0-7.75-2.32-7.75-7.75v-3c0-0.41,0.34-0.75,0.75-0.75S2.75,11.59,2.75,12v3
|
||||
c0,4.609,1.64,6.25,6.25,6.25h6c4.609,0,6.25-1.641,6.25-6.25V9c0-2.9-0.68-4.58-2.21-5.45c-0.16-0.09-0.69-0.33-2.21-0.57
|
||||
c-0.41-0.06-0.689-0.45-0.62-0.86c0.069-0.41,0.46-0.69,0.86-0.62c1.31,0.21,2.199,0.45,2.709,0.74C21.8,3.39,22.75,5.54,22.75,9v6
|
||||
C22.75,20.43,20.43,22.75,15,22.75z"/>
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M17.311,13.291v-0.002c0.222,0,0.445,0,0.668,0
|
||||
c0.073,0,0.073,0,0.073,0.072c0,0.286,0,0.571,0,0.857c-0.002,0.081,0.024,0.144,0.104,0.176c0.076,0.028,0.139,0,0.193-0.054
|
||||
c0.514-0.518,1.03-1.03,1.542-1.543c0.106-0.108,0.106-0.191,0.002-0.296c-0.243-0.244-0.488-0.488-0.733-0.735
|
||||
c-0.269-0.269-0.541-0.542-0.813-0.811c-0.065-0.065-0.14-0.083-0.203-0.052c-0.076,0.036-0.094,0.1-0.092,0.176
|
||||
c0,0.278,0,0.557,0,0.835c-0.002,0.099,0.016,0.092-0.089,0.092c-0.414,0-0.827-0.002-1.242,0.003
|
||||
c-0.465,0.004-0.896,0.128-1.279,0.393c-0.318,0.217-0.567,0.511-0.778,0.831c-0.3,0.447-0.515,0.939-0.726,1.433
|
||||
c-0.171,0.393-0.338,0.788-0.567,1.153c-0.11,0.176-0.243,0.34-0.414,0.465c-0.196,0.146-0.425,0.197-0.667,0.193
|
||||
c-0.362,0-0.724,0-1.087,0c-0.118,0-0.178,0.061-0.178,0.174c0,0.309,0,0.612,0,0.924c0,0.126,0.056,0.183,0.184,0.183
|
||||
c0.369,0.002,0.74,0.002,1.11,0.002c0.421-0.002,0.818-0.103,1.185-0.315c0.362-0.207,0.632-0.513,0.866-0.848
|
||||
c0.235-0.33,0.412-0.688,0.579-1.056c0.188-0.419,0.372-0.839,0.565-1.252c0.12-0.256,0.271-0.488,0.472-0.693
|
||||
c0.182-0.182,0.399-0.288,0.656-0.3C16.863,13.284,17.088,13.291,17.311,13.291z M15.414,15.279
|
||||
c-0.015,0.023-0.021,0.037-0.025,0.05c-0.193,0.438-0.386,0.869-0.636,1.275c-0.009,0.02-0.004,0.055,0.009,0.068
|
||||
c0.102,0.125,0.202,0.249,0.307,0.369c0.255,0.286,0.572,0.476,0.93,0.595c0.229,0.078,0.467,0.11,0.708,0.116
|
||||
c0.42,0.01,0.842,0.006,1.261,0.008c0.092,0,0.085-0.012,0.085,0.085c0,0.286,0,0.571,0,0.855c0,0.079,0.031,0.136,0.106,0.166
|
||||
c0.071,0.028,0.131,0.004,0.185-0.048c0.521-0.523,1.043-1.044,1.563-1.567c0.088-0.085,0.086-0.18-0.001-0.265
|
||||
c-0.493-0.495-0.982-0.987-1.477-1.478c-0.037-0.037-0.075-0.075-0.116-0.109c-0.051-0.043-0.113-0.049-0.176-0.021
|
||||
c-0.061,0.03-0.085,0.081-0.085,0.147c0,0.015,0,0.03,0,0.045c0,0.282,0,0.565,0,0.85c0,0.038-0.003,0.061-0.051,0.057
|
||||
c-0.422,0-0.846,0.006-1.269,0c-0.29-0.002-0.541-0.11-0.75-0.311c-0.163-0.154-0.278-0.348-0.39-0.541
|
||||
C15.532,15.518,15.476,15.402,15.414,15.279z M13.666,14.488c0.009-0.024,0.019-0.041,0.026-0.055
|
||||
c0.188-0.437,0.384-0.865,0.633-1.269c0.012-0.018,0.007-0.053-0.003-0.069c-0.06-0.076-0.121-0.159-0.184-0.23
|
||||
c-0.465-0.535-1.043-0.839-1.758-0.854c-0.395-0.009-0.788-0.005-1.185-0.003c-0.112,0-0.172,0.061-0.172,0.171
|
||||
c0,0.306,0,0.613,0,0.918c0,0.137,0.054,0.187,0.189,0.187c0.377,0.005,0.755,0,1.133,0.007c0.328,0.006,0.609,0.133,0.817,0.387
|
||||
c0.119,0.146,0.221,0.307,0.319,0.466C13.551,14.251,13.602,14.366,13.666,14.488z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M17.311,13.291c-0.223,0-0.447-0.007-0.669,0.006
|
||||
c-0.257,0.012-0.475,0.118-0.656,0.3c-0.2,0.205-0.352,0.438-0.472,0.693c-0.193,0.413-0.378,0.833-0.565,1.252
|
||||
c-0.167,0.367-0.344,0.726-0.579,1.056c-0.234,0.335-0.504,0.641-0.866,0.848c-0.366,0.213-0.764,0.313-1.185,0.315
|
||||
c-0.371,0-0.741,0-1.11-0.002c-0.128,0-0.184-0.057-0.184-0.183c0-0.312,0-0.615,0-0.924c0-0.113,0.06-0.174,0.178-0.174
|
||||
c0.364,0,0.726,0,1.087,0c0.242,0.004,0.471-0.047,0.667-0.193c0.171-0.125,0.304-0.289,0.414-0.465
|
||||
c0.229-0.365,0.396-0.761,0.567-1.153c0.211-0.493,0.426-0.985,0.726-1.433c0.211-0.319,0.46-0.613,0.778-0.831
|
||||
c0.384-0.265,0.814-0.389,1.279-0.393c0.415-0.005,0.828-0.003,1.242-0.003c0.104,0,0.087,0.007,0.089-0.092
|
||||
c0-0.278,0-0.557,0-0.835c-0.002-0.076,0.016-0.14,0.092-0.176c0.063-0.031,0.138-0.013,0.203,0.052
|
||||
c0.272,0.269,0.545,0.542,0.813,0.811c0.245,0.247,0.49,0.491,0.733,0.735c0.104,0.104,0.104,0.188-0.002,0.296
|
||||
c-0.512,0.513-1.028,1.025-1.542,1.543c-0.055,0.054-0.117,0.082-0.193,0.054c-0.08-0.032-0.106-0.095-0.104-0.176
|
||||
c0-0.286,0-0.571,0-0.857c0-0.072,0-0.072-0.073-0.072c-0.223,0-0.446,0-0.668,0V13.291z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M15.414,15.279c0.062,0.123,0.118,0.238,0.179,0.348
|
||||
c0.111,0.193,0.227,0.387,0.39,0.541c0.209,0.2,0.46,0.309,0.75,0.311c0.423,0.006,0.847,0,1.269,0
|
||||
c0.048,0.004,0.051-0.019,0.051-0.057c0-0.284,0-0.567,0-0.85c0-0.015,0-0.03,0-0.045c0-0.066,0.024-0.117,0.085-0.147
|
||||
c0.063-0.028,0.125-0.022,0.176,0.021c0.041,0.034,0.079,0.072,0.116,0.109c0.494,0.49,0.983,0.982,1.477,1.478
|
||||
c0.087,0.085,0.089,0.18,0.001,0.265c-0.521,0.523-1.043,1.044-1.563,1.567c-0.054,0.052-0.113,0.076-0.185,0.048
|
||||
c-0.075-0.03-0.106-0.087-0.106-0.166c0-0.284,0-0.569,0-0.855c0-0.097,0.007-0.085-0.085-0.085
|
||||
c-0.419-0.002-0.841,0.002-1.261-0.008c-0.241-0.006-0.479-0.038-0.708-0.116c-0.357-0.119-0.675-0.309-0.93-0.595
|
||||
c-0.104-0.12-0.205-0.244-0.307-0.369c-0.013-0.014-0.018-0.049-0.009-0.068c0.25-0.406,0.442-0.838,0.636-1.275
|
||||
C15.393,15.316,15.399,15.303,15.414,15.279z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M13.666,14.488c-0.064-0.122-0.115-0.237-0.184-0.345
|
||||
c-0.099-0.159-0.2-0.32-0.319-0.466c-0.208-0.254-0.489-0.381-0.817-0.387c-0.378-0.007-0.755-0.002-1.133-0.007
|
||||
c-0.135,0-0.189-0.05-0.189-0.187c0-0.306,0-0.612,0-0.918c0-0.111,0.06-0.171,0.172-0.171c0.396-0.002,0.79-0.006,1.185,0.003
|
||||
c0.715,0.016,1.293,0.319,1.758,0.854c0.063,0.071,0.124,0.154,0.184,0.23c0.01,0.017,0.015,0.052,0.003,0.069
|
||||
c-0.249,0.403-0.444,0.832-0.633,1.269C13.685,14.447,13.675,14.464,13.666,14.488z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
37
Pdf4QtDiff/resources/filter-shading.svg
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="#292D32" d="M7.08,16.1c-0.36,0-0.72-0.09-1.05-0.279C5.36,15.44,4.96,14.76,4.96,14v-3.57c0-0.26-0.17-0.7-0.38-0.95
|
||||
L2.06,6.83C1.59,6.37,1.25,5.57,1.25,4.96V3.41c0-1.21,0.92-2.17,2.1-2.17h8.9c1.16,0,2.1,0.94,2.1,2.1v1.48
|
||||
c0,0.78-0.449,1.64-0.89,2.08l-2.93,2.59c-0.23,0.19-0.42,0.65-0.42,0.99v2.9c0,0.689-0.42,1.459-0.97,1.789l-0.92,0.6
|
||||
C7.86,15.99,7.47,16.1,7.08,16.1z M3.35,2.75c-0.34,0-0.6,0.29-0.6,0.67v1.55c0,0.17,0.17,0.6,0.39,0.82L5.72,8.5
|
||||
c0.38,0.47,0.75,1.24,0.75,1.93V14c0,0.301,0.19,0.45,0.31,0.51c0.16,0.09,0.42,0.141,0.64,0l0.93-0.6
|
||||
c0.12-0.07,0.26-0.35,0.26-0.52v-2.9C8.61,9.7,9,8.83,9.55,8.36l2.88-2.55c0.179-0.18,0.419-0.67,0.419-0.99V3.34
|
||||
c0-0.33-0.27-0.6-0.6-0.6h-8.9V2.75z"/>
|
||||
<path fill="#292D32" d="M15,22.75H9c-5.43,0-7.75-2.32-7.75-7.75v-3c0-0.41,0.34-0.75,0.75-0.75S2.75,11.59,2.75,12v3
|
||||
c0,4.609,1.64,6.25,6.25,6.25h6c4.609,0,6.25-1.641,6.25-6.25V9c0-2.9-0.68-4.58-2.21-5.45c-0.16-0.09-0.69-0.33-2.21-0.57
|
||||
c-0.41-0.06-0.689-0.45-0.62-0.86c0.069-0.41,0.46-0.69,0.86-0.62c1.31,0.21,2.199,0.45,2.709,0.74C21.8,3.39,22.75,5.54,22.75,9v6
|
||||
C22.75,20.43,20.43,22.75,15,22.75z"/>
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M18.99,11.973c0.127,0.2,0.237,0.375,0.365,0.578
|
||||
c-2.469,1.555-4.917,3.096-7.39,4.652c-0.123-0.197-0.235-0.377-0.362-0.58C14.068,15.072,16.511,13.533,18.99,11.973z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M11.338,15.941c-0.239-0.646-0.239-0.646,0.305-0.99
|
||||
c2.014-1.27,4.032-2.536,6.04-3.817c0.221-0.141,0.366-0.136,0.537,0.04c0.082,0.083,0.177,0.155,0.29,0.253
|
||||
C16.107,12.939,13.731,14.434,11.338,15.941z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M12.451,17.748c2.408-1.518,4.782-3.01,7.186-4.523
|
||||
c0.052,0.213,0.116,0.396,0.133,0.582c0.006,0.072-0.083,0.178-0.156,0.225c-1.622,1.027-3.246,2.051-4.871,3.074
|
||||
c-0.513,0.322-1.028,0.639-1.533,0.973c-0.155,0.102-0.268,0.105-0.399-0.023C12.708,17.953,12.591,17.865,12.451,17.748z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M17.262,10.576c-2.066,1.3-4.085,2.571-6.168,3.881
|
||||
c0.047-0.32,0.076-0.58,0.13-0.834c0.013-0.063,0.1-0.119,0.164-0.162c1.608-1.019,3.219-2.036,4.834-3.044
|
||||
c0.1-0.062,0.258-0.076,0.376-0.053C16.808,10.404,17.008,10.491,17.262,10.576z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M19.867,14.727c-0.048,0.311-0.075,0.549-0.125,0.783
|
||||
c-0.014,0.066-0.083,0.135-0.145,0.174c-1.639,1.037-3.278,2.07-4.921,3.098c-0.062,0.039-0.155,0.072-0.222,0.055
|
||||
c-0.232-0.059-0.459-0.139-0.742-0.23C15.775,17.307,17.785,16.041,19.867,14.727z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M11.744,12.309c0.78-1.22,1.891-1.914,3.36-2.04
|
||||
c-1.107,0.697-2.215,1.395-3.321,2.091C11.769,12.344,11.756,12.326,11.744,12.309z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M19.174,16.811c-0.74,1.268-1.848,1.963-3.315,2.09
|
||||
C16.963,18.203,18.068,17.506,19.174,16.811z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
26
Pdf4QtDiff/resources/filter-text.svg
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="#292D32" d="M7.08,16.1c-0.36,0-0.72-0.09-1.05-0.279C5.36,15.44,4.96,14.76,4.96,14v-3.57c0-0.26-0.17-0.7-0.38-0.95
|
||||
L2.06,6.83C1.59,6.37,1.25,5.57,1.25,4.96V3.41c0-1.21,0.92-2.17,2.1-2.17h8.9c1.16,0,2.1,0.94,2.1,2.1v1.48
|
||||
c0,0.78-0.449,1.64-0.89,2.08l-2.93,2.59c-0.23,0.19-0.42,0.65-0.42,0.99v2.9c0,0.689-0.42,1.459-0.97,1.789l-0.92,0.6
|
||||
C7.86,15.99,7.47,16.1,7.08,16.1z M3.35,2.75c-0.34,0-0.6,0.29-0.6,0.67v1.55c0,0.17,0.17,0.6,0.39,0.82L5.72,8.5
|
||||
c0.38,0.47,0.75,1.24,0.75,1.93V14c0,0.301,0.19,0.45,0.31,0.51c0.16,0.09,0.42,0.141,0.64,0l0.93-0.6
|
||||
c0.12-0.07,0.26-0.35,0.26-0.52v-2.9C8.61,9.7,9,8.83,9.55,8.36l2.88-2.55c0.179-0.18,0.419-0.67,0.419-0.99V3.34
|
||||
c0-0.33-0.27-0.6-0.6-0.6h-8.9V2.75z"/>
|
||||
<path fill="#292D32" d="M15,22.75H9c-5.43,0-7.75-2.32-7.75-7.75v-3c0-0.41,0.34-0.75,0.75-0.75S2.75,11.59,2.75,12v3
|
||||
c0,4.609,1.64,6.25,6.25,6.25h6c4.609,0,6.25-1.641,6.25-6.25V9c0-2.9-0.68-4.58-2.21-5.45c-0.16-0.09-0.69-0.33-2.21-0.57
|
||||
c-0.41-0.06-0.689-0.45-0.62-0.86c0.069-0.41,0.46-0.69,0.86-0.62c1.31,0.21,2.199,0.45,2.709,0.74C21.8,3.39,22.75,5.54,22.75,9v6
|
||||
C22.75,20.43,20.43,22.75,15,22.75z"/>
|
||||
<g>
|
||||
<rect x="9.078" y="17.501" fill="#292D32" width="9.953" height="1.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="11.885" y="14.355" fill="#292D32" width="7.146" height="1.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect x="11.885" y="11.172" fill="#292D32" width="7.146" height="1.5"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
19
Pdf4QtDiff/resources/filter-vector-graphics.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="#292D32" d="M7.08,16.1c-0.36,0-0.72-0.09-1.05-0.279C5.36,15.44,4.96,14.76,4.96,14v-3.57c0-0.26-0.17-0.7-0.38-0.95
|
||||
L2.06,6.83C1.59,6.37,1.25,5.57,1.25,4.96V3.41c0-1.21,0.92-2.17,2.1-2.17h8.9c1.16,0,2.1,0.94,2.1,2.1v1.48
|
||||
c0,0.78-0.449,1.64-0.89,2.08l-2.93,2.59c-0.23,0.19-0.42,0.65-0.42,0.99v2.9c0,0.689-0.42,1.459-0.97,1.789l-0.92,0.6
|
||||
C7.86,15.99,7.47,16.1,7.08,16.1z M3.35,2.75c-0.34,0-0.6,0.29-0.6,0.67v1.55c0,0.17,0.17,0.6,0.39,0.82L5.72,8.5
|
||||
c0.38,0.47,0.75,1.24,0.75,1.93V14c0,0.301,0.19,0.45,0.31,0.51c0.16,0.09,0.42,0.141,0.64,0l0.93-0.6
|
||||
c0.12-0.07,0.26-0.35,0.26-0.52v-2.9C8.61,9.7,9,8.83,9.55,8.36l2.88-2.55c0.179-0.18,0.419-0.67,0.419-0.99V3.34
|
||||
c0-0.33-0.27-0.6-0.6-0.6h-8.9V2.75z"/>
|
||||
<path fill="#292D32" d="M15,22.75H9c-5.43,0-7.75-2.32-7.75-7.75v-3c0-0.41,0.34-0.75,0.75-0.75S2.75,11.59,2.75,12v3
|
||||
c0,4.609,1.64,6.25,6.25,6.25h6c4.609,0,6.25-1.641,6.25-6.25V9c0-2.9-0.68-4.58-2.21-5.45c-0.16-0.09-0.69-0.33-2.21-0.57
|
||||
c-0.41-0.06-0.689-0.45-0.62-0.86c0.069-0.41,0.46-0.69,0.86-0.62c1.31,0.21,2.199,0.45,2.709,0.74C21.8,3.39,22.75,5.54,22.75,9v6
|
||||
C22.75,20.43,20.43,22.75,15,22.75z"/>
|
||||
<circle fill="none" stroke="#292D32" stroke-miterlimit="10" cx="13.756" cy="14.119" r="2.404"/>
|
||||
<circle fill="none" stroke="#292D32" stroke-miterlimit="10" cx="16.503" cy="16.082" r="2.998"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
48
Pdf4QtDiff/resources/get-source.svg
Normal file
@@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="#292D32" d="M12.108,0.677l-0.107,0c-3.049,0-5.905,1.19-8.042,3.352c-2.147,2.171-3.311,5.051-3.276,8.108
|
||||
c0.07,6.169,5.141,11.188,11.306,11.188l0.2-0.002c6.189-0.084,11.181-5.209,11.128-11.425C23.266,5.767,18.237,0.733,12.108,0.677z
|
||||
M17.402,3.209c1.048,0.614,1.914,1.468,2.575,2.54h-1.015c-0.709,0-1.418,0-2.131,0.006c-0.098,0-0.122-0.009-0.167-0.107
|
||||
c-0.536-1.186-1.276-2.228-1.86-3.004c-0.141-0.186-0.286-0.366-0.432-0.547L14.3,2.005C15.532,2.308,16.523,2.693,17.402,3.209z
|
||||
M12.709,2.081c0.936,0.94,1.71,2.089,2.466,3.66h-2.466V2.081z M11.521,2.07l0.003,3.629c0,0.016,0,0.034,0,0.05
|
||||
c-0.018,0-0.038,0-0.056,0H8.599C9.418,4.195,10.555,2.984,11.521,2.07z M9.911,2.004L9.74,2.207
|
||||
C8.905,3.199,8.233,4.055,7.673,5.009c-0.128,0.217-0.24,0.446-0.349,0.667l-0.02,0.041C7.292,5.743,7.285,5.75,7.267,5.75h0
|
||||
L6.143,5.749L4.069,5.75C5.795,3.564,7.666,2.363,9.911,2.004z M6.711,20.686c-0.982-0.621-1.85-1.42-2.646-2.438h3.395
|
||||
c0.018,0,0.049,0,0.057,0.01c0.492,1.1,1.17,2.174,2.199,3.484l0.073,0.092c0.039,0.049,0.078,0.1,0.117,0.148
|
||||
C8.746,21.73,7.673,21.295,6.711,20.686z M11.521,21.369l0,0.631c-0.716-0.445-2.389-2.65-2.717-3.752h1.054
|
||||
c0.553,0,1.106-0.002,1.658-0.002c0.003,0,0.007,0,0.01,0C11.522,19.285,11.521,20.328,11.521,21.369z M12.696,21.984
|
||||
c0.001-1.24,0.002-2.48,0.001-3.723c0-0.006,0-0.01,0-0.014c0.665,0.002,1.33,0.002,1.995,0.002h0.709
|
||||
C14.854,19.555,14.097,20.979,12.696,21.984z M14.535,21.979c0.819-1.063,1.523-2.262,2.146-3.652c0.036-0.08,0.047-0.08,0.107-0.08
|
||||
v-0.148l0.003,0.148c0.436,0.002,0.871,0.002,1.308,0.002l1.831-0.002C18.566,20.199,16.797,21.424,14.535,21.979z M20.9,16.801
|
||||
c-0.008,0.012-0.036,0.029-0.044,0.031c-1.206,0.008-2.413,0.008-3.62,0.008l0.076-0.26c0.101-0.342,0.169-0.691,0.246-1.039h-1.199
|
||||
c-0.1,0.406-0.209,0.811-0.342,1.209c-0.029,0.09-0.041,0.094-0.126,0.094c-0.001,0-0.001,0-0.001,0
|
||||
c-0.546-0.004-1.092-0.006-1.639-0.006c-0.505,0-1.011,0.002-1.521,0.004c-0.016,0-0.027,0-0.034,0
|
||||
c-0.001-0.008-0.002-0.02-0.001-0.035c0.002-0.422-0.001-0.844,0-1.266h-1.172c0,0.427-0.001,0.854,0.003,1.279
|
||||
c0,0.008,0,0.016,0,0.021c-0.006,0-0.015,0-0.024,0c-0.628-0.002-1.256-0.004-1.884-0.004L8.286,16.84
|
||||
c-0.029,0-0.041-0.004-0.043-0.004h0c-0.001-0.002-0.008-0.01-0.016-0.033c-0.141-0.411-0.256-0.834-0.36-1.262H6.651
|
||||
c0.013,0.057,0.019,0.113,0.032,0.17c0.065,0.273,0.143,0.545,0.22,0.814c0.03,0.105,0.06,0.211,0.089,0.314H4.706
|
||||
c-0.508,0-1.017,0-1.529,0.002c-0.057,0-0.067-0.006-0.093-0.055c-0.685-1.258-1.09-2.629-1.205-4.074c0-0.004,0-0.006,0-0.01
|
||||
c0.005,0,0.012,0,0.019,0c0.284,0.001,0.569,0.001,0.853,0.001V11.3H1.911c-0.011,0-0.021,0-0.031,0
|
||||
c0.001-0.012,0.002-0.024,0.003-0.037C1.996,9.83,2.401,8.465,3.087,7.208c0.025-0.046,0.034-0.053,0.099-0.053
|
||||
C4.03,7.157,4.874,7.157,5.718,7.157h1.269l-0.03,0.107c-0.059,0.207-0.117,0.41-0.17,0.614c-0.057,0.215-0.09,0.443-0.138,0.664
|
||||
h1.2c0.108-0.456,0.23-0.906,0.38-1.343C8.238,7.17,8.245,7.16,8.245,7.159c0.002-0.001,0.013-0.004,0.038-0.004
|
||||
c1.076,0.004,2.154,0.004,3.23-0.002c0.005,0,0.009,0,0.013,0c0,0.004,0,0.01,0,0.017c-0.003,0.458-0.002,0.914-0.002,1.371h1.175
|
||||
c0-0.461,0.001-0.923-0.002-1.384c0,0,0-0.001,0-0.002c0.506,0.002,1.012,0.002,1.519,0.002c0.577,0.003,1.168-0.001,1.774,0.018
|
||||
c0.153,0.453,0.277,0.909,0.387,1.366h1.211c-0.066-0.301-0.137-0.6-0.208-0.893c-0.04-0.163-0.079-0.327-0.118-0.491l1.755,0
|
||||
c0.601,0,1.201,0,1.802-0.002c0.058,0,0.068,0.006,0.097,0.059c0.693,1.267,1.098,2.637,1.203,4.071
|
||||
c0,0.006,0.001,0.011,0.001,0.016c-0.004,0-0.009,0-0.014,0C21.736,11.299,21.368,11.3,21,11.299v1.41h0.538
|
||||
c0.183,0,0.357,0.002,0.579,0C22.015,14.156,21.605,15.533,20.9,16.801z"/>
|
||||
<g>
|
||||
<path fill="#292D32" d="M3.988,11.997c0-1.546,0.944-2.638,2.289-2.638c1.345,0,2.296,1.092,2.296,2.638
|
||||
c0,1.553-0.951,2.645-2.296,2.645C4.932,14.642,3.988,13.55,3.988,11.997z M7.443,11.997c0-0.958-0.476-1.643-1.167-1.643
|
||||
c-0.684,0-1.167,0.684-1.167,1.643s0.483,1.65,1.167,1.65C6.968,13.646,7.443,12.955,7.443,11.997z"/>
|
||||
<path fill="#292D32" d="M10.308,10.704l-0.87,0.542L9,10.473l1.531-1.025h0.877v5.105h-1.1V10.704z"/>
|
||||
<path fill="#292D32" d="M12.312,11.997c0-1.546,0.943-2.638,2.289-2.638c1.345,0,2.296,1.092,2.296,2.638
|
||||
c0,1.553-0.951,2.645-2.296,2.645C13.255,14.642,12.312,13.55,12.312,11.997z M15.767,11.997c0-0.958-0.476-1.643-1.166-1.643
|
||||
c-0.684,0-1.167,0.684-1.167,1.643s0.483,1.65,1.167,1.65C15.291,13.646,15.767,12.955,15.767,11.997z"/>
|
||||
<path fill="#292D32" d="M18.631,10.704l-0.87,0.542l-0.438-0.773l1.53-1.025h0.877v5.105h-1.1V10.704z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.8 KiB |
29
Pdf4QtDiff/resources/next-diff.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M-1547.835,403.568c26.05-110.674,51.961-220.759,78.164-332.085
|
||||
c28.745,46.334,56.782,91.526,85.416,137.682c122.286-71.896,196.638-174.667,201.493-318.404
|
||||
c4.855-143.804-62.799-251.306-177.871-330.163c115.04,30.62,252.495,132.629,295.927,304.445
|
||||
c24.787,98.054,15.625,193.557-27.706,285.051c-43.192,91.203-111.394,158.311-201.812,204.03
|
||||
c26.034,42.072,51.925,83.911,78.508,126.869C-1327.05,455.039-1437.206,429.358-1547.835,403.568z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M-1694.662-287.074c-26.073-42.058-52.021-83.913-78.64-126.851
|
||||
c111.229,25.923,221.277,51.569,332.081,77.393c-25.965,110.341-51.874,220.449-78.129,332.026
|
||||
c-28.676-46.221-56.676-91.354-85.199-137.33c-102.922,58.58-171.482,142.72-195.558,259.743
|
||||
c-15.714,76.38-6.517,150.618,25.988,221.581c32.324,70.571,82.502,125.671,148.557,167.807
|
||||
c-122.248-33.046-259.491-138.307-300.411-312.274c-22.867-97.217-12.584-191.495,31.025-281.439
|
||||
C-1851.486-176.059-1783.807-242.134-1694.662-287.074z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M1.667,15.573v-6c0-3.46,0.95-5.61,2.971-6.76c0.51-0.29,1.399-0.53,2.709-0.74
|
||||
c0.4-0.07,0.791,0.21,0.86,0.62s-0.21,0.8-0.62,0.86c-1.52,0.24-2.05,0.48-2.21,0.57c-1.53,0.87-2.21,2.551-2.21,5.45v6
|
||||
c0,4.609,1.641,6.25,6.25,6.25h6c4.609,0,6.25-1.641,6.25-6.25v-3c0-0.41,0.34-0.75,0.75-0.75s0.75,0.34,0.75,0.75v3
|
||||
c0,5.43-2.32,7.75-7.75,7.75h-6C3.987,23.323,1.667,21.003,1.667,15.573z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M14.579,9.696c0.081-0.023,0.166-0.042,0.246-0.063
|
||||
c1.694-0.413,2.91-0.286,2.91-0.286l0.08,2.796c0.016,0.578,0.359,0.713,0.767,0.302c1.433-1.448,2.854-2.884,4.275-4.32
|
||||
c0.406-0.411,0.401-1.074-0.011-1.479c-1.472-1.45-2.938-2.894-4.412-4.348c-0.412-0.406-0.744-0.266-0.741,0.313
|
||||
c0.005,0.867,0.011,1.723,0.016,2.582c0,0-10.111-0.563-11.267,12.055C8.694,12.213,12.094,10.365,14.579,9.696z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
17
Pdf4QtDiff/resources/open-left.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" d="M21.67,14.3l-0.4,5C21.12,20.83,21,22,18.29,22
|
||||
H5.71C3,22,2.88,20.83,2.73,19.3l-0.4-5c-0.08-0.83,0.18-1.6,0.65-2.19C2.99,12.1,2.99,12.1,3,12.09C3.55,11.42,4.38,11,5.31,11
|
||||
h13.379c0.931,0,1.75,0.42,2.291,1.07C20.99,12.08,21,12.09,21,12.1C21.49,12.689,21.76,13.46,21.67,14.3z"/>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
|
||||
M3.5,11.43V6.28c0-3.4,0.85-4.25,4.25-4.25h1.27c1.27,0,1.56,0.38,2.04,1.02l1.27,1.7c0.32,0.42,0.51,0.68,1.359,0.68h2.551
|
||||
c3.4,0,4.25,0.85,4.25,4.25v1.79"/>
|
||||
<g>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" d="M8.296,19.216
|
||||
l-2.611-2.611l2.611-2.611"/>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" d="M18.318,16.604H5.685"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
17
Pdf4QtDiff/resources/open-right.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" d="M21.67,14.3l-0.4,5C21.12,20.83,21,22,18.29,22
|
||||
H5.71C3,22,2.88,20.83,2.73,19.3l-0.4-5c-0.08-0.83,0.18-1.6,0.65-2.19C2.99,12.1,2.99,12.1,3,12.09C3.55,11.42,4.38,11,5.31,11
|
||||
h13.379c0.931,0,1.75,0.42,2.291,1.07C20.99,12.08,21,12.09,21,12.1C21.49,12.689,21.76,13.46,21.67,14.3z"/>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
|
||||
M3.5,11.43V6.28c0-3.4,0.85-4.25,4.25-4.25h1.27c1.27,0,1.56,0.38,2.04,1.02l1.27,1.7c0.32,0.42,0.51,0.68,1.359,0.68h2.551
|
||||
c3.4,0,4.25,0.85,4.25,4.25v1.79"/>
|
||||
<g>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" d="M15.708,13.993
|
||||
l2.61,2.611l-2.61,2.611"/>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" d="M18.318,16.604H5.686"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
29
Pdf4QtDiff/resources/prev-diff.svg
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M-1547.835,403.568c26.05-110.674,51.961-220.759,78.164-332.085
|
||||
c28.745,46.334,56.782,91.526,85.416,137.682c122.286-71.896,196.638-174.667,201.493-318.404
|
||||
c4.855-143.804-62.799-251.306-177.871-330.163c115.04,30.62,252.495,132.629,295.927,304.445
|
||||
c24.787,98.054,15.625,193.557-27.706,285.051c-43.192,91.203-111.394,158.311-201.812,204.03
|
||||
c26.034,42.072,51.925,83.911,78.508,126.869C-1327.05,455.039-1437.206,429.358-1547.835,403.568z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M-1694.662-287.074c-26.073-42.058-52.021-83.913-78.64-126.851
|
||||
c111.229,25.923,221.277,51.569,332.081,77.393c-25.965,110.341-51.874,220.449-78.129,332.026
|
||||
c-28.676-46.221-56.676-91.354-85.199-137.33c-102.922,58.58-171.482,142.72-195.558,259.743
|
||||
c-15.714,76.38-6.517,150.618,25.988,221.581c32.324,70.571,82.502,125.671,148.557,167.807
|
||||
c-122.248-33.046-259.491-138.307-300.411-312.274c-22.867-97.217-12.584-191.495,31.025-281.439
|
||||
C-1851.486-176.059-1783.807-242.134-1694.662-287.074z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M15.417,23.323h-6c-5.43,0-7.75-2.32-7.75-7.75v-3c0-0.41,0.34-0.75,0.75-0.75s0.75,0.34,0.75,0.75v3
|
||||
c0,4.609,1.641,6.25,6.25,6.25h6c4.609,0,6.25-1.641,6.25-6.25v-6c0-2.899-0.68-4.58-2.21-5.45c-0.16-0.09-0.69-0.33-2.21-0.57
|
||||
c-0.41-0.06-0.689-0.45-0.62-0.86s0.46-0.69,0.86-0.62c1.31,0.21,2.199,0.45,2.709,0.74c2.021,1.15,2.971,3.3,2.971,6.76v6
|
||||
C23.167,21.003,20.847,23.323,15.417,23.323z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M10.255,9.696c-0.081-0.023-0.166-0.042-0.246-0.063
|
||||
c-1.694-0.413-2.91-0.286-2.91-0.286l-0.08,2.796c-0.016,0.578-0.359,0.713-0.767,0.302c-1.433-1.448-2.854-2.884-4.275-4.32
|
||||
C1.57,7.714,1.575,7.051,1.987,6.646c1.472-1.45,2.938-2.894,4.412-4.348C6.812,1.892,7.144,2.032,7.141,2.61
|
||||
C7.136,3.477,7.13,4.333,7.125,5.192c0,0,10.111-0.563,11.268,12.055C16.14,12.213,12.74,10.365,10.255,9.696z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
19
Pdf4QtDiff/resources/save-diff-to-xml.svg
Normal file
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M17.229,2.372H7.623
|
||||
c-2.11,0-3.839,1.729-3.839,3.839v14.024c0,1.788,1.284,2.556,2.852,1.68l4.852-2.705c0.519-0.282,1.357-0.282,1.864,0l4.851,2.705
|
||||
c1.568,0.876,2.854,0.108,2.854-1.68V6.211C21.067,4.1,19.338,2.372,17.229,2.372z"/>
|
||||
<path fill="none" stroke="#292D32" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" d="M20.642,5.889v14.024
|
||||
c0,1.788-1.284,2.543-2.852,1.68l-4.852-2.705c-0.52-0.282-1.358-0.282-1.877,0L6.21,21.593c-1.568,0.863-2.852,0.108-2.852-1.68
|
||||
V5.889c0-2.111,1.729-3.839,3.839-3.839h9.606C18.912,2.049,20.642,3.778,20.642,5.889z"/>
|
||||
<g>
|
||||
<path fill="#292D32" d="M7.933,10.99l1.623,2.222H8.429l-1.056-1.448l-1.069,1.448H5.202l1.616-2.202L5.202,8.788h1.121
|
||||
l1.063,1.449l1.063-1.449h1.107L7.933,10.99z"/>
|
||||
<path fill="#292D32" d="M10.137,8.788h0.946l1.371,2.499l1.366-2.499h0.952v4.424H13.82v-2.756l-1.366,2.498l-1.371-2.498v2.756
|
||||
h-0.946V8.788z"/>
|
||||
<path fill="#292D32" d="M18.798,12.355v0.856h-3.155V8.788h0.953v3.567H18.798z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
59
Pdf4QtDiff/resources/show-p-with-diff.svg
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#E5FF32" d="M20.281,8.938v0.523c0,0.282-0.227,0.504-0.502,0.504l-6.076,0.002
|
||||
c-0.006-0.591-0.049-1.095-0.141-1.531l6.217-0.002C20.055,8.434,20.281,8.662,20.281,8.938z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M20.281,11.771v0.524c0,0.282-0.227,0.504-0.502,0.504h-6.146v-1.531h6.146
|
||||
C20.055,11.269,20.281,11.497,20.281,11.771z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M20.281,14.54v0.523c0,0.274-0.227,0.504-0.502,0.504h-6.287c0.092-0.437,0.135-0.94,0.141-1.531h6.146
|
||||
C20.055,14.036,20.281,14.257,20.281,14.54z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M14.74,8.434c-0.174-0.961-0.529-1.713-1.08-2.277C13.236,5.713,12.678,5.391,12,5.176
|
||||
c-0.645-0.201-1.41-0.295-2.29-0.295H5.814c-3.573,0-5.172,1.592-5.172,5.172v3.902c0,3.573,1.599,5.165,5.172,5.165H9.71
|
||||
c0.88,0,1.645-0.094,2.29-0.295c0.678-0.209,1.229-0.531,1.661-0.975c0.551-0.564,0.906-1.322,1.08-2.283
|
||||
c0.096-0.464,0.135-0.974,0.141-1.531V9.965C14.875,9.4,14.836,8.896,14.74,8.434z M13.633,14.036
|
||||
c-0.006,0.591-0.049,1.095-0.141,1.531c-0.215,0.987-0.679,1.605-1.493,1.947c-0.442,0.195-0.994,0.303-1.658,0.336
|
||||
c-0.202,0.014-0.409,0.021-0.631,0.021H5.814c-2.935,0-3.922-0.987-3.922-3.916v-3.902c0-2.908,0.974-3.902,3.849-3.916
|
||||
l0.074-0.014H9.71c0.222,0,0.436,0.007,0.638,0.021c0.666,0.04,1.216,0.147,1.659,0.343c0.807,0.342,1.271,0.96,1.485,1.947
|
||||
c0.092,0.437,0.135,0.94,0.141,1.531V14.036z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M11.299,9.968H4.225c-0.278,0-0.503-0.226-0.503-0.504V8.939c0-0.278,0.226-0.504,0.503-0.504h7.074
|
||||
c0.278,0,0.504,0.226,0.504,0.504v0.524C11.803,9.742,11.577,9.968,11.299,9.968z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#E5FF32" d="M11.299,12.802H4.225c-0.278,0-0.503-0.226-0.503-0.504v-0.524c0-0.278,0.226-0.504,0.503-0.504h7.074
|
||||
c0.278,0,0.504,0.226,0.504,0.504v0.524C11.803,12.576,11.577,12.802,11.299,12.802z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M11.299,15.564H4.225c-0.278,0-0.503-0.226-0.503-0.503v-0.525c0-0.278,0.226-0.503,0.503-0.503h7.074
|
||||
c0.278,0,0.504,0.225,0.504,0.503v0.525C11.803,15.339,11.577,15.564,11.299,15.564z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M18.193,4.88h-3.902c-0.879,0-1.646,0.095-2.292,0.296c-0.671,0.208-1.222,0.53-1.652,0.968
|
||||
c0.666,0.04,1.216,0.147,1.659,0.343c0.444-0.188,0.987-0.296,1.653-0.33c0.174-0.014,0.361-0.021,0.557-0.021l0.074-0.013h3.902
|
||||
c2.928,0,3.916,0.994,3.916,3.93v3.902c0,2.929-0.988,3.916-3.916,3.916h-3.902c-0.223,0-0.432-0.007-0.631-0.021
|
||||
c-0.666-0.033-1.217-0.141-1.661-0.336c-0.442,0.195-0.994,0.303-1.658,0.336c0.43,0.443,0.98,0.766,1.658,0.975
|
||||
c0.646,0.201,1.413,0.295,2.292,0.295h3.902c3.572,0,5.164-1.592,5.164-5.165v-3.902C23.357,6.473,21.766,4.88,18.193,4.88z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
22
Pdf4QtDiff/resources/synchronize-view.svg
Normal file
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#292D32" d="M18.511,17.843c0.008,0.452-0.321,0.702-0.673,0.587
|
||||
c-0.141-0.046-0.272-0.118-0.407-0.181c-1.728-0.799-3.455-1.595-5.177-2.401c-0.188-0.089-0.334-0.076-0.515,0.008
|
||||
c-1.772,0.827-3.548,1.644-5.321,2.47c-0.277,0.129-0.551,0.226-0.792-0.034C5.388,18.032,5.504,17.76,5.64,17.49
|
||||
c1.892-3.738,3.781-7.476,5.671-11.216c0.059-0.117,0.119-0.233,0.173-0.353c0.102-0.224,0.256-0.376,0.515-0.378
|
||||
c0.26-0.002,0.413,0.149,0.523,0.37c0.313,0.634,0.632,1.264,0.95,1.896c1.631,3.225,3.262,6.45,4.891,9.676
|
||||
C18.433,17.623,18.481,17.771,18.511,17.843z M7.178,16.787c0.125-0.043,0.188-0.059,0.248-0.085
|
||||
c1.283-0.595,2.564-1.192,3.851-1.779c0.171-0.079,0.194-0.186,0.193-0.348c-0.002-1.972-0.001-3.945-0.002-5.917
|
||||
c0-0.072-0.011-0.145-0.016-0.216c-0.016-0.004-0.033-0.007-0.05-0.011C10.001,11.197,8.604,13.964,7.178,16.787z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#E5FF32" d="M7.178,16.787c1.426-2.823,2.824-5.59,4.222-8.356
|
||||
c0.018,0.004,0.034,0.007,0.05,0.011c0.005,0.071,0.016,0.145,0.016,0.216c0.001,1.972,0,3.945,0.002,5.917
|
||||
c0.001,0.162-0.021,0.269-0.193,0.348c-1.287,0.587-2.567,1.185-3.851,1.779C7.366,16.729,7.303,16.744,7.178,16.787z"/>
|
||||
</g>
|
||||
<circle fill="none" stroke="#292D32" stroke-width="1.5" stroke-miterlimit="10" cx="12" cy="12" r="10.813"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
59
Pdf4QtDiff/resources/view-differences.svg
Normal file
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M20.281,8.938v0.523c0,0.282-0.227,0.504-0.502,0.504l-6.076,0.002
|
||||
c-0.006-0.591-0.049-1.095-0.141-1.531l6.217-0.002C20.055,8.434,20.281,8.662,20.281,8.938z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M20.281,11.771v0.524c0,0.282-0.227,0.504-0.502,0.504h-6.146v-1.531h6.146
|
||||
C20.055,11.269,20.281,11.497,20.281,11.771z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M20.281,14.54v0.522c0,0.274-0.227,0.504-0.502,0.504h-6.287c0.092-0.437,0.135-0.939,0.141-1.53h6.146
|
||||
C20.055,14.036,20.281,14.257,20.281,14.54z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M14.74,8.434c-0.174-0.961-0.529-1.713-1.08-2.277C13.236,5.713,12.678,5.391,12,5.176
|
||||
c-0.645-0.201-1.41-0.295-2.29-0.295H5.814c-3.573,0-5.172,1.592-5.172,5.172v3.902c0,3.572,1.599,5.165,5.172,5.165H9.71
|
||||
c0.88,0,1.645-0.095,2.29-0.295c0.678-0.209,1.229-0.531,1.661-0.976c0.551-0.563,0.905-1.322,1.08-2.283
|
||||
c0.096-0.463,0.135-0.974,0.141-1.53V9.965C14.875,9.4,14.836,8.896,14.74,8.434z M13.633,14.036
|
||||
c-0.006,0.591-0.049,1.095-0.141,1.53c-0.215,0.988-0.68,1.605-1.493,1.947c-0.442,0.195-0.994,0.303-1.658,0.336
|
||||
c-0.202,0.015-0.409,0.021-0.631,0.021H5.814c-2.935,0-3.922-0.987-3.922-3.916v-3.902c0-2.908,0.974-3.902,3.849-3.916
|
||||
l0.074-0.014H9.71c0.222,0,0.436,0.007,0.638,0.021c0.666,0.04,1.216,0.147,1.659,0.343c0.808,0.342,1.271,0.96,1.485,1.947
|
||||
c0.092,0.437,0.135,0.94,0.141,1.531V14.036z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M11.299,9.968H4.225c-0.278,0-0.503-0.226-0.503-0.504V8.939c0-0.278,0.226-0.504,0.503-0.504h7.074
|
||||
c0.278,0,0.504,0.226,0.504,0.504v0.524C11.803,9.742,11.577,9.968,11.299,9.968z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M11.299,12.802H4.225c-0.278,0-0.503-0.226-0.503-0.504v-0.524c0-0.278,0.226-0.504,0.503-0.504h7.074
|
||||
c0.278,0,0.504,0.226,0.504,0.504v0.524C11.803,12.576,11.577,12.802,11.299,12.802z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M11.299,15.564H4.225c-0.278,0-0.503-0.227-0.503-0.504v-0.524c0-0.278,0.226-0.503,0.503-0.503h7.074
|
||||
c0.278,0,0.504,0.225,0.504,0.503v0.524C11.803,15.339,11.577,15.564,11.299,15.564z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M18.193,4.88h-3.902c-0.879,0-1.646,0.095-2.292,0.296c-0.671,0.208-1.222,0.53-1.652,0.968
|
||||
c0.666,0.04,1.216,0.147,1.659,0.343c0.444-0.188,0.987-0.296,1.653-0.33c0.174-0.014,0.36-0.021,0.557-0.021l0.074-0.013h3.901
|
||||
c2.929,0,3.916,0.994,3.916,3.93v3.902c0,2.929-0.987,3.916-3.916,3.916H14.29c-0.224,0-0.433-0.007-0.631-0.021
|
||||
c-0.666-0.033-1.217-0.141-1.661-0.336c-0.442,0.195-0.994,0.303-1.658,0.336c0.43,0.443,0.98,0.767,1.658,0.976
|
||||
c0.646,0.2,1.413,0.295,2.292,0.295h3.901c3.572,0,5.164-1.593,5.164-5.165v-3.902C23.357,6.473,21.766,4.88,18.193,4.88z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
30
Pdf4QtDiff/resources/view-left.svg
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M19.748,12.785c0.099-0.477,0.149-1.035,0.157-1.704V6.518c-0.01-0.685-0.06-1.226-0.158-1.7
|
||||
c-0.193-1.071-0.583-1.893-1.19-2.516c-0.454-0.476-1.068-0.839-1.828-1.08c-0.697-0.216-1.554-0.327-2.546-0.327L9.815,0.897
|
||||
c-3.957,0-5.721,1.764-5.721,5.721v4.375c0,3.951,1.765,5.712,5.721,5.712h4.368c0.993,0,1.849-0.111,2.546-0.326
|
||||
c0.755-0.234,1.354-0.586,1.83-1.074C19.163,14.684,19.552,13.859,19.748,12.785z M16.781,15.055
|
||||
c-0.494,0.219-1.11,0.344-1.886,0.383c-0.232,0.016-0.465,0.023-0.712,0.023H9.815c-3.348,0-4.477-1.127-4.477-4.468V6.617
|
||||
c0-3.325,1.108-4.453,4.394-4.469l0.083-0.016h4.368c0.254,0,0.496,0.008,0.722,0.022c0.779,0.048,1.397,0.176,1.886,0.392
|
||||
c0.919,0.391,1.463,1.102,1.713,2.238c0.101,0.486,0.151,1.052,0.157,1.732v4.565c-0.006,0.684-0.057,1.248-0.157,1.732
|
||||
C18.254,13.955,17.707,14.666,16.781,15.055z"/>
|
||||
<g>
|
||||
<path fill="#292D32" d="M15.907,8.038H7.975c-0.31,0-0.563,0.253-0.563,0.564V9.19c0,0.311,0.251,0.564,0.563,0.564h7.932
|
||||
c0.312,0,0.565-0.256,0.564-0.565V8.602C16.472,8.291,16.219,8.038,15.907,8.038z"/>
|
||||
<path fill="#292D32" d="M15.907,11.134H7.975c-0.31,0-0.563,0.253-0.563,0.563v0.59c0,0.309,0.251,0.563,0.563,0.563h7.932
|
||||
c0.312,0,0.565-0.252,0.564-0.563v-0.59C16.472,11.387,16.219,11.134,15.907,11.134z"/>
|
||||
<path fill="#292D32" d="M16.023,4.913H7.975c-0.315,0-0.572,0.257-0.572,0.574v0.597c0,0.316,0.255,0.574,0.572,0.574h8.049
|
||||
c0.317,0,0.574-0.258,0.574-0.575V5.487C16.598,5.17,16.341,4.913,16.023,4.913z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path fill="#292D32" d="M17.195,19.537H8.521l0.936-0.934c0.276-0.277,0.277-0.729,0-1.006s-0.729-0.277-1.006,0l-2.149,2.146
|
||||
c-0.065,0.066-0.116,0.145-0.154,0.23c-0.036,0.086-0.055,0.18-0.055,0.273c0,0.096,0.02,0.189,0.056,0.273
|
||||
c0.037,0.088,0.089,0.166,0.153,0.23l2.149,2.146c0.137,0.139,0.319,0.207,0.502,0.207c0.182,0,0.363-0.068,0.502-0.209
|
||||
c0.278-0.277,0.277-0.729,0-1.004l-0.934-0.934h8.675c0.395,0,0.713-0.318,0.713-0.711S17.59,19.537,17.195,19.537z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
58
Pdf4QtDiff/resources/view-overlay.svg
Normal file
@@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<polygon fill="#AEB0B2" points="13,6.344 13.75,5.592 19.625,5.75 22.438,7.188 22.906,12.108 21.594,17.656 18.531,18.844
|
||||
13.213,18.234 14.094,15.25 14.313,10.906 "/>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M23.215,8.434c-0.174-0.961-0.529-1.713-1.08-2.277c-0.424-0.444-0.982-0.766-1.66-0.981
|
||||
c-0.645-0.201-1.41-0.295-2.29-0.295h-3.896c-3.573,0-5.172,1.592-5.172,5.172v3.903c0,3.572,1.599,5.164,5.172,5.164h3.896
|
||||
c0.88,0,1.646-0.094,2.29-0.295c0.678-0.209,1.229-0.531,1.661-0.975c0.551-0.564,0.905-1.322,1.08-2.283
|
||||
c0.096-0.463,0.135-0.975,0.141-1.531V9.964C23.35,9.399,23.311,8.896,23.215,8.434z M22.107,14.035
|
||||
c-0.006,0.592-0.049,1.096-0.141,1.531c-0.215,0.988-0.68,1.604-1.493,1.947c-0.442,0.193-0.994,0.303-1.658,0.336
|
||||
c-0.202,0.014-0.409,0.02-0.631,0.02h-3.896c-2.936,0-3.922-0.986-3.922-3.916v-3.902c0-2.908,0.974-3.902,3.849-3.916
|
||||
l0.073-0.014h3.896c0.222,0,0.437,0.007,0.638,0.021c0.666,0.04,1.217,0.147,1.659,0.343c0.808,0.342,1.271,0.96,1.485,1.947
|
||||
c0.092,0.437,0.135,0.94,0.141,1.531V14.035z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M19.773,9.967H12.7c-0.279,0-0.503-0.226-0.503-0.504V8.938c0-0.278,0.226-0.504,0.503-0.504h7.073
|
||||
c0.278,0,0.504,0.226,0.504,0.504v0.524C20.277,9.742,20.052,9.967,19.773,9.967z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M19.773,12.801H12.7c-0.279,0-0.503-0.225-0.503-0.503v-0.524c0-0.277,0.226-0.503,0.503-0.503h7.073
|
||||
c0.278,0,0.504,0.226,0.504,0.503v0.524C20.277,12.576,20.052,12.801,19.773,12.801z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M19.773,15.564H12.7c-0.279,0-0.503-0.229-0.503-0.504v-0.525c0-0.277,0.226-0.502,0.503-0.502h7.073
|
||||
c0.278,0,0.504,0.225,0.504,0.502v0.525C20.277,15.338,20.052,15.564,19.773,15.564z"/>
|
||||
</g>
|
||||
</g>
|
||||
<polyline opacity="0.8" fill="#E2E3E4" points="1.25,11.531 2.063,17.156 5.813,18.625 12.719,18 14.313,14.469 13.844,7.406
|
||||
11.049,5.592 4.781,5.75 3.094,6.156 1.719,7.469 "/>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M14.74,8.434c-0.174-0.961-0.529-1.713-1.08-2.277C13.236,5.713,12.678,5.391,12,5.176
|
||||
c-0.645-0.201-1.41-0.295-2.29-0.295H5.814c-3.573,0-5.172,1.592-5.172,5.172v3.902c0,3.572,1.599,5.165,5.172,5.165H9.71
|
||||
c0.88,0,1.645-0.095,2.29-0.295c0.678-0.209,1.229-0.531,1.661-0.976c0.551-0.563,0.905-1.322,1.08-2.283
|
||||
c0.096-0.463,0.135-0.975,0.141-1.53V9.965C14.875,9.4,14.836,8.896,14.74,8.434z M13.633,14.036
|
||||
c-0.006,0.591-0.049,1.095-0.141,1.53c-0.215,0.988-0.68,1.604-1.493,1.947c-0.442,0.194-0.994,0.303-1.658,0.336
|
||||
c-0.202,0.015-0.409,0.021-0.631,0.021H5.814c-2.935,0-3.922-0.987-3.922-3.916v-3.902c0-2.908,0.974-3.902,3.849-3.916
|
||||
l0.074-0.014H9.71c0.222,0,0.436,0.007,0.638,0.021c0.666,0.04,1.216,0.147,1.659,0.343c0.808,0.342,1.271,0.96,1.485,1.947
|
||||
c0.092,0.437,0.135,0.94,0.141,1.531V14.036z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M11.299,9.968H4.225c-0.278,0-0.503-0.226-0.503-0.504V8.939c0-0.278,0.226-0.504,0.503-0.504h7.074
|
||||
c0.278,0,0.504,0.226,0.504,0.504v0.524C11.803,9.742,11.577,9.968,11.299,9.968z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M11.299,12.802H4.225c-0.278,0-0.503-0.226-0.503-0.504v-0.524c0-0.278,0.226-0.504,0.503-0.504h7.074
|
||||
c0.278,0,0.504,0.226,0.504,0.504v0.524C11.803,12.576,11.577,12.802,11.299,12.802z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M11.299,15.564H4.225c-0.278,0-0.503-0.228-0.503-0.504v-0.524c0-0.278,0.226-0.503,0.503-0.503h7.074
|
||||
c0.278,0,0.504,0.225,0.504,0.503v0.524C11.803,15.339,11.577,15.564,11.299,15.564z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
30
Pdf4QtDiff/resources/view-right.svg
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Vrstva_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#292D32" d="M19.748,12.785c0.099-0.477,0.149-1.035,0.157-1.704V6.518c-0.01-0.685-0.06-1.226-0.158-1.7
|
||||
c-0.193-1.071-0.583-1.893-1.19-2.516c-0.454-0.476-1.068-0.839-1.828-1.08c-0.697-0.216-1.554-0.327-2.546-0.327L9.815,0.897
|
||||
c-3.957,0-5.721,1.764-5.721,5.721v4.375c0,3.951,1.765,5.712,5.721,5.712h4.368c0.993,0,1.849-0.111,2.546-0.326
|
||||
c0.755-0.234,1.354-0.586,1.83-1.074C19.163,14.684,19.552,13.859,19.748,12.785z M16.781,15.055
|
||||
c-0.494,0.219-1.11,0.344-1.886,0.383c-0.232,0.016-0.465,0.023-0.712,0.023H9.815c-3.348,0-4.477-1.127-4.477-4.468V6.617
|
||||
c0-3.325,1.108-4.453,4.394-4.469l0.083-0.016h4.368c0.254,0,0.496,0.008,0.722,0.022c0.779,0.048,1.397,0.176,1.886,0.392
|
||||
c0.919,0.391,1.463,1.102,1.713,2.238c0.101,0.486,0.151,1.052,0.157,1.732v4.565c-0.006,0.684-0.057,1.248-0.157,1.732
|
||||
C18.254,13.955,17.707,14.666,16.781,15.055z"/>
|
||||
<g>
|
||||
<path fill="#292D32" d="M15.907,8.038H7.975c-0.31,0-0.563,0.253-0.563,0.564V9.19c0,0.311,0.251,0.564,0.563,0.564h7.932
|
||||
c0.312,0,0.565-0.256,0.564-0.565V8.602C16.472,8.291,16.219,8.038,15.907,8.038z"/>
|
||||
<path fill="#292D32" d="M15.907,11.134H7.975c-0.31,0-0.563,0.253-0.563,0.563v0.59c0,0.309,0.251,0.563,0.563,0.563h7.932
|
||||
c0.312,0,0.565-0.252,0.564-0.563v-0.59C16.472,11.387,16.219,11.134,15.907,11.134z"/>
|
||||
<path fill="#292D32" d="M16.023,4.913H7.975c-0.315,0-0.572,0.257-0.572,0.574v0.597c0,0.316,0.255,0.574,0.572,0.574h8.049
|
||||
c0.317,0,0.574-0.258,0.574-0.575V5.487C16.598,5.17,16.341,4.913,16.023,4.913z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path fill="#292D32" d="M6.092,20.248c0,0.393,0.318,0.711,0.713,0.711h8.675l-0.934,0.934c-0.277,0.275-0.278,0.727,0,1.004
|
||||
c0.139,0.141,0.32,0.209,0.502,0.209c0.183,0,0.365-0.068,0.502-0.207l2.149-2.146c0.064-0.064,0.116-0.143,0.153-0.23
|
||||
c0.036-0.084,0.056-0.178,0.056-0.273c0-0.094-0.019-0.188-0.055-0.273c-0.038-0.086-0.089-0.164-0.154-0.23l-2.149-2.146
|
||||
c-0.276-0.277-0.729-0.277-1.006,0s-0.276,0.729,0,1.006l0.936,0.934H6.805C6.41,19.537,6.092,19.855,6.092,20.248z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
78
Pdf4QtDiff/resources/wallet.svg
Normal file
After Width: | Height: | Size: 7.4 KiB |
39
Pdf4QtDiff/settings.h
Normal file
@@ -0,0 +1,39 @@
|
||||
// Copyright (C) 2021 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 PDFDIFF_SETTINGS_H
|
||||
#define PDFDIFF_SETTINGS_H
|
||||
|
||||
#include <QColor>
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
struct Settings
|
||||
{
|
||||
QString directory;
|
||||
QColor colorPageMove = QColor(35, 145, 255);
|
||||
QColor colorAdded = QColor(125, 250, 0);
|
||||
QColor colorRemoved = QColor(255, 50, 50);
|
||||
QColor colorReplaced = QColor(255, 120, 30);
|
||||
bool displayDifferences = true;
|
||||
bool displayMarkers = true;
|
||||
};
|
||||
|
||||
} // namespace pdfdiff
|
||||
|
||||
#endif // PDFDIFF_SETTINGS_H
|
150
Pdf4QtDiff/settingsdockwidget.cpp
Normal file
@@ -0,0 +1,150 @@
|
||||
// Copyright (C) 2021 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 "settingsdockwidget.h"
|
||||
#include "ui_settingsdockwidget.h"
|
||||
|
||||
#include "pdfutils.h"
|
||||
#include "pdfwidgetutils.h"
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
SettingsDockWidget::SettingsDockWidget(Settings* settings, QWidget* parent) :
|
||||
QDockWidget(parent),
|
||||
ui(new Ui::SettingsDockWidget),
|
||||
m_settings(settings),
|
||||
m_loadingColors(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
auto colorNames = QColor::colorNames();
|
||||
for (QComboBox* comboBox : findChildren<QComboBox*>())
|
||||
{
|
||||
for (const QString& colorName : colorNames)
|
||||
{
|
||||
QColor color(colorName);
|
||||
comboBox->addItem(getIconForColor(color), colorName, color);
|
||||
}
|
||||
|
||||
connect(comboBox, &QComboBox::editTextChanged, this, &SettingsDockWidget::onEditColorChanged);
|
||||
}
|
||||
|
||||
connect(ui->transparencySlider, &QSlider::valueChanged, this, &SettingsDockWidget::transparencySliderChanged);
|
||||
}
|
||||
|
||||
SettingsDockWidget::~SettingsDockWidget()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void SettingsDockWidget::setCompareTextsAsVectorGraphics(bool enabled)
|
||||
{
|
||||
ui->compareTextsAsVectorGraphicsCheckBox->setChecked(enabled);
|
||||
}
|
||||
|
||||
bool SettingsDockWidget::isCompareTextAsVectorGraphics() const
|
||||
{
|
||||
return ui->compareTextsAsVectorGraphicsCheckBox->isChecked();
|
||||
}
|
||||
|
||||
void SettingsDockWidget::setCompareTextCharactersInsteadOfWords(bool enabled)
|
||||
{
|
||||
ui->compareCharactersInsteadOfWordsCheckBox->setChecked(enabled);
|
||||
}
|
||||
|
||||
bool SettingsDockWidget::isCompareTextCharactersInsteadOfWords() const
|
||||
{
|
||||
return ui->compareCharactersInsteadOfWordsCheckBox->isChecked();
|
||||
}
|
||||
|
||||
QLineEdit* SettingsDockWidget::getLeftPageSelectionEdit() const
|
||||
{
|
||||
return ui->leftPageSelectionEdit;
|
||||
}
|
||||
|
||||
QLineEdit* SettingsDockWidget::getRightPageSelectionEdit() const
|
||||
{
|
||||
return ui->rightPageSelectionEdit;
|
||||
}
|
||||
|
||||
void SettingsDockWidget::loadColors()
|
||||
{
|
||||
pdf::PDFTemporaryValueChange guard(&m_loadingColors, true);
|
||||
|
||||
auto loadColor = [](QComboBox* comboBox, QColor color)
|
||||
{
|
||||
auto index = comboBox->findData(color);
|
||||
comboBox->setCurrentIndex(index);
|
||||
|
||||
if (index == -1)
|
||||
{
|
||||
comboBox->setCurrentText(color.name());
|
||||
}
|
||||
};
|
||||
|
||||
loadColor(ui->removeColorCombo, m_settings->colorRemoved);
|
||||
loadColor(ui->addColorCombo, m_settings->colorAdded);
|
||||
loadColor(ui->replaceColorCombo, m_settings->colorReplaced);
|
||||
loadColor(ui->moveColorCombo, m_settings->colorPageMove);
|
||||
}
|
||||
|
||||
int SettingsDockWidget::getTransparencySliderValue() const
|
||||
{
|
||||
return ui->transparencySlider->value();
|
||||
}
|
||||
|
||||
QIcon SettingsDockWidget::getIconForColor(QColor color) const
|
||||
{
|
||||
QIcon icon;
|
||||
|
||||
QSize iconSize = pdf::PDFWidgetUtils::scaleDPI(this, QSize(16, 16));
|
||||
|
||||
QPixmap pixmap(iconSize.width(), iconSize.height());
|
||||
pixmap.fill(color);
|
||||
icon.addPixmap(pixmap);
|
||||
|
||||
return icon;
|
||||
}
|
||||
|
||||
void SettingsDockWidget::onEditColorChanged()
|
||||
{
|
||||
if (m_loadingColors)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool isChanged = false;
|
||||
auto saveColor = [&isChanged](QComboBox* comboBox, QColor& color)
|
||||
{
|
||||
QColor oldColor = color;
|
||||
color.fromString(comboBox->currentText());
|
||||
isChanged = isChanged || oldColor != color;
|
||||
};
|
||||
|
||||
saveColor(ui->removeColorCombo, m_settings->colorRemoved);
|
||||
saveColor(ui->addColorCombo, m_settings->colorAdded);
|
||||
saveColor(ui->replaceColorCombo, m_settings->colorReplaced);
|
||||
saveColor(ui->moveColorCombo, m_settings->colorPageMove);
|
||||
|
||||
if (isChanged)
|
||||
{
|
||||
Q_EMIT colorsChanged();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace pdfdiff
|
73
Pdf4QtDiff/settingsdockwidget.h
Normal file
@@ -0,0 +1,73 @@
|
||||
// Copyright (C) 2021 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 PDFDIFF_SETTINGSDOCKWIDGET_H
|
||||
#define PDFDIFF_SETTINGSDOCKWIDGET_H
|
||||
|
||||
#include "settings.h"
|
||||
|
||||
#include <QDockWidget>
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class SettingsDockWidget;
|
||||
}
|
||||
|
||||
class QLineEdit;
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
class SettingsDockWidget : public QDockWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit SettingsDockWidget(Settings* settings, QWidget* parent);
|
||||
virtual ~SettingsDockWidget() override;
|
||||
|
||||
void setCompareTextsAsVectorGraphics(bool enabled);
|
||||
bool isCompareTextAsVectorGraphics() const;
|
||||
|
||||
void setCompareTextCharactersInsteadOfWords(bool enabled);
|
||||
bool isCompareTextCharactersInsteadOfWords() const;
|
||||
|
||||
QLineEdit* getLeftPageSelectionEdit() const;
|
||||
QLineEdit* getRightPageSelectionEdit() const;
|
||||
|
||||
void loadColors();
|
||||
void saveColors();
|
||||
|
||||
int getTransparencySliderValue() const;
|
||||
|
||||
signals:
|
||||
void colorsChanged();
|
||||
void transparencySliderChanged(int value);
|
||||
|
||||
private:
|
||||
QIcon getIconForColor(QColor color) const;
|
||||
|
||||
void onEditColorChanged();
|
||||
|
||||
Ui::SettingsDockWidget* ui;
|
||||
Settings* m_settings;
|
||||
bool m_loadingColors;
|
||||
};
|
||||
|
||||
} // namespace pdfdiff
|
||||
|
||||
#endif // PDFDIFF_SETTINGSDOCKWIDGET_H
|
190
Pdf4QtDiff/settingsdockwidget.ui
Normal file
@@ -0,0 +1,190 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>SettingsDockWidget</class>
|
||||
<widget class="QDockWidget" name="SettingsDockWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>548</width>
|
||||
<height>511</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="allowedAreas">
|
||||
<set>Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea</set>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Settings</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="dockWidgetContents">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="leftDocumentSettingsGroupBox">
|
||||
<property name="title">
|
||||
<string>Left Document</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="leftPageSelectionLabel">
|
||||
<property name="text">
|
||||
<string>Page Selection:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="leftPageSelectionEdit"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="rightDocumentSettingsGroupBox">
|
||||
<property name="title">
|
||||
<string>Right Document</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="rightPageSelectionLabel">
|
||||
<property name="text">
|
||||
<string>Page Selection:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="rightPageSelectionEdit"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="optionsGroupBox">
|
||||
<property name="title">
|
||||
<string>Options</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="compareTextsAsVectorGraphicsCheckBox">
|
||||
<property name="text">
|
||||
<string>Compare texts as vector graphics</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="compareCharactersInsteadOfWordsCheckBox">
|
||||
<property name="text">
|
||||
<string>Compare text characters instead of words</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="overlayGroupBox">
|
||||
<property name="title">
|
||||
<string>Transparency | Overlay View</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QSlider" name="transparencySlider">
|
||||
<property name="maximum">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksAbove</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="colorsGroupBox">
|
||||
<property name="title">
|
||||
<string>Colors</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout_3">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="removeColorLabel">
|
||||
<property name="text">
|
||||
<string>Remove</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="removeColorCombo">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="addColorLabel">
|
||||
<property name="text">
|
||||
<string>Add</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="replaceColorLabel">
|
||||
<property name="text">
|
||||
<string>Replace</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="moveColorLabel">
|
||||
<property name="text">
|
||||
<string>Move</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="replaceColorCombo">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="addColorCombo">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="moveColorCombo">
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
563
Pdf4QtDiff/utils.cpp
Normal file
@@ -0,0 +1,563 @@
|
||||
// Copyright (C) 2021 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 "utils.h"
|
||||
#include "pdfutils.h"
|
||||
#include "pdfwidgetutils.h"
|
||||
#include "pdfpainterutils.h"
|
||||
#include "pdfdocumentbuilder.h"
|
||||
|
||||
#include <QPainter>
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
void ComparedDocumentMapper::update(ComparedDocumentMapper::Mode mode,
|
||||
bool filterDifferences,
|
||||
const pdf::PDFDiffResult& diff,
|
||||
const pdf::PDFDocument* leftDocument,
|
||||
const pdf::PDFDocument* rightDocument,
|
||||
const pdf::PDFDocument* currentDocument)
|
||||
{
|
||||
m_layout.clear();
|
||||
|
||||
m_leftPageIndices.clear();
|
||||
m_rightPageIndices.clear();
|
||||
|
||||
m_allLeft = false;
|
||||
m_allRight = false;
|
||||
|
||||
if (!leftDocument || !rightDocument || !currentDocument)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Jakub Melka
|
||||
pdf::PDFDiffResult::PageSequence pageSequence = diff.getPageSequence();
|
||||
const bool isEmpty = pageSequence.empty();
|
||||
|
||||
if (filterDifferences)
|
||||
{
|
||||
pdf::PDFDiffResult::PageSequence filteredPageSequence;
|
||||
|
||||
std::vector<pdf::PDFInteger> leftPageIndices = diff.getChangedLeftPageIndices();
|
||||
std::vector<pdf::PDFInteger> rightPageIndices = diff.getChangedRightPageIndices();
|
||||
|
||||
for (const pdf::PDFDiffResult::PageSequenceItem& item : pageSequence)
|
||||
{
|
||||
const bool isLeftModified = std::binary_search(leftPageIndices.cbegin(), leftPageIndices.cend(), item.leftPage);
|
||||
const bool isRightModified = std::binary_search(rightPageIndices.cbegin(), rightPageIndices.cend(), item.rightPage);
|
||||
|
||||
if (isLeftModified || isRightModified)
|
||||
{
|
||||
filteredPageSequence.push_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
pageSequence = std::move(filteredPageSequence);
|
||||
}
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
case ComparedDocumentMapper::Mode::Left:
|
||||
{
|
||||
Q_ASSERT(leftDocument == currentDocument);
|
||||
|
||||
m_allLeft = true;
|
||||
double yPos = 0.0;
|
||||
const pdf::PDFCatalog* catalog = leftDocument->getCatalog();
|
||||
|
||||
if (isEmpty)
|
||||
{
|
||||
// Just copy all pages
|
||||
const size_t pageCount = catalog->getPageCount();
|
||||
for (size_t i = 0; i < pageCount; ++i)
|
||||
{
|
||||
QSizeF pageSize = catalog->getPage(i)->getRotatedMediaBoxMM().size();
|
||||
QRectF rect(-pageSize.width() * 0.5, yPos, pageSize.width(), pageSize.height());
|
||||
m_layout.emplace_back(0, i, -1, rect);
|
||||
yPos += pageSize.height() + 5;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (const pdf::PDFDiffResult::PageSequenceItem& item : pageSequence)
|
||||
{
|
||||
if (item.leftPage == -1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
QSizeF pageSize = catalog->getPage(item.leftPage)->getRotatedMediaBoxMM().size();
|
||||
QRectF rect(-pageSize.width() * 0.5, yPos, pageSize.width(), pageSize.height());
|
||||
m_layout.emplace_back(0, item.leftPage, -1, rect);
|
||||
yPos += pageSize.height() + 5;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case ComparedDocumentMapper::Mode::Right:
|
||||
{
|
||||
Q_ASSERT(rightDocument == currentDocument);
|
||||
|
||||
m_allRight = true;
|
||||
double yPos = 0.0;
|
||||
const pdf::PDFCatalog* catalog = rightDocument->getCatalog();
|
||||
|
||||
if (isEmpty)
|
||||
{
|
||||
// Just copy all pages
|
||||
const size_t pageCount = catalog->getPageCount();
|
||||
for (size_t i = 0; i < pageCount; ++i)
|
||||
{
|
||||
QSizeF pageSize = catalog->getPage(i)->getRotatedMediaBoxMM().size();
|
||||
QRectF rect(-pageSize.width() * 0.5, yPos, pageSize.width(), pageSize.height());
|
||||
m_layout.emplace_back(0, i, -1, rect);
|
||||
yPos += pageSize.height() + 5;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (const pdf::PDFDiffResult::PageSequenceItem& item : pageSequence)
|
||||
{
|
||||
if (item.rightPage == -1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
QSizeF pageSize = catalog->getPage(item.rightPage)->getRotatedMediaBoxMM().size();
|
||||
QRectF rect(-pageSize.width() * 0.5, yPos, pageSize.width(), pageSize.height());
|
||||
m_layout.emplace_back(0, item.rightPage, -1, rect);
|
||||
yPos += pageSize.height() + 5;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case ComparedDocumentMapper::Mode::Combined:
|
||||
case ComparedDocumentMapper::Mode::Overlay:
|
||||
{
|
||||
double yPos = 0.0;
|
||||
const pdf::PDFCatalog* catalog = currentDocument->getCatalog();
|
||||
pdf::PDFInteger offset = leftDocument->getCatalog()->getPageCount();
|
||||
|
||||
for (const pdf::PDFDiffResult::PageSequenceItem& item : pageSequence)
|
||||
{
|
||||
double yAdvance = 0.0;
|
||||
|
||||
if (item.leftPage != -1)
|
||||
{
|
||||
QSizeF pageSize = catalog->getPage(item.leftPage)->getRotatedMediaBoxMM().size();
|
||||
QRectF rect;
|
||||
pdf::PDFInteger groupIndex = -1;
|
||||
if (mode == ComparedDocumentMapper::Mode::Combined)
|
||||
{
|
||||
rect = QRectF(-pageSize.width() - 5, yPos, pageSize.width(), pageSize.height());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (item.rightPage != -1)
|
||||
{
|
||||
groupIndex = 1;
|
||||
}
|
||||
rect = QRectF(-pageSize.width() * 0.5, yPos, pageSize.width(), pageSize.height());
|
||||
}
|
||||
m_layout.emplace_back(0, item.leftPage, groupIndex, rect);
|
||||
yAdvance = pageSize.height() + 5;
|
||||
m_leftPageIndices[item.leftPage] = item.leftPage;
|
||||
}
|
||||
|
||||
if (item.rightPage != -1)
|
||||
{
|
||||
pdf::PDFInteger rightPageIndex = item.rightPage + offset;
|
||||
QSizeF pageSize = catalog->getPage(rightPageIndex)->getRotatedMediaBoxMM().size();
|
||||
QRectF rect;
|
||||
pdf::PDFInteger groupIndex = -1;
|
||||
if (mode == ComparedDocumentMapper::Mode::Combined)
|
||||
{
|
||||
rect = QRectF(5, yPos, pageSize.width(), pageSize.height());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (item.leftPage != -1)
|
||||
{
|
||||
groupIndex = 2;
|
||||
}
|
||||
rect = QRectF(-pageSize.width() * 0.5, yPos, pageSize.width(), pageSize.height());
|
||||
}
|
||||
m_layout.emplace_back(0, rightPageIndex, groupIndex, rect);
|
||||
yAdvance = qMax(yAdvance, pageSize.height() + 5);
|
||||
m_rightPageIndices[rightPageIndex] = item.rightPage;
|
||||
}
|
||||
|
||||
yPos += yAdvance;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pdf::PDFInteger ComparedDocumentMapper::getLeftPageIndex(pdf::PDFInteger pageIndex) const
|
||||
{
|
||||
if (m_allLeft)
|
||||
{
|
||||
return pageIndex;
|
||||
}
|
||||
|
||||
auto it = m_leftPageIndices.find(pageIndex);
|
||||
if (it != m_leftPageIndices.cend())
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
pdf::PDFInteger ComparedDocumentMapper::getRightPageIndex(pdf::PDFInteger pageIndex) const
|
||||
{
|
||||
if (m_allRight)
|
||||
{
|
||||
return pageIndex;
|
||||
}
|
||||
|
||||
auto it = m_rightPageIndices.find(pageIndex);
|
||||
if (it != m_rightPageIndices.cend())
|
||||
{
|
||||
return it->second;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
pdf::PDFInteger ComparedDocumentMapper::getPageIndexFromLeftPageIndex(pdf::PDFInteger leftPageIndex) const
|
||||
{
|
||||
if (m_allLeft)
|
||||
{
|
||||
return leftPageIndex;
|
||||
}
|
||||
|
||||
for (const auto& indexItem : m_leftPageIndices)
|
||||
{
|
||||
if (indexItem.second == leftPageIndex)
|
||||
{
|
||||
return indexItem.first;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
pdf::PDFInteger ComparedDocumentMapper::getPageIndexFromRightPageIndex(pdf::PDFInteger rightPageIndex) const
|
||||
{
|
||||
if (m_allRight)
|
||||
{
|
||||
return rightPageIndex;
|
||||
}
|
||||
|
||||
for (const auto& indexItem : m_rightPageIndices)
|
||||
{
|
||||
if (indexItem.second == rightPageIndex)
|
||||
{
|
||||
return indexItem.first;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
DifferencesDrawInterface::DifferencesDrawInterface(const Settings* settings,
|
||||
const ComparedDocumentMapper* mapper,
|
||||
const pdf::PDFDiffResult* diffResult) :
|
||||
m_settings(settings),
|
||||
m_mapper(mapper),
|
||||
m_diffResult(diffResult)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void DifferencesDrawInterface::drawPage(QPainter* painter,
|
||||
pdf::PDFInteger pageIndex,
|
||||
const pdf::PDFPrecompiledPage* compiledPage,
|
||||
pdf::PDFTextLayoutGetter& layoutGetter,
|
||||
const QTransform& pagePointToDevicePointMatrix,
|
||||
QList<pdf::PDFRenderError>& errors) const
|
||||
{
|
||||
Q_UNUSED(compiledPage);
|
||||
Q_UNUSED(layoutGetter);
|
||||
Q_UNUSED(errors);
|
||||
|
||||
if (!m_settings->displayDifferences)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const size_t differencesCount = m_diffResult->getDifferencesCount();
|
||||
const pdf::PDFInteger leftPageIndex = m_mapper->getLeftPageIndex(pageIndex);
|
||||
const pdf::PDFInteger rightPageIndex = m_mapper->getRightPageIndex(pageIndex);
|
||||
|
||||
std::optional<size_t> pageMoveIndex;
|
||||
|
||||
if (leftPageIndex != -1)
|
||||
{
|
||||
for (size_t i = 0; i < differencesCount; ++i)
|
||||
{
|
||||
auto leftRectangles = m_diffResult->getLeftRectangles(i);
|
||||
for (auto it = leftRectangles.first; it != leftRectangles.second; ++it)
|
||||
{
|
||||
const auto& item = *it;
|
||||
if (item.first == leftPageIndex)
|
||||
{
|
||||
QColor color = getColorForIndex(i);
|
||||
drawRectangle(painter, pagePointToDevicePointMatrix, item.second, color);
|
||||
drawMarker(painter, pagePointToDevicePointMatrix, item.second, color, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_diffResult->isPageMoveAddRemoveDifference(i) && m_diffResult->getLeftPage(i) == leftPageIndex)
|
||||
{
|
||||
pageMoveIndex = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (rightPageIndex != -1)
|
||||
{
|
||||
for (size_t i = 0; i < differencesCount; ++i)
|
||||
{
|
||||
auto rightRectangles = m_diffResult->getRightRectangles(i);
|
||||
for (auto it = rightRectangles.first; it != rightRectangles.second; ++it)
|
||||
{
|
||||
const auto& item = *it;
|
||||
if (item.first == rightPageIndex)
|
||||
{
|
||||
QColor color = getColorForIndex(i);
|
||||
drawRectangle(painter, pagePointToDevicePointMatrix, item.second, color);
|
||||
drawMarker(painter, pagePointToDevicePointMatrix, item.second, color, false);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_diffResult->isPageMoveAddRemoveDifference(i) && m_diffResult->getRightPage(i) == rightPageIndex)
|
||||
{
|
||||
pageMoveIndex = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pageMoveIndex)
|
||||
{
|
||||
QString text;
|
||||
|
||||
switch (m_diffResult->getType(*pageMoveIndex))
|
||||
{
|
||||
case pdf::PDFDiffResult::Type::PageAdded:
|
||||
text = " + ";
|
||||
break;
|
||||
|
||||
case pdf::PDFDiffResult::Type::PageRemoved:
|
||||
text = " - ";
|
||||
break;
|
||||
|
||||
case pdf::PDFDiffResult::Type::PageMoved:
|
||||
text = QString("%1🠖%2").arg(m_diffResult->getLeftPage(*pageMoveIndex) + 1).arg(m_diffResult->getRightPage(*pageMoveIndex) + 1);
|
||||
break;
|
||||
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
break;
|
||||
}
|
||||
|
||||
QColor color = getColorForIndex(*pageMoveIndex);
|
||||
QPointF targetPoint = pagePointToDevicePointMatrix.map(QPointF(5, 5));
|
||||
pdf::PDFPainterHelper::drawBubble(painter, targetPoint.toPoint(), color, text, Qt::AlignRight | Qt::AlignTop);
|
||||
}
|
||||
}
|
||||
|
||||
QColor DifferencesDrawInterface::getColorForIndex(size_t index) const
|
||||
{
|
||||
QColor color;
|
||||
|
||||
const size_t resultIndex = index;
|
||||
|
||||
if (m_diffResult->isReplaceDifference(resultIndex))
|
||||
{
|
||||
color = m_settings->colorReplaced;
|
||||
}
|
||||
else if (m_diffResult->isRemoveDifference(resultIndex))
|
||||
{
|
||||
color = m_settings->colorRemoved;
|
||||
}
|
||||
else if (m_diffResult->isAddDifference(resultIndex))
|
||||
{
|
||||
color = m_settings->colorAdded;
|
||||
}
|
||||
else if (m_diffResult->isPageMoveDifference(resultIndex))
|
||||
{
|
||||
color = m_settings->colorPageMove;
|
||||
}
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
void DifferencesDrawInterface::drawPostRendering(QPainter* painter, QRect rect) const
|
||||
{
|
||||
Q_UNUSED(painter);
|
||||
Q_UNUSED(rect);
|
||||
}
|
||||
|
||||
void DifferencesDrawInterface::drawAnnotations(const pdf::PDFDocument* document,
|
||||
pdf::PDFDocumentBuilder* builder)
|
||||
{
|
||||
pdf::PDFInteger pageCount = document->getCatalog()->getPageCount();
|
||||
|
||||
QString title = pdf::PDFSysUtils::getUserName();
|
||||
QString subject = tr("Difference");
|
||||
|
||||
for (pdf::PDFInteger pageIndex = 0; pageIndex < pageCount; ++pageIndex)
|
||||
{
|
||||
const size_t differencesCount = m_diffResult->getDifferencesCount();
|
||||
const pdf::PDFInteger leftPageIndex = m_mapper->getLeftPageIndex(pageIndex);
|
||||
const pdf::PDFInteger rightPageIndex = m_mapper->getRightPageIndex(pageIndex);
|
||||
|
||||
const pdf::PDFPage* page = document->getCatalog()->getPage(pageIndex);
|
||||
pdf::PDFObjectReference reference = page->getPageReference();
|
||||
|
||||
if (leftPageIndex != -1)
|
||||
{
|
||||
for (size_t i = 0; i < differencesCount; ++i)
|
||||
{
|
||||
auto leftRectangles = m_diffResult->getLeftRectangles(i);
|
||||
for (auto it = leftRectangles.first; it != leftRectangles.second; ++it)
|
||||
{
|
||||
const auto& item = *it;
|
||||
if (item.first == leftPageIndex)
|
||||
{
|
||||
QColor color = getColorForIndex(i);
|
||||
const QRectF& rect = item.second;
|
||||
QPolygonF polygon;
|
||||
polygon << rect.topLeft() << rect.topRight() << rect.bottomRight() << rect.bottomLeft();
|
||||
pdf::PDFObjectReference annotation = builder->createAnnotationPolygon(reference, polygon, 1.0, color, color, title, subject, m_diffResult->getMessage(i));
|
||||
builder->setAnnotationOpacity(annotation, 0.3);
|
||||
builder->updateAnnotationAppearanceStreams(annotation);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (rightPageIndex != -1)
|
||||
{
|
||||
for (size_t i = 0; i < differencesCount; ++i)
|
||||
{
|
||||
auto rightRectangles = m_diffResult->getRightRectangles(i);
|
||||
for (auto it = rightRectangles.first; it != rightRectangles.second; ++it)
|
||||
{
|
||||
const auto& item = *it;
|
||||
if (item.first == rightPageIndex)
|
||||
{
|
||||
QColor color = getColorForIndex(i);
|
||||
const QRectF& rect = item.second;
|
||||
QPolygonF polygon;
|
||||
polygon << rect.topLeft() << rect.topRight() << rect.bottomRight() << rect.bottomLeft();
|
||||
pdf::PDFObjectReference annotation = builder->createAnnotationPolygon(reference, polygon, 1.0, color, color, title, subject, m_diffResult->getMessage(i));
|
||||
builder->setAnnotationOpacity(annotation, 0.3);
|
||||
builder->updateAnnotationAppearanceStreams(annotation);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DifferencesDrawInterface::drawRectangle(QPainter* painter,
|
||||
const QTransform& pagePointToDevicePointMatrix,
|
||||
const QRectF& rect,
|
||||
QColor color) const
|
||||
{
|
||||
color.setAlphaF(0.5);
|
||||
|
||||
QRectF resultRect = pagePointToDevicePointMatrix.mapRect(rect);
|
||||
painter->fillRect(resultRect, color);
|
||||
}
|
||||
|
||||
void DifferencesDrawInterface::drawMarker(QPainter* painter,
|
||||
const QTransform& pagePointToDevicePointMatrix,
|
||||
const QRectF& rect,
|
||||
QColor color,
|
||||
bool isLeft) const
|
||||
{
|
||||
if (!m_settings->displayMarkers)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
pdf::PDFPainterStateGuard guard(painter);
|
||||
QRectF deviceRect = pagePointToDevicePointMatrix.mapRect(rect);
|
||||
|
||||
QPointF snapPoint;
|
||||
QPointF markPoint;
|
||||
|
||||
if (isLeft)
|
||||
{
|
||||
snapPoint.ry() = deviceRect.center().y();
|
||||
snapPoint.rx() = deviceRect.left();
|
||||
markPoint = snapPoint;
|
||||
markPoint.rx() = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
snapPoint.ry() = deviceRect.center().y();
|
||||
snapPoint.rx() = deviceRect.right();
|
||||
markPoint = snapPoint;
|
||||
markPoint.rx() = painter->device()->width();
|
||||
}
|
||||
|
||||
const qreal lineWidthF = pdf::PDFWidgetUtils::scaleDPI_y(painter->device(), 2);
|
||||
|
||||
QPen pen(Qt::DotLine);
|
||||
pen.setColor(color);
|
||||
pen.setWidthF(lineWidthF);
|
||||
|
||||
painter->setBrush(Qt::NoBrush);
|
||||
painter->setPen(pen);
|
||||
painter->drawLine(snapPoint, markPoint);
|
||||
|
||||
const qreal markSizeX = pdf::PDFWidgetUtils::scaleDPI_x(painter->device(), 10);
|
||||
const qreal markSizeY = pdf::PDFWidgetUtils::scaleDPI_y(painter->device(), 10);
|
||||
|
||||
QPointF ptc = markPoint;
|
||||
QPointF ptTop = ptc;
|
||||
QPointF ptBottom = ptc;
|
||||
|
||||
ptTop.ry() -= markSizeY;
|
||||
ptBottom.ry() += markSizeY;
|
||||
ptc.rx() += isLeft ? markSizeX : -markSizeX;
|
||||
|
||||
std::array points = { ptTop, ptc, ptBottom };
|
||||
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->setBrush(QBrush(color));
|
||||
painter->drawConvexPolygon(points.data(), int(points.size()));
|
||||
}
|
||||
|
||||
} // namespace pdfdiff
|
126
Pdf4QtDiff/utils.h
Normal file
@@ -0,0 +1,126 @@
|
||||
// Copyright (C) 2021-2024 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 PDFDIFF_UTILS_H
|
||||
#define PDFDIFF_UTILS_H
|
||||
|
||||
#include "settings.h"
|
||||
#include "pdfdiff.h"
|
||||
#include "pdfdrawspacecontroller.h"
|
||||
#include "pdfdocumentdrawinterface.h"
|
||||
|
||||
namespace pdf
|
||||
{
|
||||
class PDFDocumentBuilder;
|
||||
} // namespace pdf
|
||||
|
||||
namespace pdfdiff
|
||||
{
|
||||
|
||||
class ComparedDocumentMapper
|
||||
{
|
||||
public:
|
||||
|
||||
enum class Mode
|
||||
{
|
||||
Left,
|
||||
Right,
|
||||
Combined,
|
||||
Overlay
|
||||
};
|
||||
|
||||
void update(Mode mode,
|
||||
bool filterDifferences,
|
||||
const pdf::PDFDiffResult& diff,
|
||||
const pdf::PDFDocument* leftDocument,
|
||||
const pdf::PDFDocument* rightDocument,
|
||||
const pdf::PDFDocument* currentDocument);
|
||||
|
||||
const pdf::PDFDrawSpaceController::LayoutItems& getLayout() const { return m_layout; }
|
||||
void setPageSequence(const pdf::PDFDiffResult::PageSequence& sequence) { m_pageSequence = sequence; }
|
||||
|
||||
/// Returns left page index (that means page index in left document),
|
||||
/// if it doesn't exist, -1 is returned.
|
||||
/// \param pageIndex Actual page index
|
||||
pdf::PDFInteger getLeftPageIndex(pdf::PDFInteger pageIndex) const;
|
||||
|
||||
/// Returns right page index (that means page index in right document),
|
||||
/// if it doesn't exist, -1 is returned.
|
||||
/// \param pageIndex Actual page index
|
||||
pdf::PDFInteger getRightPageIndex(pdf::PDFInteger pageIndex) const;
|
||||
|
||||
/// Returns actual page index from left page index, or -1.
|
||||
/// \param leftPageIndex Left page index
|
||||
pdf::PDFInteger getPageIndexFromLeftPageIndex(pdf::PDFInteger leftPageIndex) const;
|
||||
|
||||
/// Returns actual page index from right page index, or -1.
|
||||
/// \param rightPageIndex Right page index
|
||||
pdf::PDFInteger getPageIndexFromRightPageIndex(pdf::PDFInteger rightPageIndex) const;
|
||||
|
||||
private:
|
||||
pdf::PDFDrawSpaceController::LayoutItems m_layout;
|
||||
bool m_allLeft = false;
|
||||
bool m_allRight = false;
|
||||
std::map<pdf::PDFInteger, pdf::PDFInteger> m_leftPageIndices;
|
||||
std::map<pdf::PDFInteger, pdf::PDFInteger> m_rightPageIndices;
|
||||
pdf::PDFDiffResult::PageSequence m_pageSequence;
|
||||
};
|
||||
|
||||
class DifferencesDrawInterface : public pdf::IDocumentDrawInterface
|
||||
{
|
||||
Q_DECLARE_TR_FUNCTIONS(pdfdiff::DifferencesDrawInterface)
|
||||
|
||||
public:
|
||||
explicit DifferencesDrawInterface(const Settings* settings,
|
||||
const ComparedDocumentMapper* mapper,
|
||||
const pdf::PDFDiffResult* diffResult);
|
||||
|
||||
virtual void drawPage(QPainter* painter, pdf::PDFInteger pageIndex,
|
||||
const pdf::PDFPrecompiledPage* compiledPage,
|
||||
pdf::PDFTextLayoutGetter& layoutGetter,
|
||||
const QTransform& pagePointToDevicePointMatrix,
|
||||
QList<pdf::PDFRenderError>& errors) const override;
|
||||
|
||||
virtual void drawPostRendering(QPainter* painter, QRect rect) const override;
|
||||
|
||||
/// Draw annotations for differences
|
||||
/// \param document Document
|
||||
/// \param builder Builder
|
||||
void drawAnnotations(const pdf::PDFDocument* document, pdf::PDFDocumentBuilder* builder);
|
||||
|
||||
private:
|
||||
void drawRectangle(QPainter* painter,
|
||||
const QTransform& pagePointToDevicePointMatrix,
|
||||
const QRectF& rect,
|
||||
QColor color) const;
|
||||
|
||||
void drawMarker(QPainter* painter,
|
||||
const QTransform& pagePointToDevicePointMatrix,
|
||||
const QRectF& rect,
|
||||
QColor color,
|
||||
bool isLeft) const;
|
||||
|
||||
QColor getColorForIndex(size_t index) const;
|
||||
|
||||
const Settings* m_settings;
|
||||
const ComparedDocumentMapper* m_mapper;
|
||||
const pdf::PDFDiffResult* m_diffResult;
|
||||
};
|
||||
|
||||
} // namespace pdfdiff
|
||||
|
||||
#endif // PDFDIFF_UTILS_H
|