Merge pull request #439 from YACReader/defult-content-type-for-libraries

This commit is contained in:
Luis Ángel San Martín 2024-07-10 23:25:47 +02:00 committed by GitHub
commit be90e9e3a1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 1310 additions and 1049 deletions

View File

@ -9,8 +9,9 @@ Version counting is based on semantic versioning (Major.Feature.Patch)
* Add shortcut to reset the magnifying glass to its defaults (size and zoom), it is `slash` by default but it can be reasigned.
* Bump PDF render size.
###
### YACReaderLibrary
* Fix headers in the table view getting stuck in a non moveable state.
* Add option to set the type of a library. It will convert all the content to desired type (comic, manga, etc) and it will set that type as the default one for that library. Available in the library context menu.
## 9.14.2
@ -18,7 +19,7 @@ Version counting is based on semantic versioning (Major.Feature.Patch)
* Fix columns in the search results.
* Fix type not being propagated to new folders from their parents.
* Fix default type set to folders in the root folder when they are added.
* Improve and fix comic file size format.
* Improve and fix comic file size format.
## 9.14.1

View File

@ -86,6 +86,7 @@ HEADERS += comic_flow.h \
library_creator.h \
library_window.h \
add_library_dialog.h \
library_window_actions.h \
recent_visibility_coordinator.h \
rename_library_dialog.h \
properties_dialog.h \
@ -172,6 +173,7 @@ SOURCES += comic_flow.cpp \
library_comic_opener.cpp \
library_creator.cpp \
library_window.cpp \
library_window_actions.cpp \
main.cpp \
add_library_dialog.cpp \
recent_visibility_coordinator.cpp \

View File

