From abfa03fa16bb177c3dea64f2c44865fd36d6a0b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Sun, 9 Oct 2022 11:31:33 +0200 Subject: [PATCH] Use the new widget instead of EmptyFolderWidget --- YACReaderLibrary/library_window.cpp | 86 ++++++++++++++++++- YACReaderLibrary/library_window.h | 4 + .../yacreader_comics_views_manager.cpp | 10 +-- .../yacreader_comics_views_manager.h | 5 +- .../yacreader_navigation_controller.cpp | 22 +++-- 5 files changed, 113 insertions(+), 14 deletions(-) diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index f8a31f5a..003a3aa5 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -79,6 +79,7 @@ #include "opengl_checker.h" #include "yacreader_comics_views_manager.h" +#include "folder_content_view.h" #include "trayicon_controller.h" @@ -1544,7 +1545,7 @@ void LibraryWindow::reloadAfterCopyMove(const QModelIndex &mi) navigationController->loadFolderInfo(mi); } - foldersModel->fetchMoreFromDB(mi); + foldersModel->reload(); enableNeededActions(); } @@ -1783,6 +1784,87 @@ void LibraryWindow::showComicsItemContextMenu(const QPoint &point) menu.exec(comicsViewsManager->comicsView->mapToGlobal(point)); } +void LibraryWindow::showGridFoldersContextMenu(QPoint point, Folder folder) +{ + QMenu menu; + + auto openContainingFolderAction = new QAction(); + openContainingFolderAction->setText(tr("Open folder...")); + openContainingFolderAction->setIcon(QIcon(":/images/menus_icons/open.png")); + + auto updateFolderAction = new QAction(tr("Update folder"), this); + updateFolderAction->setIcon(QIcon(":/images/menus_icons/updateLibraryIcon.png")); + + auto setFolderAsNotCompletedAction = new QAction(); + setFolderAsNotCompletedAction->setText(tr("Set as uncompleted")); + + auto setFolderAsCompletedAction = new QAction(); + setFolderAsCompletedAction->setText(tr("Set as completed")); + + auto setFolderAsReadAction = new QAction(); + setFolderAsReadAction->setText(tr("Set as read")); + + auto setFolderAsUnreadAction = new QAction(); + setFolderAsUnreadAction->setText(tr("Set as unread")); + + auto setFolderAsMangaAction = new QAction(); + setFolderAsMangaAction->setText(tr("Set as manga")); + + auto setFolderAsNormalAction = new QAction(); + setFolderAsNormalAction->setText(tr("Set as comic")); + + menu.addAction(openContainingFolderAction); + menu.addAction(updateFolderAction); + menu.addSeparator(); + if (folder.isCompleted()) + menu.addAction(setFolderAsNotCompletedAction); + else + menu.addAction(setFolderAsCompletedAction); + menu.addSeparator(); + if (folder.isFinished()) + menu.addAction(setFolderAsUnreadAction); + else + menu.addAction(setFolderAsReadAction); + menu.addSeparator(); + if (folder.isManga()) + menu.addAction(setFolderAsNormalAction); + else + menu.addAction(setFolderAsMangaAction); + + // TODO update the subfolder model loaded in folderContentView + connect(openContainingFolderAction, &QAction::triggered, this, [=]() { + QDesktopServices::openUrl(QUrl("file:///" + QDir::cleanPath(currentPath() + "/" + folder.path), QUrl::TolerantMode)); + }); + connect(updateFolderAction, &QAction::triggered, this, [=]() { + updateFolder(foldersModel->getIndexFromFolder(folder)); + }); + connect(setFolderAsNotCompletedAction, &QAction::triggered, this, [=]() { + foldersModel->updateFolderCompletedStatus(QModelIndexList() << foldersModel->getIndexFromFolder(folder), false); + }); + connect(setFolderAsCompletedAction, &QAction::triggered, this, [=]() { + foldersModel->updateFolderCompletedStatus(QModelIndexList() << foldersModel->getIndexFromFolder(folder), true); + }); + connect(setFolderAsReadAction, &QAction::triggered, this, [=]() { + foldersModel->updateFolderFinishedStatus(QModelIndexList() << foldersModel->getIndexFromFolder(folder), true); + }); + connect(setFolderAsUnreadAction, &QAction::triggered, this, [=]() { + foldersModel->updateFolderFinishedStatus(QModelIndexList() << foldersModel->getIndexFromFolder(folder), false); + }); + connect(setFolderAsMangaAction, &QAction::triggered, this, [=]() { + foldersModel->updateFolderManga(QModelIndexList() << foldersModel->getIndexFromFolder(folder), true); + }); + connect(setFolderAsNormalAction, &QAction::triggered, this, [=]() { + foldersModel->updateFolderManga(QModelIndexList() << foldersModel->getIndexFromFolder(folder), false); + }); + + menu.exec(comicsViewsManager->folderContentView->mapToGlobal(point)); +} + +void LibraryWindow::showContinueReadingContextMenu(QPoint point, ComicDB comic) +{ + qDebug() << "openContinueReadingComicContextMenu" << comic.name; +} + void LibraryWindow::setupAddToSubmenu(QMenu &menu) { menu.addAction(addToFavoritesAction); @@ -1832,7 +1914,7 @@ void LibraryWindow::saveSelectedCoversTo() if (!folderPath.isEmpty()) { QModelIndexList comics = getSelectedComics(); foreach (QModelIndex comic, comics) { - QString origin = comic.data(ComicModel::CoverPathRole).toString().remove("file:///"); + QString origin = comic.data(ComicModel::CoverPathRole).toString().remove("file:///").remove("file:"); QString destination = QDir(folderPath).filePath(comic.data(ComicModel::FileNameRole).toString() + ".jpg"); QLOG_DEBUG() << "From : " << origin; diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index db201a3b..ef51c657 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -14,6 +14,8 @@ #include "folder_query_result_processor.h" #include "comic_model.h" +#include "comic_db.h" +#include "folder.h" #include #include @@ -379,6 +381,8 @@ public slots: void deleteComicsFromList(); // void showSocial(); void showFoldersContextMenu(const QPoint &point); + void showGridFoldersContextMenu(QPoint point, Folder folder); + void showContinueReadingContextMenu(QPoint point, ComicDB comic); void libraryAlreadyExists(const QString &name); void importLibraryPackage(); void updateComicsView(quint64 libraryId, const ComicDB &comic); diff --git a/YACReaderLibrary/yacreader_comics_views_manager.cpp b/YACReaderLibrary/yacreader_comics_views_manager.cpp index ad7e5c49..36634017 100644 --- a/YACReaderLibrary/yacreader_comics_views_manager.cpp +++ b/YACReaderLibrary/yacreader_comics_views_manager.cpp @@ -6,7 +6,7 @@ #include "grid_comics_view.h" #include "info_comics_view.h" #include "comics_view_transition.h" -#include "empty_folder_widget.h" +#include "folder_content_view.h" #include "empty_label_widget.h" #include "empty_special_list.h" #include "empty_reading_list_widget.h" @@ -48,7 +48,7 @@ YACReaderComicsViewsManager::YACReaderComicsViewsManager(QSettings *settings, Li doComicsViewConnections(); comicsViewStack->addWidget(comicsViewTransition = new ComicsViewTransition()); - comicsViewStack->addWidget(emptyFolderWidget = new EmptyFolderWidget()); + comicsViewStack->addWidget(folderContentView = new FolderContentView()); comicsViewStack->addWidget(emptyLabelWidget = new EmptyLabelWidget()); comicsViewStack->addWidget(emptySpecialList = new EmptySpecialListWidget()); comicsViewStack->addWidget(emptyReadingList = new EmptyReadingListWidget()); @@ -59,8 +59,8 @@ YACReaderComicsViewsManager::YACReaderComicsViewsManager(QSettings *settings, Li comicsViewStack->setCurrentWidget(comicsView); // connections - connect(emptyFolderWidget, &EmptyFolderWidget::copyComicsToCurrentFolder, libraryWindow, &LibraryWindow::copyAndImportComicsToCurrentFolder); - connect(emptyFolderWidget, &EmptyFolderWidget::moveComicsToCurrentFolder, libraryWindow, &LibraryWindow::moveAndImportComicsToCurrentFolder); + connect(folderContentView, &FolderContentView::copyComicsToCurrentFolder, libraryWindow, &LibraryWindow::copyAndImportComicsToCurrentFolder); + connect(folderContentView, &FolderContentView::moveComicsToCurrentFolder, libraryWindow, &LibraryWindow::moveAndImportComicsToCurrentFolder); } QWidget *YACReaderComicsViewsManager::containerWidget() @@ -86,7 +86,7 @@ void YACReaderComicsViewsManager::showComicsView() void YACReaderComicsViewsManager::showEmptyFolderView() { - comicsViewStack->setCurrentWidget(emptyFolderWidget); + comicsViewStack->setCurrentWidget(folderContentView); } void YACReaderComicsViewsManager::showEmptyLabelView() diff --git a/YACReaderLibrary/yacreader_comics_views_manager.h b/YACReaderLibrary/yacreader_comics_views_manager.h index 4e79dd25..280bbd41 100644 --- a/YACReaderLibrary/yacreader_comics_views_manager.h +++ b/YACReaderLibrary/yacreader_comics_views_manager.h @@ -12,7 +12,7 @@ class ClassicComicsView; class GridComicsView; class InfoComicsView; class ComicsViewTransition; -class EmptyFolderWidget; +class FolderContentView; class EmptyLabelWidget; class EmptySpecialListWidget; class EmptyReadingListWidget; @@ -20,6 +20,7 @@ class NoSearchResultsWidget; using namespace YACReader; +// TODO rename to YACReaderContentViewsManager class YACReaderComicsViewsManager : public QObject { Q_OBJECT @@ -32,7 +33,7 @@ public: ComicsViewTransition *comicsViewTransition; - EmptyFolderWidget *emptyFolderWidget; + FolderContentView *folderContentView; EmptyLabelWidget *emptyLabelWidget; EmptySpecialListWidget *emptySpecialList; EmptyReadingListWidget *emptyReadingList; diff --git a/YACReaderLibrary/yacreader_navigation_controller.cpp b/YACReaderLibrary/yacreader_navigation_controller.cpp index 87c2b93f..9a313583 100644 --- a/YACReaderLibrary/yacreader_navigation_controller.cpp +++ b/YACReaderLibrary/yacreader_navigation_controller.cpp @@ -11,7 +11,7 @@ #include "folder_model.h" #include "reading_list_model.h" #include "comics_view.h" -#include "empty_folder_widget.h" +#include "folder_content_view.h" #include "yacreader_search_line_edit.h" #include "yacreader_global.h" #include "empty_label_widget.h" @@ -249,9 +249,18 @@ void YACReaderNavigationController::selectSubfolder(const QModelIndex &sourceMIP void YACReaderNavigationController::loadEmptyFolderInfo(const QModelIndex &modelIndex) { - QStringList subfolders; - subfolders = libraryWindow->foldersModel->getSubfoldersNames(modelIndex); - comicsViewsManager->emptyFolderWidget->setSubfolders(modelIndex, subfolders); + auto readingComicsModel = new ComicModel(); + + auto isRoot = !modelIndex.isValid(); + + if (isRoot) { + readingComicsModel->setupReadingModelData(libraryWindow->foldersModel->getDatabase()); + } + + comicsViewsManager->folderContentView->setContinueReadingModel(readingComicsModel); + + auto subFolderModel = libraryWindow->foldersModel->getSubfoldersModel(modelIndex); + comicsViewsManager->folderContentView->setModel(modelIndex, subFolderModel); } void YACReaderNavigationController::loadPreviousStatus() @@ -266,7 +275,10 @@ void YACReaderNavigationController::setupConnections() connect(libraryWindow->foldersView, &YACReaderTreeView::clicked, this, &YACReaderNavigationController::selectedFolder); connect(libraryWindow->listsView, &QAbstractItemView::clicked, this, &YACReaderNavigationController::selectedList); connect(libraryWindow->historyController, &YACReaderHistoryController::modelIndexSelected, this, &YACReaderNavigationController::selectedIndexFromHistory); - connect(comicsViewsManager->emptyFolderWidget, &EmptyFolderWidget::subfolderSelected, this, &YACReaderNavigationController::selectSubfolder); + connect(comicsViewsManager->folderContentView, &FolderContentView::subfolderSelected, this, &YACReaderNavigationController::selectSubfolder); + connect(comicsViewsManager->folderContentView, &FolderContentView::openComic, libraryWindow, QOverload::of(&LibraryWindow::openComic)); + connect(comicsViewsManager->folderContentView, &FolderContentView::openFolderContextMenu, libraryWindow, &LibraryWindow::showGridFoldersContextMenu); + connect(comicsViewsManager->folderContentView, &FolderContentView::openContinueReadingComicContextMenu, libraryWindow, &LibraryWindow::showContinueReadingContextMenu); connect(libraryWindow->comicsModel, &ComicModel::isEmpty, this, &YACReaderNavigationController::reselectCurrentSource); }