Corregido picture flow, ahora centerIndexChanged funciona igual que en la versi?n OpenGL.

Implementada la versi?n RC del borrado de c?mics.
This commit is contained in:
Luis Ángel San Martín 2013-06-14 17:04:13 +02:00
parent 7bacad6884
commit 04e56f1d03
13 changed files with 427 additions and 266 deletions

View File

@ -108,6 +108,7 @@ void GoToFlow::setNumSlides(unsigned int slides)
numImagesLoaded = 0; numImagesLoaded = 0;
connect(flow, SIGNAL(centerIndexChanged(int)), this, SLOT(preload())); connect(flow, SIGNAL(centerIndexChanged(int)), this, SLOT(preload()));
connect(flow, SIGNAL(centerIndexChangedSilent(int)), this, SLOT(preload()));
ready = true; ready = true;
worker->reset(); worker->reset();

View File

@ -75,7 +75,8 @@ HEADERS += comic_flow.h \
no_libraries_widget.h \ no_libraries_widget.h \
import_widget.h \ import_widget.h \
yacreader_local_server.h \ yacreader_local_server.h \
yacreader_main_toolbar.h yacreader_main_toolbar.h \
comics_remover.h
SOURCES += comic_flow.cpp \ SOURCES += comic_flow.cpp \
create_library_dialog.cpp \ create_library_dialog.cpp \
@ -113,7 +114,8 @@ SOURCES += comic_flow.cpp \
no_libraries_widget.cpp \ no_libraries_widget.cpp \
import_widget.cpp \ import_widget.cpp \
yacreader_local_server.cpp \ yacreader_local_server.cpp \
yacreader_main_toolbar.cpp yacreader_main_toolbar.cpp \
comics_remover.cpp
include(./server/server.pri) include(./server/server.pri)

View File