@ -53,11 +53,76 @@ void drawMacOSXFinishedFolderIcon()
#define ROOT 1
FolderItem *createRoot()
struct FolderColumns {
int name;
int path;
int finished;
int completed;
int id;
int parentId;
int numChildren;
int firstChildHash;
int customImage;
int type;
int added;
int updated;
FolderColumns(QSqlQuery &sqlquery)
{
auto record = sqlquery.record();
name = record.indexOf("name");
path = record.indexOf("path");
finished = record.indexOf("finished");
completed = record.indexOf("completed");
id = record.indexOf("id");
parentId = record.indexOf("parentId");
numChildren = record.indexOf("numChildren");
firstChildHash = record.indexOf("firstChildHash");
customImage = record.indexOf("customImage");
type = record.indexOf("type");
added = record.indexOf("added");
updated = record.indexOf("updated");
}
};
QList<QVariant> folderDataFromQuery(QSqlQuery &query, const FolderColumns &columns)
{
QList<QVariant> rootData;
rootData << "root";
auto root = new FolderItem(rootData);
QList<QVariant> data;
data << query.value(columns.name);
data << query.value(columns.path);
data << query.value(columns.finished);
data << query.value(columns.completed);
data << query.value(columns.numChildren);
data << query.value(columns.firstChildHash);
data << query.value(columns.customImage);
data << query.value(columns.type);
data << query.value(columns.added);
data << query.value(columns.updated);
return data;
}
// TODO: load from DB, type is pretty much needed
FolderItem *createRoot(QSqlDatabase &db)
{
QList<QVariant> data;
QSqlQuery selectQuery(db);
selectQuery.prepare("SELECT * FROM folder WHERE id = 1");
selectQuery.exec();
auto columns = FolderColumns(selectQuery);
if (!selectQuery.next()) {
return nullptr;
}
data = folderDataFromQuery(selectQuery, columns);
data[0] = "root";
auto root = new FolderItem(data);
root->id = ROOT;
root->parentItem = nullptr;
@ -83,7 +148,7 @@ int FolderModel::columnCount(const QModelIndex &parent) const
if (rootItem == nullptr) {
return 0;
}
return rootItem->columnCount();
return 1;
}
}
@ -454,7 +519,7 @@ FolderModel::ModelData FolderModel::createModelData(const QString &path) const
QSqlDatabase db = DataBaseManagement::loadDatabase(path);
QSqlQuery selectQuery("select * from folder where id <> 1 order by parentId,name", db);
auto root = createRoot();
auto root = createRoot(db);
modelData = createModelData(selectQuery, root);
connectionName = db.connectionName();
@ -471,40 +536,14 @@ FolderModel::ModelData FolderModel::createModelData(QSqlQuery &sqlquery, FolderI
// add parent to the lookup
itemsLookup.insert(parent->id, parent);
QSqlRecord record = sqlquery.record();
int name = record.indexOf("name");
int path = record.indexOf("path");
int finished = record.indexOf("finished");
int completed = record.indexOf("completed");
int id = record.indexOf("id");
int parentId = record.indexOf("parentId");
int numChildren = record.indexOf("numChildren");
int firstChildHash = record.indexOf("firstChildHash");
int customImage = record.indexOf("customImage");
int type = record.indexOf("type");
int added = record.indexOf("added");
int updated = record.indexOf("updated");
auto columns = FolderColumns(sqlquery);
while (sqlquery.next()) {
QList<QVariant> data;
auto item = new FolderItem(folderDataFromQuery(sqlquery, columns));
data << sqlquery.value(name);
data << sqlquery.value(path);
data << sqlquery.value(finished);
data << sqlquery.value(completed);
data << sqlquery.value(numChildren);
data << sqlquery.value(firstChildHash);
data << sqlquery.value(customImage);
data << sqlquery.value(type);
data << sqlquery.value(added);
data << sqlquery.value(updated);
auto item = new FolderItem(data);
item->id = sqlquery.value(id).toULongLong();
item->id = sqlquery.value(columns.id).toULongLong();
// la inserci<63>n de hijos se hace de forma ordenada
FolderItem *parent = itemsLookup.value(sqlquery.value(parentId).toULongLong());
FolderItem *parent = itemsLookup.value(sqlquery.value(columns.parentId).toULongLong());
parent->appendChild(item);
// se a<>ade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
itemsLookup.insert(item->id, item);
@ -605,6 +644,35 @@ void FolderModel::updateFolderType(const QModelIndexList &list, YACReader::FileT
emit dataChanged(index(list.first().row(), FolderModel::Name), index(list.last().row(), FolderModel::Updated));
}
void FolderModel::updateTreeType(YACReader::FileType type)
{
QString connectionName = "";
{
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
db.transaction();
auto item = rootItem;
std::function<void(FolderItem *, YACReader::FileType)> setType;
setType = [&setType](FolderItem *item, YACReader::FileType type) -> void {
item->setData(FolderModel::Type, QVariant::fromValue(type));
for (auto child : item->children()) {
setType(child, type);
}
};
setType(item, type);
if (!isSubfolder) {
DBHelper::updateDBType(db, type);
}
db.commit();
connectionName = db.connectionName();
}
QSqlDatabase::removeDatabase(connectionName);
}
QStringList FolderModel::getSubfoldersNames(const QModelIndex &mi)
{
QStringList result;

View File

@ -69,6 +69,7 @@ public:
void updateFolderCompletedStatus(const QModelIndexList &list, bool status);
void updateFolderFinishedStatus(const QModelIndexList &list, bool status);
void updateFolderType(const QModelIndexList &list, YACReader::FileType type);
void updateTreeType(YACReader::FileType type);
QStringList getSubfoldersNames(const QModelIndex &mi);
FolderModel *getSubfoldersModel(const QModelIndex &mi); // it creates a model that contains just the direct subfolders
@ -112,7 +113,6 @@ public:
};
bool isSubfolder;
public slots:
void deleteFolder(const QModelIndex &mi);
void updateFolderChildrenInfo(qulonglong folderId);

View File

@ -1668,6 +1668,21 @@ void DBHelper::updateFolderTreeType(qulonglong id, QSqlDatabase &db, YACReader::
}
}
void DBHelper::updateDBType(QSqlDatabase &db, YACReader::FileType type)
{
QSqlQuery updateFolderQuery(db);
updateFolderQuery.prepare("UPDATE folder "
"SET type = :type");
updateFolderQuery.bindValue(":type", static_cast<int>(type));
updateFolderQuery.exec();
QSqlQuery updateComicInfo(db);
updateComicInfo.prepare("UPDATE comic_info "
"SET type = :type");
updateComicInfo.bindValue(":type", static_cast<int>(type));
updateComicInfo.exec();
}
Folder DBHelper::loadFolder(qulonglong id, QSqlDatabase &db)
{
QSqlQuery query(db);

View File

@ -91,6 +91,7 @@ public:
static QList<Label> getLabels(qulonglong libraryId);
static void updateFolderTreeType(qulonglong id, QSqlDatabase &db, YACReader::FileType type);
static void updateDBType(QSqlDatabase &db, YACReader::FileType type);
// load
static Folder loadFolder(qulonglong id, QSqlDatabase &db);

View File

@ -1,5 +1,4 @@
#include "library_creator.h"
#include "custom_widgets.h"
#include <QMutex>
#include <QDebug>
@ -25,6 +24,25 @@
using namespace std;
using namespace YACReader;
Folder rootFolder(QSqlDatabase &db)
{
QSqlQuery selectQuery(db);
selectQuery.prepare("SELECT * FROM folder WHERE id = 1");
selectQuery.exec();
auto root = Folder(1, 1, "root", "/");
if (!selectQuery.next()) {
root.type = YACReader::FileType::Comic;
return root;
}
root.type = selectQuery.value("type").value<YACReader::FileType>();
return root;
}
//--------------------------------------------------------------------------------
LibraryCreator::LibraryCreator(QSettings *settings)
: creation(false), partialUpdate(false), settings(settings)
@ -54,7 +72,6 @@ void LibraryCreator::updateFolder(const QString &source, const QString &target,
folderDestinationModelIndex = dest;
_currentPathFolders.clear();
_currentPathFolders.append(Folder::rootFolder());
QString relativeFolderPath = sourceFolder;
relativeFolderPath = relativeFolderPath.remove(QDir::cleanPath(source));
@ -83,6 +100,8 @@ void LibraryCreator::updateFolder(const QString &source, const QString &target,
return;
}
_currentPathFolders.append(rootFolder(db));
foreach (QString folderName, folders) {
if (folderName.isEmpty()) {
break;
@ -139,7 +158,6 @@ void LibraryCreator::run()
if (_mode == CREATOR) {
QLOG_INFO() << "Starting to create new library ( " << _source << "," << _target << ")";
_currentPathFolders.clear();
_currentPathFolders.append(Folder::rootFolder());
// se crean los directorios .yacreaderlibrary y .yacreaderlibrary/covers
QDir dir;
dir.mkpath(_target + "/covers");
@ -156,6 +174,8 @@ void LibraryCreator::run()
return;
}
_currentPathFolders.append(rootFolder(_database));
/*QSqlQuery pragma("PRAGMA foreign_keys = ON",_database);*/
_database.transaction();
// se crea la librería
@ -173,7 +193,6 @@ void LibraryCreator::run()
QLOG_INFO() << "Starting to update folder" << _sourceFolder << "in library ( " << _source << "," << _target << ")";
if (!partialUpdate) {
_currentPathFolders.clear();
_currentPathFolders.append(Folder::rootFolder());
QLOG_DEBUG() << "update whole library";
}
{
@ -197,6 +216,9 @@ void LibraryCreator::run()
creation = false;
return;
}
_currentPathFolders.append(rootFolder(_database));
QSqlQuery pragma("PRAGMA foreign_keys = ON", _database);
pragma.exec();
_database.transaction();

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,7 @@
#include <QModelIndex>
#include <QFileInfo>
#include "library_window_actions.h"
#include "yacreader_global.h"
#include "yacreader_global_gui.h"
#include "yacreader_libraries.h"
@ -158,99 +159,7 @@ public:
int i;
QAction *backAction;
QAction *forwardAction;
QAction *openComicAction;
QAction *createLibraryAction;
QAction *openLibraryAction;
QAction *exportComicsInfoAction;
QAction *importComicsInfoAction;
QAction *exportLibraryAction;
QAction *importLibraryAction;
QAction *rescanLibraryForXMLInfoAction;
QAction *updateLibraryAction;
QAction *removeLibraryAction;
QAction *helpAboutAction;
QAction *renameLibraryAction;
#ifndef Q_OS_MACOS
QAction *toggleFullScreenAction;
#endif
QAction *optionsAction;
QAction *serverConfigAction;
QAction *toggleComicsViewAction;
// QAction * socialAction;
// tree actions
QAction *addFolderAction;
QAction *deleteFolderAction;
//--
QAction *setRootIndexAction;
QAction *expandAllNodesAction;
QAction *colapseAllNodesAction;
QAction *openContainingFolderAction;
QAction *saveCoversToAction;
//--
QAction *setFolderAsNotCompletedAction;
QAction *setFolderAsCompletedAction;
//--
QAction *setFolderAsReadAction;
QAction *setFolderAsUnreadAction;
//--
QAction *setFolderAsMangaAction;
QAction *setFolderAsNormalAction;
QAction *setFolderAsWesternMangaAction;
QAction *setFolderAsWebComicAction;
QAction *setFolderAsYonkomaAction;
QAction *openContainingFolderComicAction;
QAction *setAsReadAction;
QAction *setAsNonReadAction;
QAction *setMangaAction;
QAction *setNormalAction;
QAction *setWesternMangaAction;
QAction *setWebComicAction;
QAction *setYonkomaAction;
QAction *showHideMarksAction;
QAction *getInfoAction; // comic vine
QAction *resetComicRatingAction;
QAction *toogleShowRecentIndicatorAction;
// edit info actions
QAction *selectAllComicsAction;
QAction *editSelectedComicsAction;
QAction *asignOrderAction;
QAction *forceCoverExtractedAction;
QAction *deleteComicsAction;
QAction *deleteMetadataAction;
QAction *focusSearchLineAction;
QAction *focusComicsViewAction;
QAction *showEditShortcutsAction;
QAction *quitAction;
QAction *updateFolderAction;
QAction *updateCurrentFolderAction;
QAction *rescanXMLFromCurrentFolderAction;
// reading lists actions
QAction *addReadingListAction;
QAction *deleteReadingListAction;
QAction *addLabelAction;
QAction *renameListAction;
//--
QAction *addToMenuAction;
QAction *addToFavoritesAction;
LibraryWindowActions actions;
#ifdef Y_MAC_UI
YACReaderMacOSXToolbar *libraryToolBar;
@ -282,7 +191,6 @@ public:
void createSettings();
void setupOpenglSetting();
void setupUI();
void createActions();
void createToolBars();
void createMenus();
void createConnections();
@ -292,14 +200,6 @@ public:
void doModels();
void setupCoordinators();
// ACTIONS MANAGEMENT
void disableComicsActions(bool disabled);
void disableLibrariesActions(bool disabled);
void disableNoUpdatedLibrariesActions(bool disabled);
void disableFoldersActions(bool disabled);
void disableAllActions();
QString currentPath();
QString currentFolderPath();
@ -415,6 +315,7 @@ public slots:
void reloadAfterCopyMove(const QModelIndex &mi);
QModelIndex getCurrentFolderIndex();
void enableNeededActions();
void disableComicsActions(bool disabled);
void addFolderToCurrentIndex();
void deleteSelectedFolder();
void errorDeletingFolder();
@ -432,6 +333,7 @@ public slots:
void saveSelectedCoversTo();
void checkMaxNumLibraries();
void showErrorUpgradingLibrary(const QString &path);
void setCurrentLibraryAs(FileType fileType);
void prepareToCloseApp();
void closeApp();

View File

@ -0,0 +1,744 @@
#include "library_window_actions.h"
#include "edit_shortcuts_dialog.h"
#include "library_window.h"
#include "shortcuts_manager.h"
#include "yacreader_history_controller.h"
#include "help_about_dialog.h"
#include "export_library_dialog.h"
#include "yacreader_content_views_manager.h"
#include "server_config_dialog.h"
#include "yacreader_folders_view.h"
#include "yacreader_options_dialog.h"
#include <QtCore>
#include <QtWidgets>
LibraryWindowActions::LibraryWindowActions()
{
}
void LibraryWindowActions::createActions(LibraryWindow *window, QSettings *settings)
{
auto tr = [](const char *text) { return QObject::tr(text); };
backAction = new QAction(window);
QIcon icoBackButton;
icoBackButton.addFile(addExtensionToIconPath(":/images/main_toolbar/back"), QSize(), QIcon::Normal);
// icoBackButton.addPixmap(QPixmap(":/images/main_toolbar/back_disabled.png"), QIcon::Disabled);
backAction->setData(BACK_ACTION_YL);
backAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(BACK_ACTION_YL));
backAction->setIcon(icoBackButton);
backAction->setDisabled(true);
forwardAction = new QAction(window);
QIcon icoFordwardButton;
icoFordwardButton.addFile(addExtensionToIconPath(":/images/main_toolbar/forward"), QSize(), QIcon::Normal);
// icoFordwardButton.addPixmap(QPixmap(":/images/main_toolbar/forward_disabled.png"), QIcon::Disabled);
forwardAction->setData(FORWARD_ACTION_YL);
forwardAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(FORWARD_ACTION_YL));
forwardAction->setIcon(icoFordwardButton);
forwardAction->setDisabled(true);
createLibraryAction = new QAction(window);
createLibraryAction->setToolTip(tr("Create a new library"));
createLibraryAction->setData(CREATE_LIBRARY_ACTION_YL);
createLibraryAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(CREATE_LIBRARY_ACTION_YL));
createLibraryAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/newLibraryIcon")));
openLibraryAction = new QAction(window);
openLibraryAction->setToolTip(tr("Open an existing library"));
openLibraryAction->setData(OPEN_LIBRARY_ACTION_YL);
openLibraryAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_LIBRARY_ACTION_YL));
openLibraryAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/openLibraryIcon")));
exportComicsInfoAction = new QAction(tr("Export comics info"), window);
exportComicsInfoAction->setToolTip(tr("Export comics info"));
exportComicsInfoAction->setData(EXPORT_COMICS_INFO_ACTION_YL);
exportComicsInfoAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(EXPORT_COMICS_INFO_ACTION_YL));
exportComicsInfoAction->setIcon(QIcon(":/images/menus_icons/exportComicsInfoIcon.svg"));
importComicsInfoAction = new QAction(tr("Import comics info"), window);
importComicsInfoAction->setToolTip(tr("Import comics info"));
importComicsInfoAction->setData(IMPORT_COMICS_INFO_ACTION_YL);
importComicsInfoAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(IMPORT_COMICS_INFO_ACTION_YL));
importComicsInfoAction->setIcon(QIcon(":/images/menus_icons/importComicsInfoIcon.svg"));
exportLibraryAction = new QAction(tr("Pack covers"), window);
exportLibraryAction->setToolTip(tr("Pack the covers of the selected library"));
exportLibraryAction->setData(EXPORT_LIBRARY_ACTION_YL);
exportLibraryAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(EXPORT_LIBRARY_ACTION_YL));
exportLibraryAction->setIcon(QIcon(":/images/menus_icons/exportLibraryIcon.svg"));
importLibraryAction = new QAction(tr("Unpack covers"), window);
importLibraryAction->setToolTip(tr("Unpack a catalog"));
importLibraryAction->setData(IMPORT_LIBRARY_ACTION_YL);
importLibraryAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(IMPORT_LIBRARY_ACTION_YL));
importLibraryAction->setIcon(QIcon(":/images/menus_icons/importLibraryIcon.svg"));
updateLibraryAction = new QAction(tr("Update library"), window);
updateLibraryAction->setToolTip(tr("Update current library"));
updateLibraryAction->setData(UPDATE_LIBRARY_ACTION_YL);
updateLibraryAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(UPDATE_LIBRARY_ACTION_YL));
updateLibraryAction->setIcon(QIcon(":/images/menus_icons/updateLibraryIcon.svg"));
renameLibraryAction = new QAction(tr("Rename library"), window);
renameLibraryAction->setToolTip(tr("Rename current library"));
renameLibraryAction->setData(RENAME_LIBRARY_ACTION_YL);
renameLibraryAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(RENAME_LIBRARY_ACTION_YL));
renameLibraryAction->setIcon(QIcon(":/images/menus_icons/editIcon.svg"));
removeLibraryAction = new QAction(tr("Remove library"), window);
removeLibraryAction->setToolTip(tr("Remove current library from your collection"));
removeLibraryAction->setData(REMOVE_LIBRARY_ACTION_YL);
removeLibraryAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(REMOVE_LIBRARY_ACTION_YL));
removeLibraryAction->setIcon(QIcon(":/images/menus_icons/removeLibraryIcon.svg"));
rescanLibraryForXMLInfoAction = new QAction(tr("Rescan library for XML info"), window);
rescanLibraryForXMLInfoAction->setToolTip(tr("Tries to find XML info embedded in comic files. You only need to do this if the library was created with 9.8.2 or earlier versions or if you are using third party software to embed XML info in the files."));
rescanLibraryForXMLInfoAction->setData(RESCAN_LIBRARY_XML_INFO_ACTION_YL);
rescanLibraryForXMLInfoAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(RESCAN_LIBRARY_XML_INFO_ACTION_YL));
openComicAction = new QAction(tr("Open current comic"), window);
openComicAction->setToolTip(tr("Open current comic on YACReader"));
openComicAction->setData(OPEN_COMIC_ACTION_YL);
openComicAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_COMIC_ACTION_YL));
openComicAction->setIcon(QIcon(":/images/comics_view_toolbar/openInYACReader.svg"));
saveCoversToAction = new QAction(tr("Save selected covers to..."), window);
saveCoversToAction->setToolTip(tr("Save covers of the selected comics as JPG files"));
saveCoversToAction->setData(SAVE_COVERS_TO_ACTION_YL);
saveCoversToAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SAVE_COVERS_TO_ACTION_YL));
setAsReadAction = new QAction(tr("Set as read"), window);
setAsReadAction->setToolTip(tr("Set comic as read"));
setAsReadAction->setData(SET_AS_READ_ACTION_YL);
setAsReadAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_AS_READ_ACTION_YL));
setAsReadAction->setIcon(QIcon(":/images/comics_view_toolbar/setReadButton.svg"));
setAsNonReadAction = new QAction(tr("Set as unread"), window);
setAsNonReadAction->setToolTip(tr("Set comic as unread"));
setAsNonReadAction->setData(SET_AS_NON_READ_ACTION_YL);
setAsNonReadAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_AS_NON_READ_ACTION_YL));
setAsNonReadAction->setIcon(QIcon(":/images/comics_view_toolbar/setUnread.svg"));
setMangaAction = new QAction(tr("manga"), window);
setMangaAction->setToolTip(tr("Set issue as manga"));
setMangaAction->setData(SET_AS_MANGA_ACTION_YL);
setMangaAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_AS_MANGA_ACTION_YL));
setMangaAction->setIcon(QIcon(":/images/comics_view_toolbar/setManga.svg"));
setNormalAction = new QAction(tr("comic"), window);
setNormalAction->setToolTip(tr("Set issue as normal"));
setNormalAction->setData(SET_AS_NORMAL_ACTION_YL);
setNormalAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_AS_NORMAL_ACTION_YL));
setNormalAction->setIcon(QIcon(":/images/comics_view_toolbar/setNormal.svg"));
setWesternMangaAction = new QAction(tr("western manga"), window);
setWesternMangaAction->setToolTip(tr("Set issue as western manga"));
setWesternMangaAction->setData(SET_AS_WESTERN_MANGA_ACTION_YL);
setWesternMangaAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_AS_WESTERN_MANGA_ACTION_YL));
// setWesternMangaAction->setIcon(QIcon(":/images/comics_view_toolbar/setWesternManga.svg"));
setWebComicAction = new QAction(tr("web comic"), window);
setWebComicAction->setToolTip(tr("Set issue as web comic"));
setWebComicAction->setData(SET_AS_WEB_COMIC_ACTION_YL);
setWebComicAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_AS_WEB_COMIC_ACTION_YL));
// setWebComicAction->setIcon(QIcon(":/images/comics_view_toolbar/setWebComic.svg"));
setYonkomaAction = new QAction(tr("yonkoma"), window);
setYonkomaAction->setToolTip(tr("Set issue as yonkoma"));
setYonkomaAction->setData(SET_AS_YONKOMA_ACTION_YL);
setYonkomaAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_AS_YONKOMA_ACTION_YL));
showHideMarksAction = new QAction(tr("Show/Hide marks"), window);
showHideMarksAction->setToolTip(tr("Show or hide read marks"));
showHideMarksAction->setData(SHOW_HIDE_MARKS_ACTION_YL);
showHideMarksAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_HIDE_MARKS_ACTION_YL));
showHideMarksAction->setCheckable(true);
showHideMarksAction->setIcon(QIcon(":/images/comics_view_toolbar/showMarks.svg"));
showHideMarksAction->setChecked(true);
toogleShowRecentIndicatorAction = new QAction(tr("Show/Hide recent indicator"), window);
toogleShowRecentIndicatorAction->setToolTip(tr("Show or hide recent indicator"));
toogleShowRecentIndicatorAction->setData(SHOW_HIDE_RECENT_INDICATOR_ACTION_YL);
toogleShowRecentIndicatorAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_HIDE_RECENT_INDICATOR_ACTION_YL));
toogleShowRecentIndicatorAction->setCheckable(true);
toogleShowRecentIndicatorAction->setIcon(QIcon(":/images/comics_view_toolbar/showRecentIndicator.svg"));
toogleShowRecentIndicatorAction->setChecked(settings->value(DISPLAY_RECENTLY_INDICATOR, true).toBool());
#ifndef Q_OS_MACOS
toggleFullScreenAction = new QAction(tr("Fullscreen mode on/off"), window);
toggleFullScreenAction->setToolTip(tr("Fullscreen mode on/off"));
toggleFullScreenAction->setData(TOGGLE_FULL_SCREEN_ACTION_YL);
toggleFullScreenAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(TOGGLE_FULL_SCREEN_ACTION_YL));
QIcon icoFullscreenButton;
icoFullscreenButton.addFile(addExtensionToIconPath(":/images/main_toolbar/fullscreen"), QSize(), QIcon::Normal);
toggleFullScreenAction->setIcon(icoFullscreenButton);
#endif
helpAboutAction = new QAction(window);
helpAboutAction->setToolTip(tr("Help, About YACReader"));
helpAboutAction->setData(HELP_ABOUT_ACTION_YL);
helpAboutAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(HELP_ABOUT_ACTION_YL));
QIcon icoHelpButton;
icoHelpButton.addFile(addExtensionToIconPath(":/images/main_toolbar/help"), QSize(), QIcon::Normal);
helpAboutAction->setIcon(icoHelpButton);
addFolderAction = new QAction(tr("Add new folder"), window);
addFolderAction->setData(ADD_FOLDER_ACTION_YL);
addFolderAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ADD_FOLDER_ACTION_YL));
addFolderAction->setToolTip(tr("Add new folder to the current library"));
addFolderAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/addNew_sidebar")));
deleteFolderAction = new QAction(tr("Delete folder"), window);
deleteFolderAction->setData(REMOVE_FOLDER_ACTION_YL);
deleteFolderAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(REMOVE_FOLDER_ACTION_YL));
deleteFolderAction->setToolTip(tr("Delete current folder from disk"));
deleteFolderAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/delete_sidebar")));
setRootIndexAction = new QAction(window);
setRootIndexAction->setData(SET_ROOT_INDEX_ACTION_YL);
setRootIndexAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_ROOT_INDEX_ACTION_YL));
setRootIndexAction->setToolTip(tr("Select root node"));
setRootIndexAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/setRoot")));
expandAllNodesAction = new QAction(window);
expandAllNodesAction->setToolTip(tr("Expand all nodes"));
expandAllNodesAction->setData(EXPAND_ALL_NODES_ACTION_YL);
expandAllNodesAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(EXPAND_ALL_NODES_ACTION_YL));
expandAllNodesAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/expand")));
colapseAllNodesAction = new QAction(window);
colapseAllNodesAction->setToolTip(tr("Collapse all nodes"));
colapseAllNodesAction->setData(COLAPSE_ALL_NODES_ACTION_YL);
colapseAllNodesAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(COLAPSE_ALL_NODES_ACTION_YL));
colapseAllNodesAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/colapse")));
optionsAction = new QAction(window);
optionsAction->setToolTip(tr("Show options dialog"));
optionsAction->setData(OPTIONS_ACTION_YL);
optionsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPTIONS_ACTION_YL));
QIcon icoSettingsButton;
icoSettingsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/settings"), QSize(), QIcon::Normal);
optionsAction->setIcon(icoSettingsButton);
serverConfigAction = new QAction(window);
serverConfigAction->setToolTip(tr("Show comics server options dialog"));
serverConfigAction->setData(SERVER_CONFIG_ACTION_YL);
serverConfigAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SERVER_CONFIG_ACTION_YL));
QIcon icoServerButton;
icoServerButton.addFile(addExtensionToIconPath(":/images/main_toolbar/server"), QSize(), QIcon::Normal);
serverConfigAction->setIcon(icoServerButton);
toggleComicsViewAction = new QAction(tr("Change between comics views"), window);
toggleComicsViewAction->setToolTip(tr("Change between comics views"));
QIcon icoViewsButton;
if (!settings->contains(COMICS_VIEW_STATUS) || settings->value(COMICS_VIEW_STATUS) == Flow)
icoViewsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/grid"), QSize(), QIcon::Normal);
else if (settings->value(COMICS_VIEW_STATUS) == Grid)
icoViewsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/info"), QSize(), QIcon::Normal);
else
icoViewsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/flow"), QSize(), QIcon::Normal);
toggleComicsViewAction->setData(TOGGLE_COMICS_VIEW_ACTION_YL);
toggleComicsViewAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(TOGGLE_COMICS_VIEW_ACTION_YL));
toggleComicsViewAction->setIcon(icoViewsButton);
// socialAction = new QAction(this);
//----
openContainingFolderAction = new QAction(window);
openContainingFolderAction->setText(tr("Open folder..."));
openContainingFolderAction->setData(OPEN_CONTAINING_FOLDER_ACTION_YL);
openContainingFolderAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_CONTAINING_FOLDER_ACTION_YL));
openContainingFolderAction->setIcon(QIcon(":/images/menus_icons/open_containing_folder.svg"));
setFolderAsNotCompletedAction = new QAction(window);
setFolderAsNotCompletedAction->setText(tr("Set as uncompleted"));
setFolderAsNotCompletedAction->setData(SET_FOLDER_AS_NOT_COMPLETED_ACTION_YL);
setFolderAsNotCompletedAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_FOLDER_AS_NOT_COMPLETED_ACTION_YL));
setFolderAsCompletedAction = new QAction(window);
setFolderAsCompletedAction->setText(tr("Set as completed"));
setFolderAsCompletedAction->setData(SET_FOLDER_AS_COMPLETED_ACTION_YL);
setFolderAsCompletedAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_FOLDER_AS_COMPLETED_ACTION_YL));
setFolderAsReadAction = new QAction(window);
setFolderAsReadAction->setText(tr("Set as read"));
setFolderAsReadAction->setData(SET_FOLDER_AS_READ_ACTION_YL);
setFolderAsReadAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_FOLDER_AS_READ_ACTION_YL));
setFolderAsUnreadAction = new QAction(window);
setFolderAsUnreadAction->setText(tr("Set as unread"));
setFolderAsUnreadAction->setData(SET_FOLDER_AS_UNREAD_ACTION_YL);
setFolderAsUnreadAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_FOLDER_AS_UNREAD_ACTION_YL));
setFolderAsMangaAction = new QAction(window);
setFolderAsMangaAction->setText(tr("manga"));
setFolderAsMangaAction->setData(SET_FOLDER_AS_MANGA_ACTION_YL);
setFolderAsMangaAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_FOLDER_AS_MANGA_ACTION_YL));
setFolderAsNormalAction = new QAction(window);
setFolderAsNormalAction->setText(tr("comic"));
setFolderAsNormalAction->setData(SET_FOLDER_AS_NORMAL_ACTION_YL);
setFolderAsNormalAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_FOLDER_AS_NORMAL_ACTION_YL));
setFolderAsWesternMangaAction = new QAction(window);
setFolderAsWesternMangaAction->setText(tr("western manga (left to right)"));
setFolderAsWesternMangaAction->setData(SET_FOLDER_AS_WESTERN_MANGA_ACTION_YL);
setFolderAsWesternMangaAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_FOLDER_AS_WESTERN_MANGA_ACTION_YL));
setFolderAsWebComicAction = new QAction(window);
setFolderAsWebComicAction->setText(tr("web comic"));
setFolderAsWebComicAction->setData(SET_FOLDER_AS_WEB_COMIC_ACTION_YL);
setFolderAsWebComicAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_FOLDER_AS_WEB_COMIC_ACTION_YL));
setFolderAsYonkomaAction = new QAction(window);
setFolderAsYonkomaAction->setText(tr("yonkoma"));
setFolderAsYonkomaAction->setData(SET_FOLDER_AS_YONKOMA_ACTION_YL);
setFolderAsYonkomaAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SET_FOLDER_AS_YONKOMA_ACTION_YL));
//----
openContainingFolderComicAction = new QAction(window);
openContainingFolderComicAction->setText(tr("Open containing folder..."));
openContainingFolderComicAction->setData(OPEN_CONTAINING_FOLDER_COMIC_ACTION_YL);
openContainingFolderComicAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(OPEN_CONTAINING_FOLDER_COMIC_ACTION_YL));
openContainingFolderComicAction->setIcon(QIcon(":/images/menus_icons/open_containing_folder.svg"));
resetComicRatingAction = new QAction(window);
resetComicRatingAction->setText(tr("Reset comic rating"));
resetComicRatingAction->setData(RESET_COMIC_RATING_ACTION_YL);
resetComicRatingAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(RESET_COMIC_RATING_ACTION_YL));
// Edit comics actions------------------------------------------------------
selectAllComicsAction = new QAction(window);
selectAllComicsAction->setText(tr("Select all comics"));
selectAllComicsAction->setData(SELECT_ALL_COMICS_ACTION_YL);
selectAllComicsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SELECT_ALL_COMICS_ACTION_YL));
selectAllComicsAction->setIcon(QIcon(":/images/comics_view_toolbar/selectAll.svg"));
editSelectedComicsAction = new QAction(window);
editSelectedComicsAction->setText(tr("Edit"));
editSelectedComicsAction->setData(EDIT_SELECTED_COMICS_ACTION_YL);
editSelectedComicsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(EDIT_SELECTED_COMICS_ACTION_YL));
editSelectedComicsAction->setIcon(QIcon(":/images/comics_view_toolbar/editComic.svg"));
asignOrderAction = new QAction(window);
asignOrderAction->setText(tr("Assign current order to comics"));
asignOrderAction->setData(ASIGN_ORDER_ACTION_YL);
asignOrderAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ASIGN_ORDER_ACTION_YL));
asignOrderAction->setIcon(QIcon(":/images/comics_view_toolbar/asignNumber.svg"));
forceCoverExtractedAction = new QAction(window);
forceCoverExtractedAction->setText(tr("Update cover"));
forceCoverExtractedAction->setData(FORCE_COVER_EXTRACTED_ACTION_YL);
forceCoverExtractedAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(FORCE_COVER_EXTRACTED_ACTION_YL));
forceCoverExtractedAction->setIcon(QIcon(":/images/importCover.png"));
deleteComicsAction = new QAction(window);
deleteComicsAction->setText(tr("Delete selected comics"));
deleteComicsAction->setData(DELETE_COMICS_ACTION_YL);
deleteComicsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(DELETE_COMICS_ACTION_YL));
deleteComicsAction->setIcon(QIcon(":/images/comics_view_toolbar/trash.svg"));
deleteMetadataAction = new QAction(window);
deleteMetadataAction->setText(tr("Delete metadata from selected comics"));
deleteMetadataAction->setData(DELETE_METADATA_FROM_COMICS_ACTION_YL);
deleteMetadataAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(DELETE_METADATA_FROM_COMICS_ACTION_YL));
getInfoAction = new QAction(window);
getInfoAction->setData(GET_INFO_ACTION_YL);
getInfoAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(GET_INFO_ACTION_YL));
getInfoAction->setText(tr("Download tags from Comic Vine"));
getInfoAction->setIcon(QIcon(":/images/comics_view_toolbar/getInfo.svg"));
//-------------------------------------------------------------------------
focusSearchLineAction = new QAction(tr("Focus search line"), window);
focusSearchLineAction->setData(FOCUS_SEARCH_LINE_ACTION_YL);
focusSearchLineAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(FOCUS_SEARCH_LINE_ACTION_YL));
focusSearchLineAction->setIcon(QIcon(":/images/iconSearch.png"));
window->addAction(focusSearchLineAction);
focusComicsViewAction = new QAction(tr("Focus comics view"), window);
focusComicsViewAction->setData(FOCUS_COMICS_VIEW_ACTION_YL);
focusComicsViewAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(FOCUS_COMICS_VIEW_ACTION_YL));
window->addAction(focusComicsViewAction);
showEditShortcutsAction = new QAction(tr("Edit shortcuts"), window);
showEditShortcutsAction->setData(SHOW_EDIT_SHORTCUTS_ACTION_YL);
showEditShortcutsAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SHOW_EDIT_SHORTCUTS_ACTION_YL));
showEditShortcutsAction->setShortcutContext(Qt::ApplicationShortcut);
window->addAction(showEditShortcutsAction);
quitAction = new QAction(tr("&Quit"), window);
quitAction->setIcon(QIcon(":/images/viewer_toolbar/close.svg"));
quitAction->setData(QUIT_ACTION_YL);
quitAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(QUIT_ACTION_YL));
// TODO: is `quitAction->setMenuRole(QAction::QuitRole);` useful on macOS?
window->addAction(quitAction);
updateFolderAction = new QAction(tr("Update folder"), window);
updateFolderAction->setIcon(QIcon(":/images/menus_icons/update_current_folder.svg"));
updateCurrentFolderAction = new QAction(tr("Update current folder"), window);
updateCurrentFolderAction->setData(UPDATE_CURRENT_FOLDER_ACTION_YL);
updateCurrentFolderAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(UPDATE_CURRENT_FOLDER_ACTION_YL));
updateCurrentFolderAction->setIcon(QIcon(":/images/menus_icons/update_current_folder.svg"));
rescanXMLFromCurrentFolderAction = new QAction(tr("Scan legacy XML metadata"), window);
rescanXMLFromCurrentFolderAction->setData(SCAN_XML_FROM_CURRENT_FOLDER_ACTION_YL);
rescanXMLFromCurrentFolderAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(SCAN_XML_FROM_CURRENT_FOLDER_ACTION_YL));
addReadingListAction = new QAction(tr("Add new reading list"), window);
addReadingListAction->setData(ADD_READING_LIST_ACTION_YL);
addReadingListAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ADD_READING_LIST_ACTION_YL));
addReadingListAction->setToolTip(tr("Add a new reading list to the current library"));
addReadingListAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/addNew_sidebar")));
deleteReadingListAction = new QAction(tr("Remove reading list"), window);
deleteReadingListAction->setData(REMOVE_READING_LIST_ACTION_YL);
deleteReadingListAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(REMOVE_READING_LIST_ACTION_YL));
deleteReadingListAction->setToolTip(tr("Remove current reading list from the library"));
deleteReadingListAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/delete_sidebar")));
addLabelAction = new QAction(tr("Add new label"), window);
addLabelAction->setData(ADD_LABEL_ACTION_YL);
addLabelAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ADD_LABEL_ACTION_YL));
addLabelAction->setToolTip(tr("Add a new label to this library"));
addLabelAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/addLabelIcon")));
renameListAction = new QAction(tr("Rename selected list"), window);
renameListAction->setData(RENAME_LIST_ACTION_YL);
renameListAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(RENAME_LIST_ACTION_YL));
renameListAction->setToolTip(tr("Rename any selected labels or lists"));
renameListAction->setIcon(QIcon(addExtensionToIconPath(":/images/sidebar/renameListIcon")));
//--
addToMenuAction = new QAction(tr("Add to..."), window);
addToFavoritesAction = new QAction(tr("Favorites"), window);
addToFavoritesAction->setData(ADD_TO_FAVORITES_ACTION_YL);
addToFavoritesAction->setShortcut(ShortcutsManager::getShortcutsManager().getShortcut(ADD_TO_FAVORITES_ACTION_YL));
addToFavoritesAction->setToolTip(tr("Add selected comics to favorites list"));
addToFavoritesAction->setIcon(QIcon(":/images/lists/default_1.svg"));
// actions not asigned to any widget
window->addAction(saveCoversToAction);
window->addAction(openContainingFolderAction);
window->addAction(updateCurrentFolderAction);
window->addAction(resetComicRatingAction);
window->addAction(setFolderAsCompletedAction);
window->addAction(setFolderAsNotCompletedAction);
window->addAction(setFolderAsReadAction);
window->addAction(setFolderAsUnreadAction);
window->addAction(setFolderAsMangaAction);
window->addAction(setFolderAsNormalAction);
window->addAction(setFolderAsWesternMangaAction);
window->addAction(setFolderAsWebComicAction);
window->addAction(setFolderAsYonkomaAction);
window->addAction(deleteMetadataAction);
window->addAction(rescanXMLFromCurrentFolderAction);
#ifndef Q_OS_MACOS
window->addAction(toggleFullScreenAction);
#endif
// disable actions
disableAllActions();
}
void LibraryWindowActions::createConnections(
YACReaderHistoryController *historyController,
LibraryWindow *window,
HelpAboutDialog *had,
ExportLibraryDialog *exportLibraryDialog,
YACReaderContentViewsManager *contentViewsManager,
EditShortcutsDialog *editShortcutsDialog,
YACReaderFoldersView *foldersView,
YACReaderOptionsDialog *optionsDialog,
ServerConfigDialog *serverConfigDialog)
{
// history navigation
QObject::connect(backAction, &QAction::triggered, historyController, &YACReaderHistoryController::backward);
QObject::connect(forwardAction, &QAction::triggered, historyController, &YACReaderHistoryController::forward);
//--
QObject::connect(historyController, &YACReaderHistoryController::enabledBackward, backAction, &QAction::setEnabled);
QObject::connect(historyController, &YACReaderHistoryController::enabledForward, forwardAction, &QAction::setEnabled);
// connect(foldersView, SIGNAL(clicked(QModelIndex)), historyController, SLOT(updateHistory(QModelIndex)));
// actions
QObject::connect(createLibraryAction, &QAction::triggered, window, &LibraryWindow::createLibrary);
QObject::connect(exportLibraryAction, &QAction::triggered, exportLibraryDialog, &ExportLibraryDialog::open);
QObject::connect(importLibraryAction, &QAction::triggered, window, &LibraryWindow::importLibraryPackage);
QObject::connect(openLibraryAction, &QAction::triggered, window, &LibraryWindow::showAddLibrary);
QObject::connect(setAsReadAction, &QAction::triggered, window, &LibraryWindow::setCurrentComicReaded);
QObject::connect(setAsNonReadAction, &QAction::triggered, window, &LibraryWindow::setCurrentComicUnreaded);
QObject::connect(setNormalAction, &QAction::triggered, window, [=]() {
window->setSelectedComicsType(FileType::Comic);
});
QObject::connect(setMangaAction, &QAction::triggered, window, [=]() {
window->setSelectedComicsType(FileType::Manga);
});
QObject::connect(setWesternMangaAction, &QAction::triggered, window, [=]() {
window->setSelectedComicsType(FileType::WesternManga);
});
QObject::connect(setWebComicAction, &QAction::triggered, window, [=]() {
window->setSelectedComicsType(FileType::WebComic);
});
QObject::connect(setYonkomaAction, &QAction::triggered, window, [=]() {
window->setSelectedComicsType(FileType::Yonkoma);
});
// comicsInfoManagement
QObject::connect(exportComicsInfoAction, &QAction::triggered, window, &LibraryWindow::showExportComicsInfo);
QObject::connect(importComicsInfoAction, &QAction::triggered, window, &LibraryWindow::showImportComicsInfo);
// ContextMenus
QObject::connect(openContainingFolderComicAction, &QAction::triggered, window, &LibraryWindow::openContainingFolderComic);
QObject::connect(setFolderAsNotCompletedAction, &QAction::triggered, window, &LibraryWindow::setFolderAsNotCompleted);
QObject::connect(setFolderAsCompletedAction, &QAction::triggered, window, &LibraryWindow::setFolderAsCompleted);
QObject::connect(setFolderAsReadAction, &QAction::triggered, window, &LibraryWindow::setFolderAsRead);
QObject::connect(setFolderAsUnreadAction, &QAction::triggered, window, &LibraryWindow::setFolderAsUnread);
QObject::connect(openContainingFolderAction, &QAction::triggered, window, &LibraryWindow::openContainingFolder);
QObject::connect(setFolderAsMangaAction, &QAction::triggered, window, [=]() {
window->setFolderType(FileType::Manga);
});
QObject::connect(setFolderAsNormalAction, &QAction::triggered, window, [=]() {
window->setFolderType(FileType::Comic);
});
QObject::connect(setFolderAsWesternMangaAction, &QAction::triggered, window, [=]() {
window->setFolderType(FileType::WesternManga);
});
QObject::connect(setFolderAsWebComicAction, &QAction::triggered, window, [=]() {
window->setFolderType(FileType::WebComic);
});
QObject::connect(setFolderAsYonkomaAction, &QAction::triggered, window, [=]() {
window->setFolderType(FileType::Yonkoma);
});
QObject::connect(resetComicRatingAction, &QAction::triggered, window, &LibraryWindow::resetComicRating);
// Comicts edition
QObject::connect(editSelectedComicsAction, &QAction::triggered, window, &LibraryWindow::showProperties);
QObject::connect(asignOrderAction, &QAction::triggered, window, &LibraryWindow::asignNumbers);
QObject::connect(deleteMetadataAction, &QAction::triggered, window, &LibraryWindow::deleteMetadataFromSelectedComics);
QObject::connect(deleteComicsAction, &QAction::triggered, window, &LibraryWindow::deleteComics);
QObject::connect(getInfoAction, &QAction::triggered, window, &LibraryWindow::showComicVineScraper);
QObject::connect(focusComicsViewAction, &QAction::triggered, contentViewsManager, &YACReaderContentViewsManager::focusComicsViewViaShortcut);
QObject::connect(showEditShortcutsAction, &QAction::triggered, editShortcutsDialog, &QWidget::show);
QObject::connect(quitAction, &QAction::triggered, window, &LibraryWindow::closeApp);
// update folders (partial updates)
QObject::connect(updateCurrentFolderAction, &QAction::triggered, window, &LibraryWindow::updateCurrentFolder);
QObject::connect(updateFolderAction, &QAction::triggered, window, &LibraryWindow::updateCurrentFolder);
QObject::connect(rescanXMLFromCurrentFolderAction, &QAction::triggered, window, &LibraryWindow::rescanCurrentFolderForXMLInfo);
// lists
QObject::connect(addReadingListAction, &QAction::triggered, window, &LibraryWindow::addNewReadingList);
QObject::connect(deleteReadingListAction, &QAction::triggered, window, &LibraryWindow::deleteSelectedReadingList);
QObject::connect(addLabelAction, &QAction::triggered, window, &LibraryWindow::showAddNewLabelDialog);
QObject::connect(renameListAction, &QAction::triggered, window, &LibraryWindow::showRenameCurrentList);
QObject::connect(updateLibraryAction, &QAction::triggered, window, &LibraryWindow::updateLibrary);
QObject::connect(renameLibraryAction, &QAction::triggered, window, &LibraryWindow::renameLibrary);
// connect(deleteLibraryAction,SIGNAL(triggered()),window,SLOT(deleteLibrary()));
QObject::connect(removeLibraryAction, &QAction::triggered, window, &LibraryWindow::removeLibrary);
QObject::connect(rescanLibraryForXMLInfoAction, &QAction::triggered, window, &LibraryWindow::rescanLibraryForXMLInfo);
QObject::connect(openComicAction, &QAction::triggered, window, QOverload<>::of(&LibraryWindow::openComic));
QObject::connect(helpAboutAction, &QAction::triggered, had, &QWidget::show);
QObject::connect(addFolderAction, &QAction::triggered, window, &LibraryWindow::addFolderToCurrentIndex);
QObject::connect(deleteFolderAction, &QAction::triggered, window, &LibraryWindow::deleteSelectedFolder);
QObject::connect(setRootIndexAction, &QAction::triggered, window, &LibraryWindow::setRootIndex);
QObject::connect(expandAllNodesAction, &QAction::triggered, foldersView, &QTreeView::expandAll);
QObject::connect(colapseAllNodesAction, &QAction::triggered, foldersView, &QTreeView::collapseAll);
#ifndef Q_OS_MACOS
QObject::connect(toggleFullScreenAction, &QAction::triggered, window, &LibraryWindow::toggleFullScreen);
#endif
QObject::connect(toggleComicsViewAction, &QAction::triggered, contentViewsManager, &YACReaderContentViewsManager::toggleComicsView);
QObject::connect(optionsAction, &QAction::triggered, optionsDialog, &QWidget::show);
#ifdef SERVER_RELEASE
QObject::connect(serverConfigAction, &QAction::triggered, serverConfigDialog, &QWidget::show);
#endif
QObject::connect(addToFavoritesAction, &QAction::triggered, window, &LibraryWindow::addSelectedComicsToFavorites);
// save covers
QObject::connect(saveCoversToAction, &QAction::triggered, window, &LibraryWindow::saveSelectedCoversTo);
}
void LibraryWindowActions::setUpShortcutsManagement(EditShortcutsDialog *editShortcutsDialog)
{
QList<QAction *> allActions;
QList<QAction *> tmpList;
editShortcutsDialog->addActionsGroup("Comics", QIcon(":/images/shortcuts_group_comics.svg"),
tmpList = QList<QAction *>()
<< openComicAction
<< saveCoversToAction
<< setAsReadAction
<< setAsNonReadAction
<< setMangaAction
<< setNormalAction
<< openContainingFolderComicAction
<< resetComicRatingAction
<< selectAllComicsAction
<< editSelectedComicsAction
<< asignOrderAction
<< deleteMetadataAction
<< deleteComicsAction
<< getInfoAction);
allActions << tmpList;
editShortcutsDialog->addActionsGroup("Folders", QIcon(":/images/shortcuts_group_folders.svg"),
tmpList = QList<QAction *>()
<< addFolderAction
<< deleteFolderAction
<< setRootIndexAction
<< expandAllNodesAction
<< colapseAllNodesAction
<< openContainingFolderAction
<< setFolderAsNotCompletedAction
<< setFolderAsCompletedAction
<< setFolderAsReadAction
<< setFolderAsUnreadAction
<< setFolderAsMangaAction
<< setFolderAsNormalAction
<< updateCurrentFolderAction
<< rescanXMLFromCurrentFolderAction);
allActions << tmpList;
editShortcutsDialog->addActionsGroup("Lists", QIcon(":/images/shortcuts_group_folders.svg"), // TODO change icon
tmpList = QList<QAction *>()
<< addReadingListAction
<< deleteReadingListAction
<< addLabelAction
<< renameListAction);
allActions << tmpList;
editShortcutsDialog->addActionsGroup("General", QIcon(":/images/shortcuts_group_general.svg"),
tmpList = QList<QAction *>()
<< backAction
<< forwardAction
<< focusSearchLineAction
<< focusComicsViewAction
<< helpAboutAction
<< optionsAction
<< serverConfigAction
<< showEditShortcutsAction
<< quitAction);
allActions << tmpList;
editShortcutsDialog->addActionsGroup("Libraries", QIcon(":/images/shortcuts_group_libraries.svg"),
tmpList = QList<QAction *>()
<< createLibraryAction
<< openLibraryAction
<< exportComicsInfoAction
<< importComicsInfoAction
<< exportLibraryAction
<< importLibraryAction
<< updateLibraryAction
<< renameLibraryAction
<< removeLibraryAction
<< rescanLibraryForXMLInfoAction);
allActions << tmpList;
editShortcutsDialog->addActionsGroup("Visualization", QIcon(":/images/shortcuts_group_visualization.svg"),
tmpList = QList<QAction *>()
<< showHideMarksAction
<< toogleShowRecentIndicatorAction
#ifndef Q_OS_MACOS
<< toggleFullScreenAction // Think about what to do in macos if the default theme is used
#endif
<< toggleComicsViewAction);
allActions << tmpList;
ShortcutsManager::getShortcutsManager().registerActions(allActions);
}
void LibraryWindowActions::disableComicsActions(bool disabled)
{
// if there aren't comics, no fullscreen option will be available
#ifndef Q_OS_MACOS
toggleFullScreenAction->setDisabled(disabled);
#endif
// edit toolbar
openComicAction->setDisabled(disabled);
editSelectedComicsAction->setDisabled(disabled);
selectAllComicsAction->setDisabled(disabled);
asignOrderAction->setDisabled(disabled);
setAsReadAction->setDisabled(disabled);
setAsNonReadAction->setDisabled(disabled);
setNormalAction->setDisabled(disabled);
setMangaAction->setDisabled(disabled);
setWebComicAction->setDisabled(disabled);
setWesternMangaAction->setDisabled(disabled);
setYonkomaAction->setDisabled(disabled);
// setAllAsReadAction->setDisabled(disabled);
// setAllAsNonReadAction->setDisabled(disabled);
showHideMarksAction->setDisabled(disabled);
deleteMetadataAction->setDisabled(disabled);
deleteComicsAction->setDisabled(disabled);
// context menu
openContainingFolderComicAction->setDisabled(disabled);
resetComicRatingAction->setDisabled(disabled);
getInfoAction->setDisabled(disabled);
updateCurrentFolderAction->setDisabled(disabled);
}
void LibraryWindowActions::disableLibrariesActions(bool disabled)
{
updateLibraryAction->setDisabled(disabled);
renameLibraryAction->setDisabled(disabled);
removeLibraryAction->setDisabled(disabled);
exportComicsInfoAction->setDisabled(disabled);
importComicsInfoAction->setDisabled(disabled);
exportLibraryAction->setDisabled(disabled);
rescanLibraryForXMLInfoAction->setDisabled(disabled);
// importLibraryAction->setDisabled(disabled);
}
void LibraryWindowActions::disableNoUpdatedLibrariesActions(bool disabled)
{
updateLibraryAction->setDisabled(disabled);
exportComicsInfoAction->setDisabled(disabled);
importComicsInfoAction->setDisabled(disabled);
exportLibraryAction->setDisabled(disabled);
rescanLibraryForXMLInfoAction->setDisabled(disabled);
}
void LibraryWindowActions::disableFoldersActions(bool disabled)
{
setRootIndexAction->setDisabled(disabled);
expandAllNodesAction->setDisabled(disabled);
colapseAllNodesAction->setDisabled(disabled);
openContainingFolderAction->setDisabled(disabled);
updateFolderAction->setDisabled(disabled);
rescanXMLFromCurrentFolderAction->setDisabled(disabled);
}
void LibraryWindowActions::disableAllActions()
{
disableComicsActions(true);
disableLibrariesActions(true);
disableFoldersActions(true);
}

