navegaci?n entre tree,table y flow completada

tambi?n se pueden volver a abrir los c?mcis
This commit is contained in:
Luis Ángel San Martín 2012-05-25 23:56:33 +02:00
parent bdef116ad2
commit faebba5a2e
7 changed files with 102 additions and 160 deletions

View File

@ -31,7 +31,9 @@ HEADERS += comic_flow.h \
bundle_creator.h \ bundle_creator.h \
./db/data_base_management.h \ ./db/data_base_management.h \
./db/treeitem.h \ ./db/treeitem.h \
./db/treemodel.h ./db/treemodel.h \
./db/tablemodel.h \
./db/tableitem.h
SOURCES += comic_flow.cpp \ SOURCES += comic_flow.cpp \
create_library_dialog.cpp \ create_library_dialog.cpp \
library_creator.cpp \ library_creator.cpp \
@ -50,7 +52,9 @@ SOURCES += comic_flow.cpp \
bundle_creator.cpp \ bundle_creator.cpp \
./db/data_base_management.cpp \ ./db/data_base_management.cpp \
./db/treeitem.cpp \ ./db/treeitem.cpp \
./db/treemodel.cpp ./db/treemodel.cpp \
./db/tablemodel.cpp \
./db/tableitem.cpp
include(./server/server.pri) include(./server/server.pri)

View File

@ -5,10 +5,6 @@
#include <QImageReader> #include <QImageReader>
#include <algorithm> #include <algorithm>
ComicFlow::ComicFlow(QWidget* parent,FlowType flowType) ComicFlow::ComicFlow(QWidget* parent,FlowType flowType)
:YACReaderFlow(parent,flowType) :YACReaderFlow(parent,flowType)
{ {
@ -27,62 +23,6 @@ ComicFlow::~ComicFlow()
delete updateTimer; delete updateTimer;
} }
QString ComicFlow::getImagePath() const
{
return "";//imagePath;
}
QStringList ComicFlow::getImageFiles() const
{
return imageFiles;
}
// get list of all files in a directory (will be filtered later)
// this is usually very fast so no need to put it in a separate thread
static QStringList findFiles(const QString& path = QString())
{
//list<QString> files;
QStringList files;
QDir dir = QDir::current();
if(!path.isEmpty())
dir = QDir(path);
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
dir.setNameFilters(QStringList() << "*.jpg");
//dir.setSorting(QDir::Name|QDir::IgnoreCase|QDir::LocaleAware);
QFileInfoList list = dir.entryInfoList();
qSort(list.begin(),list.end(),naturalSortLessThanCIFileInfo);
for (int i = 0; i < list.size(); ++i)
{
QFileInfo fileInfo = list.at(i);
files.append(dir.absoluteFilePath(fileInfo.fileName()));
}
//std::sort(files.begin(), files.end(), naturalSortLessThanCI);
return files;
}
// take only files which are readable (as images)
// also seems to be fast as it does a quick check only
static QStringList filterImages(const QStringList& files)
{
QStringList imageFiles;
QImageReader reader;
foreach(QString fname, files)
{
reader.setFileName(fname);
if(reader.canRead())
imageFiles += fname;
}
return imageFiles;
}
void ComicFlow::setImagePaths(const QStringList& paths) void ComicFlow::setImagePaths(const QStringList& paths)
{ {
clear(); clear();
@ -135,7 +75,6 @@ void ComicFlow::updateImageData()
imagesSetted[idx] = true; imagesSetted[idx] = true;
numImagesLoaded++; numImagesLoaded++;
} }
} }
// try to load only few images on the left and right side // try to load only few images on the left and right side

View File

@ -19,9 +19,6 @@ public:
ComicFlow(QWidget* parent = 0,FlowType flowType = CoverFlowLike); ComicFlow(QWidget* parent = 0,FlowType flowType = CoverFlowLike);
virtual ~ComicFlow(); virtual ~ComicFlow();
//void render();
QString getImagePath() const; //TOTO quitar no se usa
QStringList getImageFiles() const;
void setImagePaths(const QStringList& paths); void setImagePaths(const QStringList& paths);
//bool eventFilter(QObject *target, QEvent *event); //bool eventFilter(QObject *target, QEvent *event);
void keyPressEvent(QKeyEvent* event); void keyPressEvent(QKeyEvent* event);

