From bdef116ad2c96be826b4ea2acd2db18257bfc861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Fri, 25 May 2012 00:07:53 +0200 Subject: [PATCH] loadCovers funcionando.... falta integrar la ordenaci?n sensible al locale... --- YACReaderLibrary/comic_flow.cpp | 8 +- YACReaderLibrary/comic_flow.h | 6 +- YACReaderLibrary/db/data_base_management.cpp | 2 +- YACReaderLibrary/db/data_base_management.h | 4 +- YACReaderLibrary/db/treemodel.cpp | 35 +- YACReaderLibrary/db/treemodel.h | 7 +- YACReaderLibrary/library_window.cpp | 477 +++++++++---------- YACReaderLibrary/library_window.h | 93 ++-- 8 files changed, 322 insertions(+), 310 deletions(-) diff --git a/YACReaderLibrary/comic_flow.cpp b/YACReaderLibrary/comic_flow.cpp index f6e699d0..533ef45b 100644 --- a/YACReaderLibrary/comic_flow.cpp +++ b/YACReaderLibrary/comic_flow.cpp @@ -29,7 +29,7 @@ ComicFlow::~ComicFlow() QString ComicFlow::getImagePath() const { - return imagePath; + return "";//imagePath; } QStringList ComicFlow::getImageFiles() const @@ -83,12 +83,12 @@ static QStringList filterImages(const QStringList& files) return imageFiles; } -void ComicFlow::setImagePath(const QString& path) +void ComicFlow::setImagePaths(const QStringList& paths) { clear(); - imagePath = path; - imageFiles = findFiles(path); + //imagePath = path; + imageFiles = paths; imagesLoaded.clear(); imagesLoaded.fill(false,imageFiles.size()); numImagesLoaded = 0; diff --git a/YACReaderLibrary/comic_flow.h b/YACReaderLibrary/comic_flow.h index ae9c5b9a..fe0910f4 100644 --- a/YACReaderLibrary/comic_flow.h +++ b/YACReaderLibrary/comic_flow.h @@ -20,9 +20,9 @@ public: virtual ~ComicFlow(); //void render(); - QString getImagePath() const; + QString getImagePath() const; //TOTO quitar no se usa QStringList getImageFiles() const; - void setImagePath(const QString& path); + void setImagePaths(const QStringList& paths); //bool eventFilter(QObject *target, QEvent *event); void keyPressEvent(QKeyEvent* event); @@ -31,7 +31,7 @@ private slots: void updateImageData(); private: - QString imagePath; + //QString imagePath; QStringList imageFiles; QVector imagesLoaded; QVector imagesSetted; diff --git a/YACReaderLibrary/db/data_base_management.cpp b/YACReaderLibrary/db/data_base_management.cpp index df3df766..b65a1ac5 100644 --- a/YACReaderLibrary/db/data_base_management.cpp +++ b/YACReaderLibrary/db/data_base_management.cpp @@ -34,7 +34,7 @@ QSqlDatabase DataBaseManagement::loadDatabase(QString path) { //TODO check path QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); - db.setDatabaseName(path); + db.setDatabaseName(path+"/library.ydb"); if (!db.open()) { /*QMessageBox::critical( 0, QObject::tr("Cannot open database"), QObject::tr("Unable to establish a database connection.\n" diff --git a/YACReaderLibrary/db/data_base_management.h b/YACReaderLibrary/db/data_base_management.h index eb874ab0..9f91fc19 100644 --- a/YACReaderLibrary/db/data_base_management.h +++ b/YACReaderLibrary/db/data_base_management.h @@ -15,8 +15,8 @@ private: public: DataBaseManagement(); TreeModel * newTreeModel(QString path); - QSqlDatabase createDatabase(QString name, QString path); - QSqlDatabase loadDatabase(QString path); + static QSqlDatabase createDatabase(QString name, QString path); + static QSqlDatabase loadDatabase(QString path); }; #endif \ No newline at end of file diff --git a/YACReaderLibrary/db/treemodel.cpp b/YACReaderLibrary/db/treemodel.cpp index ae3d73df..c5d0bd14 100644 --- a/YACReaderLibrary/db/treemodel.cpp +++ b/YACReaderLibrary/db/treemodel.cpp @@ -50,10 +50,16 @@ #include "treeitem.h" #include "treemodel.h" +#include "data_base_management.h" + +TreeModel::TreeModel(QObject *parent) + : QAbstractItemModel(parent) +{ +} //! [0] TreeModel::TreeModel( QSqlQuery &sqlquery, QObject *parent) - : QAbstractItemModel(parent) + : QAbstractItemModel(parent),rootItem(0) { //lo más probable es que el nodo raíz no necesite tener información QList rootData; @@ -87,6 +93,9 @@ QVariant TreeModel::data(const QModelIndex &index, int role) const if (!index.isValid()) return QVariant(); + if (role == Qt::DecorationRole) + return QVariant(QIcon(":/images/folder.png")); + if (role != Qt::DisplayRole) return QVariant(); @@ -171,6 +180,25 @@ int TreeModel::rowCount(const QModelIndex &parent) const } //! [8] +void TreeModel::setupModelData(QString path) +{ + if(rootItem == 0) + delete rootItem; //TODO comprobar que se libera bien la memoria + + //inicializar el nodo raíz + QList rootData; + rootData << "root"; //id 0, padre 0, title "root" (el id, y el id del padre van a ir en la clase TreeItem) + rootItem = new TreeItem(rootData); + rootItem->id = 0; + + //cargar la base de datos + _database = DataBaseManagement::loadDatabase(path); + //crear la consulta + QSqlQuery selectQuery("select * from folder order by parentId,name",_database); + + setupModelData(selectQuery,rootItem); +} + void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent) { //64 bits para la primary key, es decir la misma precisión que soporta sqlit 2^64 @@ -189,4 +217,9 @@ void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent) //se añade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones items.insert(item->id,item); } +} + +QSqlDatabase & TreeModel::getDatabase() +{ + return _database; } \ No newline at end of file diff --git a/YACReaderLibrary/db/treemodel.h b/YACReaderLibrary/db/treemodel.h index b3b38dac..61e8a646 100644 --- a/YACReaderLibrary/db/treemodel.h +++ b/YACReaderLibrary/db/treemodel.h @@ -45,6 +45,7 @@ #include #include #include +#include class TreeItem; @@ -54,6 +55,7 @@ class TreeModel : public QAbstractItemModel Q_OBJECT public: + TreeModel(QObject *parent = 0); TreeModel( QSqlQuery &sqlquery, QObject *parent = 0); ~TreeModel(); @@ -66,11 +68,14 @@ public: QModelIndex parent(const QModelIndex &index) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; - + void setupModelData(QString path); + QSqlDatabase & getDatabase(); private: void setupModelData( QSqlQuery &sqlquery, TreeItem *parent); TreeItem *rootItem; //el árbol + + QSqlDatabase _database; }; //! [0] diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 5efbfc70..fb386a1b 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -1,5 +1,6 @@ #include "library_window.h" #include "custom_widgets.h" +#include "treeitem.h" #include #include @@ -19,7 +20,7 @@ // LibraryWindow::LibraryWindow() -:QMainWindow(),skip(0),fullscreen(false),fetching(false) + :QMainWindow(),skip(0),fullscreen(false),fetching(false) { setupUI(); loadLibraries(); @@ -27,24 +28,28 @@ LibraryWindow::LibraryWindow() void LibraryWindow::setupUI() { - createLibraryDialog = new CreateLibraryDialog(this); - updateLibraryDialog = new UpdateLibraryDialog(this); - renameLibraryDialog = new RenameLibraryDialog(this); - propertiesDialog = new PropertiesDialog(this); - exportLibraryDialog = new ExportLibraryDialog(this); - importLibraryDialog = new ImportLibraryDialog(this); - libraryCreator = new LibraryCreator(); packageManager = new PackageManager(); - addLibraryDialog = new AddLibraryDialog(this); + doModels(); + doLayout(); + doDialogs(); + createActions(); + createToolBars(); + createMenus(); + createConnections(); + setWindowTitle(tr("YACReader Library")); +} + +void LibraryWindow::doLayout() +{ QSplitter * sVertical = new QSplitter(Qt::Vertical); QSplitter * sHorizontal = new QSplitter(Qt::Horizontal); //TODO: flowType is a global variable optionsDialog = new OptionsDialog(this); optionsDialog->restoreOptions(); - comicFlow = new ComicFlow(0,flowType); + comicFlow = new ComicFlow(0,flowType); comicFlow->setFocusPolicy(Qt::StrongFocus); comicFlow->setShowMarks(true); @@ -83,19 +88,19 @@ void LibraryWindow::setupUI() treeActions->setIconSize(QSize(16,16)); l->addWidget(treeActions); l->addWidget(foldersView); - + QVBoxLayout * searchLayout = new QVBoxLayout; - + QHBoxLayout * filter = new QHBoxLayout; filter->addWidget(foldersFilter = new QLineEdit()); previousFilter = ""; filter->addWidget(clearFoldersFilter = new QPushButton(tr("Clear"))); - + searchLayout->addWidget(new QLabel(tr("Search folders/comics"),this)); searchLayout->addLayout(filter); searchLayout->addWidget(includeComicsCheckBox = new QCheckBox(tr("Include files (slower)"),this)); - + l->addLayout(searchLayout); l->setSpacing(1); left->setLayout(l); @@ -106,45 +111,35 @@ void LibraryWindow::setupUI() sHorizontal->setStretchFactor(1,1); setCentralWidget(sHorizontal); - //dirmodels - dm = new QFileSystemModel(); - dm->setFilter(QDir::Dirs|QDir::NoDotAndDotDot); - dm->sort(0);//,QDir::Name|QDir::IgnoreCase|QDir::LocaleAware); - dmCV = new QFileSystemModel(); - dmCV->setNameFilters(QStringList() << "*jpg"); - dmCV->setFilter(QDir::Files|QDir::CaseSensitive|QDir::NoDotAndDotDot);//,QDir::Name|QDir::IgnoreCase|QDir::LocaleAware); - dmCV->setNameFilterDisables(true); - - dm->setReadOnly(true); - //dm->setLazyChildCount(false); - dmCV->setReadOnly(true); - - dm->setIconProvider(&fip); - dmCV->setIconProvider(&fip); - //dmCV->sort(1); - - proxyFilter = new YACReaderTreeSearch(); - proxyFilter->setSourceModel(dm); - proxyFilter->setFilterRole(Qt::DisplayRole); - - /*proxySort = new YACReaderSortComics(); - proxySort->setSourceModel(dmCV); - proxySort->setFilterRole(Qt::DisplayRole);*/ - //views - foldersView->header()->hideSection(1); - foldersView->header()->hideSection(2); - foldersView->header()->hideSection(3); - foldersView->header()->adjustSize(); - foldersView->header()->hide(); foldersView->setAnimated(true); foldersView->setContextMenuPolicy(Qt::ActionsContextMenu); foldersView->setContextMenuPolicy(Qt::ActionsContextMenu); comicView->setAlternatingRowColors(true); - comicView->setItemDelegate(new YACReaderComicViewDelegate()); + //comicView->setItemDelegate(new YACReaderComicViewDelegate()); comicView->setContextMenuPolicy(Qt::ActionsContextMenu); + fullScreenToolTip = new QLabel(this); + fullScreenToolTip->setText(tr(" press 'F' to close fullscreen mode ")); + fullScreenToolTip->setPalette(QPalette(QColor(0,0,0))); + fullScreenToolTip->setFont(QFont("courier new",15,234)); + fullScreenToolTip->setAutoFillBackground(true); + fullScreenToolTip->hide(); + fullScreenToolTip->adjustSize(); + + comicFlow->setFocus(Qt::OtherFocusReason); +} + +void LibraryWindow::doDialogs() +{ + createLibraryDialog = new CreateLibraryDialog(this); + updateLibraryDialog = new UpdateLibraryDialog(this); + renameLibraryDialog = new RenameLibraryDialog(this); + propertiesDialog = new PropertiesDialog(this); + exportLibraryDialog = new ExportLibraryDialog(this); + importLibraryDialog = new ImportLibraryDialog(this); + addLibraryDialog = new AddLibraryDialog(this); had = new HelpAboutDialog(this); //TODO load data. QString sufix = QLocale::system().name(); if(QFile(":/files/about_"+sufix+".html").exists()) @@ -156,25 +151,23 @@ void LibraryWindow::setupUI() had->loadHelp(":/files/helpYACReaderLibrary_"+sufix+".html"); else had->loadHelp(":/files/helpYACReaderLibrary.html"); +} - fullScreenToolTip = new QLabel(this); - fullScreenToolTip->setText(tr(" press 'F' to close fullscreen mode ")); - fullScreenToolTip->setPalette(QPalette(QColor(0,0,0))); - fullScreenToolTip->setFont(QFont("courier new",15,234)); - fullScreenToolTip->setAutoFillBackground(true); - fullScreenToolTip->hide(); - fullScreenToolTip->adjustSize(); +void LibraryWindow::doModels() +{ + //dirmodels + dm = new TreeModel(); + dmCV = new QSqlQueryModel(); - createActions(); - createToolBars(); - createMenus(); - createConnections(); + /*proxyFilter = new YACReaderTreeSearch(); + proxyFilter->setSourceModel(dm); + proxyFilter->setFilterRole(Qt::DisplayRole);*/ + + /*proxySort = new YACReaderSortComics(); + proxySort->setSourceModel(dmCV); + proxySort->setFilterRole(Qt::DisplayRole);*/ setFoldersFilter(""); - - comicFlow->setFocus(Qt::OtherFocusReason); - - setWindowTitle(tr("YACReader Library")); } void LibraryWindow::createActions() @@ -219,19 +212,19 @@ void LibraryWindow::createActions() openComicAction->setToolTip(tr("Open current comic on YACReader")); openComicAction->setShortcut(Qt::Key_Return); openComicAction->setIcon(QIcon(":/images/icon.png")); - + setAsReadAction = new QAction(tr("Set as read"),this); setAsReadAction->setToolTip(tr("Set comic as read")); setAsReadAction->setIcon(QIcon(":/images/setRead.png")); - + setAsNonReadAction = new QAction(tr("Set as unread"),this); setAsNonReadAction->setToolTip(tr("Set comic as unread")); setAsNonReadAction->setIcon(QIcon(":/images/setUnread.png")); - + setAllAsReadAction = new QAction(tr("Set all as read"),this); setAllAsReadAction->setToolTip(tr("Set all comics as read")); setAllAsReadAction->setIcon(QIcon(":/images/setAllRead.png")); - + setAllAsNonReadAction = new QAction(tr("Set all as unread"),this); setAllAsNonReadAction->setToolTip(tr("Set all comics as unread")); setAllAsNonReadAction->setIcon(QIcon(":/images/setAllUnread.png")); @@ -296,6 +289,16 @@ void LibraryWindow::createActions() openContainingFolderComicAction->setIcon(QIcon(":/images/open.png")); } +void LibraryWindow::disableActions() +{ +} +void LibraryWindow::enableActions() +{ +} +void LibraryWindow::enableLibraryActions() +{ +} + void LibraryWindow::createToolBars() { libraryToolBar = addToolBar(tr("Library")); @@ -314,7 +317,7 @@ void LibraryWindow::createToolBars() libraryToolBar->addSeparator(); libraryToolBar->addAction(openComicAction); libraryToolBar->addAction(showPropertiesAction); - + QToolButton * tb = new QToolButton(); tb->addAction(setAsReadAction); tb->addAction(setAllAsReadAction); @@ -338,7 +341,7 @@ void LibraryWindow::createToolBars() libraryToolBar->addWidget(new QToolBarStretch()); libraryToolBar->addAction(optionsAction); libraryToolBar->addAction(helpAboutAction); - + libraryToolBar->setMovable(false); @@ -352,8 +355,8 @@ void LibraryWindow::createToolBars() void LibraryWindow::createMenus() { - comicView->addAction(openContainingFolderComicAction); - foldersView->addAction(openContainingFolderAction); + comicView->addAction(openContainingFolderComicAction); + foldersView->addAction(openContainingFolderAction); } void LibraryWindow::createConnections() @@ -375,7 +378,7 @@ void LibraryWindow::createConnections() connect(importLibraryDialog,SIGNAL(rejected()),this,SLOT(deleteCurrentLibrary())); connect(packageManager,SIGNAL(imported()),importLibraryDialog,SLOT(hide())); connect(packageManager,SIGNAL(imported()),this,SLOT(openLastCreated())); - + //create and update dialogs connect(createLibraryDialog,SIGNAL(cancelCreate()),this,SLOT(cancelCreating())); @@ -399,7 +402,7 @@ void LibraryWindow::createConnections() connect(createLibraryAction,SIGNAL(triggered()),this,SLOT(createLibrary())); connect(exportLibraryAction,SIGNAL(triggered()),exportLibraryDialog,SLOT(show())); connect(importLibraryAction,SIGNAL(triggered()),importLibraryDialog,SLOT(show())); - + connect(openLibraryAction,SIGNAL(triggered()),this,SLOT(showAddLibrary())); connect(showPropertiesAction,SIGNAL(triggered()),this,SLOT(showProperties())); connect(setAsReadAction,SIGNAL(triggered()),this,SLOT(setCurrentComicReaded())); @@ -408,7 +411,7 @@ void LibraryWindow::createConnections() connect(setAllAsNonReadAction,SIGNAL(triggered()),this,SLOT(setComicsUnreaded())); connect(showHideMarksAction,SIGNAL(toggled(bool)),comicFlow,SLOT(setShowMarks(bool))); - + connect(updateLibraryAction,SIGNAL(triggered()),this,SLOT(updateLibrary())); connect(renameLibraryAction,SIGNAL(triggered()),this,SLOT(renameLibrary())); @@ -429,13 +432,13 @@ void LibraryWindow::createConnections() connect(clearFoldersFilter,SIGNAL(clicked()),foldersFilter,SLOT(clear())); connect(foldersFilter,SIGNAL(textChanged(QString)),this,SLOT(setFoldersFilter(QString))); connect(includeComicsCheckBox,SIGNAL(stateChanged(int)),this,SLOT(searchInFiles(int))); - + //ContextMenus connect(openContainingFolderComicAction,SIGNAL(triggered()),this,SLOT(openContainingFolderComic())); connect(openContainingFolderAction,SIGNAL(triggered()),this,SLOT(openContainingFolder())); //connect(dm,SIGNAL(directoryLoaded(QString)),foldersView,SLOT(expandAll())); - connect(dm,SIGNAL(directoryLoaded(QString)),this,SLOT(updateFoldersView(QString))); + //connect(dm,SIGNAL(directoryLoaded(QString)),this,SLOT(updateFoldersView(QString))); } void LibraryWindow::loadLibrary(const QString & name) @@ -446,57 +449,10 @@ void LibraryWindow::loadLibrary(const QString & name) QDir d; //TODO change this by static methods (utils class?? with delTree for example) if(d.exists(path)) { - //renew dirmodels (because QFileSystemModel is.......crap ;) ) - QFileSystemModel * oldDm = dm; - QFileSystemModel * oldDmCV = dmCV; - YACReaderTreeSearch * oldTreeSearch = proxyFilter; - //YACReaderSortComics * oldSortProxy = proxySort; - - dm = new QFileSystemModel(); - dm->setFilter(QDir::Dirs|QDir::NoDotAndDotDot); - dm->sort(0);//,QDir::Name|QDir::IgnoreCase|QDir::LocaleAware); - dmCV = new QFileSystemModel(); - dmCV->setNameFilters(QStringList() << "*jpg"); - dmCV->setFilter(QDir::Files|QDir::CaseSensitive|QDir::NoDotAndDotDot);//,QDir::Name|QDir::IgnoreCase|QDir::LocaleAware); - dmCV->setNameFilterDisables(true); - - dm->setReadOnly(true); - //dm->setLazyChildCount(false); - dmCV->setReadOnly(true); - - dm->setIconProvider(&fip); - dmCV->setIconProvider(&fip); - //dmCV->sort(1); - - proxyFilter = new YACReaderTreeSearch(); - proxyFilter->setSourceModel(dm); - proxyFilter->setFilterRole(Qt::DisplayRole); - - /*proxySort = new YACReaderSortComics(); - proxySort->setSourceModel(dmCV); - proxySort->setFilterRole(Qt::DisplayRole);*/ - - connect(dm,SIGNAL(directoryLoaded(QString)),this,SLOT(updateFoldersView(QString))); - - includeComicsCheckBox->setCheckState(Qt::Unchecked); - - if(oldDm !=0) - delete oldDm; - if(oldDmCV !=0) - delete oldDmCV; - if(oldTreeSearch !=0) - delete oldTreeSearch; - /*if(oldSortProxy !=0) - delete oldSortProxy;*/ - //end renew dirmodels - //TODO review this code, some sentences could be not necessary - foldersView->setModel(proxyFilter); - comicView->setModel(dmCV); - _rootIndex = dm->setRootPath(path); - i=0; - - comicView->setRootIndex(dmCV->setRootPath(path)); - foldersView->setRootIndex(proxyFilter->mapFromSource(_rootIndex));//dm->setRootPath(path))); + TreeModel * oldTM = dm; + dm = new TreeModel(); + dm->setupModelData(path); + foldersView->setModel(dm); foldersView->header()->hideSection(1); foldersView->header()->hideSection(2); @@ -504,9 +460,20 @@ void LibraryWindow::loadLibrary(const QString & name) foldersView->header()->adjustSize(); foldersView->header()->hide(); - loadCovers(proxyFilter->mapFromSource(dm->index(path))); + 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); + //foldersView->expandAll(); + /*if(oldTM!=0) + delete oldTM;*/ //TODO corregir error al liberar memoria } else { @@ -566,55 +533,59 @@ void LibraryWindow::loadLibrary(const QString & name) void LibraryWindow::loadCovers(const QModelIndex & mi) { -if(foldersFilter->text()!="") -{ - setFoldersFilter(""); - foldersFilter->clear(); -} - QString path = dm->filePath(proxyFilter->mapToSource(mi)); - delete dmCV; - dmCV = new QFileSystemModel(); - dmCV->setFilter(QDir::Files|QDir::CaseSensitive|QDir::NoDotAndDotDot); - dmCV->setNameFilters(QStringList() << "*jpg"); - dmCV->setNameFilterDisables(false); - dmCV->setReadOnly(true); - - dmCV->setIconProvider(&fip); - //dmCV->sort(1); - //delete proxySort; - - //TODO - /*proxySort = new YACReaderSortComics(); - proxySort->setSourceModel(dmCV); - proxySort->setFilterRole(Qt::DisplayRole);*/ - + if(foldersFilter->text()!="") + { + setFoldersFilter(""); + foldersFilter->clear(); + } + unsigned long long int folderId = 0; + if(mi.isValid()) + { + TreeItem *item = static_cast(mi.internalPointer()); + folderId = item->id; + } + QSqlQuery selectQuery(dm->getDatabase()); //TODO check + selectQuery.prepare("select fileName from comic where comic.parentId = :parentId"); + selectQuery.bindValue(":parentId", folderId); + selectQuery.exec(); + dmCV->setQuery(selectQuery); comicView->setModel(dmCV); - comicView->setRootIndex(dmCV->setRootPath(path)); + //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"; + } - comicFlow->setImagePath(path); + comicFlow->setImagePaths(paths); comicFlow->setFocus(Qt::OtherFocusReason); paths = comicFlow->getImageFiles(); if(paths.size()>0 && !importedCovers) { openComicAction->setEnabled(true); showPropertiesAction->setEnabled(true); - setAsReadAction->setEnabled(true); - setAsNonReadAction->setEnabled(true); - setAllAsReadAction->setEnabled(true); - setAllAsNonReadAction->setEnabled(true); + setAsReadAction->setEnabled(true); + setAsNonReadAction->setEnabled(true); + setAllAsReadAction->setEnabled(true); + setAllAsNonReadAction->setEnabled(true); } else { openComicAction->setEnabled(false); showPropertiesAction->setEnabled(false); - setAsReadAction->setEnabled(false); + setAsReadAction->setEnabled(false); setAsNonReadAction->setEnabled(false); setAllAsReadAction->setEnabled(false); setAllAsNonReadAction->setEnabled(false); } - if(paths.size()>0) - comicView->setCurrentIndex(dmCV->index(paths[0])); - + /*if(paths.size()>0) + comicView->setCurrentIndex(dmCV->index(paths[0]));*/ } void LibraryWindow::centerComicFlow(const QModelIndex & mi) @@ -637,8 +608,8 @@ void LibraryWindow::centerComicFlow(const QModelIndex & mi) void LibraryWindow::updateComicView(int i) { - if((paths.size()>0)&&skip==0) - comicView->setCurrentIndex(dmCV->index(paths[i])); + /*if((paths.size()>0)&&skip==0) + comicView->setCurrentIndex(dmCV->index(paths[i]));*/ skip?(--skip):0; } @@ -648,8 +619,8 @@ void LibraryWindow::openComic() if(!importedCovers) { QModelIndex mi = comicView->currentIndex(); - QString path = QDir::cleanPath(dmCV->filePath(mi)); - + 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); @@ -663,24 +634,18 @@ void LibraryWindow::openComic() void LibraryWindow::setCurrentComicReaded() { comicFlow->markSlide(comicFlow->centerIndex()); - QModelIndex mi = comicView->currentIndex(); - QString path = QDir::cleanPath(dmCV->filePath(mi)); - QFile f(path.remove(path.size()-3,3)+"r"); - f.open(QIODevice::WriteOnly); - f.close(); - comicFlow->updateMarks(); } void LibraryWindow::setComicsReaded() { - QModelIndex mi = proxyFilter->mapToSource(foldersView->currentIndex()); + /*QModelIndex mi = proxyFilter->mapToSource(foldersView->currentIndex()); QString path; - + if(mi.isValid()) - path = QDir::cleanPath(dm->filePath(mi)); + path = QDir::cleanPath(dm->filePath(mi)); else - path = dm->rootPath(); + path = dm->rootPath(); QDir d(path,"*.jpg"); d.setFilter(QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot); @@ -688,13 +653,13 @@ void LibraryWindow::setComicsReaded() int nFiles = list.size(); for(int i=0;imarkSlide(i); - } + QFileInfo info = list.at(i); + QString filePath = info.absoluteFilePath(); + QFile f(filePath.remove(filePath.size()-3,3)+"r"); + f.open(QIODevice::WriteOnly); + f.close(); + comicFlow->markSlide(i); + }*/ comicFlow->updateMarks(); } @@ -702,25 +667,25 @@ void LibraryWindow::setComicsReaded() void LibraryWindow::setCurrentComicUnreaded() { comicFlow->unmarkSlide(comicFlow->centerIndex()); - QModelIndex mi = comicView->currentIndex(); + /*QModelIndex mi = comicView->currentIndex(); QString path = QDir::cleanPath(dmCV->filePath(mi)); QFile f(path.remove(path.size()-3,3)+"r"); f.open(QIODevice::WriteOnly); f.remove(); - f.close(); + f.close();*/ comicFlow->updateMarks(); } void LibraryWindow::setComicsUnreaded() { - QModelIndex mi = proxyFilter->mapToSource(foldersView->currentIndex()); + /*QModelIndex mi = proxyFilter->mapToSource(foldersView->currentIndex()); QString path; - + if(mi.isValid()) - path = QDir::cleanPath(dm->filePath(mi)); + path = QDir::cleanPath(dm->filePath(mi)); else - path = dm->rootPath(); + path = dm->rootPath(); QDir d(path,"*.jpg"); d.setFilter(QDir::Files | QDir::NoSymLinks | QDir::NoDotAndDotDot); @@ -728,15 +693,15 @@ void LibraryWindow::setComicsUnreaded() int nFiles = list.size(); for(int i=0;iunmarkSlide(i); + QFileInfo info = list.at(i); + QString filePath = info.absoluteFilePath(); + QFile f(filePath.remove(filePath.size()-3,3)+"r"); + f.open(QIODevice::WriteOnly); + f.remove(); + f.close(); + comicFlow->unmarkSlide(i); } - + */ comicFlow->updateMarks(); } @@ -802,19 +767,19 @@ void LibraryWindow::loadLibraries() void LibraryWindow::saveLibraries() { QFile f(QCoreApplication::applicationDirPath()+"/libraries.yacr"); - if(!f.open(QIODevice::WriteOnly)) - { - QMessageBox::critical(NULL,tr("Saving libraries file...."),tr("There was a problem saving YACReaderLibrary libraries file. Please, check if you have enough permissions in the YACReader root folder.")); - } - else - { - QTextStream txtS(&f); - for(QMap::iterator i = libraries.begin();i!=libraries.end();i++) + if(!f.open(QIODevice::WriteOnly)) { - txtS << i.key() << "\n"; - txtS << i.value() << "\n"; + QMessageBox::critical(NULL,tr("Saving libraries file...."),tr("There was a problem saving YACReaderLibrary libraries file. Please, check if you have enough permissions in the YACReader root folder.")); + } + else + { + QTextStream txtS(&f); + for(QMap::iterator i = libraries.begin();i!=libraries.end();i++) + { + txtS << i.key() << "\n"; + txtS << i.value() << "\n"; + } } - } } void LibraryWindow::updateLibrary() @@ -839,27 +804,27 @@ void LibraryWindow::deleteLibrary() QString currentLibrary = selectedLibrary->currentText(); if(QMessageBox::question(this,tr("Are you sure?"),tr("Do you want delete ")+currentLibrary+" library?",QMessageBox::Yes,QMessageBox::No)==QMessageBox::Yes) { - deleteCurrentLibrary(); + deleteCurrentLibrary(); } } void LibraryWindow::deleteCurrentLibrary() { - QString path = libraries.value(selectedLibrary->currentText()); - libraries.remove(selectedLibrary->currentText()); - selectedLibrary->removeItem(selectedLibrary->currentIndex()); - selectedLibrary->setCurrentIndex(0); - path = path+"/.yacreaderlibrary"; - QDir d(path); - delTree(d); - d.rmdir(path); - if(libraries.size()==0)//no more libraries avaliable. - { - comicView->setModel(NULL); - foldersView->setModel(NULL); - comicFlow->clear(); - } - saveLibraries(); + QString path = libraries.value(selectedLibrary->currentText()); + libraries.remove(selectedLibrary->currentText()); + selectedLibrary->removeItem(selectedLibrary->currentIndex()); + selectedLibrary->setCurrentIndex(0); + path = path+"/.yacreaderlibrary"; + QDir d(path); + delTree(d); + d.rmdir(path); + if(libraries.size()==0)//no more libraries avaliable. + { + comicView->setModel(NULL); + foldersView->setModel(NULL); + comicFlow->clear(); + } + saveLibraries(); } void LibraryWindow::removeLibrary() @@ -918,8 +883,8 @@ void LibraryWindow::setRootIndex() if(d.exists(path)) { //dmCV->refresh(dmCV->index(path)); - comicView->setRootIndex(dmCV->index(path)); - loadCovers(proxyFilter->mapFromSource(dm->index(path))); + /*comicView->setRootIndex(dmCV->index(path)); + loadCovers(proxyFilter->mapFromSource(dm->index(path)));*/ } else { @@ -962,37 +927,37 @@ void LibraryWindow::toNormal() comicFlow->render(); comicView->show(); left->show(); - fullScreenToolTip->hide(); + fullScreenToolTip->hide(); libraryToolBar->show(); comicFlow->show(); - + showMaximized(); } void LibraryWindow::setFoldersFilter(QString filter) { - if(filter.contains(previousFilter)) - proxyFilter->softReset(); + /*if(filter.contains(previousFilter)) + proxyFilter->softReset(); else - proxyFilter->reset(); + proxyFilter->reset(); previousFilter = filter; if(!filter.isEmpty()) { - proxyFilter->setFilterRegExp(QRegExp(filter,Qt::CaseInsensitive,QRegExp::FixedString)); - foldersView->expandAll(); + proxyFilter->setFilterRegExp(QRegExp(filter,Qt::CaseInsensitive,QRegExp::FixedString)); + foldersView->expandAll(); } else { - proxyFilter->setFilterRegExp(QRegExp()); - foldersView->scrollTo(foldersView->currentIndex(),QAbstractItemView::PositionAtTop); - foldersView->collapseAll(); - } + proxyFilter->setFilterRegExp(QRegExp()); + foldersView->scrollTo(foldersView->currentIndex(),QAbstractItemView::PositionAtTop); + foldersView->collapseAll(); + }*/ } void LibraryWindow::showProperties() { //TODO create a new method for this - QModelIndex mi = comicView->currentIndex(); + /*QModelIndex mi = comicView->currentIndex(); QString path = QDir::cleanPath(dmCV->filePath(mi)).remove("/.yacreaderlibrary"); path.remove(path.size()-4,4); @@ -1004,21 +969,21 @@ void LibraryWindow::showProperties() QFile file(path); propertiesDialog->setSize(file.size()/(1024.0*1024)); file.close(); - propertiesDialog->show(); + propertiesDialog->show();*/ } void LibraryWindow::openContainingFolderComic() { - QModelIndex modelIndex = comicView->currentIndex(); - QString path = QDir::cleanPath(dmCV->fileInfo(modelIndex).absolutePath()).remove("/.yacreaderlibrary"); - QDesktopServices::openUrl(QUrl("file:///"+path, QUrl::TolerantMode)); + QModelIndex modelIndex = comicView->currentIndex(); + //QString path = QDir::cleanPath(dmCV->fileInfo(modelIndex).absolutePath()).remove("/.yacreaderlibrary"); + //QDesktopServices::openUrl(QUrl("file:///"+path, QUrl::TolerantMode)); } void LibraryWindow::openContainingFolder() { - QModelIndex modelIndex = foldersView->currentIndex(); - QString path = QDir::cleanPath(dm->filePath(proxyFilter->mapToSource(modelIndex))).remove("/.yacreaderlibrary"); - QDesktopServices::openUrl(QUrl("file:///"+path, QUrl::TolerantMode)); + QModelIndex modelIndex = foldersView->currentIndex(); + //QString path = QDir::cleanPath(dm->filePath(proxyFilter->mapToSource(modelIndex))).remove("/.yacreaderlibrary"); + //QDesktopServices::openUrl(QUrl("file:///"+path, QUrl::TolerantMode)); } void LibraryWindow::exportLibrary(QString destPath) @@ -1041,20 +1006,20 @@ void LibraryWindow::reloadOptions() void LibraryWindow::updateFoldersView(QString path) { - QModelIndex mi = dm->index(path); - int rowCount = dm->rowCount(mi); - if(!fetching) - { - //fetching = true; - for(int i=0;ifetchMore(dm->index(i,0,mi)); - //int childCount = dm->rowCount(dm->index(i,0,mi)); - //if(childCount>0) - // QMessageBox::critical(NULL,tr("..."),tr("-----")); - fetching = false; - } - } + //QModelIndex mi = dm->index(path); + //int rowCount = dm->rowCount(mi); + //if(!fetching) + //{ + // //fetching = true; + // for(int i=0;ifetchMore(dm->index(i,0,mi)); + // //int childCount = dm->rowCount(dm->index(i,0,mi)); + // //if(childCount>0) + // // QMessageBox::critical(NULL,tr("..."),tr("-----")); + // fetching = false; + // } + //} } @@ -1063,11 +1028,11 @@ void LibraryWindow::searchInFiles(int state) if(state == Qt::Checked) { - dm->setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot); //crash, after update proxy filter + //dm->setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot); //crash, after update proxy filter } else { - dm->setFilter(QDir::Dirs|QDir::NoDotAndDotDot); //crash + //dm->setFilter(QDir::Dirs|QDir::NoDotAndDotDot); //crash } } diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index 9df1373e..087edd6a 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -12,6 +12,7 @@ #include #include #include +#include #include "create_library_dialog.h" #include "add_library_dialog.h" @@ -24,7 +25,7 @@ #include "export_library_dialog.h" #include "import_library_dialog.h" #include "package_manager.h" - +#include "treemodel.h" class LibraryWindow : public QMainWindow { @@ -58,11 +59,11 @@ private: QListView * comicView; QTreeView * foldersView; QComboBox * selectedLibrary; - QFileSystemModel * dm; - QFileSystemModel * dmCV; + TreeModel * dm; + QSqlQueryModel * dmCV; QStringList paths; QMap libraries; - QLabel * fullScreenToolTip; + QLabel * fullScreenToolTip; YACReaderIconProvider fip; bool fetching; @@ -116,46 +117,54 @@ private: void createToolBars(); void createMenus(); void createConnections(); + void doLayout(); + void doDialogs(); + void doModels(); + + void disableActions(); + void enableActions(); + void enableLibraryActions(); + public: LibraryWindow(); -public slots: - void loadLibrary(const QString & path); - void loadCovers(const QModelIndex & mi); - void centerComicFlow(const QModelIndex & mi); - void updateComicView(int i); - void openComic(); - void createLibrary(); - void create(QString source,QString dest, QString name); - void showAddLibrary(); - void openLibrary(QString path, QString name); - void loadLibraries(); - void saveLibraries(); - void openLastCreated(); - void updateLibrary(); - void deleteLibrary(); - void openContainingFolder(); - void openContainingFolderComic(); - void deleteCurrentLibrary(); - void removeLibrary(); - void renameLibrary(); - void rename(QString newName); - void cancelCreating(); - void stopLibraryCreator(); - void setRootIndex(); - void toggleFullScreen(); - void toNormal(); - void toFullScreen(); - void setFoldersFilter(QString filter); - void showProperties(); - void exportLibrary(QString destPath); - void importLibrary(QString clc,QString destPath,QString name); - void reloadOptions(); - void updateFoldersView(QString); - void setCurrentComicReaded(); - void setCurrentComicUnreaded(); - void setComicsReaded(); - void setComicsUnreaded(); - void searchInFiles(int); + public slots: + void loadLibrary(const QString & path); + void loadCovers(const QModelIndex & mi); + void centerComicFlow(const QModelIndex & mi); + void updateComicView(int i); + void openComic(); + void createLibrary(); + void create(QString source,QString dest, QString name); + void showAddLibrary(); + void openLibrary(QString path, QString name); + void loadLibraries(); + void saveLibraries(); + void openLastCreated(); + void updateLibrary(); + void deleteLibrary(); + void openContainingFolder(); + void openContainingFolderComic(); + void deleteCurrentLibrary(); + void removeLibrary(); + void renameLibrary(); + void rename(QString newName); + void cancelCreating(); + void stopLibraryCreator(); + void setRootIndex(); + void toggleFullScreen(); + void toNormal(); + void toFullScreen(); + void setFoldersFilter(QString filter); + void showProperties(); + void exportLibrary(QString destPath); + void importLibrary(QString clc,QString destPath,QString name); + void reloadOptions(); + void updateFoldersView(QString); + void setCurrentComicReaded(); + void setCurrentComicUnreaded(); + void setComicsReaded(); + void setComicsUnreaded(); + void searchInFiles(int); }; #endif