moved comics views managment code to the new class

This commit is contained in:
Luis Ángel San Martín 2016-03-26 21:47:46 +01:00
parent 704408f704
commit a4375f0c8e
6 changed files with 287 additions and 254 deletions

View File

@ -63,19 +63,11 @@
#include "api_key_dialog.h" #include "api_key_dialog.h"
//#include "yacreader_social_dialog.h" //#include "yacreader_social_dialog.h"
#include "classic_comics_view.h" #include "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 "edit_shortcuts_dialog.h" #include "edit_shortcuts_dialog.h"
#include "shortcuts_manager.h" #include "shortcuts_manager.h"
#include "no_search_results_widget.h"
#include "comic_files_manager.h" #include "comic_files_manager.h"
#include "reading_list_model.h" #include "reading_list_model.h"
@ -88,6 +80,8 @@
#include "reading_list_item.h" #include "reading_list_item.h"
#include "opengl_checker.h" #include "opengl_checker.h"
#include "yacreader_comics_views_manager.h"
#include "QsLog.h" #include "QsLog.h"
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
@ -140,7 +134,7 @@ void LibraryWindow::setupUI()
createToolBars(); createToolBars();
createMenus(); createMenus();
navigationController = new YACReaderNavigationController(this); navigationController = new YACReaderNavigationController(this, comicsViewsManager);
createConnections(); createConnections();
@ -237,37 +231,14 @@ void LibraryWindow::doLayout()
readingListsTitle->addSpacing(3); readingListsTitle->addSpacing(3);
//FINAL LAYOUT------------------------------------------------------------- //FINAL LAYOUT-------------------------------------------------------------
comicsViewStack = new QStackedWidget();
if(!settings->contains(COMICS_VIEW_STATUS) || settings->value(COMICS_VIEW_STATUS) == Flow) { comicsViewsManager = new YACReaderComicsViewsManager(settings, this);
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);
sHorizontal->addWidget(sideBar); sHorizontal->addWidget(sideBar);
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
QVBoxLayout * rightLayout = new QVBoxLayout; QVBoxLayout * rightLayout = new QVBoxLayout;
rightLayout->addWidget(libraryToolBar); rightLayout->addWidget(libraryToolBar);
rightLayout->addWidget(comicsViewStack); rightLayout->addWidget(comicsViewsManager->containerWidget());
rightLayout->setMargin(0); rightLayout->setMargin(0);
rightLayout->setSpacing(0); rightLayout->setSpacing(0);
@ -441,34 +412,6 @@ void LibraryWindow::doModels()
//setSearchFilter(YACReader::NoModifiers, ""); //clear search filter //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<QPair<QString, QString> >)), this, SLOT(copyAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
disconnect(comicsView, SIGNAL(moveComicsToCurrentFolder(QList<QPair<QString, QString> >)), this, SLOT(moveAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
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<QPair<QString, QString> >)), this, SLOT(copyAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
connect(comicsView, SIGNAL(moveComicsToCurrentFolder(QList<QPair<QString, QString> >)), this, SLOT(moveAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
}
void LibraryWindow::createActions() void LibraryWindow::createActions()
{ {
backAction = new QAction(this); backAction = new QAction(this);
@ -930,7 +873,7 @@ void LibraryWindow::createToolBars()
editInfoToolBar->addAction(deleteComicsAction); editInfoToolBar->addAction(deleteComicsAction);
comicsView->setToolBar(editInfoToolBar); comicsViewsManager->comicsView->setToolBar(editInfoToolBar);
} }
void LibraryWindow::createMenus() void LibraryWindow::createMenus()
@ -1109,7 +1052,7 @@ void LibraryWindow::createConnections()
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
connect(toggleFullScreenAction,SIGNAL(triggered()),this,SLOT(toggleFullScreen())); connect(toggleFullScreenAction,SIGNAL(triggered()),this,SLOT(toggleFullScreen()));
#endif #endif
connect(toggleComicsViewAction,SIGNAL(triggered()),this,SLOT(toggleComicsView())); connect(toggleComicsViewAction,SIGNAL(triggered()),comicsViewsManager,SLOT(toggleComicsView()));
connect(optionsAction, SIGNAL(triggered()),optionsDialog,SLOT(show())); connect(optionsAction, SIGNAL(triggered()),optionsDialog,SLOT(show()));
#ifdef SERVER_RELEASE #ifdef SERVER_RELEASE
connect(serverConfigAction, SIGNAL(triggered()), serverConfigDialog, SLOT(show())); connect(serverConfigAction, SIGNAL(triggered()), serverConfigDialog, SLOT(show()));
@ -1143,14 +1086,9 @@ void LibraryWindow::createConnections()
//connect(socialAction,SIGNAL(triggered()),this,SLOT(showSocial())); //connect(socialAction,SIGNAL(triggered()),this,SLOT(showSocial()));
connect(comicsViewTransition,SIGNAL(transitionFinished()),this,SLOT(showComicsView()));
//connect(comicsModel,SIGNAL(isEmpty()),this,SLOT(showEmptyFolderView())); //connect(comicsModel,SIGNAL(isEmpty()),this,SLOT(showEmptyFolderView()));
//connect(comicsModel,SIGNAL(searchNumResults(int)),this,SLOT(checkSearchNumResults(int))); //connect(comicsModel,SIGNAL(searchNumResults(int)),this,SLOT(checkSearchNumResults(int)));
//connect(emptyFolderWidget,SIGNAL(subfolderSelected(QModelIndex,int)),this,SLOT(selectSubfolder(QModelIndex,int))); //connect(emptyFolderWidget,SIGNAL(subfolderSelected(QModelIndex,int)),this,SLOT(selectSubfolder(QModelIndex,int)));
//Drops
connect(emptyFolderWidget, SIGNAL(copyComicsToCurrentFolder(QList<QPair<QString, QString> >)), this, SLOT(copyAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
connect(emptyFolderWidget, SIGNAL(moveComicsToCurrentFolder(QList<QPair<QString, QString> >)), this, SLOT(moveAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
connect(showEditShortcutsAction,SIGNAL(triggered()),editShortcutsDialog,SLOT(show())); connect(showEditShortcutsAction,SIGNAL(triggered()),editShortcutsDialog,SLOT(show()));
@ -1200,7 +1138,7 @@ void LibraryWindow::loadLibrary(const QString & name)
} }
else else
{ {
comicsView->setModel(NULL); comicsViewsManager->comicsView->setModel(NULL);
foldersView->setModel(NULL); foldersView->setModel(NULL);
listsView->setModel(NULL); listsView->setModel(NULL);
disableAllActions();//TODO comprobar que se deben deshabilitar disableAllActions();//TODO comprobar que se deben deshabilitar
@ -1257,7 +1195,7 @@ void LibraryWindow::loadLibrary(const QString & name)
if(ret == QMessageBox::Yes) if(ret == QMessageBox::Yes)
QDesktopServices::openUrl(QUrl("http://www.yacreader.com")); QDesktopServices::openUrl(QUrl("http://www.yacreader.com"));
comicsView->setModel(NULL); comicsViewsManager->comicsView->setModel(NULL);
foldersView->setModel(NULL); foldersView->setModel(NULL);
listsView->setModel(NULL); listsView->setModel(NULL);
disableAllActions();//TODO comprobar que se deben deshabilitar disableAllActions();//TODO comprobar que se deben deshabilitar
@ -1268,7 +1206,7 @@ void LibraryWindow::loadLibrary(const QString & name)
} }
else else
{ {
comicsView->setModel(NULL); comicsViewsManager->comicsView->setModel(NULL);
foldersView->setModel(NULL); foldersView->setModel(NULL);
listsView->setModel(NULL); listsView->setModel(NULL);
disableAllActions();//TODO comprobar que se deben deshabilitar disableAllActions();//TODO comprobar que se deben deshabilitar
@ -1326,9 +1264,9 @@ void LibraryWindow::loadLibrary(const QString & name)
void LibraryWindow::loadCoversFromCurrentModel() void LibraryWindow::loadCoversFromCurrentModel()
{ {
//TODO this is a workaround for the crash in GridComicsView::setModel crash on views switching //TODO this is a workaround for the crash in GridComicsView::setModel crash on views switching
if(typeid(*comicsView) == typeid(GridComicsView)) if(typeid(*comicsViewsManager->comicsView) == typeid(GridComicsView))
comicsView->setModel(new ComicModel()); comicsViewsManager->comicsView->setModel(new ComicModel());
comicsView->setModel(comicsModel); comicsViewsManager->comicsView->setModel(comicsModel);
} }
void LibraryWindow::copyAndImportComicsToCurrentFolder(const QList<QPair<QString, QString> > &comics) void LibraryWindow::copyAndImportComicsToCurrentFolder(const QList<QPair<QString, QString> > &comics)
@ -1521,7 +1459,7 @@ void LibraryWindow::addFolderToCurrentIndex()
navigationController->loadFolderInfo(newIndex); navigationController->loadFolderInfo(newIndex);
historyController->updateHistory(YACReaderLibrarySourceContainer(newIndex,YACReaderLibrarySourceContainer::Folder)); historyController->updateHistory(YACReaderLibrarySourceContainer(newIndex,YACReaderLibrarySourceContainer::Folder));
//a new folder is always an empty 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); menu.addAction(toggleFullScreenAction);
#endif #endif
menu.exec(comicsView->mapToGlobal(point)); menu.exec(comicsViewsManager->comicsView->mapToGlobal(point));
} }
void LibraryWindow::showComicsItemContextMenu(const QPoint &point) void LibraryWindow::showComicsItemContextMenu(const QPoint &point)
@ -1722,7 +1660,7 @@ void LibraryWindow::showComicsItemContextMenu(const QPoint &point)
QMenu subMenu; QMenu subMenu;
setupAddToSubmenu(subMenu); setupAddToSubmenu(subMenu);
menu.exec(comicsView->mapToGlobal(point)); menu.exec(comicsViewsManager->comicsView->mapToGlobal(point));
} }
void LibraryWindow::setupAddToSubmenu(QMenu &menu) void LibraryWindow::setupAddToSubmenu(QMenu &menu)
@ -1819,7 +1757,7 @@ void LibraryWindow::openComic()
{ {
if(!importedCovers) if(!importedCovers)
{ {
ComicDB comic = comicsModel->getComic(comicsView->currentIndex()); ComicDB comic = comicsModel->getComic(comicsViewsManager->comicsView->currentIndex());
QString path = currentPath(); QString path = currentPath();
QList<ComicDB> siblings = comicsModel->getAllComics(); QList<ComicDB> siblings = comicsModel->getAllComics();
@ -1972,7 +1910,7 @@ void LibraryWindow::deleteCurrentLibrary()
d.removeRecursively(); d.removeRecursively();
if(libraries.isEmpty())//no more libraries available. if(libraries.isEmpty())//no more libraries available.
{ {
comicsView->setModel(NULL); comicsViewsManager->comicsView->setModel(NULL);
foldersView->setModel(NULL); foldersView->setModel(NULL);
listsView->setModel(NULL); listsView->setModel(NULL);
@ -1997,7 +1935,7 @@ void LibraryWindow::removeLibrary()
//selectedLibrary->setCurrentIndex(0); //selectedLibrary->setCurrentIndex(0);
if(libraries.isEmpty())//no more libraries available. if(libraries.isEmpty())//no more libraries available.
{ {
comicsView->setModel(NULL); comicsViewsManager->comicsView->setModel(NULL);
foldersView->setModel(NULL); foldersView->setModel(NULL);
listsView->setModel(NULL); listsView->setModel(NULL);
@ -2069,7 +2007,7 @@ void LibraryWindow::setRootIndex()
} }
else else
{ {
comicsView->setModel(NULL); comicsViewsManager->comicsView->setModel(NULL);
} }
foldersView->selectionModel()->clear(); foldersView->selectionModel()->clear();
@ -2090,7 +2028,7 @@ void LibraryWindow::toFullScreen()
sideBar->hide(); sideBar->hide();
libraryToolBar->hide(); libraryToolBar->hide();
comicsView->toFullScreen(); comicsViewsManager->comicsView->toFullScreen();
showFullScreen(); showFullScreen();
} }
@ -2099,7 +2037,7 @@ void LibraryWindow::toNormal()
{ {
sideBar->show(); sideBar->show();
comicsView->toNormal(); comicsViewsManager->comicsView->toNormal();
if(fromMaximized) if(fromMaximized)
showMaximized(); showMaximized();
@ -2125,14 +2063,14 @@ void LibraryWindow::setSearchFilter(const YACReader::SearchModifiers modifier, Q
status = LibraryWindow::Searching; status = LibraryWindow::Searching;
foldersModelProxy->setFilter(modifier, filter, true);//includeComicsCheckBox->isChecked()); foldersModelProxy->setFilter(modifier, filter, true);//includeComicsCheckBox->isChecked());
comicsModel->setupModelData(modifier, filter, foldersModel->getDatabase()); comicsModel->setupModelData(modifier, filter, foldersModel->getDatabase());
comicsView->enableFilterMode(true); comicsViewsManager->comicsView->enableFilterMode(true);
comicsView->setModel(comicsModel); //TODO, columns are messed up after ResetModel some times, this shouldn't be necesary comicsViewsManager->comicsView->setModel(comicsModel); //TODO, columns are messed up after ResetModel some times, this shouldn't be necesary
foldersView->expandAll(); foldersView->expandAll();
if(comicsModel->rowCount() == 0) if(comicsModel->rowCount() == 0)
showNoSearchResultsView(); comicsViewsManager->showNoSearchResultsView();
else else
showComicsView(); comicsViewsManager->showComicsView();
} }
else if(status == LibraryWindow::Searching) else if(status == LibraryWindow::Searching)
{//if no searching, then ignore this {//if no searching, then ignore this
@ -2144,7 +2082,7 @@ void LibraryWindow::setSearchFilter(const YACReader::SearchModifiers modifier, Q
void LibraryWindow::clearSearchFilter() void LibraryWindow::clearSearchFilter()
{ {
foldersModelProxy->clear(); foldersModelProxy->clear();
comicsView->enableFilterMode(false); comicsViewsManager->comicsView->enableFilterMode(false);
foldersView->collapseAll(); foldersView->collapseAll();
status = LibraryWindow::Normal; status = LibraryWindow::Normal;
} }
@ -2219,110 +2157,12 @@ void LibraryWindow::resetComicRating()
comicsModel->finishTransaction(); 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) void LibraryWindow::checkSearchNumResults(int numResults)
{ {
if(numResults == 0) if(numResults == 0)
showNoSearchResultsView(); comicsViewsManager->showNoSearchResultsView();
else else
showComicsView(); comicsViewsManager->showComicsView();
} }
void LibraryWindow::asignNumbers() void LibraryWindow::asignNumbers()
@ -2348,14 +2188,14 @@ void LibraryWindow::asignNumbers()
const QModelIndex & mi = comicsModel->getIndexFromId(edited); const QModelIndex & mi = comicsModel->getIndexFromId(edited);
if(mi.isValid()) if(mi.isValid())
{ {
comicsView->scrollTo(mi,QAbstractItemView::PositionAtCenter); comicsViewsManager->comicsView->scrollTo(mi,QAbstractItemView::PositionAtCenter);
comicsView->setCurrentIndex(mi); comicsViewsManager->comicsView->setCurrentIndex(mi);
} }
} }
void LibraryWindow::openContainingFolderComic() void LibraryWindow::openContainingFolderComic()
{ {
QModelIndex modelIndex = comicsView->currentIndex(); QModelIndex modelIndex = comicsViewsManager->comicsView->currentIndex();
QFileInfo file = QDir::cleanPath(currentPath() + comicsModel->getComicPath(modelIndex)); QFileInfo file = QDir::cleanPath(currentPath() + comicsModel->getComicPath(modelIndex));
#if defined Q_OS_UNIX && !defined Q_OS_MAC #if defined Q_OS_UNIX && !defined Q_OS_MAC
QString path = file.absolutePath(); QString path = file.absolutePath();
@ -2435,7 +2275,7 @@ void LibraryWindow::importLibrary(QString clc,QString destPath,QString name)
void LibraryWindow::reloadOptions() void LibraryWindow::reloadOptions()
{ {
//comicFlow->setFlowType(flowType); //comicFlow->setFlowType(flowType);
comicsView->updateConfig(settings); comicsViewsManager->comicsView->updateConfig(settings);
} }
QString LibraryWindow::currentPath() QString LibraryWindow::currentPath()
@ -2475,7 +2315,7 @@ void LibraryWindow::closeEvent ( QCloseEvent * event )
s->stop(); s->stop();
settings->setValue(MAIN_WINDOW_GEOMETRY, saveGeometry()); settings->setValue(MAIN_WINDOW_GEOMETRY, saveGeometry());
comicsView->close(); comicsViewsManager->comicsView->close();
sideBar->close(); sideBar->close();
QApplication::instance()->processEvents(); 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 //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 //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(); QLOG_TRACE() << "selection count " << selection.length();
qSort(selection.begin(),selection.end(),lessThanModelIndexRow); qSort(selection.begin(),selection.end(),lessThanModelIndexRow);
if(selection.count()==0) if(selection.count()==0)
{ {
comicsView->selectIndex(0); comicsViewsManager->comicsView->selectIndex(0);
selection = comicsView->selectionModel()->selectedRows(); selection = comicsViewsManager->comicsView->selectionModel()->selectedRows();
} }
return selection; return selection;
} }

View File

@ -71,6 +71,7 @@ class YACReaderHistoryController;
class EmptyLabelWidget; class EmptyLabelWidget;
class EmptySpecialListWidget; class EmptySpecialListWidget;
class EmptyReadingListWidget; class EmptyReadingListWidget;
class YACReaderComicsViewsManager;
#include "comic_db.h" #include "comic_db.h"
@ -81,7 +82,7 @@ class LibraryWindow : public QMainWindow
friend class YACReaderNavigationController; friend class YACReaderNavigationController;
Q_OBJECT Q_OBJECT
private: public:
YACReaderSideBar * sideBar; YACReaderSideBar * sideBar;
CreateLibraryDialog * createLibraryDialog; CreateLibraryDialog * createLibraryDialog;
@ -117,17 +118,7 @@ private:
//------------- //-------------
YACReaderNavigationController * navigationController; YACReaderNavigationController * navigationController;
YACReaderComicsViewsManager * comicsViewsManager;
ComicsView * comicsView;
ClassicComicsView * classicComicsView;
GridComicsView * gridComicsView;
QStackedWidget * comicsViewStack;
ComicsViewTransition * comicsViewTransition;
EmptyFolderWidget * emptyFolderWidget;
EmptyLabelWidget * emptyLabelWidget;
EmptySpecialListWidget * emptySpecialList;
EmptyReadingListWidget * emptyReadingList;
NoSearchResultsWidget * noSearchResultsWidget;
YACReaderFoldersView * foldersView; YACReaderFoldersView * foldersView;
YACReaderReadingListsView * listsView; YACReaderReadingListsView * listsView;
@ -261,9 +252,6 @@ private:
void doDialogs(); void doDialogs();
void setUpShortcutsManagement(); void setUpShortcutsManagement();
void doModels(); void doModels();
void disconnectComicsViewConnections(ComicsView * widget);
void doComicsViewConnections();
//ACTIONS MANAGEMENT //ACTIONS MANAGEMENT
void disableComicsActions(bool disabled); void disableComicsActions(bool disabled);
@ -287,8 +275,6 @@ private:
bool removeError; bool removeError;
ComicsViewStatus comicsViewStatus;
//QTBUG-41883 //QTBUG-41883
QSize _size; QSize _size;
QPoint _pos; QPoint _pos;
@ -361,16 +347,6 @@ public slots:
void setRemoveError(); void setRemoveError();
void checkRemoveError(); void checkRemoveError();
void resetComicRating(); 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 checkSearchNumResults(int numResults);
void loadCoversFromCurrentModel(); void loadCoversFromCurrentModel();
void copyAndImportComicsToCurrentFolder(const QList<QPair<QString,QString> > & comics); void copyAndImportComicsToCurrentFolder(const QList<QPair<QString,QString> > & comics);
@ -399,7 +375,6 @@ public slots:
void onAddComicsToLabel(); void onAddComicsToLabel();
void setToolbarTitle(const QModelIndex & modelIndex); void setToolbarTitle(const QModelIndex & modelIndex);
void saveSelectedCoversTo(); void saveSelectedCoversTo();
}; };
#endif #endif

View File

@ -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<QPair<QString, QString> >)), libraryWindow, SLOT(copyAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
connect(emptyFolderWidget, SIGNAL(moveComicsToCurrentFolder(QList<QPair<QString, QString> >)), libraryWindow, SLOT(moveAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
}
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<QPair<QString, QString> >)), libraryWindow, SLOT(copyAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
disconnect(comicsView, SIGNAL(moveComicsToCurrentFolder(QList<QPair<QString, QString> >)), libraryWindow, SLOT(moveAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
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<QPair<QString, QString> >)), libraryWindow, SLOT(copyAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
connect(comicsView, SIGNAL(moveComicsToCurrentFolder(QList<QPair<QString, QString> >)), libraryWindow, SLOT(moveAndImportComicsToCurrentFolder(QList<QPair<QString, QString> >)));
}
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);
} }

