mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
Merge pull request #186 from YACReader/feature/whatsnew
Add what's new dialog
This commit is contained in:
commit
b80d85a49e
@ -20,6 +20,8 @@
|
||||
#include "edit_shortcuts_dialog.h"
|
||||
#include "shortcuts_manager.h"
|
||||
|
||||
#include "whats_new_controller.h"
|
||||
|
||||
#include <ctime>
|
||||
#include <algorithm>
|
||||
#include <QApplication>
|
||||
@ -73,6 +75,14 @@ MainWindowViewer::MainWindowViewer()
|
||||
{
|
||||
loadConfiguration();
|
||||
setupUI();
|
||||
afterLaunchTasks();
|
||||
}
|
||||
|
||||
void MainWindowViewer::afterLaunchTasks()
|
||||
{
|
||||
WhatsNewController whatsNewController;
|
||||
|
||||
whatsNewController.showWhatsNewIfNeeded(this);
|
||||
}
|
||||
|
||||
MainWindowViewer::~MainWindowViewer()
|
||||
|
@ -185,6 +185,7 @@ protected:
|
||||
void closeEvent(QCloseEvent *event) override;
|
||||
void sendComic();
|
||||
void updatePrevNextActions(bool thereIsPrevious, bool thereIsNext);
|
||||
void afterLaunchTasks();
|
||||
|
||||
public:
|
||||
MainWindowViewer();
|
||||
|
@ -66,5 +66,7 @@
|
||||
<file>../images/shortcuts_group_page.png</file>
|
||||
<file>../images/shortcuts_group_reading.png</file>
|
||||
<file>../images/shortcuts_group_visualization.png</file>
|
||||
<file>../images/custom_dialog/custom_close_button.svg</file>
|
||||
<file>../images/whats_new/whatsnew_header.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -123,5 +123,7 @@
|
||||
<file>../images/updatingIcon.png</file>
|
||||
<file>../images/useNewFlowButton.png</file>
|
||||
<file>../images/useOldFlowButton.png</file>
|
||||
<file>../images/custom_dialog/custom_close_button.svg</file>
|
||||
<file>../images/whats_new/whatsnew_header.svg</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -83,6 +83,8 @@
|
||||
|
||||
#include "trayicon_controller.h"
|
||||
|
||||
#include "whats_new_controller.h"
|
||||
|
||||
#include "QsLog.h"
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
@ -104,6 +106,15 @@ LibraryWindow::LibraryWindow()
|
||||
showRootWidget();
|
||||
selectedLibrary->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
afterLaunchTasks();
|
||||
}
|
||||
|
||||
void LibraryWindow::afterLaunchTasks()
|
||||
{
|
||||
WhatsNewController whatsNewController;
|
||||
|
||||
whatsNewController.showWhatsNewIfNeeded(this);
|
||||
}
|
||||
|
||||
void LibraryWindow::setupUI()
|
||||
|
@ -405,6 +405,8 @@ public slots:
|
||||
void prepareToCloseApp();
|
||||
void closeApp();
|
||||
|
||||
void afterLaunchTasks();
|
||||
|
||||
private:
|
||||
//fullscreen mode in Windows for preventing this bug: QTBUG-41309 https://bugreports.qt.io/browse/QTBUG-41309
|
||||
Qt::WindowFlags previousWindowFlags;
|
||||
|
@ -1,15 +1,20 @@
|
||||
INCLUDEPATH += $$PWD
|
||||
DEPENDPATH += $$PWD
|
||||
|
||||
HEADERS += $$PWD/help_about_dialog.h \
|
||||
$$PWD/yacreader_field_edit.h \
|
||||
$$PWD/yacreader_field_plain_text_edit.h \
|
||||
$$PWD/yacreader_flow.h \
|
||||
$$PWD/yacreader_flow_config_widget.h \
|
||||
$$PWD/yacreader_options_dialog.h \
|
||||
$$PWD/yacreader_spin_slider_widget.h \
|
||||
$$PWD/yacreader_tool_bar_stretch.h \
|
||||
$$PWD/yacreader_busy_widget.h
|
||||
HEADERS += \
|
||||
$$PWD/help_about_dialog.h \
|
||||
$$PWD/yacreader_field_edit.h \
|
||||
$$PWD/yacreader_field_plain_text_edit.h \
|
||||
$$PWD/yacreader_flow.h \
|
||||
$$PWD/yacreader_flow_config_widget.h \
|
||||
$$PWD/yacreader_options_dialog.h \
|
||||
$$PWD/yacreader_spin_slider_widget.h \
|
||||
$$PWD/yacreader_tool_bar_stretch.h \
|
||||
$$PWD/yacreader_busy_widget.h \
|
||||
$$PWD/rounded_corners_dialog.h \
|
||||
$$PWD/whats_new_dialog.h \
|
||||
$$PWD/whats_new_controller.h
|
||||
|
||||
!CONFIG(no_opengl) {
|
||||
HEADERS += $$PWD/yacreader_gl_flow_config_widget.h
|
||||
}
|
||||
@ -20,15 +25,20 @@ HEADERS += $$PWD/yacreader_macosx_toolbar.h
|
||||
|
||||
|
||||
|
||||
SOURCES += $$PWD/help_about_dialog.cpp \
|
||||
$$PWD/yacreader_field_edit.cpp \
|
||||
$$PWD/yacreader_field_plain_text_edit.cpp \
|
||||
$$PWD/yacreader_flow.cpp \
|
||||
$$PWD/yacreader_flow_config_widget.cpp \
|
||||
$$PWD/yacreader_options_dialog.cpp \
|
||||
$$PWD/yacreader_spin_slider_widget.cpp \
|
||||
$$PWD/yacreader_tool_bar_stretch.cpp \
|
||||
$$PWD/yacreader_busy_widget.cpp
|
||||
SOURCES += \
|
||||
$$PWD/help_about_dialog.cpp \
|
||||
$$PWD/yacreader_field_edit.cpp \
|
||||
$$PWD/yacreader_field_plain_text_edit.cpp \
|
||||
$$PWD/yacreader_flow.cpp \
|
||||
$$PWD/yacreader_flow_config_widget.cpp \
|
||||
$$PWD/yacreader_options_dialog.cpp \
|
||||
$$PWD/yacreader_spin_slider_widget.cpp \
|
||||
$$PWD/yacreader_tool_bar_stretch.cpp \
|
||||
$$PWD/yacreader_busy_widget.cpp \
|
||||
$$PWD/rounded_corners_dialog.cpp \
|
||||
$$PWD/whats_new_dialog.cpp \
|
||||
$$PWD/whats_new_controller.cpp
|
||||
|
||||
!CONFIG(no_opengl) {
|
||||
SOURCES += $$PWD/yacreader_gl_flow_config_widget.cpp
|
||||
}
|
||||
|
@ -1,23 +1,27 @@
|
||||
INCLUDEPATH += $$PWD
|
||||
DEPENDPATH += $$PWD
|
||||
|
||||
HEADERS += $$PWD/help_about_dialog.h \
|
||||
$$PWD/yacreader_field_edit.h \
|
||||
$$PWD/yacreader_field_plain_text_edit.h \
|
||||
$$PWD/yacreader_flow.h \
|
||||
$$PWD/yacreader_flow_config_widget.h \
|
||||
$$PWD/yacreader_options_dialog.h \
|
||||
$$PWD/yacreader_search_line_edit.h \
|
||||
$$PWD/yacreader_spin_slider_widget.h \
|
||||
$$PWD/yacreader_tool_bar_stretch.h \
|
||||
$$PWD/yacreader_titled_toolbar.h \
|
||||
$$PWD/yacreader_deleting_progress.h \
|
||||
$$PWD/yacreader_table_view.h \
|
||||
$$PWD/yacreader_sidebar.h \
|
||||
$$PWD/yacreader_library_list_widget.h \
|
||||
$$PWD/yacreader_library_item_widget.h \
|
||||
$$PWD/yacreader_treeview.h \
|
||||
$$PWD/yacreader_busy_widget.h
|
||||
HEADERS += \
|
||||
$$PWD/help_about_dialog.h \
|
||||
$$PWD/rounded_corners_dialog.h \
|
||||
$$PWD/whats_new_dialog.h \
|
||||
$$PWD/whats_new_controller.h \
|
||||
$$PWD/yacreader_field_edit.h \
|
||||
$$PWD/yacreader_field_plain_text_edit.h \
|
||||
$$PWD/yacreader_flow.h \
|
||||
$$PWD/yacreader_flow_config_widget.h \
|
||||
$$PWD/yacreader_options_dialog.h \
|
||||
$$PWD/yacreader_search_line_edit.h \
|
||||
$$PWD/yacreader_spin_slider_widget.h \
|
||||
$$PWD/yacreader_tool_bar_stretch.h \
|
||||
$$PWD/yacreader_titled_toolbar.h \
|
||||
$$PWD/yacreader_deleting_progress.h \
|
||||
$$PWD/yacreader_table_view.h \
|
||||
$$PWD/yacreader_sidebar.h \
|
||||
$$PWD/yacreader_library_list_widget.h \
|
||||
$$PWD/yacreader_library_item_widget.h \
|
||||
$$PWD/yacreader_treeview.h \
|
||||
$$PWD/yacreader_busy_widget.h
|
||||
!CONFIG(no_opengl){
|
||||
HEADERS += $$PWD/yacreader_gl_flow_config_widget.h
|
||||
}
|
||||
@ -26,23 +30,27 @@ macx{
|
||||
HEADERS += $$PWD/yacreader_macosx_toolbar.h
|
||||
}
|
||||
|
||||
SOURCES += $$PWD/help_about_dialog.cpp \
|
||||
$$PWD/yacreader_field_edit.cpp \
|
||||
$$PWD/yacreader_field_plain_text_edit.cpp \
|
||||
$$PWD/yacreader_flow.cpp \
|
||||
$$PWD/yacreader_flow_config_widget.cpp \
|
||||
$$PWD/yacreader_options_dialog.cpp \
|
||||
$$PWD/yacreader_search_line_edit.cpp \
|
||||
$$PWD/yacreader_spin_slider_widget.cpp \
|
||||
$$PWD/yacreader_tool_bar_stretch.cpp \
|
||||
$$PWD/yacreader_titled_toolbar.cpp \
|
||||
$$PWD/yacreader_deleting_progress.cpp \
|
||||
$$PWD/yacreader_table_view.cpp \
|
||||
$$PWD/yacreader_sidebar.cpp \
|
||||
$$PWD/yacreader_library_list_widget.cpp \
|
||||
$$PWD/yacreader_library_item_widget.cpp \
|
||||
$$PWD/yacreader_treeview.cpp \
|
||||
$$PWD/yacreader_busy_widget.cpp
|
||||
SOURCES += \
|
||||
$$PWD/help_about_dialog.cpp \
|
||||
$$PWD/rounded_corners_dialog.cpp \
|
||||
$$PWD/whats_new_dialog.cpp \
|
||||
$$PWD/whats_new_controller.cpp \
|
||||
$$PWD/yacreader_field_edit.cpp \
|
||||
$$PWD/yacreader_field_plain_text_edit.cpp \
|
||||
$$PWD/yacreader_flow.cpp \
|
||||
$$PWD/yacreader_flow_config_widget.cpp \
|
||||
$$PWD/yacreader_options_dialog.cpp \
|
||||
$$PWD/yacreader_search_line_edit.cpp \
|
||||
$$PWD/yacreader_spin_slider_widget.cpp \
|
||||
$$PWD/yacreader_tool_bar_stretch.cpp \
|
||||
$$PWD/yacreader_titled_toolbar.cpp \
|
||||
$$PWD/yacreader_deleting_progress.cpp \
|
||||
$$PWD/yacreader_table_view.cpp \
|
||||
$$PWD/yacreader_sidebar.cpp \
|
||||
$$PWD/yacreader_library_list_widget.cpp \
|
||||
$$PWD/yacreader_library_item_widget.cpp \
|
||||
$$PWD/yacreader_treeview.cpp \
|
||||
$$PWD/yacreader_busy_widget.cpp
|
||||
|
||||
!CONFIG(no_opengl){
|
||||
SOURCES += $$PWD/yacreader_gl_flow_config_widget.cpp
|
||||
|
39
custom_widgets/rounded_corners_dialog.cpp
Normal file
39
custom_widgets/rounded_corners_dialog.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
#include "rounded_corners_dialog.h"
|
||||
|
||||
#include <QtWidgets>
|
||||
|
||||
YACReader::RoundedCornersDialog::RoundedCornersDialog(QWidget *parent)
|
||||
: QDialog(parent)
|
||||
{
|
||||
setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
|
||||
setAttribute(Qt::WA_TranslucentBackground);
|
||||
}
|
||||
|
||||
void YACReader::RoundedCornersDialog::paintEvent(QPaintEvent *)
|
||||
{
|
||||
qreal radius = 36.0; // desired radius in absolute pixels
|
||||
qreal borderWidth = 0.0;
|
||||
|
||||
if (!(windowFlags() & Qt::FramelessWindowHint) && !testAttribute(Qt::WA_TranslucentBackground))
|
||||
return; // nothing to do
|
||||
|
||||
QPainter p(this);
|
||||
p.setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
// Paint thyself.
|
||||
QRectF rect(QPointF(0, 0), size());
|
||||
// Check for a border size.
|
||||
qreal penWidth = borderWidth;
|
||||
p.setPen(Qt::NoPen);
|
||||
|
||||
// Set the brush from palette role.
|
||||
p.setBrush(palette().brush(backgroundRole()));
|
||||
// Got radius? Otherwise draw a quicker rect.
|
||||
if (radius > 0.0)
|
||||
p.drawRoundedRect(rect, radius, radius, Qt::AbsoluteSize);
|
||||
else
|
||||
p.drawRect(rect);
|
||||
|
||||
// C'est finí
|
||||
p.end();
|
||||
}
|
18
custom_widgets/rounded_corners_dialog.h
Normal file
18
custom_widgets/rounded_corners_dialog.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef ROUNDEDCORNERSDIALOG_H
|
||||
#define ROUNDEDCORNERSDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace YACReader {
|
||||
class RoundedCornersDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit RoundedCornersDialog(QWidget *parent = nullptr);
|
||||
|
||||
protected:
|
||||
void paintEvent(QPaintEvent *) override;
|
||||
};
|
||||
}
|
||||
|
||||
#endif // ROUNDEDCORNERSDIALOG_H
|
29
custom_widgets/whats_new_controller.cpp
Normal file
29
custom_widgets/whats_new_controller.cpp
Normal file
@ -0,0 +1,29 @@
|
||||
#include "whats_new_controller.h"
|
||||
|
||||
#include "whats_new_dialog.h"
|
||||
#include "yacreader_global.h"
|
||||
|
||||
#include <QtCore>
|
||||
|
||||
YACReader::WhatsNewController::WhatsNewController() { }
|
||||
|
||||
void YACReader::WhatsNewController::showWhatsNewIfNeeded(QWidget *fromParent)
|
||||
{
|
||||
QSettings commonSettings(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) +
|
||||
"/YACReader/YACReaderCommon.ini",
|
||||
QSettings::IniFormat);
|
||||
|
||||
if (commonSettings.value("LAST_VERSION_INSTALLED").toString() != VERSION) {
|
||||
showWhatsNew(fromParent);
|
||||
commonSettings.setValue("LAST_VERSION_INSTALLED", VERSION);
|
||||
}
|
||||
}
|
||||
|
||||
void YACReader::WhatsNewController::showWhatsNew(QWidget *fromParent)
|
||||
{
|
||||
auto whatsNewDialog = new WhatsNewDialog(fromParent);
|
||||
|
||||
whatsNewDialog->show();
|
||||
|
||||
QObject::connect(whatsNewDialog, &QDialog::finished, whatsNewDialog, &QDialog::deleteLater);
|
||||
}
|
18
custom_widgets/whats_new_controller.h
Normal file
18
custom_widgets/whats_new_controller.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef WHATSNEWCONTROLLER_H
|
||||
#define WHATSNEWCONTROLLER_H
|
||||
|
||||
class QWidget;
|
||||
|
||||
namespace YACReader {
|
||||
|
||||
class WhatsNewController
|
||||
{
|
||||
public:
|
||||
WhatsNewController();
|
||||
void showWhatsNewIfNeeded(QWidget *fromParent = nullptr);
|
||||
void showWhatsNew(QWidget *fromParent = nullptr);
|
||||
};
|
||||
|
||||
} // namespace YACReader
|
||||
|
||||
#endif // WHATSNEWCONTROLLER_H
|
101
custom_widgets/whats_new_dialog.cpp
Normal file
101
custom_widgets/whats_new_dialog.cpp
Normal file
@ -0,0 +1,101 @@
|
||||
#include "whats_new_dialog.h"
|
||||
#include "yacreader_global.h"
|
||||
|
||||
#include <QtWidgets>
|
||||
|
||||
YACReader::WhatsNewDialog::WhatsNewDialog(QWidget *parent)
|
||||
: RoundedCornersDialog(parent)
|
||||
{
|
||||
auto scrollArea = new QScrollArea(this);
|
||||
scrollArea->setStyleSheet("background-color:transparent;"
|
||||
"border:none;");
|
||||
scrollArea->horizontalScrollBar()->setStyleSheet("QScrollBar {height:0px;}");
|
||||
scrollArea->verticalScrollBar()->setStyleSheet("QScrollBar {width:0px;}");
|
||||
scrollArea->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
auto mainLayout = new QVBoxLayout(this);
|
||||
mainLayout->setMargin(0);
|
||||
auto contentLayout = new QGridLayout();
|
||||
|
||||
auto content = new QFrame();
|
||||
|
||||
content->setStyleSheet("background-color:transparent;"
|
||||
"border:none;");
|
||||
|
||||
auto headerImageLabel = new QLabel();
|
||||
QPixmap headerImage(":/images/whats_new/whatsnew_header.svg");
|
||||
headerImageLabel->setPixmap(headerImage);
|
||||
headerImageLabel->setFixedSize(headerImage.size());
|
||||
headerImageLabel->move(50, 20);
|
||||
|
||||
auto headerLabel = new QLabel();
|
||||
headerLabel->setText("What's New in\nYACReader");
|
||||
QFont headerLabelFont("Arial", 34, QFont::ExtraBold);
|
||||
headerLabel->setFont(headerLabelFont);
|
||||
headerLabel->setAlignment(Qt::AlignCenter);
|
||||
headerLabel->setStyleSheet("padding:18px 0 0 0;"
|
||||
"background-color:transparent;"
|
||||
"color:#0A0A0A;");
|
||||
|
||||
auto versionLabel = new QLabel();
|
||||
versionLabel->setText(VERSION);
|
||||
QFont versionLabelFont("Arial", 12, QFont::Normal);
|
||||
versionLabel->setFont(versionLabelFont);
|
||||
versionLabel->setAlignment(Qt::AlignCenter);
|
||||
versionLabel->setStyleSheet("padding:0 0 0 0;"
|
||||
"background-color:transparent;"
|
||||
"color:#858585;");
|
||||
|
||||
auto text = new QLabel();
|
||||
text->setText("Hey, a new version is here, check the new stuff including this <i>What's new</i> dialog:<br/>"
|
||||
"<br/>"
|
||||
"<span style=\"font-weight:600\">YACReader</span><br/>"
|
||||
" • Add support for full manga mode.<br/>"
|
||||
" • Fix UP, DOWN, LEFT, RIGHT shortcuts for moving a zoomed in page around.<br/>"
|
||||
"<br/>"
|
||||
"<span style=\"font-weight:600\">YACReaderLibrary</span><br/>"
|
||||
" • New fuzzy search engine. Type to search into any field of the database, or target specific content <i>\"read:false manga:true filename:3x3\"</i>, read more about how it works in the <a href=\"https://www.yacreader.com\" style=\"color:#E8B800;\">web site</a>. <br/>"
|
||||
" • New `manga` field added to comics and folders to tag content as manga, any content added to a manga folder will become manga automatically.<br/>"
|
||||
"<br/>"
|
||||
"<span style=\"font-weight:600\">Server</span><br/>"
|
||||
" • New `manga` field is sent to YACReader for iOS, so comics tagged as manga will be recognized as such when reading remotely or importing comics.<br/>"
|
||||
"<br/>"
|
||||
"I hope you enjoy the new update. Please, if you like YACReader consider to become a patron in <a href=\"https://www.patreon.com/yacreader\" style=\"color:#E8B800;\">Patreon</a> or donate some money using <a href=\"https://www.paypal.com/donate/?token=xi5MT7fEzaKBbx1-CKNgRHKr3vPp7zjaCc8Ic4VUIxHln58eHfDqdO2K0wlubfxNeFK9IWUKSaB54RhB&locale.x=US\" style=\"color:#E8B800;\">Pay-Pal</a> and help keeping the project alive. Remember that there is an iOS version available in the <a href=\"https://apps.apple.com/app/id635717885\" style=\"color:#E8B800;\">Apple App Store</a>.");
|
||||
QFont textLabelFont("Arial", 15, QFont::Light);
|
||||
text->setFont(textLabelFont);
|
||||
text->setStyleSheet("padding:51px;"
|
||||
"background-color:transparent;"
|
||||
"color:#0A0A0A;");
|
||||
text->setWordWrap(true);
|
||||
text->setOpenExternalLinks(true);
|
||||
|
||||
contentLayout->addWidget(headerImageLabel, 0, 0, Qt::AlignTop | Qt::AlignHCenter);
|
||||
contentLayout->addWidget(headerLabel, 0, 0, Qt::AlignTop | Qt::AlignHCenter);
|
||||
contentLayout->addWidget(versionLabel, 1, 0, Qt::AlignTop | Qt::AlignHCenter);
|
||||
contentLayout->addWidget(text, 2, 0, Qt::AlignTop);
|
||||
contentLayout->setRowStretch(2, 1);
|
||||
content->setLayout(contentLayout);
|
||||
|
||||
mainLayout->addWidget(scrollArea);
|
||||
|
||||
//containerLayout->addWidget(content);
|
||||
scrollArea->setWidget(content);
|
||||
scrollArea->setWidgetResizable(true);
|
||||
|
||||
this->setLayout(mainLayout);
|
||||
|
||||
auto closeButton = new QPushButton(this);
|
||||
closeButton->setFlat(true);
|
||||
closeButton->setStyleSheet("background-color:transparent;");
|
||||
closeButton->setIcon(QPixmap(":/images/custom_dialog/custom_close_button.svg"));
|
||||
closeButton->setIconSize(QSize(44, 44));
|
||||
closeButton->setFixedSize(44, 44);
|
||||
|
||||
closeButton->move(656, 20);
|
||||
|
||||
scrollArea->setFixedSize(720, 640);
|
||||
setFixedSize(720, 640);
|
||||
setModal(true);
|
||||
|
||||
connect(closeButton, &QPushButton::clicked, this, &QDialog::close);
|
||||
}
|
17
custom_widgets/whats_new_dialog.h
Normal file
17
custom_widgets/whats_new_dialog.h
Normal file
@ -0,0 +1,17 @@
|
||||
#ifndef WHATSNEWDIALOG_H
|
||||
#define WHATSNEWDIALOG_H
|
||||
|
||||
#include "rounded_corners_dialog.h"
|
||||
#include <QObject>
|
||||
|
||||
namespace YACReader {
|
||||
|
||||
class WhatsNewDialog : public RoundedCornersDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit WhatsNewDialog(QWidget *parent = nullptr);
|
||||
};
|
||||
}
|
||||
|
||||
#endif // WHATSNEWDIALOG_H
|
BIN
images/custom_dialog/custom_close_button.svg
Normal file
BIN
images/custom_dialog/custom_close_button.svg
Normal file
Binary file not shown.
After Width: | Height: | Size: 352 B |
BIN
images/whats_new/whatsnew_header.svg
Normal file
BIN
images/whats_new/whatsnew_header.svg
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
Loading…
Reference in New Issue
Block a user