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"