View File

@ -55,6 +55,8 @@
TreeModel::TreeModel(QObject *parent) TreeModel::TreeModel(QObject *parent)
: QAbstractItemModel(parent) : QAbstractItemModel(parent)
{ {
connect(this,SIGNAL(beforeReset()),this,SIGNAL(modelAboutToBeReset()));
connect(this,SIGNAL(reset()),this,SIGNAL(modelReset()));
} }
//! [0] //! [0]
@ -182,6 +184,7 @@ int TreeModel::rowCount(const QModelIndex &parent) const
void TreeModel::setupModelData(QString path) void TreeModel::setupModelData(QString path)
{ {
emit(beforeReset());
if(rootItem == 0) if(rootItem == 0)
delete rootItem; //TODO comprobar que se libera bien la memoria delete rootItem; //TODO comprobar que se libera bien la memoria
@ -197,6 +200,7 @@ void TreeModel::setupModelData(QString path)
QSqlQuery selectQuery("select * from folder order by parentId,name",_database); QSqlQuery selectQuery("select * from folder order by parentId,name",_database);
setupModelData(selectQuery,rootItem); setupModelData(selectQuery,rootItem);
emit(reset());
} }
void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent) void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent)

View File

@ -76,6 +76,9 @@ private:
TreeItem *rootItem; //el árbol TreeItem *rootItem; //el árbol
QSqlDatabase _database; QSqlDatabase _database;
signals:
void beforeReset();
void reset();
}; };
//! [0] //! [0]

View File

