first version with comics views switching (flow<->grid) at run time

This commit is contained in:
Luis Ángel San Martín 2014-07-06 21:02:36 +02:00
parent 664dac3401
commit 3348311ac7
6 changed files with 147 additions and 31 deletions

View File

@ -8,12 +8,13 @@
<file>../images/main_toolbar/server.png</file>
<file>../images/main_toolbar/help.png</file>
<file>../images/main_toolbar/fullscreen.png</file>
<file>../images/libraryIcon.png</file>
<file>../images/setRoot.png</file>
<file>../images/expand.png</file>
<file>../images/colapse.png</file>
<file>../images/newLibraryIcon.png</file>
<file>../images/openLibraryIcon.png</file>
<file>../images/main_toolbar/flow.png</file>
<file>../images/main_toolbar/grid.png</file>
</qresource>
</RCC>

View File

@ -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("<font color='white'> press 'F' to close fullscreen mode </font>"));
@ -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);
@ -289,6 +305,24 @@ void LibraryWindow::doModels()
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()
{
backAction = new QAction(this);
@ -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);
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);

View File

@ -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

View File

@ -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);

View File

@ -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:

View File

@ -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"