View File

@ -3,17 +3,30 @@
#include <QtWidgets> #include <QtWidgets>
#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 class YACReaderComicsViewsManager : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit YACReaderComicsViewsManager(QObject *parent = 0); explicit YACReaderComicsViewsManager(QSettings *settings, LibraryWindow *parent = 0);
QWidget * containerWidget(); QWidget * containerWidget();
protected:
QStackedWidget * comicsViewStack;
ComicsView * comicsView; ComicsView * comicsView;
ClassicComicsView * classicComicsView; ClassicComicsView * classicComicsView;
GridComicsView * gridComicsView; GridComicsView * gridComicsView;
@ -27,9 +40,33 @@ protected:
NoSearchResultsWidget * noSearchResultsWidget; NoSearchResultsWidget * noSearchResultsWidget;
protected:
QStackedWidget * comicsViewStack;
LibraryWindow * libraryWindow;
ComicsViewStatus comicsViewStatus;
signals: signals:
public slots: 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 #endif // COMICSVIEWSMANAGER_H

View File

@ -16,11 +16,12 @@
#include "yacreader_global.h" #include "yacreader_global.h"
#include "empty_label_widget.h" #include "empty_label_widget.h"
#include "empty_special_list.h" #include "empty_special_list.h"
#include "yacreader_comics_views_manager.h"
#include "QsLog.h" #include "QsLog.h"
YACReaderNavigationController::YACReaderNavigationController(LibraryWindow *parent) : YACReaderNavigationController::YACReaderNavigationController(LibraryWindow *parent, YACReaderComicsViewsManager *comicsViewsManager) :
QObject(parent),libraryWindow(parent) QObject(parent),libraryWindow(parent),comicsViewsManager(comicsViewsManager)
{ {
setupConnections(); setupConnections();
} }
@ -59,19 +60,19 @@ void YACReaderNavigationController::loadFolderInfo(const QModelIndex &modelIndex
//check comics in folder with id = folderId //check comics in folder with id = folderId
libraryWindow->comicsModel->setupFolderModelData(folderId,libraryWindow->foldersModel->getDatabase()); libraryWindow->comicsModel->setupFolderModelData(folderId,libraryWindow->foldersModel->getDatabase());
libraryWindow->comicsView->setModel(libraryWindow->comicsModel); comicsViewsManager->comicsView->setModel(libraryWindow->comicsModel);
//configure views //configure views
if(libraryWindow->comicsModel->rowCount() > 0) if(libraryWindow->comicsModel->rowCount() > 0)
{ {
//updateView //updateView
libraryWindow->showComicsView(); comicsViewsManager->showComicsView();
libraryWindow->disableComicsActions(false); libraryWindow->disableComicsActions(false);
} }
else{ else{
//showEmptyFolder //showEmptyFolder
loadEmptyFolderInfo(modelIndex); loadEmptyFolderInfo(modelIndex);
libraryWindow->showEmptyFolderView(); comicsViewsManager->showEmptyFolderView();
libraryWindow->disableComicsActions(true); libraryWindow->disableComicsActions(true);
} }
@ -116,11 +117,11 @@ void YACReaderNavigationController::loadSpecialListInfo(const QModelIndex &model
break; break;
} }
libraryWindow->comicsView->setModel(libraryWindow->comicsModel); comicsViewsManager->comicsView->setModel(libraryWindow->comicsModel);
if(libraryWindow->comicsModel->rowCount() > 0) if(libraryWindow->comicsModel->rowCount() > 0)
{ {
libraryWindow->showComicsView(); comicsViewsManager->showComicsView();
libraryWindow->disableComicsActions(false); libraryWindow->disableComicsActions(false);
} }
else else
@ -129,16 +130,16 @@ void YACReaderNavigationController::loadSpecialListInfo(const QModelIndex &model
switch(type) switch(type)
{ {
case ReadingListModel::Favorites: case ReadingListModel::Favorites:
libraryWindow->emptySpecialList->setPixmap(QPixmap(":/images/empty_favorites.png")); comicsViewsManager->emptySpecialList->setPixmap(QPixmap(":/images/empty_favorites.png"));
libraryWindow->emptySpecialList->setText(tr("No favorites")); comicsViewsManager->emptySpecialList->setText(tr("No favorites"));
break; break;
case ReadingListModel::Reading: case ReadingListModel::Reading:
libraryWindow->emptySpecialList->setPixmap(QPixmap(":/images/empty_current_readings.png")); comicsViewsManager->emptySpecialList->setPixmap(QPixmap(":/images/empty_current_readings.png"));
libraryWindow->emptySpecialList->setText(tr("You are not reading anything yet, come on!!")); comicsViewsManager->emptySpecialList->setText(tr("You are not reading anything yet, come on!!"));
break; break;
} }
libraryWindow->showEmptySpecialList(); comicsViewsManager->showEmptySpecialList();
libraryWindow->disableComicsActions(true); libraryWindow->disableComicsActions(true);
} }
} }
@ -148,20 +149,20 @@ void YACReaderNavigationController::loadLabelInfo(const QModelIndex &modelIndex)
qulonglong id = modelIndex.data(ReadingListModel::IDRole).toULongLong(); qulonglong id = modelIndex.data(ReadingListModel::IDRole).toULongLong();
//check comics in label with id = id //check comics in label with id = id
libraryWindow->comicsModel->setupLabelModelData(id,libraryWindow->foldersModel->getDatabase()); libraryWindow->comicsModel->setupLabelModelData(id,libraryWindow->foldersModel->getDatabase());
libraryWindow->comicsView->setModel(libraryWindow->comicsModel); comicsViewsManager->comicsView->setModel(libraryWindow->comicsModel);
//configure views //configure views
if(libraryWindow->comicsModel->rowCount() > 0) if(libraryWindow->comicsModel->rowCount() > 0)
{ {
//updateView //updateView
libraryWindow->showComicsView(); comicsViewsManager->showComicsView();
libraryWindow->disableComicsActions(false); libraryWindow->disableComicsActions(false);
} }
else{ else{
//showEmptyFolder //showEmptyFolder
//loadEmptyLabelInfo(); //there is no info in an empty label by now, TODO design something //loadEmptyLabelInfo(); //there is no info in an empty label by now, TODO design something
libraryWindow->emptyLabelWidget->setColor((YACReader::LabelColors)modelIndex.data(ReadingListModel::LabelColorRole).toInt()); comicsViewsManager->emptyLabelWidget->setColor((YACReader::LabelColors)modelIndex.data(ReadingListModel::LabelColorRole).toInt());
libraryWindow->showEmptyLabelView(); comicsViewsManager->showEmptyLabelView();
libraryWindow->disableComicsActions(true); libraryWindow->disableComicsActions(true);
} }
} }
@ -171,17 +172,17 @@ void YACReaderNavigationController::loadReadingListInfo(const QModelIndex &model
qulonglong id = modelIndex.data(ReadingListModel::IDRole).toULongLong(); qulonglong id = modelIndex.data(ReadingListModel::IDRole).toULongLong();
//check comics in label with id = id //check comics in label with id = id
libraryWindow->comicsModel->setupReadingListModelData(id,libraryWindow->foldersModel->getDatabase()); libraryWindow->comicsModel->setupReadingListModelData(id,libraryWindow->foldersModel->getDatabase());
libraryWindow->comicsView->setModel(libraryWindow->comicsModel); comicsViewsManager->comicsView->setModel(libraryWindow->comicsModel);
//configure views //configure views
if(libraryWindow->comicsModel->rowCount() > 0) if(libraryWindow->comicsModel->rowCount() > 0)
{ {
//updateView //updateView
libraryWindow->showComicsView(); comicsViewsManager->showComicsView();
libraryWindow->disableComicsActions(false); libraryWindow->disableComicsActions(false);
} }
else{ else{
libraryWindow->showEmptyReadingListWidget(); comicsViewsManager->showEmptyReadingListWidget();
libraryWindow->disableComicsActions(true); libraryWindow->disableComicsActions(true);
} }
} }
@ -273,7 +274,7 @@ void YACReaderNavigationController::loadEmptyFolderInfo(const QModelIndex &model
{ {
QStringList subfolders; QStringList subfolders;
subfolders = libraryWindow->foldersModel->getSubfoldersNames(modelIndex); subfolders = libraryWindow->foldersModel->getSubfoldersNames(modelIndex);
libraryWindow->emptyFolderWidget->setSubfolders(modelIndex,subfolders); comicsViewsManager->emptyFolderWidget->setSubfolders(modelIndex,subfolders);
} }
void YACReaderNavigationController::loadPreviousStatus() void YACReaderNavigationController::loadPreviousStatus()
@ -287,7 +288,7 @@ void YACReaderNavigationController::setupConnections()
connect(libraryWindow->foldersView,SIGNAL(clicked(QModelIndex)),this,SLOT(selectedFolder(QModelIndex))); connect(libraryWindow->foldersView,SIGNAL(clicked(QModelIndex)),this,SLOT(selectedFolder(QModelIndex)));
connect(libraryWindow->listsView,SIGNAL(clicked(QModelIndex)),this,SLOT(selectedList(QModelIndex))); connect(libraryWindow->listsView,SIGNAL(clicked(QModelIndex)),this,SLOT(selectedList(QModelIndex)));
connect(libraryWindow->historyController,SIGNAL(modelIndexSelected(YACReaderLibrarySourceContainer)),this,SLOT(selectedIndexFromHistory(YACReaderLibrarySourceContainer))); 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())); connect(libraryWindow->comicsModel,SIGNAL(isEmpty()),this,SLOT(reselectCurrentSource()));
} }

View File

@ -4,13 +4,14 @@
#include <QObject> #include <QObject>
class LibraryWindow; class LibraryWindow;
class YACReaderLibrarySourceContainer; class YACReaderLibrarySourceContainer;
class YACReaderComicsViewsManager;
class YACReaderNavigationController : public QObject class YACReaderNavigationController : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit YACReaderNavigationController(LibraryWindow * parent); explicit YACReaderNavigationController(LibraryWindow * parent, YACReaderComicsViewsManager * comicsViewsManager);
signals: signals:
@ -45,6 +46,7 @@ private:
void setupConnections(); void setupConnections();
LibraryWindow * libraryWindow; LibraryWindow * libraryWindow;
YACReaderComicsViewsManager * comicsViewsManager;
//convenience methods //convenience methods
qulonglong folderModelIndexToID(const QModelIndex & mi); qulonglong folderModelIndexToID(const QModelIndex & mi);