diff --git a/YACReaderLibrary/images_win.qrc b/YACReaderLibrary/images_win.qrc index 7b8ae9fb..5bc6d493 100644 --- a/YACReaderLibrary/images_win.qrc +++ b/YACReaderLibrary/images_win.qrc @@ -1,19 +1,20 @@ - - ../images/main_toolbar/back.png - ../images/main_toolbar/back_disabled.png - ../images/main_toolbar/forward.png - ../images/main_toolbar/forward_disabled.png - ../images/main_toolbar/settings.png - ../images/main_toolbar/server.png - ../images/main_toolbar/help.png - ../images/main_toolbar/fullscreen.png - - ../images/libraryIcon.png - ../images/setRoot.png - ../images/expand.png - ../images/colapse.png - ../images/newLibraryIcon.png - ../images/openLibraryIcon.png - + + ../images/main_toolbar/back.png + ../images/main_toolbar/back_disabled.png + ../images/main_toolbar/forward.png + ../images/main_toolbar/forward_disabled.png + ../images/main_toolbar/settings.png + ../images/main_toolbar/server.png + ../images/main_toolbar/help.png + ../images/main_toolbar/fullscreen.png + ../images/libraryIcon.png + ../images/setRoot.png + ../images/expand.png + ../images/colapse.png + ../images/newLibraryIcon.png + ../images/openLibraryIcon.png + ../images/main_toolbar/flow.png + ../images/main_toolbar/grid.png + diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index b6e32a6b..c01d75a9 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -189,9 +189,25 @@ void LibraryWindow::doLayout() foldersTitle->addAction(colapseAllNodesAction); //FINAL LAYOUT------------------------------------------------------------- + comicsViewStack = new QWidget(); + QHBoxLayout * l = new QHBoxLayout(); + + 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(); + comicsViewStatus = Grid; + //comicsViewStack->setCurrentIndex(Grid); + } + + doComicsViewConnections(); - comicsView = new ClassicComicsView(); comicsView->setToolBar(editInfoToolBar); + l->addWidget(comicsView); + comicsViewStack->setLayout(l); + l->setContentsMargins(0,0,0,0); fullScreenToolTip = new QLabel(comicsView); fullScreenToolTip->setText(tr(" press 'F' to close fullscreen mode ")); @@ -205,7 +221,7 @@ void LibraryWindow::doLayout() #ifndef Q_OS_MAC QVBoxLayout * rightLayout = new QVBoxLayout; rightLayout->addWidget(libraryToolBar); - rightLayout->addWidget(comicsView); + rightLayout->addWidget(comicsViewStack); rightLayout->setMargin(0); rightLayout->setSpacing(0); @@ -215,7 +231,7 @@ void LibraryWindow::doLayout() sHorizontal->addWidget(rightWidget); #else - sHorizontal->addWidget(sVertical); + sHorizontal->addWidget(comicsViewStack); #endif sHorizontal->setStretchFactor(0,0); @@ -286,7 +302,25 @@ void LibraryWindow::doModels() //comics dmCV = new TableModel(); - setFoldersFilter(""); + setFoldersFilter(""); +} + +void LibraryWindow::disconnectComicsViewConnections(ComicsView * widget) +{ + disconnect(widget, SIGNAL(comicRated(int,QModelIndex)), dmCV, 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())); +} + +void LibraryWindow::doComicsViewConnections() +{ + connect(comicsView, SIGNAL(comicRated(int,QModelIndex)), dmCV, 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())); } void LibraryWindow::createActions() @@ -416,6 +450,15 @@ void LibraryWindow::createActions() icoServerButton.addPixmap(QPixmap(":/images/main_toolbar/server.png"), QIcon::Normal); serverConfigAction->setIcon(icoServerButton); + toggleComicsViewAction = new QAction(tr("Change between comics views"),this); + toggleComicsViewAction->setShortcut(Qt::Key_V); + toggleComicsViewAction->setToolTip(tr("Change between comics views")); + QIcon icoViewsButton; + if(!settings->contains(COMICS_VIEW_STATUS) || settings->value(COMICS_VIEW_STATUS) == Flow) + icoViewsButton.addPixmap(QPixmap(":/images/main_toolbar/grid.png"), QIcon::Normal); + else + icoViewsButton.addPixmap(QPixmap(":/images/main_toolbar/flow.png"), QIcon::Normal); + toggleComicsViewAction->setIcon(icoViewsButton); //socialAction = new QAction(this); openContainingFolderAction = new QAction(this); @@ -569,6 +612,7 @@ void LibraryWindow::createToolBars() w2->setFixedWidth(10); libraryToolBar->addWidget(w2);} + libraryToolBar->addAction(toggleComicsViewAction); libraryToolBar->addAction(toggleFullScreenAction); libraryToolBar->addWidget(new QToolBarStretch()); @@ -583,6 +627,7 @@ void LibraryWindow::createToolBars() libraryToolBar->settingsButton->setDefaultAction(optionsAction); libraryToolBar->serverButton->setDefaultAction(serverConfigAction); libraryToolBar->helpButton->setDefaultAction(helpAboutAction); + libraryToolBar->toggleComicsViewButton->setDefaultAction(toggleComicsViewAction); libraryToolBar->fullscreenButton->setDefaultAction(toggleFullScreenAction); #endif @@ -777,9 +822,6 @@ void LibraryWindow::createConnections() connect(foldersView, SIGNAL(clicked(QModelIndex)), this, SLOT(loadCovers(QModelIndex))); connect(foldersView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateHistory(QModelIndex))); - connect(comicsView, SIGNAL(comicRated(int,QModelIndex)), dmCV, SLOT(updateRating(int,QModelIndex))); - connect(showHideMarksAction,SIGNAL(toggled(bool)),comicsView,SLOT(setShowMarks(bool))); - //actions connect(createLibraryAction,SIGNAL(triggered()),this,SLOT(createLibrary())); connect(exportLibraryAction,SIGNAL(triggered()),exportLibraryDialog,SLOT(show())); @@ -812,14 +854,13 @@ void LibraryWindow::createConnections() connect(expandAllNodesAction,SIGNAL(triggered()),foldersView,SLOT(expandAll())); connect(colapseAllNodesAction,SIGNAL(triggered()),foldersView,SLOT(collapseAll())); connect(toggleFullScreenAction,SIGNAL(triggered()),this,SLOT(toggleFullScreen())); + connect(toggleComicsViewAction,SIGNAL(triggered()),this,SLOT(toggleComicsView())); connect(optionsAction, SIGNAL(triggered()),optionsDialog,SLOT(show())); #ifdef SERVER_RELEASE connect(serverConfigAction, SIGNAL(triggered()), serverConfigDialog, SLOT(show())); #endif connect(optionsDialog, SIGNAL(optionsChanged()),this,SLOT(reloadOptions())); - //ComicFlow - connect(comicsView,SIGNAL(selected(unsigned int)),this,SLOT(openComic())); - connect(comicsView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(openComic())); + //Folders filter //connect(clearFoldersFilter,SIGNAL(clicked()),foldersFilter,SLOT(clear())); connect(foldersFilter,SIGNAL(textChanged(QString)),this,SLOT(setFoldersFilter(QString))); @@ -837,7 +878,6 @@ void LibraryWindow::createConnections() //connect(dm,SIGNAL(directoryLoaded(QString)),foldersView,SLOT(expandAll())); //connect(dm,SIGNAL(directoryLoaded(QString)),this,SLOT(updateFoldersView(QString))); //Comicts edition - connect(selectAllComicsAction,SIGNAL(triggered()),comicsView,SLOT(selectAll())); connect(editSelectedComicsAction,SIGNAL(triggered()),this,SLOT(showProperties())); connect(asignOrderActions,SIGNAL(triggered()),this,SLOT(asignNumbers())); @@ -1069,8 +1109,11 @@ void LibraryWindow::reloadCovers() loadCovers(QModelIndex()); QLOG_INFO() << "reloaded covers at row : " << foldersView->currentIndex().row(); QModelIndex mi = dmCV->getIndexFromId(_comicIdEdited); - comicsView->scrollTo(mi,QAbstractItemView::PositionAtCenter); - comicsView->setCurrentIndex(mi); + if(mi.isValid()) + { + comicsView->scrollTo(mi,QAbstractItemView::PositionAtCenter); + comicsView->setCurrentIndex(mi); + } //centerComicFlow(mi); } @@ -1467,6 +1510,48 @@ void LibraryWindow::resetComicRating() dmCV->finishTransaction(); } +void LibraryWindow::switchToComicsView(ComicsView * from, ComicsView * to) +{ + disconnectComicsViewConnections(from); + from->close(); + + comicsView = to; + doComicsViewConnections(); + + comicsView->setToolBar(editInfoToolBar); + + QHBoxLayout * l = new QHBoxLayout(); + l->addWidget(to); + l->setContentsMargins(0,0,0,0); + delete comicsViewStack->layout(); + comicsViewStack->setLayout(l); + + delete from; + + reloadCovers(); +} + +//TODO recover the current comics selection and restore it in the destination +void LibraryWindow::toggleComicsView() +{ + if(comicsViewStatus == Flow){ + QIcon icoViewsButton; + icoViewsButton.addPixmap(QPixmap(":/images/main_toolbar/flow.png"), QIcon::Normal); + toggleComicsViewAction->setIcon(icoViewsButton); + switchToComicsView(classicComicsView, gridComicsView = new GridComicsView()); + comicsViewStatus = Grid; + } + else{ + QIcon icoViewsButton; + icoViewsButton.addPixmap(QPixmap(":/images/main_toolbar/grid.png"), QIcon::Normal); + toggleComicsViewAction->setIcon(icoViewsButton); + switchToComicsView(gridComicsView, classicComicsView = new ClassicComicsView()); + comicsViewStatus = Flow; + } + + settings->setValue(COMICS_VIEW_STATUS, comicsViewStatus); +} + void LibraryWindow::asignNumbers() { QModelIndexList indexList = getSelectedComics(); @@ -1616,6 +1701,7 @@ void LibraryWindow::closeEvent ( QCloseEvent * event ) settings->setValue(MAIN_WINDOW_GEOMETRY, saveGeometry()); comicsView->close(); + QApplication::instance()->processEvents(); event->accept(); QMainWindow::closeEvent(event); diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index d100212c..9e10d130 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -50,6 +50,8 @@ class YACReaderTreeView; class YACReaderMainToolBar; class ComicVineDialog; class ComicsView; +class ClassicComicsView; +class GridComicsView; #include "comic_db.h" using namespace YACReader; @@ -92,6 +94,10 @@ private: //------------- ComicsView * comicsView; + ClassicComicsView * classicComicsView; + GridComicsView * gridComicsView; + QWidget * comicsViewStack; + YACReaderTreeView * foldersView; YACReaderLibraryListWidget * selectedLibrary; TreeModel * dm; @@ -128,6 +134,7 @@ private: QAction * toggleFullScreenAction; QAction * optionsAction; QAction * serverConfigAction; + QAction * toggleComicsViewAction; //QAction * socialAction; //tree actions @@ -191,6 +198,9 @@ private: void doLayout(); void doDialogs(); void doModels(); + void disconnectComicsViewConnections(ComicsView * widget); + void doComicsViewConnections(); + //ACTIONS MANAGEMENT void disableComicsActions(bool disabled); @@ -214,6 +224,14 @@ private: bool removeError; + enum ComicsViewStatus + { + Flow, + Grid + }; + + ComicsViewStatus comicsViewStatus; + protected: virtual void closeEvent ( QCloseEvent * event ); public: @@ -283,6 +301,8 @@ public: void setRemoveError(); void checkRemoveError(); void resetComicRating(); + void switchToComicsView(ComicsView *from, ComicsView *to); + void toggleComicsView(); }; #endif diff --git a/YACReaderLibrary/yacreader_main_toolbar.cpp b/YACReaderLibrary/yacreader_main_toolbar.cpp index 61f6a3da..c4e1dc82 100644 --- a/YACReaderLibrary/yacreader_main_toolbar.cpp +++ b/YACReaderLibrary/yacreader_main_toolbar.cpp @@ -44,11 +44,14 @@ YACReaderMainToolBar::YACReaderMainToolBar(QWidget *parent) : helpButton->setStyleSheet(qToolButtonStyleSheet); helpButton->setIconSize(QSize(14,25)); + toggleComicsViewButton = new QToolButton; + toggleComicsViewButton->setStyleSheet(qToolButtonStyleSheet); + toggleComicsViewButton->setIconSize(QSize(24,24)); + fullscreenButton = new QToolButton(); fullscreenButton->setStyleSheet(qToolButtonStyleSheet); fullscreenButton->setIconSize(QSize(24,24)); - mainLayout->setMargin(0); mainLayout->setSpacing(0); @@ -66,6 +69,8 @@ YACReaderMainToolBar::YACReaderMainToolBar(QWidget *parent) : mainLayout->addStretch(); + mainLayout->addWidget(toggleComicsViewButton); + addWideDivider(); mainLayout->addWidget(fullscreenButton); mainLayout->addSpacing(10); diff --git a/YACReaderLibrary/yacreader_main_toolbar.h b/YACReaderLibrary/yacreader_main_toolbar.h index b45dbf4d..a21fd3f5 100644 --- a/YACReaderLibrary/yacreader_main_toolbar.h +++ b/YACReaderLibrary/yacreader_main_toolbar.h @@ -9,6 +9,7 @@ class QResizeEvent; class QPaintEvent; class QHBoxLayout; +//TODO create methods for adding actions, separators and sctreches dynimically class YACReaderMainToolBar : public QWidget { Q_OBJECT @@ -21,8 +22,10 @@ public: QToolButton * settingsButton; QToolButton * serverButton; QToolButton * helpButton; + QToolButton * toggleComicsViewButton; QToolButton * fullscreenButton; + void setCurrentFolderName(const QString & name); signals: diff --git a/common/yacreader_global.h b/common/yacreader_global.h index 4f3ac6d0..47ca6203 100644 --- a/common/yacreader_global.h +++ b/common/yacreader_global.h @@ -55,6 +55,7 @@ #define MAIN_WINDOW_STATE "MAIN_WINDOW_STATE" #define COMICS_VIEW_HEADERS "COMICS_VIEW_HEADERS" #define COMICS_VIEW_HEADERS_GEOMETRY "COMICS_VIEW_HEADERS_GEOMETRY" +#define COMICS_VIEW_STATUS "COMICS_VIEW_STATUS" #define NUM_DAYS_BETWEEN_VERSION_CHECKS "NUM_DAYS_BETWEEN_VERSION_CHECKS" #define LAST_VERSION_CHECK "LAST_VERSION_CHECK"