From abdf5bda4fc077319a2bc6a72201f3ce52484d35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Fri, 19 Jan 2024 16:43:37 +0100 Subject: [PATCH] Show the current type as checked in the context menu --- YACReaderLibrary/db/comic_model.cpp | 6 + YACReaderLibrary/library_window.cpp | 168 +++++++++++++++++++++------- YACReaderLibrary/library_window.h | 1 + 3 files changed, 133 insertions(+), 42 deletions(-) diff --git a/YACReaderLibrary/db/comic_model.cpp b/YACReaderLibrary/db/comic_model.cpp index 7c820cfb..23e4cd78 100644 --- a/YACReaderLibrary/db/comic_model.cpp +++ b/YACReaderLibrary/db/comic_model.cpp @@ -1030,6 +1030,12 @@ void ComicModel::setComicsType(QList list, FileType type) connectionName = db.connectionName(); } QSqlDatabase::removeDatabase(connectionName); + + foreach (QModelIndex mi, list) { + _data.value(mi.row())->setData(ComicModel::Type, QVariant::fromValue(type)); + } + + emit dataChanged(index(list.first().row(), ComicModel::Type), index(list.last().row(), ComicModel::Type), QVector() << TypeRole); } qint64 ComicModel::asignNumbers(QList list, int startingNumber) diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 8f75c83a..73261ecb 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -1901,6 +1901,71 @@ void LibraryWindow::addSelectedComicsToFavorites() void LibraryWindow::showComicsViewContextMenu(const QPoint &point) { + showComicsContextMenu(point, true); +} + +void LibraryWindow::showComicsItemContextMenu(const QPoint &point) +{ + showComicsContextMenu(point, false); +} + +void LibraryWindow::showComicsContextMenu(const QPoint &point, bool showFullScreenAction) +{ + auto selection = this->getSelectedComics(); + + auto setNormalAction = new QAction(); + setNormalAction->setText(tr("comic")); + + auto setMangaAction = new QAction(); + setMangaAction->setText(tr("manga")); + + auto setWesternMangaAction = new QAction(); + setWesternMangaAction->setText(tr("western manga (left to right)")); + + auto setWebComicAction = new QAction(); + setWebComicAction->setText(tr("web comic")); + + auto setYonkomaAction = new QAction(); + setYonkomaAction->setText(tr("4koma (top to botom)")); + + setNormalAction->setCheckable(true); + setMangaAction->setCheckable(true); + setWesternMangaAction->setCheckable(true); + setWebComicAction->setCheckable(true); + setYonkomaAction->setCheckable(true); + + connect(setNormalAction, &QAction::triggered, this->setNormalAction, &QAction::trigger); + connect(setMangaAction, &QAction::triggered, this->setMangaAction, &QAction::trigger); + connect(setWesternMangaAction, &QAction::triggered, this->setWesternMangaAction, &QAction::trigger); + connect(setWebComicAction, &QAction::triggered, this->setWebComicAction, &QAction::trigger); + connect(setYonkomaAction, &QAction::triggered, this->setYonkomaAction, &QAction::trigger); + + auto setupActions = [=](FileType type) { + switch (type) { + case YACReader::FileType::Comic: + setNormalAction->setChecked(true); + break; + case YACReader::FileType::Manga: + setMangaAction->setChecked(true); + break; + case YACReader::FileType::WesternManga: + setWesternMangaAction->setChecked(true); + break; + case YACReader::FileType::WebComic: + setWebComicAction->setChecked(true); + break; + case YACReader::FileType::Yonkoma: + setYonkomaAction->setChecked(true); + break; + } + }; + + if (selection.size() == 1) { + QModelIndex index = selection.at(0); + auto type = index.data(ComicModel::TypeRole).value(); + setupActions(type); + } + QMenu menu; menu.addAction(openComicAction); @@ -1937,51 +2002,15 @@ void LibraryWindow::showComicsViewContextMenu(const QPoint &point) setupAddToSubmenu(subMenu); #ifndef Q_OS_MACOS - menu.addSeparator(); - menu.addAction(toggleFullScreenAction); + if (showFullScreenAction) { + menu.addSeparator(); + menu.addAction(toggleFullScreenAction); + } #endif menu.exec(contentViewsManager->comicsView->mapToGlobal(point)); } -void LibraryWindow::showComicsItemContextMenu(const QPoint &point) -{ - QMenu menu; - - menu.addAction(openComicAction); - menu.addAction(saveCoversToAction); - menu.addSeparator(); - menu.addAction(openContainingFolderComicAction); - menu.addAction(updateCurrentFolderAction); - menu.addSeparator(); - menu.addAction(resetComicRatingAction); - menu.addSeparator(); - menu.addAction(editSelectedComicsAction); - menu.addAction(getInfoAction); - menu.addAction(asignOrderAction); - menu.addSeparator(); - menu.addAction(setAsReadAction); - menu.addAction(setAsNonReadAction); - menu.addSeparator(); - auto typeMenu = new QMenu(tr("Set type")); - menu.addMenu(typeMenu); - typeMenu->addAction(setNormalAction); - typeMenu->addAction(setMangaAction); - typeMenu->addAction(setWesternMangaAction); - typeMenu->addAction(setWebComicAction); - typeMenu->addAction(setYonkomaAction); - menu.addSeparator(); - menu.addAction(deleteMetadataAction); - menu.addSeparator(); - menu.addAction(deleteComicsAction); - menu.addSeparator(); - menu.addAction(addToMenuAction); - QMenu subMenu; - setupAddToSubmenu(subMenu); - - menu.exec(contentViewsManager->comicsView->mapToGlobal(point)); -} - void LibraryWindow::showGridFoldersContextMenu(QPoint point, Folder folder) { QMenu menu; @@ -2014,13 +2043,13 @@ void LibraryWindow::showGridFoldersContextMenu(QPoint point, Folder folder) setFolderAsNormalAction->setText(tr("comic")); auto setFolderAsWesternMangaAction = new QAction(); - setFolderAsWesternMangaAction->setText(tr("manga (or left to right)")); + setFolderAsWesternMangaAction->setText(tr("western manga (left to right)")); auto setFolderAsWebComicAction = new QAction(); setFolderAsWebComicAction->setText(tr("web comic")); auto setFolderAs4KomaAction = new QAction(); - setFolderAs4KomaAction->setText(tr("4koma (or top to botom")); + setFolderAs4KomaAction->setText(tr("4koma (top to botom")); menu.addAction(openContainingFolderAction); menu.addAction(updateFolderAction); @@ -2038,6 +2067,30 @@ void LibraryWindow::showGridFoldersContextMenu(QPoint point, Folder folder) menu.addAction(setFolderAsReadAction); menu.addSeparator(); + setFolderAsNormalAction->setCheckable(true); + setFolderAsMangaAction->setCheckable(true); + setFolderAsWesternMangaAction->setCheckable(true); + setFolderAsWebComicAction->setCheckable(true); + setFolderAs4KomaAction->setCheckable(true); + + switch (folder.type) { + case FileType::Comic: + setFolderAsNormalAction->setChecked(true); + break; + case FileType::Manga: + setFolderAsMangaAction->setChecked(true); + break; + case FileType::WesternManga: + setFolderAsWesternMangaAction->setChecked(true); + break; + case FileType::WebComic: + setFolderAsWebComicAction->setChecked(true); + break; + case FileType::Yonkoma: + setFolderAs4KomaAction->setChecked(true); + break; + } + auto typeMenu = new QMenu(tr("Set type")); menu.addMenu(typeMenu); typeMenu->addAction(setFolderAsNormalAction); @@ -3046,6 +3099,37 @@ void LibraryWindow::showFoldersContextMenu(const QPoint &point) bool isCompleted = sourceMI.data(FolderModel::CompletedRole).toBool(); bool isRead = sourceMI.data(FolderModel::FinishedRole).toBool(); + auto type = sourceMI.data(FolderModel::TypeRole).value(); + + setFolderAsNormalAction->setCheckable(true); + setFolderAsMangaAction->setCheckable(true); + setFolderAsWesternMangaAction->setCheckable(true); + setFolderAsWebComicAction->setCheckable(true); + setFolderAsYonkomaAction->setCheckable(true); + + setFolderAsNormalAction->setChecked(false); + setFolderAsMangaAction->setChecked(false); + setFolderAsWesternMangaAction->setChecked(false); + setFolderAsWebComicAction->setChecked(false); + setFolderAsYonkomaAction->setChecked(false); + + switch (type) { + case FileType::Comic: + setFolderAsNormalAction->setChecked(true); + break; + case FileType::Manga: + setFolderAsMangaAction->setChecked(true); + break; + case FileType::WesternManga: + setFolderAsWesternMangaAction->setChecked(true); + break; + case FileType::WebComic: + setFolderAsWebComicAction->setChecked(true); + break; + case FileType::Yonkoma: + setFolderAsYonkomaAction->setChecked(true); + break; + } QMenu menu; diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index be16f308..95ae0b0a 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -425,6 +425,7 @@ public slots: void addSelectedComicsToFavorites(); void showComicsViewContextMenu(const QPoint &point); void showComicsItemContextMenu(const QPoint &point); + void showComicsContextMenu(const QPoint &point, bool showFullScreenAction); void setupAddToSubmenu(QMenu &menu); void onAddComicsToLabel(); void setToolbarTitle(const QModelIndex &modelIndex);