1 #ifndef __LIBRARYWINDOW_H 2 #define __LIBRARYWINDOW_H 3 4 #include <QMainWindow> 5 #include <QMap> 6 #include <QModelIndex> 7 #include <QFileInfo> 8 9 #include "yacreader_global_gui.h" 10 #include "yacreader_libraries.h" 11 12 #include "yacreader_navigation_controller.h" 13 #include "comic_query_result_processor.h" 14 #include "folder_query_result_processor.h" 15 16 #include "comic_model.h" 17 18 #include <future> 19 #include <memory> 20 21 #ifdef Q_OS_MAC 22 #include "yacreader_macosx_toolbar.h" 23 #endif 24 25 class QTreeView; 26 class QDirModel; 27 class QAction; 28 class QToolBar; 29 class QComboBox; 30 class QThread; 31 class QStackedWidget; 32 class YACReaderSearchLineEdit; 33 class CreateLibraryDialog; 34 class ExportLibraryDialog; 35 class ImportLibraryDialog; 36 class ExportComicsInfoDialog; 37 class ImportComicsInfoDialog; 38 class AddLibraryDialog; 39 class LibraryCreator; 40 class HelpAboutDialog; 41 class RenameLibraryDialog; 42 class PropertiesDialog; 43 class PackageManager; 44 class QCheckBox; 45 class QPushButton; 46 class ComicModel; 47 class QSplitter; 48 class FolderModel; 49 class FolderModelProxy; 50 class QItemSelectionModel; 51 class QString; 52 class QLabel; 53 class NoLibrariesWidget; 54 class OptionsDialog; 55 class ServerConfigDialog; 56 class QCloseEvent; 57 class ImportWidget; 58 class QSettings; 59 class LibraryItem; 60 class YACReaderTableView; 61 class YACReaderSideBar; 62 class YACReaderLibraryListWidget; 63 class YACReaderFoldersView; 64 class YACReaderMainToolBar; 65 class ComicVineDialog; 66 class ComicsView; 67 class ClassicComicsView; 68 class GridComicsView; 69 class ComicsViewTransition; 70 class EmptyFolderWidget; 71 class NoSearchResultsWidget; 72 class EditShortcutsDialog; 73 class ComicFilesManager; 74 class QProgressDialog; 75 class ReadingListModel; 76 class ReadingListModelProxy; 77 class YACReaderReadingListsView; 78 class YACReaderHistoryController; 79 class EmptyLabelWidget; 80 class EmptySpecialListWidget; 81 class EmptyReadingListWidget; 82 83 namespace YACReader { 84 class TrayIconController; 85 } 86 87 #include "comic_db.h" 88 89 using namespace YACReader; 90 91 class LibraryWindow : public QMainWindow 92 { 93 friend class YACReaderNavigationController; 94 95 Q_OBJECT 96 public: 97 YACReaderSideBar *sideBar; 98 99 CreateLibraryDialog *createLibraryDialog; 100 ExportLibraryDialog *exportLibraryDialog; 101 ImportLibraryDialog *importLibraryDialog; 102 ExportComicsInfoDialog *exportComicsInfoDialog; 103 ImportComicsInfoDialog *importComicsInfoDialog; 104 AddLibraryDialog *addLibraryDialog; 105 LibraryCreator *libraryCreator; 106 HelpAboutDialog *had; 107 RenameLibraryDialog *renameLibraryDialog; 108 PropertiesDialog *propertiesDialog; 109 ComicVineDialog *comicVineDialog; 110 EditShortcutsDialog *editShortcutsDialog; 111 //YACReaderSocialDialog * socialDialog; 112 bool fullscreen; 113 bool importedCovers; //if true, the library is read only (not updates,open comic or properties) 114 bool fromMaximized; 115 116 PackageManager *packageManager; 117 118 QSize slideSizeW; 119 QSize slideSizeF; 120 //search filter 121 #ifdef Q_OS_MAC 122 YACReaderMacOSXSearchLineEdit *searchEdit; 123 #else 124 YACReaderSearchLineEdit *searchEdit; 125 #endif 126 127 QString previousFilter; 128 QCheckBox *includeComicsCheckBox; 129 //------------- 130 131 YACReaderNavigationController *navigationController; 132 YACReaderComicsViewsManager *comicsViewsManager; 133 134 YACReaderFoldersView *foldersView; 135 YACReaderReadingListsView *listsView; 136 YACReaderLibraryListWidget *selectedLibrary; 137 FolderModel *foldersModel; 138 FolderModelProxy *foldersModelProxy; 139 ComicModel *comicsModel; 140 ReadingListModel *listsModel; 141 ReadingListModelProxy *listsModelProxy; 142 //QStringList paths; 143 YACReaderLibraries libraries; 144 145 QStackedWidget *mainWidget; 146 NoLibrariesWidget *noLibrariesWidget; 147 ImportWidget *importWidget; 148 149 bool fetching; 150 151 int i; 152 153 QAction *backAction; 154 QAction *forwardAction; 155 156 QAction *openComicAction; 157 QAction *createLibraryAction; 158 QAction *openLibraryAction; 159 160 QAction *exportComicsInfoAction; 161 QAction *importComicsInfoAction; 162 163 QAction *exportLibraryAction; 164 QAction *importLibraryAction; 165 166 QAction *updateLibraryAction; 167 QAction *removeLibraryAction; 168 QAction *helpAboutAction; 169 QAction *renameLibraryAction; 170 #ifndef Q_OS_MAC 171 QAction *toggleFullScreenAction; 172 #endif 173 QAction *optionsAction; 174 QAction *serverConfigAction; 175 QAction *toggleComicsViewAction; 176 //QAction * socialAction; 177 178 //tree actions 179 QAction *addFolderAction; 180 QAction *deleteFolderAction; 181 //-- 182 QAction *setRootIndexAction; 183 QAction *expandAllNodesAction; 184 QAction *colapseAllNodesAction; 185 186 QAction *openContainingFolderAction; 187 QAction *saveCoversToAction; 188 //-- 189 QAction *setFolderAsNotCompletedAction; 190 QAction *setFolderAsCompletedAction; 191 //-- 192 QAction *setFolderAsReadAction; 193 QAction *setFolderAsUnreadAction; 194 QAction *setFolderAsMangaAction; 195 QAction *setFolderAsNormalAction; 196 197 QAction *openContainingFolderComicAction; 198 QAction *setAsReadAction; 199 QAction *setAsNonReadAction; 200 201 QAction *setMangaAction; 202 QAction *setNormalAction; 203 204 //QAction * setAllAsReadAction; 205 //QAction * setAllAsNonReadAction; 206 QAction *showHideMarksAction; 207 QAction *getInfoAction; //comic vine 208 QAction *resetComicRatingAction; 209 210 //edit info actions 211 QAction *selectAllComicsAction; 212 QAction *editSelectedComicsAction; 213 QAction *asignOrderAction; 214 QAction *forceCoverExtractedAction; 215 QAction *deleteComicsAction; 216 217 QAction *focusSearchLineAction; 218 QAction *focusComicsViewAction; 219 220 QAction *showEditShortcutsAction; 221 222 QAction *quitAction; 223 224 QAction *updateFolderAction; 225 QAction *updateCurrentFolderAction; 226 227 //reading lists actions 228 QAction *addReadingListAction; 229 QAction *deleteReadingListAction; 230 QAction *addLabelAction; 231 QAction *renameListAction; 232 //-- 233 QAction *addToMenuAction; 234 QAction *addToFavoritesAction; 235 236 #ifdef Q_OS_MAC 237 YACReaderMacOSXToolbar *libraryToolBar; 238 #else 239 YACReaderMainToolBar *libraryToolBar; 240 #endif 241 QToolBar *treeActions; 242 QToolBar *comicsToolBar; 243 QToolBar *editInfoToolBar; 244 245 OptionsDialog *optionsDialog; 246 ServerConfigDialog *serverConfigDialog; 247 248 QString libraryPath; 249 QString comicsPath; 250 251 QString _lastAdded; 252 QString _sourceLastAdded; 253 254 //QModelIndex _rootIndex; 255 //QModelIndex _rootIndexCV; 256 //QModelIndex updateDestination; 257 258 quint64 _comicIdEdited; 259 260 enum NavigationStatus { 261 Normal, // 262 Searching 263 }; 264 265 NavigationStatus status; 266 267 void createSettings(); 268 void setupOpenglSetting(); 269 void setupUI(); 270 void createActions(); 271 void createToolBars(); 272 void createMenus(); 273 void createConnections(); 274 void doLayout(); 275 void doDialogs(); 276 void setUpShortcutsManagement(); 277 void doModels(); 278 279 //ACTIONS MANAGEMENT 280 void disableComicsActions(bool disabled); 281 void disableLibrariesActions(bool disabled); 282 void disableNoUpdatedLibrariesActions(bool disabled); 283 void disableFoldersActions(bool disabled); 284 285 void disableAllActions(); 286 //void disableActions(); 287 //void enableActions(); 288 //void enableLibraryActions(); 289 290 QString currentPath(); 291 QString currentFolderPath(); 292 293 //settings 294 QSettings *settings; 295 296 //navigation backward and forward 297 YACReaderHistoryController *historyController; 298 299 bool removeError; 300 301 //QTBUG-41883 302 QSize _size; 303 QPoint _pos; 304 305 protected: 306 virtual void closeEvent(QCloseEvent *event); 307 308 public: 309 LibraryWindow(); 310 311 signals: 312 void libraryUpgraded(const QString &libraryName); 313 void errorUpgradingLibrary(const QString &path); 314 public slots: 315 void loadLibrary(const QString &path); 316 void selectSubfolder(const QModelIndex &mi, int child); 317 void checkEmptyFolder(); 318 void openComic(); 319 void openComic(const ComicDB &comic, const ComicModel::Mode mode); 320 void createLibrary(); 321 void create(QString source, QString dest, QString name); 322 void showAddLibrary(); 323 void openLibrary(QString path, QString name); 324 void loadLibraries(); 325 void saveLibraries(); 326 void reloadCurrentLibrary(); 327 void openLastCreated(); 328 void updateLibrary(); 329 //void deleteLibrary(); 330 void openContainingFolder(); 331 void setFolderAsNotCompleted(); 332 void setFolderAsCompleted(); 333 void setFolderAsRead(); 334 void setFolderAsUnread(); 335 void setFolderAsManga(); 336 void setFolderAsNormal(); 337 void openContainingFolderComic(); 338 void deleteCurrentLibrary(); 339 void removeLibrary(); 340 void renameLibrary(); 341 void rename(QString newName); 342 void cancelCreating(); 343 void stopLibraryCreator(); 344 void setRootIndex(); 345 void toggleFullScreen(); 346 void toNormal(); 347 void toFullScreen(); 348 void setSearchFilter(const YACReader::SearchModifiers modifier, QString filter); 349 void setComicSearchFilterData(QList<ComicItem *> *, const QString &); 350 void setFolderSearchFilterData(QMap<unsigned long long int, FolderItem *> *filteredItems, FolderItem *root); 351 void clearSearchFilter(); 352 void showProperties(); 353 void exportLibrary(QString destPath); 354 void importLibrary(QString clc, QString destPath, QString name); 355 void reloadOptions(); 356 void setCurrentComicsStatusReaded(YACReaderComicReadStatus readStatus); 357 void setCurrentComicReaded(); 358 void setCurrentComicUnreaded(); 359 void setSelectedComicsAsNormal(); 360 void setSelectedComicsAsManga(); 361 void showExportComicsInfo(); 362 void showImportComicsInfo(); 363 void asignNumbers(); 364 void showNoLibrariesWidget(); 365 void showRootWidget(); 366 void showImportingWidget(); 367 void manageCreatingError(const QString &error); 368 void manageUpdatingError(const QString &error); 369 void manageOpeningLibraryError(const QString &error); 370 QModelIndexList getSelectedComics(); 371 void deleteComics(); 372 void deleteComicsFromDisk(); 373 void deleteComicsFromList(); 374 //void showSocial(); 375 void showFoldersContextMenu(const QPoint &point); 376 void libraryAlreadyExists(const QString &name); 377 void importLibraryPackage(); 378 void updateComicsView(quint64 libraryId, const ComicDB &comic); 379 void showComicVineScraper(); 380 void setRemoveError(); 381 void checkRemoveError(); 382 void resetComicRating(); 383 void checkSearchNumResults(int numResults); 384 void loadCoversFromCurrentModel(); 385 void copyAndImportComicsToCurrentFolder(const QList<QPair<QString, QString>> &comics); 386 void moveAndImportComicsToCurrentFolder(const QList<QPair<QString, QString>> &comics); 387 void copyAndImportComicsToFolder(const QList<QPair<QString, QString>> &comics, const QModelIndex &miFolder); 388 void moveAndImportComicsToFolder(const QList<QPair<QString, QString>> &comics, const QModelIndex &miFolder); 389 void processComicFiles(ComicFilesManager *comicFilesManager, QProgressDialog *progressDialog); 390 void updateCopyMoveFolderDestination(const QModelIndex &mi); //imports new comics from the current folder 391 void updateCurrentFolder(); 392 void updateFolder(const QModelIndex &miFolder); 393 QProgressDialog *newProgressDialog(const QString &label, int maxValue); 394 void reloadAfterCopyMove(const QModelIndex &mi); 395 QModelIndex getCurrentFolderIndex(); 396 void enableNeededActions(); 397 void addFolderToCurrentIndex(); 398 void deleteSelectedFolder(); 399 void errorDeletingFolder(); 400 void addNewReadingList(); 401 void deleteSelectedReadingList(); 402 void showAddNewLabelDialog(); 403 void showRenameCurrentList(); 404 void addSelectedComicsToFavorites(); 405 void showComicsViewContextMenu(const QPoint &point); 406 void showComicsItemContextMenu(const QPoint &point); 407 void setupAddToSubmenu(QMenu &menu); 408 void onAddComicsToLabel(); 409 void setToolbarTitle(const QModelIndex &modelIndex); 410 void saveSelectedCoversTo(); 411 void checkMaxNumLibraries(); 412 void showErrorUpgradingLibrary(const QString &path); 413 414 void prepareToCloseApp(); 415 void closeApp(); 416 417 void afterLaunchTasks(); 418 419 private: 420 //fullscreen mode in Windows for preventing this bug: QTBUG-41309 https://bugreports.qt.io/browse/QTBUG-41309 421 Qt::WindowFlags previousWindowFlags; 422 QPoint previousPos; 423 QSize previousSize; 424 std::future<void> upgradeLibraryFuture; 425 426 TrayIconController *trayIconController; 427 ComicQueryResultProcessor comicQueryResultProcessor; 428 std::unique_ptr<FolderQueryResultProcessor> folderQueryResultProcessor; 429 }; 430 431 #endif 432