@ -1,220 +1,221 @@
#include "comic_flow.h" #include "comic_flow.h"
#include "qnaturalsorting.h" #include "qnaturalsorting.h"
#include "yacreader_global.h" #include "yacreader_global.h"
#include <algorithm> #include <algorithm>
#include <QMutex> #include <QMutex>
#include <QImageReader> #include <QImageReader>
#include <QTimer> #include <QTimer>
ComicFlow::ComicFlow(QWidget* parent,FlowType flowType) ComicFlow::ComicFlow(QWidget* parent,FlowType flowType)
:YACReaderFlow(parent,flowType) :YACReaderFlow(parent,flowType)
{ {
updateTimer = new QTimer; updateTimer = new QTimer;
connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateImageData())); connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateImageData()));
worker = new ImageLoader; worker = new ImageLoader;
connect(this, SIGNAL(centerIndexChanged(int)), this, SLOT(preload())); connect(this, SIGNAL(centerIndexChanged(int)), this, SLOT(preload()));
connect(this, SIGNAL(centerIndexChangedSilent(int)), this, SLOT(preload()));
setReflectionEffect(PlainReflection);
} setReflectionEffect(PlainReflection);
}
ComicFlow::~ComicFlow()
{ ComicFlow::~ComicFlow()
delete worker; {
delete updateTimer; delete worker;
} delete updateTimer;
}
void ComicFlow::setImagePaths(const QStringList& paths)
{ void ComicFlow::setImagePaths(const QStringList& paths)
clear(); {
clear();
//imagePath = path;
imageFiles = paths; //imagePath = path;
imagesLoaded.clear(); imageFiles = paths;
imagesLoaded.fill(false,imageFiles.size()); imagesLoaded.clear();
numImagesLoaded = 0; imagesLoaded.fill(false,imageFiles.size());
numImagesLoaded = 0;
imagesSetted.clear();
imagesSetted.fill(false,imageFiles.size()); imagesSetted.clear();
imagesSetted.fill(false,imageFiles.size());
// populate with empty images
QImage img; //TODO remove // populate with empty images
QString s; QImage img; //TODO remove
for(int i = 0; i < (int)imageFiles.size(); i++) QString s;
{ for(int i = 0; i < (int)imageFiles.size(); i++)
addSlide(img); {
s = imageFiles.at(i); addSlide(img);
s.remove(s.size()-4,4); s = imageFiles.at(i);
if(QFileInfo(s+".r").exists()) s.remove(s.size()-4,4);
markSlide(i); if(QFileInfo(s+".r").exists())
} markSlide(i);
}
setCenterIndex(0);
worker->reset(); setCenterIndex(0);
preload(); worker->reset();
} preload();
}
void ComicFlow::preload()
{ void ComicFlow::preload()
if(numImagesLoaded < imagesLoaded.size()) {
updateTimer->start(30); //TODO comprobar rendimiento, originalmente era 70 if(numImagesLoaded < imagesLoaded.size())
} updateTimer->start(30); //TODO comprobar rendimiento, originalmente era 70
}
void ComicFlow::updateImageData()
{ void ComicFlow::updateImageData()
// can't do anything, wait for the next possibility {
if(worker->busy()) // can't do anything, wait for the next possibility
return; if(worker->busy())
return;
// set image of last one
int idx = worker->index(); // set image of last one
if( idx >= 0 && !worker->result().isNull()) int idx = worker->index();
{ if( idx >= 0 && !worker->result().isNull())
if(!imagesSetted[idx]) {
{ if(!imagesSetted[idx])
setSlide(idx, worker->result()); {
imagesSetted[idx] = true; setSlide(idx, worker->result());
numImagesLoaded++; imagesSetted[idx] = true;
imagesLoaded[idx]=true; numImagesLoaded++;
} imagesLoaded[idx]=true;
} }
}
// try to load only few images on the left and right side
// i.e. all visible ones plus some extra // try to load only few images on the left and right side
#define COUNT 8 // i.e. all visible ones plus some extra
int indexes[2*COUNT+1]; #define COUNT 8
int center = centerIndex(); int indexes[2*COUNT+1];
indexes[0] = center; int center = centerIndex();
for(int j = 0; j < COUNT; j++) indexes[0] = center;
{ for(int j = 0; j < COUNT; j++)
indexes[j*2+1] = center+j+1; {
indexes[j*2+2] = center-j-1; indexes[j*2+1] = center+j+1;
} indexes[j*2+2] = center-j-1;
for(int c = 0; c < 2*COUNT+1; c++) }
{ for(int c = 0; c < 2*COUNT+1; c++)
int i = indexes[c]; {
if((i >= 0) && (i < slideCount())) int i = indexes[c];
if(!imagesLoaded[i])//slide(i).isNull()) if((i >= 0) && (i < slideCount()))
{ if(!imagesLoaded[i])//slide(i).isNull())
// schedule thumbnail generation {
QString fname = imageFiles[i]; // schedule thumbnail generation
QString fname = imageFiles[i];
worker->generate(i, fname, slideSize());
return; worker->generate(i, fname, slideSize());
} return;
} }
}
// no need to generate anything? stop polling...
updateTimer->stop(); // no need to generate anything? stop polling...
} updateTimer->stop();
}
void ComicFlow::keyPressEvent(QKeyEvent* event)
{ void ComicFlow::keyPressEvent(QKeyEvent* event)
PictureFlow::keyPressEvent(event); {
} PictureFlow::keyPressEvent(event);
}
void ComicFlow::wheelEvent(QWheelEvent * event)
{ void ComicFlow::wheelEvent(QWheelEvent * event)
if(event->delta()<0) {
showNext(); if(event->delta()<0)
else showNext();
showPrevious(); else
event->accept(); showPrevious();
} event->accept();
}
void ComicFlow::removeSlide(int cover)
void ComicFlow::removeSlide(int cover)
{ {
imageFiles.removeAt(cover); imageFiles.removeAt(cover);
if(imagesLoaded[cover]) if(imagesLoaded[cover])
numImagesLoaded--; numImagesLoaded--;
imagesLoaded.remove(cover); imagesLoaded.remove(cover);
imagesSetted.remove(cover); imagesSetted.remove(cover);
YACReaderFlow::removeSlide(cover); YACReaderFlow::removeSlide(cover);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
//ImageLoader //ImageLoader
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
static QImage loadImage(const QString& fileName) static QImage loadImage(const QString& fileName)
{ {
QImage image; QImage image;
bool result = image.load(fileName); bool result = image.load(fileName);
if(!result) if(!result)
return QImage(); return QImage();
return image; return image;
} }
ImageLoader::ImageLoader(): ImageLoader::ImageLoader():
QThread(), restart(false), working(false), idx(-1) QThread(), restart(false), working(false), idx(-1)
{ {
} }
ImageLoader::~ImageLoader() ImageLoader::~ImageLoader()
{ {
mutex.lock(); mutex.lock();
condition.wakeOne(); condition.wakeOne();
mutex.unlock(); mutex.unlock();
wait(); wait();
} }
bool ImageLoader::busy() const bool ImageLoader::busy() const
{ {
return isRunning() ? working : false; return isRunning() ? working : false;
} }
void ImageLoader::generate(int index, const QString& fileName, QSize size) void ImageLoader::generate(int index, const QString& fileName, QSize size)
{ {
mutex.lock(); mutex.lock();
this->idx = index; this->idx = index;
this->fileName = fileName; this->fileName = fileName;
this->size = size; this->size = size;
this->img = QImage(); this->img = QImage();
mutex.unlock(); mutex.unlock();
if (!isRunning()) if (!isRunning())
start(); start();
else else
{ {
// already running, wake up whenever ready // already running, wake up whenever ready
restart = true; restart = true;
condition.wakeOne(); condition.wakeOne();
} }
} }
void ImageLoader::run() void ImageLoader::run()
{ {
for(;;) for(;;)
{ {
// copy necessary data // copy necessary data
mutex.lock(); mutex.lock();
this->working = true; this->working = true;
QString fileName = this->fileName; QString fileName = this->fileName;
mutex.unlock(); mutex.unlock();
QImage image = loadImage(fileName); QImage image = loadImage(fileName);
// let everyone knows it is ready // let everyone knows it is ready
mutex.lock(); mutex.lock();
this->working = false; this->working = false;
this->img = image; this->img = image;
mutex.unlock(); mutex.unlock();
// put to sleep // put to sleep
mutex.lock(); mutex.lock();
if (!this->restart) if (!this->restart)
condition.wait(&mutex); condition.wait(&mutex);
restart = false; restart = false;
mutex.unlock(); mutex.unlock();
} }
} }
QImage ImageLoader::result() QImage ImageLoader::result()
{ {
return img; return img;
} }

View File

@ -0,0 +1,29 @@
#include "comics_remover.h"
#include <QFile>
ComicsRemover::ComicsRemover(QModelIndexList & il, QList<QString> & ps, QObject *parent) :
QThread(parent),indexList(il), paths(ps)
{
}
void ComicsRemover::run()
{
QString currentComicPath;
QListIterator<QModelIndex> i(indexList);
QListIterator<QString> i2(paths);
i.toBack();
i2.toBack();
while (i.hasPrevious() && i2.hasPrevious())
{
QModelIndex mi = i.previous();
currentComicPath = i2.previous();
if(QFile::remove(currentComicPath))
{
emit remove(mi.row());
}
}
emit finished();
}

View File

@ -0,0 +1,27 @@
#ifndef COMICS_REMOVER_H
#define COMICS_REMOVER_H
#include <QThread>
#include <QModelIndex>
#include <comic_db.h>
class ComicsRemover : public QThread
{
Q_OBJECT
public:
explicit ComicsRemover(QModelIndexList & indexList, QList<QString> & paths, QObject *parent = 0);
signals:
void remove(int);
void finished();
private:
void run();
private:
QModelIndexList indexList;
QList<QString> paths;
};
#endif // COMICS_REMOVER_H

View File

@ -435,6 +435,33 @@ QModelIndex TableModel::getIndexFromId(quint64 id)
return index(i,0); return index(i,0);
} }
void TableModel::startTransaction(int first, int last)
{
beginRemoveRows(QModelIndex(),first,last);
dbTransaction = DataBaseManagement::loadDatabase(_databasePath);
dbTransaction.transaction();
}
void TableModel::finishTransaction()
{
dbTransaction.commit();
dbTransaction.close();
QSqlDatabase::removeDatabase(_databasePath);
endRemoveRows();
}
void TableModel::removeInTransaction(int row)
{
ComicDB c = DBHelper::loadComic(_data.at(row)->data(ID).toULongLong(),dbTransaction);
DBHelper::removeFromDB(&c,dbTransaction);
removeRow(row);
delete _data.at(row);
_data.removeAt(row);
}
void TableModel::remove(ComicDB * comic, int row) void TableModel::remove(ComicDB * comic, int row)
{ {
beginRemoveRows(QModelIndex(),row,row); beginRemoveRows(QModelIndex(),row,row);
@ -449,4 +476,14 @@ void TableModel::remove(ComicDB * comic, int row)
db.close(); db.close();
QSqlDatabase::removeDatabase(_databasePath); QSqlDatabase::removeDatabase(_databasePath);
endRemoveRows(); endRemoveRows();
}
ComicDB TableModel::getComic(int row)
{
return getComic(index(row,0));
}
void TableModel::remove(int row)
{
removeInTransaction(row);
} }

