mirror of
https://github.com/YACReader/yacreader
synced 2025-05-28 03:10:27 -04:00
App icon needs some work to look ok in Windows 10 system tray and macos is not ready yet to fully support this.
403 lines
12 KiB
C++
403 lines
12 KiB
C++
#ifndef __LIBRARYWINDOW_H
|
|
#define __LIBRARYWINDOW_H
|
|
|
|
#include <QMainWindow>
|
|
#include <QMap>
|
|
#include <QModelIndex>
|
|
#include <QFileInfo>
|
|
#include <QSystemTrayIcon>
|
|
|
|
#include "yacreader_global_gui.h"
|
|
#include "yacreader_libraries.h"
|
|
|
|
#include "yacreader_navigation_controller.h"
|
|
|
|
#include <future>
|
|
|
|
#ifdef Q_OS_MAC
|
|
#include "yacreader_macosx_toolbar.h"
|
|
#endif
|
|
|
|
class QTreeView;
|
|
class QDirModel;
|
|
class QAction;
|
|
class QToolBar;
|
|
class QComboBox;
|
|
class QThread;
|
|
class QStackedWidget;
|
|
class YACReaderSearchLineEdit;
|
|
class CreateLibraryDialog;
|
|
class ExportLibraryDialog;
|
|
class ImportLibraryDialog;
|
|
class ExportComicsInfoDialog;
|
|
class ImportComicsInfoDialog;
|
|
class AddLibraryDialog;
|
|
class LibraryCreator;
|
|
class HelpAboutDialog;
|
|
class RenameLibraryDialog;
|
|
class PropertiesDialog;
|
|
class PackageManager;
|
|
class QCheckBox;
|
|
class QPushButton;
|
|
class ComicModel;
|
|
class QSplitter;
|
|
class FolderModel;
|
|
class FolderModelProxy;
|
|
class QItemSelectionModel;
|
|
class QString;
|
|
class QLabel;
|
|
class NoLibrariesWidget;
|
|
class OptionsDialog;
|
|
class ServerConfigDialog;
|
|
class QCloseEvent;
|
|
class ImportWidget;
|
|
class QSettings;
|
|
class LibraryItem;
|
|
class YACReaderTableView;
|
|
class YACReaderSideBar;
|
|
class YACReaderLibraryListWidget;
|
|
class YACReaderFoldersView;
|
|
class YACReaderMainToolBar;
|
|
class ComicVineDialog;
|
|
class ComicsView;
|
|
class ClassicComicsView;
|
|
class GridComicsView;
|
|
class ComicsViewTransition;
|
|
class EmptyFolderWidget;
|
|
class NoSearchResultsWidget;
|
|
class EditShortcutsDialog;
|
|
class ComicFilesManager;
|
|
class QProgressDialog;
|
|
class ReadingListModel;
|
|
class ReadingListModelProxy;
|
|
class YACReaderReadingListsView;
|
|
class YACReaderHistoryController;
|
|
class EmptyLabelWidget;
|
|
class EmptySpecialListWidget;
|
|
class EmptyReadingListWidget;
|
|
class YACReaderComicsViewsManager;
|
|
|
|
#include "comic_db.h"
|
|
|
|
using namespace YACReader;
|
|
|
|
class LibraryWindow : public QMainWindow
|
|
{
|
|
friend class YACReaderNavigationController;
|
|
|
|
Q_OBJECT
|
|
public:
|
|
YACReaderSideBar * sideBar;
|
|
|
|
CreateLibraryDialog * createLibraryDialog;
|
|
ExportLibraryDialog * exportLibraryDialog;
|
|
ImportLibraryDialog * importLibraryDialog;
|
|
ExportComicsInfoDialog * exportComicsInfoDialog;
|
|
ImportComicsInfoDialog * importComicsInfoDialog;
|
|
AddLibraryDialog * addLibraryDialog;
|
|
LibraryCreator * libraryCreator;
|
|
HelpAboutDialog * had;
|
|
RenameLibraryDialog * renameLibraryDialog;
|
|
PropertiesDialog * propertiesDialog;
|
|
ComicVineDialog * comicVineDialog;
|
|
EditShortcutsDialog * editShortcutsDialog;
|
|
//YACReaderSocialDialog * socialDialog;
|
|
bool fullscreen;
|
|
bool importedCovers; //if true, the library is read only (not updates,open comic or properties)
|
|
bool fromMaximized;
|
|
|
|
PackageManager * packageManager;
|
|
|
|
QSize slideSizeW;
|
|
QSize slideSizeF;
|
|
//search filter
|
|
#ifdef Q_OS_MAC
|
|
YACReaderMacOSXSearchLineEdit * searchEdit;
|
|
#else
|
|
YACReaderSearchLineEdit * searchEdit;
|
|
#endif
|
|
|
|
QString previousFilter;
|
|
QCheckBox * includeComicsCheckBox;
|
|
//-------------
|
|
|
|
YACReaderNavigationController * navigationController;
|
|
YACReaderComicsViewsManager * comicsViewsManager;
|
|
|
|
YACReaderFoldersView * foldersView;
|
|
YACReaderReadingListsView * listsView;
|
|
YACReaderLibraryListWidget * selectedLibrary;
|
|
FolderModel * foldersModel;
|
|
FolderModelProxy * foldersModelProxy;
|
|
ComicModel * comicsModel;
|
|
ReadingListModel * listsModel;
|
|
ReadingListModelProxy * listsModelProxy;
|
|
//QStringList paths;
|
|
YACReaderLibraries libraries;
|
|
|
|
QStackedWidget * mainWidget;
|
|
NoLibrariesWidget * noLibrariesWidget;
|
|
ImportWidget * importWidget;
|
|
|
|
bool fetching;
|
|
|
|
int i;
|
|
|
|
QAction * backAction;
|
|
QAction * forwardAction;
|
|
|
|
QAction * openComicAction;
|
|
QAction * createLibraryAction;
|
|
QAction * openLibraryAction;
|
|
|
|
QAction * exportComicsInfoAction;
|
|
QAction * importComicsInfoAction;
|
|
|
|
QAction * exportLibraryAction;
|
|
QAction * importLibraryAction;
|
|
|
|
QAction * updateLibraryAction;
|
|
QAction * removeLibraryAction;
|
|
QAction * helpAboutAction;
|
|
QAction * renameLibraryAction;
|
|
#ifndef Q_OS_MAC
|
|
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 * openContainingFolderComicAction;
|
|
QAction * setAsReadAction;
|
|
QAction * setAsNonReadAction;
|
|
//QAction * setAllAsReadAction;
|
|
//QAction * setAllAsNonReadAction;
|
|
QAction * showHideMarksAction;
|
|
QAction * getInfoAction; //comic vine
|
|
QAction * resetComicRatingAction;
|
|
|
|
//edit info actions
|
|
QAction * selectAllComicsAction;
|
|
QAction * editSelectedComicsAction;
|
|
QAction * asignOrderAction;
|
|
QAction * forceCoverExtractedAction;
|
|
QAction * deleteComicsAction;
|
|
|
|
QAction *showEditShortcutsAction;
|
|
|
|
QAction * updateFolderAction;
|
|
QAction * updateCurrentFolderAction;
|
|
|
|
//reading lists actions
|
|
QAction * addReadingListAction;
|
|
QAction * deleteReadingListAction;
|
|
QAction * addLabelAction;
|
|
QAction * renameListAction;
|
|
//--
|
|
QAction * addToMenuAction;
|
|
QAction * addToFavoritesAction;
|
|
|
|
#ifdef Q_OS_MAC
|
|
YACReaderMacOSXToolbar * libraryToolBar;
|
|
#else
|
|
YACReaderMainToolBar * libraryToolBar;
|
|
#endif
|
|
QToolBar * treeActions;
|
|
QToolBar * comicsToolBar;
|
|
QToolBar * editInfoToolBar;
|
|
|
|
OptionsDialog * optionsDialog;
|
|
ServerConfigDialog * serverConfigDialog;
|
|
|
|
QString libraryPath;
|
|
QString comicsPath;
|
|
|
|
QString _lastAdded;
|
|
QString _sourceLastAdded;
|
|
|
|
//QModelIndex _rootIndex;
|
|
//QModelIndex _rootIndexCV;
|
|
//QModelIndex updateDestination;
|
|
|
|
quint64 _comicIdEdited;
|
|
|
|
enum NavigationStatus
|
|
{
|
|
Normal, //
|
|
Searching
|
|
};
|
|
|
|
NavigationStatus status;
|
|
|
|
void setupUI();
|
|
void createActions();
|
|
void createToolBars();
|
|
void createMenus();
|
|
void createConnections();
|
|
void doLayout();
|
|
void doDialogs();
|
|
void setUpShortcutsManagement();
|
|
void doModels();
|
|
|
|
//ACTIONS MANAGEMENT
|
|
void disableComicsActions(bool disabled);
|
|
void disableLibrariesActions(bool disabled);
|
|
void disableNoUpdatedLibrariesActions(bool disabled);
|
|
void disableFoldersActions(bool disabled);
|
|
|
|
void disableAllActions();
|
|
//void disableActions();
|
|
//void enableActions();
|
|
//void enableLibraryActions();
|
|
|
|
QString currentPath();
|
|
QString currentFolderPath();
|
|
|
|
//settings
|
|
QSettings * settings;
|
|
|
|
//navigation backward and forward
|
|
YACReaderHistoryController * historyController;
|
|
|
|
bool removeError;
|
|
|
|
//QTBUG-41883
|
|
QSize _size;
|
|
QPoint _pos;
|
|
|
|
protected:
|
|
virtual void closeEvent ( QCloseEvent * event );
|
|
public:
|
|
LibraryWindow();
|
|
|
|
signals:
|
|
void libraryUpgraded(const QString & libraryName);
|
|
void errorUpgradingLibrary(const QString & path);
|
|
public slots:
|
|
void loadLibrary(const QString & path);
|
|
void selectSubfolder(const QModelIndex & mi, int child);
|
|
void checkEmptyFolder();
|
|
void openComic();
|
|
void openComic(const ComicDB & comic);
|
|
void createLibrary();
|
|
void create(QString source,QString dest, QString name);
|
|
void showAddLibrary();
|
|
void openLibrary(QString path, QString name);
|
|
void loadLibraries();
|
|
void saveLibraries();
|
|
void reloadCurrentLibrary();
|
|
void openLastCreated();
|
|
void updateLibrary();
|
|
//void deleteLibrary();
|
|
void openContainingFolder();
|
|
void setFolderAsNotCompleted();
|
|
void setFolderAsCompleted();
|
|
void setFolderAsRead();
|
|
void setFolderAsUnread();
|
|
void openContainingFolderComic();
|
|
void deleteCurrentLibrary();
|
|
void removeLibrary();
|
|
void renameLibrary();
|
|
void rename(QString newName);
|
|
void cancelCreating();
|
|
void stopLibraryCreator();
|
|
void setRootIndex();
|
|
void toggleFullScreen();
|
|
void toNormal();
|
|
void toFullScreen();
|
|
void setSearchFilter(const YACReader::SearchModifiers modifier, QString filter);
|
|
void clearSearchFilter();
|
|
void showProperties();
|
|
void exportLibrary(QString destPath);
|
|
void importLibrary(QString clc,QString destPath,QString name);
|
|
void reloadOptions();
|
|
void setCurrentComicsStatusReaded(YACReaderComicReadStatus readStatus);
|
|
void setCurrentComicReaded();
|
|
void setCurrentComicUnreaded();
|
|
void showExportComicsInfo();
|
|
void showImportComicsInfo();
|
|
void asignNumbers();
|
|
void showNoLibrariesWidget();
|
|
void showRootWidget();
|
|
void showImportingWidget();
|
|
void manageCreatingError(const QString & error);
|
|
void manageUpdatingError(const QString & error);
|
|
void manageOpeningLibraryError(const QString & error);
|
|
QModelIndexList getSelectedComics();
|
|
void deleteComics();
|
|
void deleteComicsFromDisk();
|
|
void deleteComicsFromList();
|
|
//void showSocial();
|
|
void showFoldersContextMenu(const QPoint & point);
|
|
void libraryAlreadyExists(const QString & name);
|
|
void importLibraryPackage();
|
|
void updateComicsView(quint64 libraryId, const ComicDB & comic);
|
|
void showComicVineScraper();
|
|
void setRemoveError();
|
|
void checkRemoveError();
|
|
void resetComicRating();
|
|
void checkSearchNumResults(int numResults);
|
|
void loadCoversFromCurrentModel();
|
|
void copyAndImportComicsToCurrentFolder(const QList<QPair<QString,QString> > & comics);
|
|
void moveAndImportComicsToCurrentFolder(const QList<QPair<QString, QString> > &comics);
|
|
void copyAndImportComicsToFolder(const QList<QPair<QString,QString> > & comics, const QModelIndex & miFolder);
|
|
void moveAndImportComicsToFolder(const QList<QPair<QString,QString> > & comics, const QModelIndex & miFolder);
|
|
void processComicFiles(ComicFilesManager * comicFilesManager, QProgressDialog * progressDialog);
|
|
void updateCopyMoveFolderDestination(const QModelIndex & mi); //imports new comics from the current folder
|
|
void updateCurrentFolder();
|
|
void updateFolder(const QModelIndex & miFolder);
|
|
QProgressDialog * newProgressDialog(const QString & label, int maxValue);
|
|
void reloadAfterCopyMove(const QModelIndex &mi);
|
|
QModelIndex getCurrentFolderIndex();
|
|
void enableNeededActions();
|
|
void addFolderToCurrentIndex();
|
|
void deleteSelectedFolder();
|
|
void errorDeletingFolder();
|
|
void addNewReadingList();
|
|
void deleteSelectedReadingList();
|
|
void showAddNewLabelDialog();
|
|
void showRenameCurrentList();
|
|
void addSelectedComicsToFavorites();
|
|
void showComicsViewContextMenu(const QPoint & point);
|
|
void showComicsItemContextMenu(const QPoint & point);
|
|
void setupAddToSubmenu(QMenu & menu);
|
|
void onAddComicsToLabel();
|
|
void setToolbarTitle(const QModelIndex & modelIndex);
|
|
void saveSelectedCoversTo();
|
|
void checkMaxNumLibraries();
|
|
void showErrorUpgradingLibrary(const QString & path);
|
|
|
|
//void changeEvent(QEvent *event);
|
|
|
|
private:
|
|
//fullscreen mode in Windows for preventing this bug: QTBUG-41309 https://bugreports.qt.io/browse/QTBUG-41309
|
|
Qt::WindowFlags previousWindowFlags;
|
|
QPoint previousPos;
|
|
QSize previousSize;
|
|
std::future<void> upgradeLibraryFuture;
|
|
QSystemTrayIcon trayIcon;
|
|
|
|
private slots:
|
|
//void trayActivation(QSystemTrayIcon::ActivationReason reason);
|
|
};
|
|
|
|
#endif
|