@ -68,7 +68,7 @@ void LibraryWindow::doLayout()
comicFlow->setSlideSize(slideSizeW); comicFlow->setSlideSize(slideSizeW);
setFocusProxy(comicFlow); setFocusProxy(comicFlow);
comicView = new QListView; comicView = new QTableView;
foldersView = new QTreeView; foldersView = new QTreeView;
@ -115,10 +115,21 @@ void LibraryWindow::doLayout()
foldersView->setAnimated(true); foldersView->setAnimated(true);
foldersView->setContextMenuPolicy(Qt::ActionsContextMenu); foldersView->setContextMenuPolicy(Qt::ActionsContextMenu);
foldersView->setContextMenuPolicy(Qt::ActionsContextMenu); foldersView->setContextMenuPolicy(Qt::ActionsContextMenu);
foldersView->header()->hide();
comicView->setAlternatingRowColors(true); comicView->setAlternatingRowColors(true);
comicView->setStyleSheet("alternate-background-color: #e7e7d7;background-color: white;");
//comicView->setItemDelegate(new YACReaderComicViewDelegate()); //comicView->setItemDelegate(new YACReaderComicViewDelegate());
comicView->setContextMenuPolicy(Qt::ActionsContextMenu); comicView->setContextMenuPolicy(Qt::ActionsContextMenu);
//comicView->verticalHeader()->hide();
comicView->setShowGrid(false);
comicView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
comicView->horizontalHeader()->setStretchLastSection(true);
comicView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
comicView->setSelectionBehavior(QAbstractItemView::SelectRows);
comicView->setSelectionMode(QAbstractItemView::ExtendedSelection);
fullScreenToolTip = new QLabel(this); fullScreenToolTip = new QLabel(this);
fullScreenToolTip->setText(tr("<font color='white'> press 'F' to close fullscreen mode </font>")); fullScreenToolTip->setText(tr("<font color='white'> press 'F' to close fullscreen mode </font>"));
@ -157,7 +168,7 @@ void LibraryWindow::doModels()
{ {
//dirmodels //dirmodels
dm = new TreeModel(); dm = new TreeModel();
dmCV = new QSqlQueryModel(); dmCV = new TableModel();
/*proxyFilter = new YACReaderTreeSearch(); /*proxyFilter = new YACReaderTreeSearch();
@ -289,14 +300,54 @@ void LibraryWindow::createActions()
openContainingFolderComicAction->setIcon(QIcon(":/images/open.png")); openContainingFolderComicAction->setIcon(QIcon(":/images/open.png"));
} }
//TODO unificar con disableActions
void LibraryWindow::disableAllActions()
{
updateLibraryAction->setEnabled(false);
renameLibraryAction->setEnabled(false);
deleteLibraryAction->setEnabled(false);
removeLibraryAction->setEnabled(false);
foldersFilter->setEnabled(false);
clearFoldersFilter->setEnabled(false);
setAsReadAction->setEnabled(false);
setAsNonReadAction->setEnabled(false);
setAllAsReadAction->setEnabled(false);
setAllAsNonReadAction->setEnabled(false);
}
//librería de sólo lectura
void LibraryWindow::disableActions() void LibraryWindow::disableActions()
{ {
updateLibraryAction->setEnabled(false);
openComicAction->setEnabled(false);
showPropertiesAction->setEnabled(false);
openContainingFolderAction->setEnabled(false);
openContainingFolderComicAction->setEnabled(false);
setAsReadAction->setEnabled(false);
setAsNonReadAction->setEnabled(false);
setAllAsReadAction->setEnabled(false);
setAllAsNonReadAction->setEnabled(false);
} }
//librería abierta
void LibraryWindow::enableActions() void LibraryWindow::enableActions()
{ {
updateLibraryAction->setEnabled(true);
openComicAction->setEnabled(true);
showPropertiesAction->setEnabled(true);
openContainingFolderAction->setEnabled(true);
openContainingFolderComicAction->setEnabled(true);
setAsReadAction->setEnabled(true);
setAsNonReadAction->setEnabled(true);
setAllAsReadAction->setEnabled(true);
setAllAsNonReadAction->setEnabled(true);
} }
void LibraryWindow::enableLibraryActions() void LibraryWindow::enableLibraryActions()
{ {
renameLibraryAction->setEnabled(true);
deleteLibraryAction->setEnabled(true);
removeLibraryAction->setEnabled(true);
foldersFilter->setEnabled(true);
clearFoldersFilter->setEnabled(true);
} }
void LibraryWindow::createToolBars() void LibraryWindow::createToolBars()
@ -449,31 +500,12 @@ void LibraryWindow::loadLibrary(const QString & name)
QDir d; //TODO change this by static methods (utils class?? with delTree for example) QDir d; //TODO change this by static methods (utils class?? with delTree for example)
if(d.exists(path)) if(d.exists(path))
{ {
TreeModel * oldTM = dm;
dm = new TreeModel();
dm->setupModelData(path); dm->setupModelData(path);
foldersView->setModel(dm); foldersView->setModel(dm);
foldersView->header()->hideSection(1);
foldersView->header()->hideSection(2);
foldersView->header()->hideSection(3);
foldersView->header()->adjustSize();
foldersView->header()->hide();
loadCovers(QModelIndex()); loadCovers(QModelIndex());
/*proxyFilter = new YACReaderTreeSearch();
proxyFilter->setSourceModel(dm);
proxyFilter->setFilterRole(Qt::DisplayRole);*/
//connect(dm,SIGNAL(directoryLoaded(QString)),this,SLOT(updateFoldersView(QString)));
includeComicsCheckBox->setCheckState(Qt::Unchecked); includeComicsCheckBox->setCheckState(Qt::Unchecked);
//foldersView->expandAll();
/*if(oldTM!=0)
delete oldTM;*/ //TODO corregir error al liberar memoria
} }
else else
{ {
@ -483,51 +515,22 @@ void LibraryWindow::loadLibrary(const QString & name)
} }
d.setCurrent(libraries.value(name)); d.setCurrent(libraries.value(name));
d.setFilter(QDir::AllDirs | QDir::Files | QDir::Hidden | QDir::NoSymLinks | QDir::NoDotAndDotDot); d.setFilter(QDir::AllDirs | QDir::Files | QDir::Hidden | QDir::NoSymLinks | QDir::NoDotAndDotDot);
if(d.count()<=1) if(d.count()<=1) //librería de sólo lectura
{ {
//QMessageBox::critical(NULL,QString::number(d.count()),QString::number(d.count())); //QMessageBox::critical(NULL,QString::number(d.count()),QString::number(d.count()));
updateLibraryAction->setEnabled(false); disableActions();
openComicAction->setEnabled(false);
showPropertiesAction->setEnabled(false);
openContainingFolderAction->setEnabled(false);
openContainingFolderComicAction->setEnabled(false);
setAsReadAction->setEnabled(false);
setAsNonReadAction->setEnabled(false);
setAllAsReadAction->setEnabled(false);
setAllAsNonReadAction->setEnabled(false);
importedCovers = true; importedCovers = true;
} }
else else //librería normal abierta
{ {
updateLibraryAction->setEnabled(true); enableActions();
openComicAction->setEnabled(true);
showPropertiesAction->setEnabled(true);
openContainingFolderAction->setEnabled(true);
openContainingFolderComicAction->setEnabled(true);
setAsReadAction->setEnabled(true);
setAsNonReadAction->setEnabled(true);
setAllAsReadAction->setEnabled(true);
setAllAsNonReadAction->setEnabled(true);
importedCovers = false; importedCovers = false;
} }
renameLibraryAction->setEnabled(true); enableLibraryActions();
deleteLibraryAction->setEnabled(true);
removeLibraryAction->setEnabled(true);
foldersFilter->setEnabled(true);
clearFoldersFilter->setEnabled(true);
} }
else else
{ {
updateLibraryAction->setEnabled(false); disableAllActions();
renameLibraryAction->setEnabled(false);
deleteLibraryAction->setEnabled(false);
removeLibraryAction->setEnabled(false);
foldersFilter->setEnabled(false);
clearFoldersFilter->setEnabled(false);
setAsReadAction->setEnabled(false);
setAsNonReadAction->setEnabled(false);
setAllAsReadAction->setEnabled(false);
setAllAsNonReadAction->setEnabled(false);
} }
} }
@ -544,28 +547,18 @@ void LibraryWindow::loadCovers(const QModelIndex & mi)
TreeItem *item = static_cast<TreeItem*>(mi.internalPointer()); TreeItem *item = static_cast<TreeItem*>(mi.internalPointer());
folderId = item->id; folderId = item->id;
} }
QSqlQuery selectQuery(dm->getDatabase()); //TODO check dmCV->setupModelData(folderId,dm->getDatabase());
selectQuery.prepare("select fileName from comic where comic.parentId = :parentId");
selectQuery.bindValue(":parentId", folderId);
selectQuery.exec();
dmCV->setQuery(selectQuery);
comicView->setModel(dmCV); comicView->setModel(dmCV);
//TODO automatizar (valorar si se deja al modelo)
comicView->horizontalHeader()->hideSection(0);
comicView->horizontalHeader()->hideSection(1);
comicView->horizontalHeader()->hideSection(3);
//TODO //TODO
QSqlQuery selectQueryPaths(dm->getDatabase()); //TODO check
selectQueryPaths.prepare("select ci.hash from comic c inner join comic_info ci on (c.comicInfoId = ci.id) where c.parentId = :parentId");
selectQueryPaths.bindValue(":parentId", folderId);
selectQueryPaths.exec();
QStringList paths;
QString currentLibrary = selectedLibrary->currentText();
QString path = libraries.value(currentLibrary);
path = path + "/.yacreaderlibrary/covers/";
while (selectQueryPaths.next()) {
paths << path+selectQueryPaths.value(0).toString()+".jpg";
}
QStringList paths = dmCV->getPaths(currentPath());
comicFlow->setImagePaths(paths); comicFlow->setImagePaths(paths);
comicFlow->setFocus(Qt::OtherFocusReason); comicFlow->setFocus(Qt::OtherFocusReason);
paths = comicFlow->getImageFiles();
if(paths.size()>0 && !importedCovers) if(paths.size()>0 && !importedCovers)
{ {
openComicAction->setEnabled(true); openComicAction->setEnabled(true);
@ -584,8 +577,8 @@ void LibraryWindow::loadCovers(const QModelIndex & mi)
setAllAsReadAction->setEnabled(false); setAllAsReadAction->setEnabled(false);
setAllAsNonReadAction->setEnabled(false); setAllAsNonReadAction->setEnabled(false);
} }
/*if(paths.size()>0) if(paths.size()>0)
comicView->setCurrentIndex(dmCV->index(paths[0]));*/ comicView->setCurrentIndex(dmCV->index(0,0));
} }
void LibraryWindow::centerComicFlow(const QModelIndex & mi) void LibraryWindow::centerComicFlow(const QModelIndex & mi)
@ -608,26 +601,24 @@ void LibraryWindow::centerComicFlow(const QModelIndex & mi)
void LibraryWindow::updateComicView(int i) void LibraryWindow::updateComicView(int i)
{ {
/*if((paths.size()>0)&&skip==0) if(skip==0)
comicView->setCurrentIndex(dmCV->index(paths[i]));*/ {
QModelIndex mi = dmCV->index(i,2);
comicView->setCurrentIndex(mi);
comicView->scrollTo(mi,QAbstractItemView::EnsureVisible);
}
skip?(--skip):0; skip?(--skip):0;
} }
void LibraryWindow::openComic() void LibraryWindow::openComic()
{ {
//int index = comicFlow->centerIndex();
if(!importedCovers) if(!importedCovers)
{ {
QModelIndex mi = comicView->currentIndex(); QString path = currentPath() + dmCV->getComicPath(comicView->currentIndex());
QString path;// = QDir::cleanPath(dmCV->filePath(mi));
path.remove("/.yacreaderlibrary");
path.remove(path.size()-4,4);
QProcess::startDetached(QDir::cleanPath(QCoreApplication::applicationDirPath())+"/YACReader",QStringList() << path); QProcess::startDetached(QDir::cleanPath(QCoreApplication::applicationDirPath())+"/YACReader",QStringList() << path);
//Comic is readed //Comic is readed
setCurrentComicReaded(); setCurrentComicReaded();
} }
} }
@ -1004,6 +995,7 @@ void LibraryWindow::reloadOptions()
comicFlow->setFlowType(flowType); comicFlow->setFlowType(flowType);
} }
//TODO esto sobra
void LibraryWindow::updateFoldersView(QString path) void LibraryWindow::updateFoldersView(QString path)
{ {
//QModelIndex mi = dm->index(path); //QModelIndex mi = dm->index(path);
@ -1036,5 +1028,7 @@ void LibraryWindow::searchInFiles(int state)
} }
} }
QString LibraryWindow::currentPath()
{
return libraries.value(selectedLibrary->currentText());
}