View File

@ -0,0 +1,137 @@
#ifndef LIBRARY_WINDOW_ACTIONS_H
#define LIBRARY_WINDOW_ACTIONS_H
#include <QAction>
#include <QSettings>
#include "qaction.h"
class LibraryWindow;
class YACReaderHistoryController;
class EditShortcutsDialog;
class HelpAboutDialog;
class ExportLibraryDialog;
class YACReaderContentViewsManager;
class YACReaderFoldersView;
class YACReaderOptionsDialog;
class ServerConfigDialog;
class LibraryWindowActions
{
public:
QAction *backAction;
QAction *forwardAction;
QAction *openComicAction;
QAction *createLibraryAction;
QAction *openLibraryAction;
QAction *exportComicsInfoAction;
QAction *importComicsInfoAction;
QAction *exportLibraryAction;
QAction *importLibraryAction;
QAction *rescanLibraryForXMLInfoAction;
QAction *updateLibraryAction;
QAction *removeLibraryAction;
QAction *helpAboutAction;
QAction *renameLibraryAction;
#ifndef Q_OS_MACOS
QAction *toggleFullScreenAction;
#endif
QAction *optionsAction;
QAction *serverConfigAction;
QAction *toggleComicsViewAction;
// QAction * socialAction;
// tree actions
QAction *addFolderAction;
QAction *deleteFolderAction;
//--
QAction *setRootIndexAction;
QAction *expandAllNodesAction;
QAction *colapseAllNodesAction;
QAction *openContainingFolderAction;
QAction *saveCoversToAction;
//--
QAction *setFolderAsNotCompletedAction;
QAction *setFolderAsCompletedAction;
//--
QAction *setFolderAsReadAction;
QAction *setFolderAsUnreadAction;
//--
QAction *setFolderAsMangaAction;
QAction *setFolderAsNormalAction;
QAction *setFolderAsWesternMangaAction;
QAction *setFolderAsWebComicAction;
QAction *setFolderAsYonkomaAction;
QAction *openContainingFolderComicAction;
QAction *setAsReadAction;
QAction *setAsNonReadAction;
QAction *setMangaAction;
QAction *setNormalAction;
QAction *setWesternMangaAction;
QAction *setWebComicAction;
QAction *setYonkomaAction;
QAction *showHideMarksAction;
QAction *getInfoAction; // comic vine
QAction *resetComicRatingAction;
QAction *toogleShowRecentIndicatorAction;
// edit info actions
QAction *selectAllComicsAction;
QAction *editSelectedComicsAction;
QAction *asignOrderAction;
QAction *forceCoverExtractedAction;
QAction *deleteComicsAction;
QAction *deleteMetadataAction;
QAction *focusSearchLineAction;
QAction *focusComicsViewAction;
QAction *showEditShortcutsAction;
QAction *quitAction;
QAction *updateFolderAction;
QAction *updateCurrentFolderAction;
QAction *rescanXMLFromCurrentFolderAction;
// reading lists actions
QAction *addReadingListAction;
QAction *deleteReadingListAction;
QAction *addLabelAction;
QAction *renameListAction;
//--
QAction *addToMenuAction;
QAction *addToFavoritesAction;
LibraryWindowActions();
void createActions(LibraryWindow *window, QSettings *settings);
void createConnections(
YACReaderHistoryController *historyController,
LibraryWindow *window,
HelpAboutDialog *had,
ExportLibraryDialog *exportLibraryDialog,
YACReaderContentViewsManager *contentViewsManager,
EditShortcutsDialog *editShortcutsDialog,
YACReaderFoldersView *foldersView,
YACReaderOptionsDialog *optionsDialog,
ServerConfigDialog *serverConfigDialog);
void disableComicsActions(bool disabled);
void disableLibrariesActions(bool disabled);
void disableNoUpdatedLibrariesActions(bool disabled);
void disableFoldersActions(bool disabled);
void disableAllActions();
void setUpShortcutsManagement(EditShortcutsDialog *editShortcutsDialog);
};
#endif // LIBRARY_WINDOW_ACTIONS_H

