diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index e2f942b0..0ee76727 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -63,19 +63,11 @@ #include "api_key_dialog.h" //#include "yacreader_social_dialog.h" -#include "classic_comics_view.h" -#include "grid_comics_view.h" -#include "comics_view_transition.h" -#include "empty_folder_widget.h" -#include "empty_label_widget.h" -#include "empty_special_list.h" -#include "empty_reading_list_widget.h" +#include "comics_view.h" #include "edit_shortcuts_dialog.h" #include "shortcuts_manager.h" -#include "no_search_results_widget.h" - #include "comic_files_manager.h" #include "reading_list_model.h" @@ -88,6 +80,8 @@ #include "reading_list_item.h" #include "opengl_checker.h" +#include "yacreader_comics_views_manager.h" + #include "QsLog.h" #ifdef Q_OS_WIN @@ -140,7 +134,7 @@ void LibraryWindow::setupUI() createToolBars(); createMenus(); - navigationController = new YACReaderNavigationController(this); + navigationController = new YACReaderNavigationController(this, comicsViewsManager); createConnections(); @@ -237,37 +231,14 @@ void LibraryWindow::doLayout() readingListsTitle->addSpacing(3); //FINAL LAYOUT------------------------------------------------------------- - comicsViewStack = new QStackedWidget(); - if(!settings->contains(COMICS_VIEW_STATUS) || settings->value(COMICS_VIEW_STATUS) == Flow) { - comicsView = classicComicsView = new ClassicComicsView(); - comicsViewStatus = Flow; - //comicsViewStack->setCurrentIndex(Flow); - } else { - comicsView = gridComicsView = new GridComicsView(); - connect(optionsDialog, SIGNAL(optionsChanged()), gridComicsView, SLOT(updateBackgroundConfig())); - comicsViewStatus = Grid; - //comicsViewStack->setCurrentIndex(Grid); - } - - doComicsViewConnections(); - - comicsViewStack->addWidget(comicsViewTransition = new ComicsViewTransition()); - comicsViewStack->addWidget(emptyFolderWidget = new EmptyFolderWidget()); - comicsViewStack->addWidget(emptyLabelWidget = new EmptyLabelWidget()); - comicsViewStack->addWidget(emptySpecialList = new EmptySpecialListWidget()); - comicsViewStack->addWidget(emptyReadingList = new EmptyReadingListWidget()); - comicsViewStack->addWidget(noSearchResultsWidget = new NoSearchResultsWidget()); - - comicsViewStack->addWidget(comicsView); - - comicsViewStack->setCurrentWidget(comicsView); + comicsViewsManager = new YACReaderComicsViewsManager(settings, this); sHorizontal->addWidget(sideBar); #ifndef Q_OS_MAC QVBoxLayout * rightLayout = new QVBoxLayout; rightLayout->addWidget(libraryToolBar); - rightLayout->addWidget(comicsViewStack); + rightLayout->addWidget(comicsViewsManager->containerWidget()); rightLayout->setMargin(0); rightLayout->setSpacing(0); @@ -441,34 +412,6 @@ void LibraryWindow::doModels() //setSearchFilter(YACReader::NoModifiers, ""); //clear search filter } -void LibraryWindow::disconnectComicsViewConnections(ComicsView * widget) -{ - disconnect(widget, SIGNAL(comicRated(int,QModelIndex)), comicsModel, SLOT(updateRating(int,QModelIndex))); - disconnect(showHideMarksAction,SIGNAL(toggled(bool)),widget,SLOT(setShowMarks(bool))); - disconnect(widget,SIGNAL(selected(unsigned int)),this,SLOT(openComic())); - disconnect(widget,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(openComic())); - disconnect(selectAllComicsAction,SIGNAL(triggered()),widget,SLOT(selectAll())); - disconnect(comicsView, SIGNAL(copyComicsToCurrentFolder(QList >)), this, SLOT(copyAndImportComicsToCurrentFolder(QList >))); - disconnect(comicsView, SIGNAL(moveComicsToCurrentFolder(QList >)), this, SLOT(moveAndImportComicsToCurrentFolder(QList >))); - disconnect(comicsView,SIGNAL(customContextMenuViewRequested(QPoint)),this,SLOT(showComicsViewContextMenu(QPoint))); - disconnect(comicsView,SIGNAL(customContextMenuItemRequested(QPoint)),this,SLOT(showComicsItemContextMenu(QPoint))); -} - -void LibraryWindow::doComicsViewConnections() -{ - connect(comicsView, SIGNAL(comicRated(int,QModelIndex)), comicsModel, SLOT(updateRating(int,QModelIndex))); - connect(showHideMarksAction,SIGNAL(toggled(bool)),comicsView,SLOT(setShowMarks(bool))); - connect(comicsView,SIGNAL(selected(unsigned int)),this,SLOT(openComic())); - connect(comicsView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(openComic())); - connect(selectAllComicsAction,SIGNAL(triggered()),comicsView,SLOT(selectAll())); - - connect(comicsView,SIGNAL(customContextMenuViewRequested(QPoint)),this,SLOT(showComicsViewContextMenu(QPoint))); - connect(comicsView,SIGNAL(customContextMenuItemRequested(QPoint)),this,SLOT(showComicsItemContextMenu(QPoint))); - //Drops - connect(comicsView, SIGNAL(copyComicsToCurrentFolder(QList >)), this, SLOT(copyAndImportComicsToCurrentFolder(QList >))); - connect(comicsView, SIGNAL(moveComicsToCurrentFolder(QList >)), this, SLOT(moveAndImportComicsToCurrentFolder(QList >))); -} - void LibraryWindow::createActions() { backAction = new QAction(this); @@ -930,7 +873,7 @@ void LibraryWindow::createToolBars() editInfoToolBar->addAction(deleteComicsAction); - comicsView->setToolBar(editInfoToolBar); + comicsViewsManager->comicsView->setToolBar(editInfoToolBar); } void LibraryWindow::createMenus() @@ -1109,7 +1052,7 @@ void LibraryWindow::createConnections() #ifndef Q_OS_MAC connect(toggleFullScreenAction,SIGNAL(triggered()),this,SLOT(toggleFullScreen())); #endif - connect(toggleComicsViewAction,SIGNAL(triggered()),this,SLOT(toggleComicsView())); + connect(toggleComicsViewAction,SIGNAL(triggered()),comicsViewsManager,SLOT(toggleComicsView())); connect(optionsAction, SIGNAL(triggered()),optionsDialog,SLOT(show())); #ifdef SERVER_RELEASE connect(serverConfigAction, SIGNAL(triggered()), serverConfigDialog, SLOT(show())); @@ -1143,14 +1086,9 @@ void LibraryWindow::createConnections() //connect(socialAction,SIGNAL(triggered()),this,SLOT(showSocial())); - connect(comicsViewTransition,SIGNAL(transitionFinished()),this,SLOT(showComicsView())); - //connect(comicsModel,SIGNAL(isEmpty()),this,SLOT(showEmptyFolderView())); //connect(comicsModel,SIGNAL(searchNumResults(int)),this,SLOT(checkSearchNumResults(int))); //connect(emptyFolderWidget,SIGNAL(subfolderSelected(QModelIndex,int)),this,SLOT(selectSubfolder(QModelIndex,int))); - //Drops - connect(emptyFolderWidget, SIGNAL(copyComicsToCurrentFolder(QList >)), this, SLOT(copyAndImportComicsToCurrentFolder(QList >))); - connect(emptyFolderWidget, SIGNAL(moveComicsToCurrentFolder(QList >)), this, SLOT(moveAndImportComicsToCurrentFolder(QList >))); connect(showEditShortcutsAction,SIGNAL(triggered()),editShortcutsDialog,SLOT(show())); @@ -1200,7 +1138,7 @@ void LibraryWindow::loadLibrary(const QString & name) } else { - comicsView->setModel(NULL); + comicsViewsManager->comicsView->setModel(NULL); foldersView->setModel(NULL); listsView->setModel(NULL); disableAllActions();//TODO comprobar que se deben deshabilitar @@ -1257,7 +1195,7 @@ void LibraryWindow::loadLibrary(const QString & name) if(ret == QMessageBox::Yes) QDesktopServices::openUrl(QUrl("http://www.yacreader.com")); - comicsView->setModel(NULL); + comicsViewsManager->comicsView->setModel(NULL); foldersView->setModel(NULL); listsView->setModel(NULL); disableAllActions();//TODO comprobar que se deben deshabilitar @@ -1268,7 +1206,7 @@ void LibraryWindow::loadLibrary(const QString & name) } else { - comicsView->setModel(NULL); + comicsViewsManager->comicsView->setModel(NULL); foldersView->setModel(NULL); listsView->setModel(NULL); disableAllActions();//TODO comprobar que se deben deshabilitar @@ -1326,9 +1264,9 @@ void LibraryWindow::loadLibrary(const QString & name) void LibraryWindow::loadCoversFromCurrentModel() { //TODO this is a workaround for the crash in GridComicsView::setModel crash on views switching - if(typeid(*comicsView) == typeid(GridComicsView)) - comicsView->setModel(new ComicModel()); - comicsView->setModel(comicsModel); + if(typeid(*comicsViewsManager->comicsView) == typeid(GridComicsView)) + comicsViewsManager->comicsView->setModel(new ComicModel()); + comicsViewsManager->comicsView->setModel(comicsModel); } void LibraryWindow::copyAndImportComicsToCurrentFolder(const QList > &comics) @@ -1521,7 +1459,7 @@ void LibraryWindow::addFolderToCurrentIndex() navigationController->loadFolderInfo(newIndex); historyController->updateHistory(YACReaderLibrarySourceContainer(newIndex,YACReaderLibrarySourceContainer::Folder)); //a new folder is always an empty folder - showEmptyFolderView(); + comicsViewsManager->showEmptyFolderView(); } } } @@ -1694,7 +1632,7 @@ void LibraryWindow::showComicsViewContextMenu(const QPoint &point) menu.addAction(toggleFullScreenAction); #endif - menu.exec(comicsView->mapToGlobal(point)); + menu.exec(comicsViewsManager->comicsView->mapToGlobal(point)); } void LibraryWindow::showComicsItemContextMenu(const QPoint &point) @@ -1722,7 +1660,7 @@ void LibraryWindow::showComicsItemContextMenu(const QPoint &point) QMenu subMenu; setupAddToSubmenu(subMenu); - menu.exec(comicsView->mapToGlobal(point)); + menu.exec(comicsViewsManager->comicsView->mapToGlobal(point)); } void LibraryWindow::setupAddToSubmenu(QMenu &menu) @@ -1819,7 +1757,7 @@ void LibraryWindow::openComic() { if(!importedCovers) { - ComicDB comic = comicsModel->getComic(comicsView->currentIndex()); + ComicDB comic = comicsModel->getComic(comicsViewsManager->comicsView->currentIndex()); QString path = currentPath(); QList siblings = comicsModel->getAllComics(); @@ -1972,7 +1910,7 @@ void LibraryWindow::deleteCurrentLibrary() d.removeRecursively(); if(libraries.isEmpty())//no more libraries available. { - comicsView->setModel(NULL); + comicsViewsManager->comicsView->setModel(NULL); foldersView->setModel(NULL); listsView->setModel(NULL); @@ -1997,7 +1935,7 @@ void LibraryWindow::removeLibrary() //selectedLibrary->setCurrentIndex(0); if(libraries.isEmpty())//no more libraries available. { - comicsView->setModel(NULL); + comicsViewsManager->comicsView->setModel(NULL); foldersView->setModel(NULL); listsView->setModel(NULL); @@ -2069,7 +2007,7 @@ void LibraryWindow::setRootIndex() } else { - comicsView->setModel(NULL); + comicsViewsManager->comicsView->setModel(NULL); } foldersView->selectionModel()->clear(); @@ -2090,7 +2028,7 @@ void LibraryWindow::toFullScreen() sideBar->hide(); libraryToolBar->hide(); - comicsView->toFullScreen(); + comicsViewsManager->comicsView->toFullScreen(); showFullScreen(); } @@ -2099,7 +2037,7 @@ void LibraryWindow::toNormal() { sideBar->show(); - comicsView->toNormal(); + comicsViewsManager->comicsView->toNormal(); if(fromMaximized) showMaximized(); @@ -2125,14 +2063,14 @@ void LibraryWindow::setSearchFilter(const YACReader::SearchModifiers modifier, Q status = LibraryWindow::Searching; foldersModelProxy->setFilter(modifier, filter, true);//includeComicsCheckBox->isChecked()); comicsModel->setupModelData(modifier, filter, foldersModel->getDatabase()); - comicsView->enableFilterMode(true); - comicsView->setModel(comicsModel); //TODO, columns are messed up after ResetModel some times, this shouldn't be necesary + comicsViewsManager->comicsView->enableFilterMode(true); + comicsViewsManager->comicsView->setModel(comicsModel); //TODO, columns are messed up after ResetModel some times, this shouldn't be necesary foldersView->expandAll(); if(comicsModel->rowCount() == 0) - showNoSearchResultsView(); + comicsViewsManager->showNoSearchResultsView(); else - showComicsView(); + comicsViewsManager->showComicsView(); } else if(status == LibraryWindow::Searching) {//if no searching, then ignore this @@ -2144,7 +2082,7 @@ void LibraryWindow::setSearchFilter(const YACReader::SearchModifiers modifier, Q void LibraryWindow::clearSearchFilter() { foldersModelProxy->clear(); - comicsView->enableFilterMode(false); + comicsViewsManager->comicsView->enableFilterMode(false); foldersView->collapseAll(); status = LibraryWindow::Normal; } @@ -2219,110 +2157,12 @@ void LibraryWindow::resetComicRating() comicsModel->finishTransaction(); } -void LibraryWindow::switchToComicsView(ComicsView * from, ComicsView * to) -{ - //setup views - disconnectComicsViewConnections(from); - from->close(); - - comicsView = to; - doComicsViewConnections(); - - comicsView->setToolBar(editInfoToolBar); - - comicsViewStack->removeWidget(from); - comicsViewStack->addWidget(comicsView); - - delete from; - - //load content into current view - loadCoversFromCurrentModel(); - - if(!searchEdit->text().isEmpty()) - { - comicsView->enableFilterMode(true); - } -} - -void LibraryWindow::showComicsViewTransition() -{ - comicsViewStack->setCurrentWidget(comicsViewTransition); - comicsViewTransition->startMovie(); -} - -void LibraryWindow::toggleComicsView_delayed() -{ - if(comicsViewStatus == Flow){ - QIcon icoViewsButton; - icoViewsButton.addFile(":/images/main_toolbar/flow.png", QSize(), QIcon::Normal); - toggleComicsViewAction->setIcon(icoViewsButton); -#ifdef Q_OS_MAC - libraryToolBar->updateViewSelectorIcon(icoViewsButton); -#endif - switchToComicsView(classicComicsView, gridComicsView = new GridComicsView()); - connect(optionsDialog, SIGNAL(optionsChanged()), gridComicsView, SLOT(updateBackgroundConfig())); - comicsViewStatus = Grid; - } - else{ - QIcon icoViewsButton; - icoViewsButton.addFile(":/images/main_toolbar/grid.png", QSize(), QIcon::Normal); - toggleComicsViewAction->setIcon(icoViewsButton); -#ifdef Q_OS_MAC - libraryToolBar->updateViewSelectorIcon(icoViewsButton); -#endif - switchToComicsView(gridComicsView, classicComicsView = new ClassicComicsView()); - comicsViewStatus = Flow; - } - - settings->setValue(COMICS_VIEW_STATUS, comicsViewStatus); -} - -void LibraryWindow::showComicsView() -{ - comicsViewStack->setCurrentWidget(comicsView); -} - -void LibraryWindow::showEmptyFolderView() -{ - comicsViewStack->setCurrentWidget(emptyFolderWidget); -} - -void LibraryWindow::showEmptyLabelView() -{ - comicsViewStack->setCurrentWidget(emptyLabelWidget); -} - -void LibraryWindow::showEmptySpecialList() -{ - comicsViewStack->setCurrentWidget(emptySpecialList); -} - -void LibraryWindow::showEmptyReadingListWidget() -{ - comicsViewStack->setCurrentWidget(emptyReadingList); -} - -void LibraryWindow::showNoSearchResultsView() -{ - comicsViewStack->setCurrentWidget(noSearchResultsWidget); -} - -//TODO recover the current comics selection and restore it in the destination -void LibraryWindow::toggleComicsView() -{ - if(comicsViewStack->currentWidget()==comicsView) { - QTimer::singleShot(0,this,SLOT(showComicsViewTransition())); - QTimer::singleShot(32,this,SLOT(toggleComicsView_delayed())); - } else - toggleComicsView_delayed(); -} - void LibraryWindow::checkSearchNumResults(int numResults) { if(numResults == 0) - showNoSearchResultsView(); + comicsViewsManager->showNoSearchResultsView(); else - showComicsView(); + comicsViewsManager->showComicsView(); } void LibraryWindow::asignNumbers() @@ -2348,14 +2188,14 @@ void LibraryWindow::asignNumbers() const QModelIndex & mi = comicsModel->getIndexFromId(edited); if(mi.isValid()) { - comicsView->scrollTo(mi,QAbstractItemView::PositionAtCenter); - comicsView->setCurrentIndex(mi); + comicsViewsManager->comicsView->scrollTo(mi,QAbstractItemView::PositionAtCenter); + comicsViewsManager->comicsView->setCurrentIndex(mi); } } void LibraryWindow::openContainingFolderComic() { -QModelIndex modelIndex = comicsView->currentIndex(); +QModelIndex modelIndex = comicsViewsManager->comicsView->currentIndex(); QFileInfo file = QDir::cleanPath(currentPath() + comicsModel->getComicPath(modelIndex)); #if defined Q_OS_UNIX && !defined Q_OS_MAC QString path = file.absolutePath(); @@ -2435,7 +2275,7 @@ void LibraryWindow::importLibrary(QString clc,QString destPath,QString name) void LibraryWindow::reloadOptions() { //comicFlow->setFlowType(flowType); - comicsView->updateConfig(settings); + comicsViewsManager->comicsView->updateConfig(settings); } QString LibraryWindow::currentPath() @@ -2475,7 +2315,7 @@ void LibraryWindow::closeEvent ( QCloseEvent * event ) s->stop(); settings->setValue(MAIN_WINDOW_GEOMETRY, saveGeometry()); - comicsView->close(); + comicsViewsManager->comicsView->close(); sideBar->close(); QApplication::instance()->processEvents(); @@ -2534,14 +2374,14 @@ QModelIndexList LibraryWindow::getSelectedComics() { //se fuerza a que haya almenos una fila seleccionada TODO comprobar se se puede forzar a la tabla a que lo haga automáticamente //avoid selection.count()==0 forcing selection in comicsView - QModelIndexList selection = comicsView->selectionModel()->selectedRows(); + QModelIndexList selection = comicsViewsManager->comicsView->selectionModel()->selectedRows(); QLOG_TRACE() << "selection count " << selection.length(); qSort(selection.begin(),selection.end(),lessThanModelIndexRow); if(selection.count()==0) { - comicsView->selectIndex(0); - selection = comicsView->selectionModel()->selectedRows(); + comicsViewsManager->comicsView->selectIndex(0); + selection = comicsViewsManager->comicsView->selectionModel()->selectedRows(); } return selection; } diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index 29ca0232..66588c41 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -71,6 +71,7 @@ class YACReaderHistoryController; class EmptyLabelWidget; class EmptySpecialListWidget; class EmptyReadingListWidget; +class YACReaderComicsViewsManager; #include "comic_db.h" @@ -81,7 +82,7 @@ class LibraryWindow : public QMainWindow friend class YACReaderNavigationController; Q_OBJECT -private: +public: YACReaderSideBar * sideBar; CreateLibraryDialog * createLibraryDialog; @@ -117,17 +118,7 @@ private: //------------- YACReaderNavigationController * navigationController; - - ComicsView * comicsView; - ClassicComicsView * classicComicsView; - GridComicsView * gridComicsView; - QStackedWidget * comicsViewStack; - ComicsViewTransition * comicsViewTransition; - EmptyFolderWidget * emptyFolderWidget; - EmptyLabelWidget * emptyLabelWidget; - EmptySpecialListWidget * emptySpecialList; - EmptyReadingListWidget * emptyReadingList; - NoSearchResultsWidget * noSearchResultsWidget; + YACReaderComicsViewsManager * comicsViewsManager; YACReaderFoldersView * foldersView; YACReaderReadingListsView * listsView; @@ -261,9 +252,6 @@ private: void doDialogs(); void setUpShortcutsManagement(); void doModels(); - void disconnectComicsViewConnections(ComicsView * widget); - void doComicsViewConnections(); - //ACTIONS MANAGEMENT void disableComicsActions(bool disabled); @@ -287,8 +275,6 @@ private: bool removeError; - ComicsViewStatus comicsViewStatus; - //QTBUG-41883 QSize _size; QPoint _pos; @@ -361,16 +347,6 @@ public slots: void setRemoveError(); void checkRemoveError(); void resetComicRating(); - void switchToComicsView(ComicsView *from, ComicsView *to); - void showComicsViewTransition(); - void toggleComicsView_delayed();//used in orther to avoid flickering; - void showComicsView(); - void showEmptyFolderView(); - void showEmptyLabelView(); - void showEmptySpecialList(); - void showEmptyReadingListWidget(); - void showNoSearchResultsView(); - void toggleComicsView(); void checkSearchNumResults(int numResults); void loadCoversFromCurrentModel(); void copyAndImportComicsToCurrentFolder(const QList > & comics); @@ -399,7 +375,6 @@ public slots: void onAddComicsToLabel(); void setToolbarTitle(const QModelIndex & modelIndex); void saveSelectedCoversTo(); - }; #endif diff --git a/YACReaderLibrary/yacreader_comics_views_manager.cpp b/YACReaderLibrary/yacreader_comics_views_manager.cpp index 7a221d43..348a120b 100644 --- a/YACReaderLibrary/yacreader_comics_views_manager.cpp +++ b/YACReaderLibrary/yacreader_comics_views_manager.cpp @@ -1,6 +1,184 @@ -#include "comics_views_manager.h" +#include "yacreader_comics_views_manager.h" -ComicsViewsManager::ComicsViewsManager(QObject *parent) : QObject(parent) +#include "library_window.h" + +#include "classic_comics_view.h" +#include "grid_comics_view.h" +#include "comics_view_transition.h" +#include "empty_folder_widget.h" +#include "empty_label_widget.h" +#include "empty_special_list.h" +#include "empty_reading_list_widget.h" +#include "no_search_results_widget.h" + +//-- +#include "yacreader_search_line_edit.h" +#include "options_dialog.h" + +YACReaderComicsViewsManager::YACReaderComicsViewsManager(QSettings *settings, LibraryWindow *parent) + : QObject(parent), libraryWindow(parent) { + comicsViewStack = new QStackedWidget(); + if(!settings->contains(COMICS_VIEW_STATUS) || settings->value(COMICS_VIEW_STATUS) == Flow) { + comicsView = classicComicsView = new ClassicComicsView(); + comicsViewStatus = Flow; + } else { + comicsView = gridComicsView = new GridComicsView(); + connect(libraryWindow->optionsDialog, SIGNAL(optionsChanged()), gridComicsView, SLOT(updateBackgroundConfig())); + comicsViewStatus = Grid; + } + + doComicsViewConnections(); + + comicsViewStack->addWidget(comicsViewTransition = new ComicsViewTransition()); + comicsViewStack->addWidget(emptyFolderWidget = new EmptyFolderWidget()); + comicsViewStack->addWidget(emptyLabelWidget = new EmptyLabelWidget()); + comicsViewStack->addWidget(emptySpecialList = new EmptySpecialListWidget()); + comicsViewStack->addWidget(emptyReadingList = new EmptyReadingListWidget()); + comicsViewStack->addWidget(noSearchResultsWidget = new NoSearchResultsWidget()); + + comicsViewStack->addWidget(comicsView); + + comicsViewStack->setCurrentWidget(comicsView); + + //connections + connect(comicsViewTransition,SIGNAL(transitionFinished()),this,SLOT(showComicsView())); + + connect(emptyFolderWidget, SIGNAL(copyComicsToCurrentFolder(QList >)), libraryWindow, SLOT(copyAndImportComicsToCurrentFolder(QList >))); + connect(emptyFolderWidget, SIGNAL(moveComicsToCurrentFolder(QList >)), libraryWindow, SLOT(moveAndImportComicsToCurrentFolder(QList >))); +} + +QWidget * YACReaderComicsViewsManager::containerWidget() +{ + return comicsViewStack; +} + +void YACReaderComicsViewsManager::showComicsView() +{ + comicsViewStack->setCurrentWidget(comicsView); +} + +void YACReaderComicsViewsManager::showEmptyFolderView() +{ + comicsViewStack->setCurrentWidget(emptyFolderWidget); +} + +void YACReaderComicsViewsManager::showEmptyLabelView() +{ + comicsViewStack->setCurrentWidget(emptyLabelWidget); +} + +void YACReaderComicsViewsManager::showEmptySpecialList() +{ + comicsViewStack->setCurrentWidget(emptySpecialList); +} + +void YACReaderComicsViewsManager::showEmptyReadingListWidget() +{ + comicsViewStack->setCurrentWidget(emptyReadingList); +} + +void YACReaderComicsViewsManager::showNoSearchResultsView() +{ + comicsViewStack->setCurrentWidget(noSearchResultsWidget); +} + +//TODO recover the current comics selection and restore it in the destination +void YACReaderComicsViewsManager::toggleComicsView() +{ + if(comicsViewStack->currentWidget()==comicsView) { + QTimer::singleShot(0,this,SLOT(showComicsViewTransition())); + QTimer::singleShot(32,this,SLOT(toggleComicsView_delayed())); + } else + toggleComicsView_delayed(); +} + +//PROTECTED + +//TODO FIX these connections +void YACReaderComicsViewsManager::disconnectComicsViewConnections(ComicsView * widget) +{ + disconnect(widget, SIGNAL(comicRated(int,QModelIndex)), libraryWindow->comicsModel, SLOT(updateRating(int,QModelIndex))); + disconnect(libraryWindow->showHideMarksAction,SIGNAL(toggled(bool)),widget,SLOT(setShowMarks(bool))); + disconnect(widget,SIGNAL(selected(unsigned int)),libraryWindow,SLOT(openComic())); + disconnect(widget,SIGNAL(doubleClicked(QModelIndex)),libraryWindow,SLOT(openComic())); + disconnect(libraryWindow->selectAllComicsAction,SIGNAL(triggered()),widget,SLOT(selectAll())); + disconnect(comicsView, SIGNAL(copyComicsToCurrentFolder(QList >)), libraryWindow, SLOT(copyAndImportComicsToCurrentFolder(QList >))); + disconnect(comicsView, SIGNAL(moveComicsToCurrentFolder(QList >)), libraryWindow, SLOT(moveAndImportComicsToCurrentFolder(QList >))); + disconnect(comicsView,SIGNAL(customContextMenuViewRequested(QPoint)),libraryWindow,SLOT(showComicsViewContextMenu(QPoint))); + disconnect(comicsView,SIGNAL(customContextMenuItemRequested(QPoint)),libraryWindow,SLOT(showComicsItemContextMenu(QPoint))); +} + +void YACReaderComicsViewsManager::doComicsViewConnections() +{ + connect(comicsView, SIGNAL(comicRated(int,QModelIndex)), libraryWindow->comicsModel, SLOT(updateRating(int,QModelIndex))); + connect(libraryWindow->showHideMarksAction,SIGNAL(toggled(bool)),comicsView,SLOT(setShowMarks(bool))); + connect(comicsView,SIGNAL(selected(unsigned int)),libraryWindow,SLOT(openComic())); + connect(comicsView,SIGNAL(doubleClicked(QModelIndex)),libraryWindow,SLOT(openComic())); + connect(libraryWindow->selectAllComicsAction,SIGNAL(triggered()),comicsView,SLOT(selectAll())); + + connect(comicsView,SIGNAL(customContextMenuViewRequested(QPoint)),libraryWindow,SLOT(showComicsViewContextMenu(QPoint))); + connect(comicsView,SIGNAL(customContextMenuItemRequested(QPoint)),libraryWindow,SLOT(showComicsItemContextMenu(QPoint))); + //Drops + connect(comicsView, SIGNAL(copyComicsToCurrentFolder(QList >)), libraryWindow, SLOT(copyAndImportComicsToCurrentFolder(QList >))); + connect(comicsView, SIGNAL(moveComicsToCurrentFolder(QList >)), libraryWindow, SLOT(moveAndImportComicsToCurrentFolder(QList >))); +} + +void YACReaderComicsViewsManager::switchToComicsView(ComicsView * from, ComicsView * to) +{ + //setup views + disconnectComicsViewConnections(from); + from->close(); + + comicsView = to; + doComicsViewConnections(); + + comicsView->setToolBar(libraryWindow->editInfoToolBar); + + comicsViewStack->removeWidget(from); + comicsViewStack->addWidget(comicsView); + + delete from; + + //load content into current view + libraryWindow->loadCoversFromCurrentModel(); + + if(!libraryWindow->searchEdit->text().isEmpty()) + { + comicsView->enableFilterMode(true); + } +} + +void YACReaderComicsViewsManager::showComicsViewTransition() +{ + comicsViewStack->setCurrentWidget(comicsViewTransition); + comicsViewTransition->startMovie(); +} + +void YACReaderComicsViewsManager::toggleComicsView_delayed() +{ + if(comicsViewStatus == Flow){ + QIcon icoViewsButton; + icoViewsButton.addFile(":/images/main_toolbar/flow.png", QSize(), QIcon::Normal); + libraryWindow->toggleComicsViewAction->setIcon(icoViewsButton); +#ifdef Q_OS_MAC + libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton); +#endif + switchToComicsView(classicComicsView, gridComicsView = new GridComicsView()); + connect(libraryWindow->optionsDialog, SIGNAL(optionsChanged()), gridComicsView, SLOT(updateBackgroundConfig())); + comicsViewStatus = Grid; + } + else{ + QIcon icoViewsButton; + icoViewsButton.addFile(":/images/main_toolbar/grid.png", QSize(), QIcon::Normal); + libraryWindow->toggleComicsViewAction->setIcon(icoViewsButton); +#ifdef Q_OS_MAC + libraryWindow->libraryToolBar->updateViewSelectorIcon(icoViewsButton); +#endif + switchToComicsView(gridComicsView, classicComicsView = new ClassicComicsView()); + comicsViewStatus = Flow; + } + + libraryWindow->settings->setValue(COMICS_VIEW_STATUS, comicsViewStatus); } diff --git a/YACReaderLibrary/yacreader_comics_views_manager.h b/YACReaderLibrary/yacreader_comics_views_manager.h index 22527dea..803d05ef 100644 --- a/YACReaderLibrary/yacreader_comics_views_manager.h +++ b/YACReaderLibrary/yacreader_comics_views_manager.h @@ -3,17 +3,30 @@ #include +#include "yacreader_global_gui.h" + +class LibraryWindow; + +class ComicsView; +class ClassicComicsView; +class GridComicsView; +class ComicsViewTransition; +class EmptyFolderWidget; +class EmptyLabelWidget; +class EmptySpecialListWidget; +class EmptyReadingListWidget; +class NoSearchResultsWidget; + +using namespace YACReader; + class YACReaderComicsViewsManager : public QObject { Q_OBJECT public: - explicit YACReaderComicsViewsManager(QObject *parent = 0); + explicit YACReaderComicsViewsManager(QSettings *settings, LibraryWindow *parent = 0); QWidget * containerWidget(); -protected: - QStackedWidget * comicsViewStack; - ComicsView * comicsView; ClassicComicsView * classicComicsView; GridComicsView * gridComicsView; @@ -27,9 +40,33 @@ protected: NoSearchResultsWidget * noSearchResultsWidget; +protected: + QStackedWidget * comicsViewStack; + LibraryWindow * libraryWindow; + + ComicsViewStatus comicsViewStatus; + signals: public slots: + void toggleComicsView(); + + void showComicsView(); + void showEmptyFolderView(); + void showEmptyLabelView(); + void showEmptySpecialList(); + void showEmptyReadingListWidget(); + void showNoSearchResultsView(); + +protected slots: + void showComicsViewTransition(); + void toggleComicsView_delayed(); + + void disconnectComicsViewConnections(ComicsView * widget); + void doComicsViewConnections(); + + void switchToComicsView(ComicsView *from, ComicsView *to); + }; #endif // COMICSVIEWSMANAGER_H diff --git a/YACReaderLibrary/yacreader_navigation_controller.cpp b/YACReaderLibrary/yacreader_navigation_controller.cpp index 3996932b..ab1afd33 100644 --- a/YACReaderLibrary/yacreader_navigation_controller.cpp +++ b/YACReaderLibrary/yacreader_navigation_controller.cpp @@ -16,11 +16,12 @@ #include "yacreader_global.h" #include "empty_label_widget.h" #include "empty_special_list.h" +#include "yacreader_comics_views_manager.h" #include "QsLog.h" -YACReaderNavigationController::YACReaderNavigationController(LibraryWindow *parent) : - QObject(parent),libraryWindow(parent) +YACReaderNavigationController::YACReaderNavigationController(LibraryWindow *parent, YACReaderComicsViewsManager *comicsViewsManager) : + QObject(parent),libraryWindow(parent),comicsViewsManager(comicsViewsManager) { setupConnections(); } @@ -59,19 +60,19 @@ void YACReaderNavigationController::loadFolderInfo(const QModelIndex &modelIndex //check comics in folder with id = folderId libraryWindow->comicsModel->setupFolderModelData(folderId,libraryWindow->foldersModel->getDatabase()); - libraryWindow->comicsView->setModel(libraryWindow->comicsModel); + comicsViewsManager->comicsView->setModel(libraryWindow->comicsModel); //configure views if(libraryWindow->comicsModel->rowCount() > 0) { //updateView - libraryWindow->showComicsView(); + comicsViewsManager->showComicsView(); libraryWindow->disableComicsActions(false); } else{ //showEmptyFolder loadEmptyFolderInfo(modelIndex); - libraryWindow->showEmptyFolderView(); + comicsViewsManager->showEmptyFolderView(); libraryWindow->disableComicsActions(true); } @@ -116,11 +117,11 @@ void YACReaderNavigationController::loadSpecialListInfo(const QModelIndex &model break; } - libraryWindow->comicsView->setModel(libraryWindow->comicsModel); + comicsViewsManager->comicsView->setModel(libraryWindow->comicsModel); if(libraryWindow->comicsModel->rowCount() > 0) { - libraryWindow->showComicsView(); + comicsViewsManager->showComicsView(); libraryWindow->disableComicsActions(false); } else @@ -129,16 +130,16 @@ void YACReaderNavigationController::loadSpecialListInfo(const QModelIndex &model switch(type) { case ReadingListModel::Favorites: - libraryWindow->emptySpecialList->setPixmap(QPixmap(":/images/empty_favorites.png")); - libraryWindow->emptySpecialList->setText(tr("No favorites")); + comicsViewsManager->emptySpecialList->setPixmap(QPixmap(":/images/empty_favorites.png")); + comicsViewsManager->emptySpecialList->setText(tr("No favorites")); break; case ReadingListModel::Reading: - libraryWindow->emptySpecialList->setPixmap(QPixmap(":/images/empty_current_readings.png")); - libraryWindow->emptySpecialList->setText(tr("You are not reading anything yet, come on!!")); + comicsViewsManager->emptySpecialList->setPixmap(QPixmap(":/images/empty_current_readings.png")); + comicsViewsManager->emptySpecialList->setText(tr("You are not reading anything yet, come on!!")); break; } - libraryWindow->showEmptySpecialList(); + comicsViewsManager->showEmptySpecialList(); libraryWindow->disableComicsActions(true); } } @@ -148,20 +149,20 @@ void YACReaderNavigationController::loadLabelInfo(const QModelIndex &modelIndex) qulonglong id = modelIndex.data(ReadingListModel::IDRole).toULongLong(); //check comics in label with id = id libraryWindow->comicsModel->setupLabelModelData(id,libraryWindow->foldersModel->getDatabase()); - libraryWindow->comicsView->setModel(libraryWindow->comicsModel); + comicsViewsManager->comicsView->setModel(libraryWindow->comicsModel); //configure views if(libraryWindow->comicsModel->rowCount() > 0) { //updateView - libraryWindow->showComicsView(); + comicsViewsManager->showComicsView(); libraryWindow->disableComicsActions(false); } else{ //showEmptyFolder //loadEmptyLabelInfo(); //there is no info in an empty label by now, TODO design something - libraryWindow->emptyLabelWidget->setColor((YACReader::LabelColors)modelIndex.data(ReadingListModel::LabelColorRole).toInt()); - libraryWindow->showEmptyLabelView(); + comicsViewsManager->emptyLabelWidget->setColor((YACReader::LabelColors)modelIndex.data(ReadingListModel::LabelColorRole).toInt()); + comicsViewsManager->showEmptyLabelView(); libraryWindow->disableComicsActions(true); } } @@ -171,17 +172,17 @@ void YACReaderNavigationController::loadReadingListInfo(const QModelIndex &model qulonglong id = modelIndex.data(ReadingListModel::IDRole).toULongLong(); //check comics in label with id = id libraryWindow->comicsModel->setupReadingListModelData(id,libraryWindow->foldersModel->getDatabase()); - libraryWindow->comicsView->setModel(libraryWindow->comicsModel); + comicsViewsManager->comicsView->setModel(libraryWindow->comicsModel); //configure views if(libraryWindow->comicsModel->rowCount() > 0) { //updateView - libraryWindow->showComicsView(); + comicsViewsManager->showComicsView(); libraryWindow->disableComicsActions(false); } else{ - libraryWindow->showEmptyReadingListWidget(); + comicsViewsManager->showEmptyReadingListWidget(); libraryWindow->disableComicsActions(true); } } @@ -273,7 +274,7 @@ void YACReaderNavigationController::loadEmptyFolderInfo(const QModelIndex &model { QStringList subfolders; subfolders = libraryWindow->foldersModel->getSubfoldersNames(modelIndex); - libraryWindow->emptyFolderWidget->setSubfolders(modelIndex,subfolders); + comicsViewsManager->emptyFolderWidget->setSubfolders(modelIndex,subfolders); } void YACReaderNavigationController::loadPreviousStatus() @@ -287,7 +288,7 @@ void YACReaderNavigationController::setupConnections() connect(libraryWindow->foldersView,SIGNAL(clicked(QModelIndex)),this,SLOT(selectedFolder(QModelIndex))); connect(libraryWindow->listsView,SIGNAL(clicked(QModelIndex)),this,SLOT(selectedList(QModelIndex))); connect(libraryWindow->historyController,SIGNAL(modelIndexSelected(YACReaderLibrarySourceContainer)),this,SLOT(selectedIndexFromHistory(YACReaderLibrarySourceContainer))); - connect(libraryWindow->emptyFolderWidget,SIGNAL(subfolderSelected(QModelIndex,int)),this,SLOT(selectSubfolder(QModelIndex,int))); + connect(comicsViewsManager->emptyFolderWidget,SIGNAL(subfolderSelected(QModelIndex,int)),this,SLOT(selectSubfolder(QModelIndex,int))); connect(libraryWindow->comicsModel,SIGNAL(isEmpty()),this,SLOT(reselectCurrentSource())); } diff --git a/YACReaderLibrary/yacreader_navigation_controller.h b/YACReaderLibrary/yacreader_navigation_controller.h index 2dbeac28..6463dbfa 100644 --- a/YACReaderLibrary/yacreader_navigation_controller.h +++ b/YACReaderLibrary/yacreader_navigation_controller.h @@ -4,13 +4,14 @@ #include class LibraryWindow; class YACReaderLibrarySourceContainer; +class YACReaderComicsViewsManager; class YACReaderNavigationController : public QObject { Q_OBJECT public: - explicit YACReaderNavigationController(LibraryWindow * parent); + explicit YACReaderNavigationController(LibraryWindow * parent, YACReaderComicsViewsManager * comicsViewsManager); signals: @@ -45,6 +46,7 @@ private: void setupConnections(); LibraryWindow * libraryWindow; + YACReaderComicsViewsManager * comicsViewsManager; //convenience methods qulonglong folderModelIndexToID(const QModelIndex & mi);