View File

@ -21,6 +21,7 @@ public:
TableModel( QSqlQuery &sqlquery, QObject *parent = 0); TableModel( QSqlQuery &sqlquery, QObject *parent = 0);
~TableModel(); ~TableModel();
QVariant data(const QModelIndex &index, int role) const; QVariant data(const QModelIndex &index, int role) const;
Qt::ItemFlags flags(const QModelIndex &index) const; Qt::ItemFlags flags(const QModelIndex &index) const;
QVariant headerData(int section, Qt::Orientation orientation, QVariant headerData(int section, Qt::Orientation orientation,
@ -31,11 +32,12 @@ public:
int rowCount(const QModelIndex &parent = QModelIndex()) const; int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const;
void setupModelData(unsigned long long int parentFolder,const QString & databasePath); void setupModelData(unsigned long long int parentFolder,const QString & databasePath);
//Métodos de conveniencia //Métodos de conveniencia
QStringList getPaths(const QString & _source); QStringList getPaths(const QString & _source);
QString getComicPath(QModelIndex mi); QString getComicPath(QModelIndex mi);
ComicDB getComic(const QModelIndex & mi); //--> para la edición ComicDB getComic(const QModelIndex & mi); //--> para la edición
ComicDB getComic(int row);
QVector<bool> getReadList(); QVector<bool> getReadList();
QVector<bool> setAllComicsRead(bool read); QVector<bool> setAllComicsRead(bool read);
QList<ComicDB> getComics(QList<QModelIndex> list); //--> recupera la información común a los comics seleccionados QList<ComicDB> getComics(QList<QModelIndex> list); //--> recupera la información común a los comics seleccionados
@ -46,6 +48,13 @@ public:
QVector<bool> setComicsRead(QList<QModelIndex> list,bool read); QVector<bool> setComicsRead(QList<QModelIndex> list,bool read);
qint64 asignNumbers(QList<QModelIndex> list,int startingNumber); qint64 asignNumbers(QList<QModelIndex> list,int startingNumber);
void remove(ComicDB * comic, int row); void remove(ComicDB * comic, int row);
void removeInTransaction(int row);
public slots:
void remove(int row);
void startTransaction(int first, int last);
void finishTransaction();
private: private:
void setupModelData( QSqlQuery &sqlquery); void setupModelData( QSqlQuery &sqlquery);
ComicDB _getComic(const QModelIndex & mi); ComicDB _getComic(const QModelIndex & mi);
@ -53,6 +62,8 @@ private:
QString _databasePath; QString _databasePath;
QSqlDatabase dbTransaction;
signals: signals:
void beforeReset(); void beforeReset();
void reset(); void reset();

View File

@ -50,11 +50,13 @@
#include "yacreader_titled_toolbar.h" #include "yacreader_titled_toolbar.h"
#include "yacreader_main_toolbar.h" #include "yacreader_main_toolbar.h"
#include "comics_remover.h"
//#include "yacreader_social_dialog.h" //#include "yacreader_social_dialog.h"
// //
LibraryWindow::LibraryWindow() LibraryWindow::LibraryWindow()
:QMainWindow(),skip(0),fullscreen(false),fetching(false) :QMainWindow(),fullscreen(false),fetching(false)
{ {
setupUI(); setupUI();
loadLibraries(); loadLibraries();
@ -882,7 +884,18 @@ void LibraryWindow::loadCovers(const QModelIndex & mi)
comicFlow->setMarks(dmCV->getReadList()); comicFlow->setMarks(dmCV->getReadList());
comicFlow->setFocus(Qt::OtherFocusReason); comicFlow->setFocus(Qt::OtherFocusReason);
if(paths.size()>0 && !importedCovers) checkEmptyFolder(&paths);
if(paths.size()>0)
comicView->setCurrentIndex(dmCV->index(0,0));
}
void LibraryWindow::checkEmptyFolder(QStringList * paths)
{
if(paths == 0)
paths = &dmCV->getPaths(currentPath());
if(paths->size()>0 && !importedCovers)
{ {
openComicAction->setEnabled(true); openComicAction->setEnabled(true);
showPropertiesAction->setEnabled(true); showPropertiesAction->setEnabled(true);
@ -896,6 +909,8 @@ void LibraryWindow::loadCovers(const QModelIndex & mi)
showHideMarksAction->setEnabled(true); showHideMarksAction->setEnabled(true);
toggleFullScreenAction->setEnabled(true); toggleFullScreenAction->setEnabled(true);
deleteComicsAction->setEnabled(true);
} }
else else
{ {
@ -911,9 +926,9 @@ void LibraryWindow::loadCovers(const QModelIndex & mi)
showHideMarksAction->setEnabled(false); showHideMarksAction->setEnabled(false);
toggleFullScreenAction->setEnabled(false); toggleFullScreenAction->setEnabled(false);
deleteComicsAction->setEnabled(false);
} }
if(paths.size()>0)
comicView->setCurrentIndex(dmCV->index(0,0));
} }
void LibraryWindow::reloadCovers() void LibraryWindow::reloadCovers()
@ -929,35 +944,15 @@ void LibraryWindow::reloadCovers()
void LibraryWindow::centerComicFlow(const QModelIndex & mi) void LibraryWindow::centerComicFlow(const QModelIndex & mi)
{ {
//TODO corregir el comportamiento de ComicFlowWidgetSW para evitar skip
if(typeid(comicFlow) == typeid(ComicFlowWidgetSW))
{
int distance = comicFlow->centerIndex()-mi.row();
if(abs(distance)>10)
{
if(distance<0)
comicFlow->setCenterIndex(comicFlow->centerIndex()+(-distance)-10);
else
comicFlow->setCenterIndex(comicFlow->centerIndex()-distance+10);
skip = 10;
}
else
skip = abs(comicFlow->centerIndex()-mi.row());
}
comicFlow->showSlide(mi.row()); comicFlow->showSlide(mi.row());
comicFlow->setFocus(Qt::OtherFocusReason); comicFlow->setFocus(Qt::OtherFocusReason);
} }
void LibraryWindow::updateComicView(int i) void LibraryWindow::updateComicView(int i)
{ {
if(skip==0)
{
QModelIndex mi = dmCV->index(i,2); QModelIndex mi = dmCV->index(i,2);
comicView->setCurrentIndex(mi); comicView->setCurrentIndex(mi);
comicView->scrollTo(mi,QAbstractItemView::EnsureVisible); comicView->scrollTo(mi,QAbstractItemView::EnsureVisible);
}
skip?(--skip):0;
} }
void LibraryWindow::openComic() void LibraryWindow::openComic()
@ -1450,22 +1445,36 @@ QModelIndexList LibraryWindow::getSelectedComics()
void LibraryWindow::deleteComics() void LibraryWindow::deleteComics()
{ {
//TODO move this to another thread int ret = QMessageBox::question(this,tr("Delete comics"),tr("All the selected comics will be deleted from your disk. Are you sure?"),QMessageBox::Yes,QMessageBox::No);
QModelIndexList indexList = getSelectedComics();
QString currentComicPath; if(ret == QMessageBox::Yes)
QListIterator<QModelIndex> i(indexList);
i.toBack();
while (i.hasPrevious())
{ {
QModelIndex mi = i.previous();
ComicDB comic = dmCV->getComic(mi); QModelIndexList indexList = getSelectedComics();
currentComicPath = currentPath() + comic.path;
if(QFile::remove(currentComicPath)) QList<ComicDB> comics = dmCV->getComics(indexList);
QList<QString> paths;
QString libraryPath = currentPath();
foreach(ComicDB comic, comics)
{ {
dmCV->remove(&comic,mi.row()); paths.append(libraryPath + comic.path);
comicFlow->remove(mi.row());
} }
ComicsRemover * remover = new ComicsRemover(indexList,paths);
//comicView->showDeleteProgress();
dmCV->startTransaction(indexList.first().row(),indexList.last().row());
connect(remover, SIGNAL(remove(int)), dmCV, SLOT(remove(int)));
connect(remover, SIGNAL(remove(int)), comicFlow, SLOT(remove(int)));
connect(remover, SIGNAL(finished()), dmCV, SLOT(finishTransaction()));
//connect(remover, SIGNAL(finished()), comicView, SLOT(hideDeleteProgress()));
connect(remover, SIGNAL(finished()),this,SLOT(checkEmptyFolder()));
connect(remover, SIGNAL(finished()), remover, SLOT(deleteLater()));
//connect(remover, SIGNAL(finished()), thread, SLOT(deleteLater()));
remover->start();
} }
} }

View File

@ -102,7 +102,6 @@ private:
bool fetching; bool fetching;
int i; int i;
unsigned int skip;
QAction * openComicAction; QAction * openComicAction;
QAction * showPropertiesAction; QAction * showPropertiesAction;
@ -190,6 +189,7 @@ public:
public slots: public slots:
void loadLibrary(const QString & path); void loadLibrary(const QString & path);
void loadCovers(const QModelIndex & mi); void loadCovers(const QModelIndex & mi);
void checkEmptyFolder(QStringList * paths = 0);
void reloadCovers(); void reloadCovers();
void centerComicFlow(const QModelIndex & mi); void centerComicFlow(const QModelIndex & mi);
void updateComicView(int i); void updateComicView(int i);

View File

@ -1092,8 +1092,7 @@ void PictureFlow::removeSlide(int index)
{ {
d->state->slideImages.remove(index); d->state->slideImages.remove(index);
d->state->marks.remove(index); d->state->marks.remove(index);
//TODO remove loaded flags setCenterIndex(index);
triggerRender();
} }
} }
@ -1164,14 +1163,24 @@ void PictureFlow::showPrevious()
int center = d->state->centerIndex; int center = d->state->centerIndex;
if(step > 0) if(step > 0)
{
d->animator->start(center); d->animator->start(center);
emit centerIndexChanged(center);
}
if(step == 0) if(step == 0)
if(center > 0) if(center > 0)
{
d->animator->start(center - 1); d->animator->start(center - 1);
emit centerIndexChanged(center - 1);
}
if(step < 0) if(step < 0)
{
d->animator->target = qMax(0, center - 2); d->animator->target = qMax(0, center - 2);
emit centerIndexChanged(qMax(0, center - 2));
}
} }
void PictureFlow::showNext() void PictureFlow::showNext()
@ -1179,15 +1188,27 @@ void PictureFlow::showNext()
int step = d->animator->step; int step = d->animator->step;
int center = d->state->centerIndex; int center = d->state->centerIndex;
if(step < 0) if(step < 0)
{
d->animator->start(center); d->animator->start(center);
emit centerIndexChanged(center);
}
if(step == 0) if(step == 0)
if(center < slideCount()-1) if(center < slideCount()-1)
{
d->animator->start(center + 1); d->animator->start(center + 1);
emit centerIndexChanged(center + 1);
}
if(step > 0) if(step > 0)
{
d->animator->target = qMin(center + 2, slideCount()-1); d->animator->target = qMin(center + 2, slideCount()-1);
emit centerIndexChanged(qMin(center + 2, slideCount()-1));
}
} }
void PictureFlow::showSlide(unsigned int index) void PictureFlow::showSlide(unsigned int index)
@ -1214,20 +1235,20 @@ void PictureFlow::keyPressEvent(QKeyEvent* event)
{ {
if(event->key() == Qt::Key_Left) if(event->key() == Qt::Key_Left)
{ {
if(event->modifiers() == Qt::ControlModifier) /*if(event->modifiers() == Qt::ControlModifier)
showSlide(centerIndex()-10); showSlide(centerIndex()-10);
else else*/
showPrevious(); showPrevious();
event->accept(); event->accept();
return; return;
} }
if(event->key() == Qt::Key_Right) if(event->key() == Qt::Key_Right)
{ {
if(event->modifiers() == Qt::ControlModifier) /*if(event->modifiers() == Qt::ControlModifier)
showSlide(centerIndex()+10); showSlide(centerIndex()+10);
else else*/
showNext(); showNext();
event->accept(); event->accept();
return; return;
} }
@ -1278,8 +1299,9 @@ void PictureFlow::updateAnimation() //bucle principal
frameSkiped = true; frameSkiped = true;
} }
if(d->state->centerIndex != old_center) if(d->state->centerIndex != old_center)
emit centerIndexChanged(d->state->centerIndex); emit centerIndexChangedSilent(d->state->centerIndex);
if(d->animator->animating == true) if(d->animator->animating == true)
{ {
int difference = 10-now.elapsed(); int difference = 10-now.elapsed();

View File

@ -204,6 +204,7 @@ public slots:
signals: signals:
void centerIndexChanged(int index); void centerIndexChanged(int index);
void centerIndexChangedSilent(int index);
public: public:
void paintEvent(QPaintEvent *event); void paintEvent(QPaintEvent *event);

View File

@ -2,11 +2,12 @@
#include <QHeaderView> #include <QHeaderView>
#include <QResizeEvent> #include <QResizeEvent>
#include <QPropertyAnimation>
#include "yacreader_deleting_progress.h" #include "yacreader_deleting_progress.h"
YACReaderTableView::YACReaderTableView(QWidget *parent) : YACReaderTableView::YACReaderTableView(QWidget *parent) :
QTableView(parent) QTableView(parent),showDelete(false)
{ {
setAlternatingRowColors(true); setAlternatingRowColors(true);
verticalHeader()->setAlternatingRowColors(true); verticalHeader()->setAlternatingRowColors(true);
@ -36,24 +37,41 @@ YACReaderTableView::YACReaderTableView(QWidget *parent) :
setSelectionBehavior(QAbstractItemView::SelectRows); setSelectionBehavior(QAbstractItemView::SelectRows);
setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionMode(QAbstractItemView::ExtendedSelection);
deletingProgress = new YACReaderDeletingProgress(/*this*/); /*deletingProgress = new YACReaderDeletingProgress(this);
showDeletingProgressAnimation = new QPropertyAnimation(deletingProgress,"pos");
showDeletingProgressAnimation->setDuration(150);*/
} }
void YACReaderTableView::showDeleteProgress() void YACReaderTableView::showDeleteProgress()
{ {
/*showDelete = true;
showDeletingProgressAnimation->setStartValue(deletingProgress->pos());
showDeletingProgressAnimation->setEndValue(QPoint((width()-deletingProgress->width())/2 ,1));
showDeletingProgressAnimation->start();*/
} }
void YACReaderTableView::hideDeleteProgress() void YACReaderTableView::hideDeleteProgress()
{ {
/*showDelete = false;
if(showDeletingProgressAnimation->state()==QPropertyAnimation::Running)
showDeletingProgressAnimation->stop();
showDeletingProgressAnimation->setStartValue(deletingProgress->pos());
showDeletingProgressAnimation->setEndValue(QPoint((width()-deletingProgress->width())/2 ,-deletingProgress->height()));
showDeletingProgressAnimation->start();*/
} }
void YACReaderTableView::resizeEvent(QResizeEvent * event) void YACReaderTableView::resizeEvent(QResizeEvent * event)
{ {
event->size(); /*event->size();
deletingProgress->move((event->size().width()-deletingProgress->width())/2 ,1); if(showDelete)
deletingProgress->move((event->size().width()-deletingProgress->width())/2 ,1);
else
deletingProgress->move((event->size().width()-deletingProgress->width())/2 ,-deletingProgress->height());*/
QTableView::resizeEvent(event); QTableView::resizeEvent(event);
} }

View File

@ -5,6 +5,7 @@
class YACReaderDeletingProgress; class YACReaderDeletingProgress;
class QResizeEvent; class QResizeEvent;
class QPropertyAnimation;
class YACReaderTableView : public QTableView class YACReaderTableView : public QTableView
{ {
@ -20,6 +21,8 @@ public slots:
private: private:
YACReaderDeletingProgress * deletingProgress; YACReaderDeletingProgress * deletingProgress;
bool showDelete;
QPropertyAnimation * showDeletingProgressAnimation;
void resizeEvent(QResizeEvent * event); void resizeEvent(QResizeEvent * event);
}; };