From 58fdf0af23002efd840d8c69fb5f04e2b75bc43b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 21 Jan 2021 21:39:22 +0100 Subject: [PATCH 1/2] Add what's new dialog --- YACReader/main_window_viewer.cpp | 10 ++ YACReader/main_window_viewer.h | 1 + YACReader/yacreader_images.qrc | 2 + YACReaderLibrary/images.qrc | 2 + YACReaderLibrary/library_window.cpp | 11 ++ YACReaderLibrary/library_window.h | 2 + custom_widgets/custom_widgets_yacreader.pri | 46 ++++---- .../custom_widgets_yacreaderlibrary.pri | 6 ++ custom_widgets/rounded_corners_dialog.cpp | 39 +++++++ custom_widgets/rounded_corners_dialog.h | 18 ++++ custom_widgets/whats_new_controller.cpp | 29 +++++ custom_widgets/whats_new_controller.h | 18 ++++ custom_widgets/whats_new_dialog.cpp | 101 ++++++++++++++++++ custom_widgets/whats_new_dialog.h | 17 +++ images/custom_dialog/custom_close_button.svg | 1 + images/whats_new/whatsnew_header.svg | 28 +++++ 16 files changed, 313 insertions(+), 18 deletions(-) create mode 100644 custom_widgets/rounded_corners_dialog.cpp create mode 100644 custom_widgets/rounded_corners_dialog.h create mode 100644 custom_widgets/whats_new_controller.cpp create mode 100644 custom_widgets/whats_new_controller.h create mode 100644 custom_widgets/whats_new_dialog.cpp create mode 100644 custom_widgets/whats_new_dialog.h create mode 100644 images/custom_dialog/custom_close_button.svg create mode 100644 images/whats_new/whatsnew_header.svg diff --git a/YACReader/main_window_viewer.cpp b/YACReader/main_window_viewer.cpp index 42568e44..b86056bf 100644 --- a/YACReader/main_window_viewer.cpp +++ b/YACReader/main_window_viewer.cpp @@ -20,6 +20,8 @@ #include "edit_shortcuts_dialog.h" #include "shortcuts_manager.h" +#include "whats_new_controller.h" + #include #include #include @@ -73,6 +75,14 @@ MainWindowViewer::MainWindowViewer() { loadConfiguration(); setupUI(); + afterLaunchTasks(); +} + +void MainWindowViewer::afterLaunchTasks() +{ + WhatsNewController whatsNewController; + + whatsNewController.showWhatsNewIfNeeded(this); } MainWindowViewer::~MainWindowViewer() diff --git a/YACReader/main_window_viewer.h b/YACReader/main_window_viewer.h index 466575c7..e526a936 100644 --- a/YACReader/main_window_viewer.h +++ b/YACReader/main_window_viewer.h @@ -185,6 +185,7 @@ protected: void closeEvent(QCloseEvent *event) override; void sendComic(); void updatePrevNextActions(bool thereIsPrevious, bool thereIsNext); + void afterLaunchTasks(); public: MainWindowViewer(); diff --git a/YACReader/yacreader_images.qrc b/YACReader/yacreader_images.qrc index 2e1e5f6a..5488564b 100644 --- a/YACReader/yacreader_images.qrc +++ b/YACReader/yacreader_images.qrc @@ -66,5 +66,7 @@ ../images/shortcuts_group_page.png ../images/shortcuts_group_reading.png ../images/shortcuts_group_visualization.png + ../images/custom_dialog/custom_close_button.svg + ../images/whats_new/whatsnew_header.svg diff --git a/YACReaderLibrary/images.qrc b/YACReaderLibrary/images.qrc index 09366f1b..3b117b64 100644 --- a/YACReaderLibrary/images.qrc +++ b/YACReaderLibrary/images.qrc @@ -123,5 +123,7 @@ ../images/updatingIcon.png ../images/useNewFlowButton.png ../images/useOldFlowButton.png + ../images/custom_dialog/custom_close_button.svg + ../images/whats_new/whatsnew_header.svg diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index e8119ca7..02233c9e 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -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() diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index a25e826f..6a8137c4 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -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; diff --git a/custom_widgets/custom_widgets_yacreader.pri b/custom_widgets/custom_widgets_yacreader.pri index 44af8da3..51c9999d 100644 --- a/custom_widgets/custom_widgets_yacreader.pri +++ b/custom_widgets/custom_widgets_yacreader.pri @@ -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 } diff --git a/custom_widgets/custom_widgets_yacreaderlibrary.pri b/custom_widgets/custom_widgets_yacreaderlibrary.pri index ccb13afe..9aaf0fe9 100644 --- a/custom_widgets/custom_widgets_yacreaderlibrary.pri +++ b/custom_widgets/custom_widgets_yacreaderlibrary.pri @@ -2,6 +2,9 @@ INCLUDEPATH += $$PWD DEPENDPATH += $$PWD 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 \ @@ -27,6 +30,9 @@ HEADERS += $$PWD/yacreader_macosx_toolbar.h } 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 \ diff --git a/custom_widgets/rounded_corners_dialog.cpp b/custom_widgets/rounded_corners_dialog.cpp new file mode 100644 index 00000000..f3ce5179 --- /dev/null +++ b/custom_widgets/rounded_corners_dialog.cpp @@ -0,0 +1,39 @@ +#include "rounded_corners_dialog.h" + +#include + +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(); +} diff --git a/custom_widgets/rounded_corners_dialog.h b/custom_widgets/rounded_corners_dialog.h new file mode 100644 index 00000000..04679fb8 --- /dev/null +++ b/custom_widgets/rounded_corners_dialog.h @@ -0,0 +1,18 @@ +#ifndef ROUNDEDCORNERSDIALOG_H +#define ROUNDEDCORNERSDIALOG_H + +#include + +namespace YACReader { +class RoundedCornersDialog : public QDialog +{ + Q_OBJECT +public: + explicit RoundedCornersDialog(QWidget *parent = nullptr); + +protected: + void paintEvent(QPaintEvent *) override; +}; +} + +#endif // ROUNDEDCORNERSDIALOG_H diff --git a/custom_widgets/whats_new_controller.cpp b/custom_widgets/whats_new_controller.cpp new file mode 100644 index 00000000..df550ab7 --- /dev/null +++ b/custom_widgets/whats_new_controller.cpp @@ -0,0 +1,29 @@ +#include "whats_new_controller.h" + +#include "whats_new_dialog.h" +#include "yacreader_global.h" + +#include + +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); +} diff --git a/custom_widgets/whats_new_controller.h b/custom_widgets/whats_new_controller.h new file mode 100644 index 00000000..ec13d657 --- /dev/null +++ b/custom_widgets/whats_new_controller.h @@ -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 diff --git a/custom_widgets/whats_new_dialog.cpp b/custom_widgets/whats_new_dialog.cpp new file mode 100644 index 00000000..24bce2ab --- /dev/null +++ b/custom_widgets/whats_new_dialog.cpp @@ -0,0 +1,101 @@ +#include "whats_new_dialog.h" +#include "yacreader_global.h" + +#include + +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 What's new dialog:
" + "
" + "YACReader
" + " • Add support for full manga mode.
" + " • Fix UP, DOWN, LEFT, RIGHT shortcuts for moving a zoomed in page around.
" + "
" + "YACReaderLibrary
" + " • New fuzzy search engine. Type to search into any field of the database, or target specific content \"read:false manga:true filename:3x3\", read more about how it works in the web site.
" + " • New `manga` field added to comics and folders to tag content as manga, any content added to a manga folder will become manga automatically.
" + "
" + "Server
" + " • 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.
" + "
" + "I hope you enjoy the new update. Please, if you like YACReader consider to become a patron in Patreon or donate some money using Pay-Pal and help keeping the project alive. Remember that there is an iOS version available in the Apple App Store."); + 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); +} diff --git a/custom_widgets/whats_new_dialog.h b/custom_widgets/whats_new_dialog.h new file mode 100644 index 00000000..8ec3722b --- /dev/null +++ b/custom_widgets/whats_new_dialog.h @@ -0,0 +1,17 @@ +#ifndef WHATSNEWDIALOG_H +#define WHATSNEWDIALOG_H + +#include "rounded_corners_dialog.h" +#include + +namespace YACReader { + +class WhatsNewDialog : public RoundedCornersDialog +{ + Q_OBJECT +public: + explicit WhatsNewDialog(QWidget *parent = nullptr); +}; +} + +#endif // WHATSNEWDIALOG_H diff --git a/images/custom_dialog/custom_close_button.svg b/images/custom_dialog/custom_close_button.svg new file mode 100644 index 00000000..1a6ad742 --- /dev/null +++ b/images/custom_dialog/custom_close_button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/images/whats_new/whatsnew_header.svg b/images/whats_new/whatsnew_header.svg new file mode 100644 index 00000000..0cc109c3 --- /dev/null +++ b/images/whats_new/whatsnew_header.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + From 5c48fe57837618c21fd6fef79ee1514cdbdf94e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 21 Jan 2021 22:31:56 +0100 Subject: [PATCH 2/2] format --- .../custom_widgets_yacreaderlibrary.pri | 82 ++++++++++--------- 1 file changed, 42 insertions(+), 40 deletions(-) diff --git a/custom_widgets/custom_widgets_yacreaderlibrary.pri b/custom_widgets/custom_widgets_yacreaderlibrary.pri index 9aaf0fe9..0ea43ca6 100644 --- a/custom_widgets/custom_widgets_yacreaderlibrary.pri +++ b/custom_widgets/custom_widgets_yacreaderlibrary.pri @@ -1,26 +1,27 @@ INCLUDEPATH += $$PWD DEPENDPATH += $$PWD -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 +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 } @@ -29,26 +30,27 @@ macx{ HEADERS += $$PWD/yacreader_macosx_toolbar.h } -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 +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