View File

@ -2,7 +2,7 @@
#define __LIBRARYWINDOW_H #define __LIBRARYWINDOW_H
#include <QMainWindow> #include <QMainWindow>
#include <QListView> #include <QTableView>
#include <QTreeView> #include <QTreeView>
#include <QModelIndex> #include <QModelIndex>
#include <QDirModel> #include <QDirModel>
@ -11,8 +11,6 @@
#include <QComboBox> #include <QComboBox>
#include <QThread> #include <QThread>
#include <QFileInfoList> #include <QFileInfoList>
#include <QFileSystemModel>
#include <QSqlQueryModel>
#include "create_library_dialog.h" #include "create_library_dialog.h"
#include "add_library_dialog.h" #include "add_library_dialog.h"
@ -26,6 +24,7 @@
#include "import_library_dialog.h" #include "import_library_dialog.h"
#include "package_manager.h" #include "package_manager.h"
#include "treemodel.h" #include "treemodel.h"
#include "tablemodel.h"
class LibraryWindow : public QMainWindow class LibraryWindow : public QMainWindow
{ {
@ -56,12 +55,12 @@ private:
QPushButton * clearFoldersFilter; QPushButton * clearFoldersFilter;
QCheckBox * includeComicsCheckBox; QCheckBox * includeComicsCheckBox;
//------------- //-------------
QListView * comicView; QTableView * comicView;
QTreeView * foldersView; QTreeView * foldersView;
QComboBox * selectedLibrary; QComboBox * selectedLibrary;
TreeModel * dm; TreeModel * dm;
QSqlQueryModel * dmCV; TableModel * dmCV;
QStringList paths; //QStringList paths;
QMap<QString,QString> libraries; QMap<QString,QString> libraries;
QLabel * fullScreenToolTip; QLabel * fullScreenToolTip;
YACReaderIconProvider fip; YACReaderIconProvider fip;
@ -121,10 +120,12 @@ private:
void doDialogs(); void doDialogs();
void doModels(); void doModels();
void disableAllActions();
void disableActions(); void disableActions();
void enableActions(); void enableActions();
void enableLibraryActions(); void enableLibraryActions();
QString currentPath();
public: public:
LibraryWindow(); LibraryWindow();
public slots: public slots: