mirror of https://github.com/JakubMelka/PDF4QT.git
Recent file manager
This commit is contained in:
parent
e4effbc29a
commit
af83f99f51
|
@ -37,6 +37,7 @@ SOURCES += \
|
|||
pdfaboutdialog.cpp \
|
||||
pdfadvancedfindwidget.cpp \
|
||||
pdfdocumentpropertiesdialog.cpp \
|
||||
pdfrecentfilemanager.cpp \
|
||||
pdfsendmail.cpp \
|
||||
pdfsidebarwidget.cpp \
|
||||
pdfviewermainwindow.cpp \
|
||||
|
@ -48,6 +49,7 @@ HEADERS += \
|
|||
pdfaboutdialog.h \
|
||||
pdfadvancedfindwidget.h \
|
||||
pdfdocumentpropertiesdialog.h \
|
||||
pdfrecentfilemanager.h \
|
||||
pdfsendmail.h \
|
||||
pdfsidebarwidget.h \
|
||||
pdfviewermainwindow.h \
|
||||
|
|
|
@ -32,5 +32,6 @@
|
|||
<file>resources/find-next.svg</file>
|
||||
<file>resources/find-previous.svg</file>
|
||||
<file>resources/select-text.svg</file>
|
||||
<file>resources/ui.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
// Copyright (C) 2020 Jakub Melka
|
||||
//
|
||||
// This file is part of PdfForQt.
|
||||
//
|
||||
// PdfForQt is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// PdfForQt 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 PDFForQt. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#include "pdfrecentfilemanager.h"
|
||||
|
||||
namespace pdfviewer
|
||||
{
|
||||
|
||||
PDFRecentFileManager::PDFRecentFileManager(QObject* parent) :
|
||||
BaseClass(parent),
|
||||
m_recentFilesLimit(DEFAULT_RECENT_FILES),
|
||||
m_actions()
|
||||
{
|
||||
// Initialize actions
|
||||
int index = 0;
|
||||
|
||||
for (auto it = m_actions.begin(); it != m_actions.end(); ++it)
|
||||
{
|
||||
QAction* recentFileAction = new QAction(this);
|
||||
recentFileAction->setObjectName(QString("actionRecentFile%1").arg(++index));
|
||||
recentFileAction->setVisible(false);
|
||||
connect(recentFileAction, &QAction::triggered, this, &PDFRecentFileManager::onRecentFileActionTriggered);
|
||||
*it = recentFileAction;
|
||||
}
|
||||
}
|
||||
|
||||
void PDFRecentFileManager::addRecentFile(QString fileName)
|
||||
{
|
||||
m_recentFiles.removeAll(fileName);
|
||||
m_recentFiles.push_front(fileName);
|
||||
update();
|
||||
}
|
||||
|
||||
void PDFRecentFileManager::setRecentFiles(QStringList recentFiles)
|
||||
{
|
||||
if (m_recentFiles != recentFiles)
|
||||
{
|
||||
m_recentFiles = qMove(recentFiles);
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void PDFRecentFileManager::setRecentFilesLimit(int recentFilesLimit)
|
||||
{
|
||||
recentFilesLimit = qBound(getMinimumRecentFiles(), recentFilesLimit, getMaximumRecentFiles());
|
||||
|
||||
if (m_recentFilesLimit != recentFilesLimit)
|
||||
{
|
||||
m_recentFilesLimit = recentFilesLimit;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void PDFRecentFileManager::update()
|
||||
{
|
||||
while (m_recentFiles.size() > m_recentFilesLimit)
|
||||
{
|
||||
m_recentFiles.pop_back();
|
||||
}
|
||||
|
||||
for (int i = 0; i < m_actions.size(); ++i)
|
||||
{
|
||||
QAction* recentFileAction = m_actions[i];
|
||||
if (i < m_recentFiles.size())
|
||||
{
|
||||
recentFileAction->setData(m_recentFiles[i]);
|
||||
recentFileAction->setText(m_recentFiles[i]);
|
||||
recentFileAction->setVisible(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
recentFileAction->setData(QVariant());
|
||||
recentFileAction->setText(tr("Recent file dummy %1").arg(i + 1));
|
||||
recentFileAction->setVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PDFRecentFileManager::onRecentFileActionTriggered()
|
||||
{
|
||||
QAction* action = qobject_cast<QAction*>(sender());
|
||||
Q_ASSERT(action);
|
||||
|
||||
QVariant data = action->data();
|
||||
if (data.type() == QVariant::String)
|
||||
{
|
||||
emit fileOpenRequest(data.toString());
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace pdfviewer
|
|
@ -0,0 +1,84 @@
|
|||
// Copyright (C) 2020 Jakub Melka
|
||||
//
|
||||
// This file is part of PdfForQt.
|
||||
//
|
||||
// PdfForQt is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// PdfForQt 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 PDFForQt. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef PDFRECENTFILEMANAGER_H
|
||||
#define PDFRECENTFILEMANAGER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QAction>
|
||||
|
||||
#include <array>
|
||||
|
||||
namespace pdfviewer
|
||||
{
|
||||
|
||||
/// Recent file manager, manages list of recent files.
|
||||
class PDFRecentFileManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
using BaseClass = QObject;
|
||||
|
||||
static constexpr const int MAXIMUM_RECENT_FILES = 9;
|
||||
static constexpr const int DEFAULT_RECENT_FILES = 5;
|
||||
|
||||
public:
|
||||
explicit PDFRecentFileManager(QObject* parent);
|
||||
|
||||
/// Adds recent file to recent file list and updates the actions.
|
||||
/// New recent file is added as first file.
|
||||
/// \param fileName New recent file
|
||||
void addRecentFile(QString fileName);
|
||||
|
||||
/// Returns a list of recent files
|
||||
const QStringList& getRecentFiles() const { return m_recentFiles; }
|
||||
|
||||
/// Sets a list of recent files, and udpates manager
|
||||
void setRecentFiles(QStringList recentFiles);
|
||||
|
||||
/// Returns a limit of recent files count
|
||||
int getRecentFilesLimit() const { return m_recentFilesLimit; }
|
||||
|
||||
/// Sets a new limit of recent files count
|
||||
void setRecentFilesLimit(int recentFilesLimit);
|
||||
|
||||
/// Returns list of recent files actions
|
||||
const std::array<QAction*, MAXIMUM_RECENT_FILES>& getActions() const { return m_actions; }
|
||||
|
||||
static constexpr int getMinimumRecentFiles() { return 1; }
|
||||
static constexpr int getDefaultRecentFiles() { return DEFAULT_RECENT_FILES; }
|
||||
static constexpr int getMaximumRecentFiles() { return MAXIMUM_RECENT_FILES; }
|
||||
|
||||
signals:
|
||||
void fileOpenRequest(QString fileName);
|
||||
|
||||
private:
|
||||
/// Updates recent files actions / recent file list
|
||||
void update();
|
||||
|
||||
/// Reaction on recent file action triggered
|
||||
void onRecentFileActionTriggered();
|
||||
|
||||
int m_recentFilesLimit;
|
||||
std::array<QAction*, MAXIMUM_RECENT_FILES> m_actions;
|
||||
QStringList m_recentFiles;
|
||||
};
|
||||
|
||||
} // namespace pdfviewer
|
||||
|
||||
#endif // PDFRECENTFILEMANAGER_H
|
|
@ -66,6 +66,7 @@ PDFViewerMainWindow::PDFViewerMainWindow(QWidget* parent) :
|
|||
QMainWindow(parent),
|
||||
ui(new Ui::PDFViewerMainWindow),
|
||||
m_CMSManager(new pdf::PDFCMSManager(this)),
|
||||
m_recentFileManager(new PDFRecentFileManager(this)),
|
||||
m_settings(new PDFViewerSettings(this)),
|
||||
m_pdfWidget(nullptr),
|
||||
m_sidebarWidget(nullptr),
|
||||
|
@ -107,9 +108,16 @@ PDFViewerMainWindow::PDFViewerMainWindow(QWidget* parent) :
|
|||
ui->actionDeselectText->setShortcut(QKeySequence::Deselect);
|
||||
ui->actionCopyText->setShortcut(QKeySequence::Copy);
|
||||
|
||||
for (QAction* action : m_recentFileManager->getActions())
|
||||
{
|
||||
ui->menuFile->insertAction(ui->actionQuit, action);
|
||||
}
|
||||
ui->menuFile->insertSeparator(ui->actionQuit);
|
||||
|
||||
connect(ui->actionOpen, &QAction::triggered, this, &PDFViewerMainWindow::onActionOpenTriggered);
|
||||
connect(ui->actionClose, &QAction::triggered, this, &PDFViewerMainWindow::onActionCloseTriggered);
|
||||
connect(ui->actionQuit, &QAction::triggered, this, &PDFViewerMainWindow::onActionQuitTriggered);
|
||||
connect(m_recentFileManager, &PDFRecentFileManager::fileOpenRequest, this, &PDFViewerMainWindow::openDocument);
|
||||
|
||||
auto createGoToAction = [this](QMenu* menu, QString name, QString text, QKeySequence::StandardKey key, pdf::PDFDrawWidgetProxy::Operation operation, QString iconPath)
|
||||
{
|
||||
|
@ -651,6 +659,12 @@ void PDFViewerMainWindow::readActionSettings()
|
|||
}
|
||||
}
|
||||
settings.endGroup();
|
||||
|
||||
// Load recent files
|
||||
settings.beginGroup("RecentFiles");
|
||||
m_recentFileManager->setRecentFilesLimit(settings.value("MaximumRecentFilesCount", PDFRecentFileManager::getDefaultRecentFiles()).toInt());
|
||||
m_recentFileManager->setRecentFiles(settings.value("RecentFileList", QStringList()).toStringList());
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
void PDFViewerMainWindow::writeSettings()
|
||||
|
@ -673,6 +687,12 @@ void PDFViewerMainWindow::writeSettings()
|
|||
}
|
||||
}
|
||||
settings.endGroup();
|
||||
|
||||
// Save recent files
|
||||
settings.beginGroup("RecentFiles");
|
||||
settings.setValue("MaximumRecentFilesCount", m_recentFileManager->getRecentFilesLimit());
|
||||
settings.setValue("RecentFileList", m_recentFileManager->getRecentFiles());
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
void PDFViewerMainWindow::updateTitle()
|
||||
|
@ -881,6 +901,9 @@ void PDFViewerMainWindow::onDocumentReadingFinished()
|
|||
m_settings->setDirectory(fileInfo.dir().absolutePath());
|
||||
m_currentFile = fileInfo.fileName();
|
||||
|
||||
// We add file to recent files only, if we have successfully read the document
|
||||
m_recentFileManager->addRecentFile(m_fileInfo.originalFileName);
|
||||
|
||||
m_pdfDocument = result.document;
|
||||
setDocument(m_pdfDocument.data());
|
||||
|
||||
|
@ -1080,12 +1103,16 @@ void PDFViewerMainWindow::on_actionRendering_Errors_triggered()
|
|||
|
||||
void PDFViewerMainWindow::on_actionOptions_triggered()
|
||||
{
|
||||
PDFViewerSettingsDialog dialog(m_settings->getSettings(), m_settings->getColorManagementSystemSettings(), getActions(), m_CMSManager, this);
|
||||
PDFViewerSettingsDialog::OtherSettings otherSettings;
|
||||
otherSettings.maximumRecentFileCount = m_recentFileManager->getRecentFilesLimit();
|
||||
|
||||
PDFViewerSettingsDialog dialog(m_settings->getSettings(), m_settings->getColorManagementSystemSettings(), otherSettings, getActions(), m_CMSManager, this);
|
||||
if (dialog.exec() == QDialog::Accepted)
|
||||
{
|
||||
m_settings->setSettings(dialog.getSettings());
|
||||
m_settings->setColorManagementSystemSettings(dialog.getCMSSettings());
|
||||
m_CMSManager->setSettings(m_settings->getColorManagementSystemSettings());
|
||||
m_recentFileManager->setRecentFilesLimit(dialog.getOtherSettings().maximumRecentFileCount);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "pdfdocumentreader.h"
|
||||
#include "pdfdocumentpropertiesdialog.h"
|
||||
#include "pdfwidgettool.h"
|
||||
#include "pdfrecentfilemanager.h"
|
||||
|
||||
#include <QFuture>
|
||||
#include <QTreeView>
|
||||
|
@ -141,6 +142,7 @@ private:
|
|||
|
||||
Ui::PDFViewerMainWindow* ui;
|
||||
pdf::PDFCMSManager* m_CMSManager;
|
||||
PDFRecentFileManager* m_recentFileManager;
|
||||
PDFViewerSettings* m_settings;
|
||||
pdf::PDFWidget* m_pdfWidget;
|
||||
QSharedPointer<pdf::PDFDocument> m_pdfDocument;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include "pdfglobal.h"
|
||||
#include "pdfutils.h"
|
||||
#include "pdfrecentfilemanager.h"
|
||||
|
||||
#include <QAction>
|
||||
#include <QLineEdit>
|
||||
|
@ -32,12 +33,14 @@ namespace pdfviewer
|
|||
|
||||
PDFViewerSettingsDialog::PDFViewerSettingsDialog(const PDFViewerSettings::Settings& settings,
|
||||
const pdf::PDFCMSSettings& cmsSettings,
|
||||
const OtherSettings& otherSettings,
|
||||
QList<QAction*> actions,
|
||||
pdf::PDFCMSManager* cmsManager, QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::PDFViewerSettingsDialog),
|
||||
m_settings(settings),
|
||||
m_cmsSettings(cmsSettings),
|
||||
m_otherSettings(otherSettings),
|
||||
m_actions(),
|
||||
m_isLoadingData(false)
|
||||
{
|
||||
|
@ -50,6 +53,7 @@ PDFViewerSettingsDialog::PDFViewerSettingsDialog(const PDFViewerSettings::Settin
|
|||
new QListWidgetItem(QIcon(":/resources/shortcuts.svg"), tr("Shortcuts"), ui->optionsPagesWidget, ShortcutSettings);
|
||||
new QListWidgetItem(QIcon(":/resources/cms.svg"), tr("Colors"), ui->optionsPagesWidget, ColorManagementSystemSettings);
|
||||
new QListWidgetItem(QIcon(":/resources/security.svg"), tr("Security"), ui->optionsPagesWidget, SecuritySettings);
|
||||
new QListWidgetItem(QIcon(":/resources/ui.svg"), tr("UI"), ui->optionsPagesWidget, UISettings);
|
||||
|
||||
ui->renderingEngineComboBox->addItem(tr("Software"), static_cast<int>(pdf::RendererEngine::Software));
|
||||
ui->renderingEngineComboBox->addItem(tr("Hardware accelerated (OpenGL)"), static_cast<int>(pdf::RendererEngine::OpenGL));
|
||||
|
@ -63,6 +67,9 @@ PDFViewerSettingsDialog::PDFViewerSettingsDialog(const PDFViewerSettings::Settin
|
|||
ui->multithreadingComboBox->addItem(tr("Multithreading (load balanced)"), static_cast<int>(pdf::PDFExecutionPolicy::Strategy::PageMultithreaded));
|
||||
ui->multithreadingComboBox->addItem(tr("Multithreading (maximum threads)"), static_cast<int>(pdf::PDFExecutionPolicy::Strategy::AlwaysMultithreaded));
|
||||
|
||||
ui->maximumRecentFileCountEdit->setMinimum(PDFRecentFileManager::getMinimumRecentFiles());
|
||||
ui->maximumRecentFileCountEdit->setMaximum(PDFRecentFileManager::getMaximumRecentFiles());
|
||||
|
||||
// Load CMS data
|
||||
ui->cmsTypeComboBox->addItem(pdf::PDFCMSManager::getSystemName(pdf::PDFCMSSettings::System::Generic), int(pdf::PDFCMSSettings::System::Generic));
|
||||
ui->cmsTypeComboBox->addItem(pdf::PDFCMSManager::getSystemName(pdf::PDFCMSSettings::System::LittleCMS2), int(pdf::PDFCMSSettings::System::LittleCMS2));
|
||||
|
@ -168,6 +175,10 @@ void PDFViewerSettingsDialog::on_optionsPagesWidget_currentItemChanged(QListWidg
|
|||
ui->stackedWidget->setCurrentWidget(ui->securityPage);
|
||||
break;
|
||||
|
||||
case UISettings:
|
||||
ui->stackedWidget->setCurrentWidget(ui->uiPage);
|
||||
break;
|
||||
|
||||
default:
|
||||
Q_ASSERT(false);
|
||||
break;
|
||||
|
@ -229,6 +240,9 @@ void PDFViewerSettingsDialog::loadData()
|
|||
ui->allowLaunchCheckBox->setChecked(m_settings.m_allowLaunchApplications);
|
||||
ui->allowRunURICheckBox->setChecked(m_settings.m_allowLaunchURI);
|
||||
|
||||
// UI
|
||||
ui->maximumRecentFileCountEdit->setValue(m_otherSettings.maximumRecentFileCount);
|
||||
|
||||
// CMS
|
||||
ui->cmsTypeComboBox->setCurrentIndex(ui->cmsTypeComboBox->findData(int(m_cmsSettings.system)));
|
||||
if (m_cmsSettings.system != pdf::PDFCMSSettings::System::Generic)
|
||||
|
@ -406,6 +420,10 @@ void PDFViewerSettingsDialog::saveData()
|
|||
{
|
||||
m_settings.m_multithreadingStrategy = static_cast<pdf::PDFExecutionPolicy::Strategy>(ui->multithreadingComboBox->currentData().toInt());
|
||||
}
|
||||
else if (sender == ui->maximumRecentFileCountEdit)
|
||||
{
|
||||
m_otherSettings.maximumRecentFileCount = ui->maximumRecentFileCountEdit->value();
|
||||
}
|
||||
|
||||
loadData();
|
||||
}
|
||||
|
|
|
@ -37,14 +37,22 @@ class PDFViewerSettingsDialog : public QDialog
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
||||
struct OtherSettings
|
||||
{
|
||||
int maximumRecentFileCount = 0;
|
||||
};
|
||||
|
||||
/// Constructor
|
||||
/// \param settings Viewer settings
|
||||
/// \param cmsSettings Color management system settings
|
||||
/// \param otherSettings Other settings
|
||||
/// \param actions Actions
|
||||
/// \param cmsManager CMS manager
|
||||
/// \param parent Parent widget
|
||||
explicit PDFViewerSettingsDialog(const PDFViewerSettings::Settings& settings,
|
||||
const pdf::PDFCMSSettings& cmsSettings,
|
||||
const OtherSettings& otherSettings,
|
||||
QList<QAction*> actions,
|
||||
pdf::PDFCMSManager* cmsManager,
|
||||
QWidget* parent);
|
||||
|
@ -60,11 +68,13 @@ public:
|
|||
CacheSettings,
|
||||
ShortcutSettings,
|
||||
ColorManagementSystemSettings,
|
||||
SecuritySettings
|
||||
SecuritySettings,
|
||||
UISettings
|
||||
};
|
||||
|
||||
const PDFViewerSettings::Settings& getSettings() const { return m_settings; }
|
||||
const pdf::PDFCMSSettings& getCMSSettings() const { return m_cmsSettings; }
|
||||
const OtherSettings& getOtherSettings() const { return m_otherSettings; }
|
||||
|
||||
private slots:
|
||||
void on_optionsPagesWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous);
|
||||
|
@ -81,6 +91,7 @@ private:
|
|||
Ui::PDFViewerSettingsDialog* ui;
|
||||
PDFViewerSettings::Settings m_settings;
|
||||
pdf::PDFCMSSettings m_cmsSettings;
|
||||
OtherSettings m_otherSettings;
|
||||
QList<QAction*> m_actions;
|
||||
bool m_isLoadingData;
|
||||
};
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<item>
|
||||
<widget class="QStackedWidget" name="stackedWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
<number>7</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="enginePage">
|
||||
<layout class="QVBoxLayout" name="enginePageLayout">
|
||||
|
@ -825,6 +825,68 @@
|
|||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="uiPage">
|
||||
<layout class="QVBoxLayout" name="uiPageLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="uiGroupBox">
|
||||
<property name="title">
|
||||
<string>UI Settings</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="uiGroupBoxLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="maximumRecentFileCountLabel">
|
||||
<property name="text">
|
||||
<string>Maximum count of recent files</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSpinBox" name="maximumRecentFileCountEdit"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="uiInfoLabel">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>Maximum count of recent files controls, how much of recent files will be displayed in menu. When document is opened, then document is addet to the top of recent file list, and recent file list is truncated from bottom, if number of recent files is greater, than maximum.</p></body></html></string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="uiGroupBoxSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>402</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
|
|
@ -0,0 +1,138 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="30mm"
|
||||
height="30mm"
|
||||
viewBox="0 0 30 30"
|
||||
version="1.1"
|
||||
id="svg5291"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
|
||||
sodipodi:docname="ui.svg">
|
||||
<defs
|
||||
id="defs5285">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 15 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="30 : 15 : 1"
|
||||
inkscape:persp3d-origin="15 : 10 : 1"
|
||||
id="perspective5921" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.49999998"
|
||||
inkscape:cx="-709.86288"
|
||||
inkscape:cy="-498.71696"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="2035"
|
||||
inkscape:window-x="-13"
|
||||
inkscape:window-y="-13"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata5288">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Melka</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
<cc:requires
|
||||
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Vrstva 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-267)">
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot5913"
|
||||
style="fill:black;fill-opacity:1;stroke:none;font-family:sans-serif;font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;letter-spacing:0px;word-spacing:0px"><flowRegion
|
||||
id="flowRegion5915"><rect
|
||||
id="rect5917"
|
||||
width="129.22377"
|
||||
height="91.747108"
|
||||
x="-13.788582"
|
||||
y="-33.515606" /></flowRegion><flowPara
|
||||
id="flowPara5919" /></flowRoot> <rect
|
||||
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect845"
|
||||
width="27.735897"
|
||||
height="26.309353"
|
||||
x="1.403165"
|
||||
y="269.40442" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0.34117648;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect847"
|
||||
width="27.665739"
|
||||
height="2.4087679"
|
||||
x="1.403165"
|
||||
y="269.40442" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:0.34117647;stroke:#000000;stroke-width:0.5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect849"
|
||||
width="8.8633251"
|
||||
height="20.462824"
|
||||
x="2.3386083"
|
||||
y="273.73083" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 4.1671877,276.32943 5.4570315,0.0331"
|
||||
id="path855"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 4.1837241,277.58619 5.4570312,0.0331"
|
||||
id="path855-1"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 3.9604819,278.9091 5.4570297,0.0331"
|
||||
id="path855-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 3.9770183,280.16586 5.4570293,0.0331"
|
||||
id="path855-1-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.1 KiB |
Loading…
Reference in New Issue