View File

@ -55,7 +55,7 @@ TrayIconController::TrayIconController(QSettings *settings, LibraryWindow *windo
trayIconMenu = new QMenu(this->window);
trayIconMenu->addAction(restoreAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(this->window->quitAction);
trayIconMenu->addAction(this->window->actions.quitAction);
trayIcon.setContextMenu(trayIconMenu);

View File

@ -1,7 +1,5 @@
#include "yacreader_content_views_manager.h"
#include "yacreader_global.h"
#include "library_window.h"
#include "classic_comics_view.h"
@ -47,7 +45,7 @@ YACReaderContentViewsManager::YACReaderContentViewsManager(QSettings *settings,
doComicsViewConnections();
comicsViewStack->addWidget(comicsViewTransition = new ComicsViewTransition());
comicsViewStack->addWidget(folderContentView = new FolderContentView(parent->toogleShowRecentIndicatorAction));
comicsViewStack->addWidget(folderContentView = new FolderContentView(parent->actions.toogleShowRecentIndicatorAction));
comicsViewStack->addWidget(emptyLabelWidget = new EmptyLabelWidget());
comicsViewStack->addWidget(emptySpecialList = new EmptySpecialListWidget());
comicsViewStack->addWidget(emptyReadingList = new EmptyReadingListWidget());
@ -163,10 +161,10 @@ void YACReaderContentViewsManager::focusComicsViewViaShortcut()
void YACReaderContentViewsManager::disconnectComicsViewConnections(ComicsView *widget)
{
disconnect(widget, &ComicsView::comicRated, libraryWindow->comicsModel, &ComicModel::updateRating);
disconnect(libraryWindow->showHideMarksAction, &QAction::toggled, widget, &ComicsView::setShowMarks);
disconnect(libraryWindow->actions.showHideMarksAction, &QAction::toggled, widget, &ComicsView::setShowMarks);
disconnect(widget, &ComicsView::selected, libraryWindow, QOverload<>::of(&LibraryWindow::openComic));
disconnect(widget, &ComicsView::openComic, libraryWindow, QOverload<const ComicDB &, const ComicModel::Mode>::of(&LibraryWindow::openComic));
disconnect(libraryWindow->selectAllComicsAction, &QAction::triggered, widget, &ComicsView::selectAll);
disconnect(libraryWindow->actions.selectAllComicsAction, &QAction::triggered, widget, &ComicsView::selectAll);
disconnect(comicsView, &ComicsView::copyComicsToCurrentFolder, libraryWindow, &LibraryWindow::copyAndImportComicsToCurrentFolder);
disconnect(comicsView, &ComicsView::moveComicsToCurrentFolder, libraryWindow, &LibraryWindow::moveAndImportComicsToCurrentFolder);
disconnect(comicsView, &ComicsView::customContextMenuViewRequested, libraryWindow, &LibraryWindow::showComicsViewContextMenu);
@ -176,11 +174,11 @@ void YACReaderContentViewsManager::disconnectComicsViewConnections(ComicsView *w
void YACReaderContentViewsManager::doComicsViewConnections()
{
connect(comicsView, &ComicsView::comicRated, libraryWindow->comicsModel, &ComicModel::updateRating);
connect(libraryWindow->showHideMarksAction, &QAction::toggled, comicsView, &ComicsView::setShowMarks);
connect(libraryWindow->actions.showHideMarksAction, &QAction::toggled, comicsView, &ComicsView::setShowMarks);
connect(comicsView, &ComicsView::selected, libraryWindow, QOverload<>::of(&LibraryWindow::openComic));
connect(comicsView, &ComicsView::openComic, libraryWindow, QOverload<const ComicDB &, const ComicModel::Mode>::of(&LibraryWindow::openComic));
connect(libraryWindow->selectAllComicsAction, &QAction::triggered, comicsView, &ComicsView::selectAll);
connect(libraryWindow->actions.selectAllComicsAction, &QAction::triggered, comicsView, &ComicsView::selectAll);
connect(comicsView, &ComicsView::customContextMenuViewRequested, libraryWindow, &LibraryWindow::showComicsViewContextMenu);
connect(comicsView, &ComicsView::customContextMenuItemRequested, libraryWindow, &LibraryWindow::showComicsItemContextMenu);
@ -224,7 +222,7 @@ void YACReaderContentViewsManager::_toggleComicsView()
case Flow: {
QIcon icoViewsButton;
icoViewsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/info"), QSize(), QIcon::Normal);
libraryWindow->toggleComicsViewAction->setIcon(icoViewsButton);
libraryWindow->actions.toggleComicsViewAction->setIcon(icoViewsButton);
#ifdef Y_MAC_UI
libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton);
#endif
@ -241,7 +239,7 @@ void YACReaderContentViewsManager::_toggleComicsView()
case Grid: {
QIcon icoViewsButton;
icoViewsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/flow"), QSize(), QIcon::Normal);
libraryWindow->toggleComicsViewAction->setIcon(icoViewsButton);
libraryWindow->actions.toggleComicsViewAction->setIcon(icoViewsButton);
#ifdef Y_MAC_UI
libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton);
#endif
@ -257,7 +255,7 @@ void YACReaderContentViewsManager::_toggleComicsView()
case Info: {
QIcon icoViewsButton;
icoViewsButton.addFile(addExtensionToIconPath(":/images/main_toolbar/grid"), QSize(), QIcon::Normal);
libraryWindow->toggleComicsViewAction->setIcon(icoViewsButton);
libraryWindow->actions.toggleComicsViewAction->setIcon(icoViewsButton);
#ifdef Y_MAC_UI
libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton);
#endif

View File

@ -71,13 +71,6 @@ Folder &Folder::operator=(const Folder &other)
return *this;
}
Folder Folder::rootFolder()
{
auto root = Folder(1, 1, "root", "/");
root.type = YACReader::FileType::Comic; // TODO: make this configurable by the user so it can set a default type for a library
return root;
}
Folder::Folder(const QString &folderName, const QString &folderPath)
: knownParent(false),
knownId(false),

View File

@ -41,8 +41,6 @@ public:
Folder(const Folder &folder);
Folder &operator=(const Folder &other);
static Folder rootFolder();
inline void setId(qulonglong sid)
{
id = sid;