mirror of
https://github.com/YACReader/yacreader
synced 2025-07-27 09:24:57 -04:00
models renaming
This commit is contained in:
47
YACReaderLibrary/db/comic_item.cpp
Normal file
47
YACReaderLibrary/db/comic_item.cpp
Normal file
@ -0,0 +1,47 @@
|
||||
|
||||
#include <QStringList>
|
||||
|
||||
#include "comic_item.h"
|
||||
|
||||
//! [0]
|
||||
ComicItem::ComicItem(const QList<QVariant> &data)
|
||||
|
||||
{
|
||||
itemData = data;
|
||||
}
|
||||
//! [0]
|
||||
|
||||
//! [1]
|
||||
ComicItem::~ComicItem()
|
||||
{
|
||||
|
||||
}
|
||||
//! [1]
|
||||
|
||||
|
||||
//! [5]
|
||||
int ComicItem::columnCount() const
|
||||
{
|
||||
return itemData.count();
|
||||
}
|
||||
//! [5]
|
||||
|
||||
//! [6]
|
||||
QVariant ComicItem::data(int column) const
|
||||
{
|
||||
return itemData.value(column);
|
||||
}
|
||||
//! [6]
|
||||
|
||||
void ComicItem::setData(int column,const QVariant & value)
|
||||
{
|
||||
itemData[column] = value;
|
||||
}
|
||||
|
||||
//! [8]
|
||||
int ComicItem::row() const
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
//! [8]
|
@ -5,12 +5,12 @@
|
||||
#include <QVariant>
|
||||
|
||||
//! [0]
|
||||
class TableItem : public QObject
|
||||
class ComicItem : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
TableItem(const QList<QVariant> &data);
|
||||
~TableItem();
|
||||
ComicItem(const QList<QVariant> &data);
|
||||
~ComicItem();
|
||||
int columnCount() const;
|
||||
QVariant data(int column) const;
|
||||
void setData(int column,const QVariant & value);
|
||||
@ -24,4 +24,4 @@ private:
|
||||
};
|
||||
//! [0]
|
||||
|
||||
#endif
|
||||
#endif
|
@ -3,8 +3,8 @@
|
||||
#include <QtDebug>
|
||||
#include <limits>
|
||||
|
||||
#include "tableitem.h"
|
||||
#include "tablemodel.h"
|
||||
#include "comic_item.h"
|
||||
#include "comic_model.h"
|
||||
#include "data_base_management.h"
|
||||
#include "qnaturalsorting.h"
|
||||
#include "comic_db.h"
|
||||
@ -14,7 +14,7 @@
|
||||
#include "QsLog.h"
|
||||
|
||||
|
||||
TableModel::TableModel(QObject *parent)
|
||||
ComicModel::ComicModel(QObject *parent)
|
||||
: QAbstractItemModel(parent)
|
||||
{
|
||||
connect(this,SIGNAL(beforeReset()),this,SIGNAL(modelAboutToBeReset()));
|
||||
@ -22,7 +22,7 @@ TableModel::TableModel(QObject *parent)
|
||||
}
|
||||
|
||||
//! [0]
|
||||
TableModel::TableModel( QSqlQuery &sqlquery, QObject *parent)
|
||||
ComicModel::ComicModel( QSqlQuery &sqlquery, QObject *parent)
|
||||
: QAbstractItemModel(parent)
|
||||
{
|
||||
setupModelData(sqlquery);
|
||||
@ -30,14 +30,14 @@ TableModel::TableModel( QSqlQuery &sqlquery, QObject *parent)
|
||||
//! [0]
|
||||
|
||||
//! [1]
|
||||
TableModel::~TableModel()
|
||||
ComicModel::~ComicModel()
|
||||
{
|
||||
qDeleteAll(_data);
|
||||
}
|
||||
//! [1]
|
||||
|
||||
//! [2]
|
||||
int TableModel::columnCount(const QModelIndex &parent) const
|
||||
int ComicModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
Q_UNUSED(parent)
|
||||
if(_data.isEmpty())
|
||||
@ -46,7 +46,7 @@ int TableModel::columnCount(const QModelIndex &parent) const
|
||||
}
|
||||
//! [2]
|
||||
|
||||
QHash<int, QByteArray> TableModel::roleNames() const {
|
||||
QHash<int, QByteArray> ComicModel::roleNames() const {
|
||||
QHash<int, QByteArray> roles;
|
||||
|
||||
roles[NumberRole] = "number";
|
||||
@ -68,7 +68,7 @@ QHash<int, QByteArray> TableModel::roleNames() const {
|
||||
}
|
||||
|
||||
//! [3]
|
||||
QVariant TableModel::data(const QModelIndex &index, int role) const
|
||||
QVariant ComicModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
return QVariant();
|
||||
@ -88,13 +88,13 @@ QVariant TableModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
switch(index.column())//TODO obtener esto de la query
|
||||
{
|
||||
case TableModel::Number:
|
||||
case ComicModel::Number:
|
||||
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||||
case TableModel::NumPages:
|
||||
case ComicModel::NumPages:
|
||||
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||||
case TableModel::Hash:
|
||||
case ComicModel::Hash:
|
||||
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||||
case TableModel::CurrentPage:
|
||||
case ComicModel::CurrentPage:
|
||||
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||||
default:
|
||||
return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
|
||||
@ -105,7 +105,7 @@ QVariant TableModel::data(const QModelIndex &index, int role) const
|
||||
//TODO check here if any view is asking for TableModel::Roles
|
||||
//these roles will be used from QML/GridView
|
||||
|
||||
TableItem *item = static_cast<TableItem*>(index.internalPointer());
|
||||
ComicItem *item = static_cast<ComicItem*>(index.internalPointer());
|
||||
|
||||
if (role == NumberRole)
|
||||
return item->data(Number);
|
||||
@ -122,19 +122,19 @@ QVariant TableModel::data(const QModelIndex &index, int role) const
|
||||
else if (role == ReadColumnRole)
|
||||
return item->data(ReadColumn).toBool();
|
||||
else if (role == HasBeenOpenedRole)
|
||||
return item->data(TableModel::HasBeenOpened);
|
||||
return item->data(ComicModel::HasBeenOpened);
|
||||
|
||||
if (role != Qt::DisplayRole)
|
||||
return QVariant();
|
||||
|
||||
if(index.column() == TableModel::Hash)
|
||||
if(index.column() == ComicModel::Hash)
|
||||
return QString::number(item->data(index.column()).toString().right(item->data(index.column()).toString().length()-40).toInt()/1024.0/1024.0,'f',2)+"Mb";
|
||||
if(index.column() == TableModel::ReadColumn)
|
||||
return (item->data(TableModel::CurrentPage).toInt()==item->data(TableModel::NumPages).toInt() || item->data(TableModel::ReadColumn).toBool())?QVariant(tr("yes")):QVariant(tr("no"));
|
||||
if(index.column() == TableModel::CurrentPage)
|
||||
return item->data(TableModel::HasBeenOpened).toBool()?item->data(index.column()):QVariant("-");
|
||||
if(index.column() == ComicModel::ReadColumn)
|
||||
return (item->data(ComicModel::CurrentPage).toInt()==item->data(ComicModel::NumPages).toInt() || item->data(ComicModel::ReadColumn).toBool())?QVariant(tr("yes")):QVariant(tr("no"));
|
||||
if(index.column() == ComicModel::CurrentPage)
|
||||
return item->data(ComicModel::HasBeenOpened).toBool()?item->data(index.column()):QVariant("-");
|
||||
|
||||
if (index.column() == TableModel::Rating)
|
||||
if (index.column() == ComicModel::Rating)
|
||||
return QVariant();
|
||||
|
||||
return item->data(index.column());
|
||||
@ -142,39 +142,39 @@ QVariant TableModel::data(const QModelIndex &index, int role) const
|
||||
//! [3]
|
||||
|
||||
//! [4]
|
||||
Qt::ItemFlags TableModel::flags(const QModelIndex &index) const
|
||||
Qt::ItemFlags ComicModel::flags(const QModelIndex &index) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
return 0;
|
||||
if(index.column() == TableModel::Rating)
|
||||
if(index.column() == ComicModel::Rating)
|
||||
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
|
||||
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
|
||||
}
|
||||
//! [4]
|
||||
|
||||
//! [5]
|
||||
QVariant TableModel::headerData(int section, Qt::Orientation orientation,
|
||||
QVariant ComicModel::headerData(int section, Qt::Orientation orientation,
|
||||
int role) const
|
||||
{
|
||||
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
|
||||
{
|
||||
switch(section)//TODO obtener esto de la query
|
||||
{
|
||||
case TableModel::Number:
|
||||
case ComicModel::Number:
|
||||
return QVariant(QString("#"));
|
||||
case TableModel::Title:
|
||||
case ComicModel::Title:
|
||||
return QVariant(QString(tr("Title")));
|
||||
case TableModel::FileName:
|
||||
case ComicModel::FileName:
|
||||
return QVariant(QString(tr("File Name")));
|
||||
case TableModel::NumPages:
|
||||
case ComicModel::NumPages:
|
||||
return QVariant(QString(tr("Pages")));
|
||||
case TableModel::Hash:
|
||||
case ComicModel::Hash:
|
||||
return QVariant(QString(tr("Size")));
|
||||
case TableModel::ReadColumn:
|
||||
case ComicModel::ReadColumn:
|
||||
return QVariant(QString(tr("Read")));
|
||||
case TableModel::CurrentPage:
|
||||
case ComicModel::CurrentPage:
|
||||
return QVariant(QString(tr("Current Page")));
|
||||
case TableModel::Rating:
|
||||
case ComicModel::Rating:
|
||||
return QVariant(QString(tr("Rating")));
|
||||
}
|
||||
}
|
||||
@ -183,13 +183,13 @@ QVariant TableModel::headerData(int section, Qt::Orientation orientation,
|
||||
{
|
||||
switch(section)//TODO obtener esto de la query
|
||||
{
|
||||
case TableModel::Number:
|
||||
case ComicModel::Number:
|
||||
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||||
case TableModel::NumPages:
|
||||
case ComicModel::NumPages:
|
||||
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||||
case TableModel::Hash:
|
||||
case ComicModel::Hash:
|
||||
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||||
case TableModel::CurrentPage:
|
||||
case ComicModel::CurrentPage:
|
||||
return QVariant(Qt::AlignRight | Qt::AlignVCenter);
|
||||
default:
|
||||
return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
|
||||
@ -199,7 +199,7 @@ QVariant TableModel::headerData(int section, Qt::Orientation orientation,
|
||||
|
||||
if(orientation == Qt::Vertical && role == Qt::DecorationRole)
|
||||
{
|
||||
QString fileName = _data.value(section)->data(TableModel::FileName).toString();
|
||||
QString fileName = _data.value(section)->data(ComicModel::FileName).toString();
|
||||
QFileInfo fi(fileName);
|
||||
QString ext = fi.suffix();
|
||||
|
||||
@ -229,7 +229,7 @@ QVariant TableModel::headerData(int section, Qt::Orientation orientation,
|
||||
//! [5]
|
||||
|
||||
//! [6]
|
||||
QModelIndex TableModel::index(int row, int column, const QModelIndex &parent)
|
||||
QModelIndex ComicModel::index(int row, int column, const QModelIndex &parent)
|
||||
const
|
||||
{
|
||||
if (!hasIndex(row, column, parent))
|
||||
@ -240,7 +240,7 @@ QModelIndex TableModel::index(int row, int column, const QModelIndex &parent)
|
||||
//! [6]
|
||||
|
||||
//! [7]
|
||||
QModelIndex TableModel::parent(const QModelIndex &index) const
|
||||
QModelIndex ComicModel::parent(const QModelIndex &index) const
|
||||
{
|
||||
Q_UNUSED(index)
|
||||
return QModelIndex();
|
||||
@ -248,7 +248,7 @@ QModelIndex TableModel::parent(const QModelIndex &index) const
|
||||
//! [7]
|
||||
|
||||
//! [8]
|
||||
int TableModel::rowCount(const QModelIndex &parent) const
|
||||
int ComicModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
if (parent.column() > 0)
|
||||
return 0;
|
||||
@ -260,21 +260,21 @@ int TableModel::rowCount(const QModelIndex &parent) const
|
||||
}
|
||||
//! [8]
|
||||
|
||||
QStringList TableModel::getPaths(const QString & _source)
|
||||
QStringList ComicModel::getPaths(const QString & _source)
|
||||
{
|
||||
QStringList paths;
|
||||
QString source = _source + "/.yacreaderlibrary/covers/";
|
||||
QList<TableItem *>::ConstIterator itr;
|
||||
QList<ComicItem *>::ConstIterator itr;
|
||||
for(itr = _data.constBegin();itr != _data.constEnd();itr++)
|
||||
{
|
||||
QString hash = (*itr)->data(TableModel::Hash).toString();
|
||||
QString hash = (*itr)->data(ComicModel::Hash).toString();
|
||||
paths << source+ hash +".jpg";
|
||||
}
|
||||
|
||||
return paths;
|
||||
}
|
||||
|
||||
void TableModel::setupModelData(unsigned long long int folderId,const QString & databasePath)
|
||||
void ComicModel::setupModelData(unsigned long long int folderId,const QString & databasePath)
|
||||
{
|
||||
//QFile f(QCoreApplication::applicationDirPath()+"/performance.txt");
|
||||
//f.open(QIODevice::Append);
|
||||
@ -309,7 +309,7 @@ void TableModel::setupModelData(unsigned long long int folderId,const QString &
|
||||
emit isEmpty();
|
||||
}
|
||||
|
||||
void TableModel::setupModelData(const SearchModifiers modifier, const QString &filter, const QString &databasePath)
|
||||
void ComicModel::setupModelData(const SearchModifiers modifier, const QString &filter, const QString &databasePath)
|
||||
{
|
||||
//QFile f(QCoreApplication::applicationDirPath()+"/performance.txt");
|
||||
//f.open(QIODevice::Append);
|
||||
@ -376,16 +376,16 @@ void TableModel::setupModelData(const SearchModifiers modifier, const QString &f
|
||||
emit searchNumResults(_data.length());
|
||||
}
|
||||
|
||||
QString TableModel::getComicPath(QModelIndex mi)
|
||||
QString ComicModel::getComicPath(QModelIndex mi)
|
||||
{
|
||||
if(mi.isValid())
|
||||
return _data.at(mi.row())->data(TableModel::Path).toString();
|
||||
return _data.at(mi.row())->data(ComicModel::Path).toString();
|
||||
return "";
|
||||
}
|
||||
|
||||
void TableModel::setupModelData(QSqlQuery &sqlquery)
|
||||
void ComicModel::setupModelData(QSqlQuery &sqlquery)
|
||||
{
|
||||
TableItem * currentItem;
|
||||
ComicItem * currentItem;
|
||||
while (sqlquery.next())
|
||||
{
|
||||
QList<QVariant> data;
|
||||
@ -393,26 +393,26 @@ void TableModel::setupModelData(QSqlQuery &sqlquery)
|
||||
for(int i=0;i<record.count();i++)
|
||||
data << record.value(i);
|
||||
|
||||
currentItem = new TableItem(data);
|
||||
currentItem = new ComicItem(data);
|
||||
bool lessThan = false;
|
||||
if(_data.isEmpty())
|
||||
_data.append(currentItem);
|
||||
else
|
||||
{
|
||||
TableItem * last = _data.back();
|
||||
QString nameLast = last->data(TableModel::FileName).toString();
|
||||
QString nameCurrent = currentItem->data(TableModel::FileName).toString();
|
||||
ComicItem * last = _data.back();
|
||||
QString nameLast = last->data(ComicModel::FileName).toString();
|
||||
QString nameCurrent = currentItem->data(ComicModel::FileName).toString();
|
||||
int numberLast,numberCurrent;
|
||||
int max = (std::numeric_limits<int>::max)();
|
||||
numberLast = numberCurrent = max;
|
||||
|
||||
if(!last->data(TableModel::Number).isNull())
|
||||
numberLast = last->data(TableModel::Number).toInt();
|
||||
if(!last->data(ComicModel::Number).isNull())
|
||||
numberLast = last->data(ComicModel::Number).toInt();
|
||||
|
||||
if(!currentItem->data(TableModel::Number).isNull())
|
||||
numberCurrent = currentItem->data(TableModel::Number).toInt();
|
||||
if(!currentItem->data(ComicModel::Number).isNull())
|
||||
numberCurrent = currentItem->data(ComicModel::Number).toInt();
|
||||
|
||||
QList<TableItem *>::iterator i;
|
||||
QList<ComicItem *>::iterator i;
|
||||
i = _data.end();
|
||||
i--;
|
||||
|
||||
@ -423,8 +423,8 @@ void TableModel::setupModelData(QSqlQuery &sqlquery)
|
||||
i--;
|
||||
numberLast = max;
|
||||
|
||||
if(!(*i)->data(TableModel::Number).isNull())
|
||||
numberLast = (*i)->data(TableModel::Number).toInt();
|
||||
if(!(*i)->data(ComicModel::Number).isNull())
|
||||
numberLast = (*i)->data(ComicModel::Number).toInt();
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -432,11 +432,11 @@ void TableModel::setupModelData(QSqlQuery &sqlquery)
|
||||
while ((lessThan = naturalSortLessThanCI(nameCurrent,nameLast)) && i != _data.begin() && numberLast == max)
|
||||
{
|
||||
i--;
|
||||
nameLast = (*i)->data(TableModel::FileName).toString();
|
||||
nameLast = (*i)->data(ComicModel::FileName).toString();
|
||||
numberLast = max;
|
||||
|
||||
if(!(*i)->data(TableModel::Number).isNull())
|
||||
numberLast = (*i)->data(TableModel::Number).toInt();
|
||||
if(!(*i)->data(ComicModel::Number).isNull())
|
||||
numberLast = (*i)->data(ComicModel::Number).toInt();
|
||||
}
|
||||
|
||||
}
|
||||
@ -445,7 +445,7 @@ void TableModel::setupModelData(QSqlQuery &sqlquery)
|
||||
if(numberCurrent != max)
|
||||
{
|
||||
if(numberCurrent == numberLast)
|
||||
if(currentItem->data(TableModel::IsBis).toBool())
|
||||
if(currentItem->data(ComicModel::IsBis).toBool())
|
||||
{
|
||||
_data.insert(++i,currentItem);
|
||||
}
|
||||
@ -466,20 +466,20 @@ void TableModel::setupModelData(QSqlQuery &sqlquery)
|
||||
}
|
||||
}
|
||||
|
||||
ComicDB TableModel::getComic(const QModelIndex & mi)
|
||||
ComicDB ComicModel::getComic(const QModelIndex & mi)
|
||||
{
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(TableModel::Id).toULongLong(),db);
|
||||
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(ComicModel::Id).toULongLong(),db);
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
ComicDB TableModel::_getComic(const QModelIndex & mi)
|
||||
ComicDB ComicModel::_getComic(const QModelIndex & mi)
|
||||
{
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(TableModel::Id).toULongLong(),db);
|
||||
ComicDB c = DBHelper::loadComic(_data.at(mi.row())->data(ComicModel::Id).toULongLong(),db);
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
|
||||
@ -487,17 +487,17 @@ ComicDB TableModel::_getComic(const QModelIndex & mi)
|
||||
}
|
||||
|
||||
|
||||
QVector<YACReaderComicReadStatus> TableModel::getReadList()
|
||||
QVector<YACReaderComicReadStatus> ComicModel::getReadList()
|
||||
{
|
||||
int numComics = _data.count();
|
||||
QVector<YACReaderComicReadStatus> readList(numComics);
|
||||
for(int i=0;i<numComics;i++)
|
||||
{
|
||||
if(_data.value(i)->data(TableModel::ReadColumn).toBool())
|
||||
if(_data.value(i)->data(ComicModel::ReadColumn).toBool())
|
||||
readList[i] = YACReader::Read;
|
||||
else if (_data.value(i)->data(TableModel::CurrentPage).toInt() == _data.value(i)->data(TableModel::NumPages).toInt())
|
||||
else if (_data.value(i)->data(ComicModel::CurrentPage).toInt() == _data.value(i)->data(ComicModel::NumPages).toInt())
|
||||
readList[i] = YACReader::Read;
|
||||
else if (_data.value(i)->data(TableModel::HasBeenOpened).toBool())
|
||||
else if (_data.value(i)->data(ComicModel::HasBeenOpened).toBool())
|
||||
readList[i] = YACReader::Opened;
|
||||
else
|
||||
readList[i] = YACReader::Unread;
|
||||
@ -505,12 +505,12 @@ QVector<YACReaderComicReadStatus> TableModel::getReadList()
|
||||
return readList;
|
||||
}
|
||||
//TODO untested, this method is no longer used
|
||||
QVector<YACReaderComicReadStatus> TableModel::setAllComicsRead(YACReaderComicReadStatus read)
|
||||
QVector<YACReaderComicReadStatus> ComicModel::setAllComicsRead(YACReaderComicReadStatus read)
|
||||
{
|
||||
return setComicsRead(persistentIndexList(),read);
|
||||
}
|
||||
|
||||
QList<ComicDB> TableModel::getAllComics()
|
||||
QList<ComicDB> ComicModel::getAllComics()
|
||||
{
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
db.transaction();
|
||||
@ -519,7 +519,7 @@ QList<ComicDB> TableModel::getAllComics()
|
||||
int numComics = _data.count();
|
||||
for(int i=0;i<numComics;i++)
|
||||
{
|
||||
comics.append(DBHelper::loadComic(_data.value(i)->data(TableModel::Id).toULongLong(),db));
|
||||
comics.append(DBHelper::loadComic(_data.value(i)->data(ComicModel::Id).toULongLong(),db));
|
||||
}
|
||||
|
||||
db.commit();
|
||||
@ -529,7 +529,7 @@ QList<ComicDB> TableModel::getAllComics()
|
||||
return comics;
|
||||
}
|
||||
|
||||
QList<ComicDB> TableModel::getComics(QList<QModelIndex> list)
|
||||
QList<ComicDB> ComicModel::getComics(QList<QModelIndex> list)
|
||||
{
|
||||
QList<ComicDB> comics;
|
||||
|
||||
@ -546,7 +546,7 @@ QList<ComicDB> TableModel::getComics(QList<QModelIndex> list)
|
||||
return comics;
|
||||
}
|
||||
//TODO
|
||||
QVector<YACReaderComicReadStatus> TableModel::setComicsRead(QList<QModelIndex> list,YACReaderComicReadStatus read)
|
||||
QVector<YACReaderComicReadStatus> ComicModel::setComicsRead(QList<QModelIndex> list,YACReaderComicReadStatus read)
|
||||
{
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
db.transaction();
|
||||
@ -554,17 +554,17 @@ QVector<YACReaderComicReadStatus> TableModel::setComicsRead(QList<QModelIndex> l
|
||||
{
|
||||
if(read == YACReader::Read)
|
||||
{
|
||||
_data.value(mi.row())->setData(TableModel::ReadColumn, QVariant(true));
|
||||
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(TableModel::Id).toULongLong(),db);
|
||||
_data.value(mi.row())->setData(ComicModel::ReadColumn, QVariant(true));
|
||||
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(),db);
|
||||
c.info.read = true;
|
||||
DBHelper::update(&(c.info),db);
|
||||
}
|
||||
if(read == YACReader::Unread)
|
||||
{
|
||||
_data.value(mi.row())->setData(TableModel::ReadColumn, QVariant(false));
|
||||
_data.value(mi.row())->setData(TableModel::CurrentPage, QVariant(1));
|
||||
_data.value(mi.row())->setData(TableModel::HasBeenOpened, QVariant(false));
|
||||
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(TableModel::Id).toULongLong(),db);
|
||||
_data.value(mi.row())->setData(ComicModel::ReadColumn, QVariant(false));
|
||||
_data.value(mi.row())->setData(ComicModel::CurrentPage, QVariant(1));
|
||||
_data.value(mi.row())->setData(ComicModel::HasBeenOpened, QVariant(false));
|
||||
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(),db);
|
||||
c.info.read = false;
|
||||
c.info.currentPage = 1;
|
||||
c.info.hasBeenOpened = false;
|
||||
@ -575,19 +575,19 @@ QVector<YACReaderComicReadStatus> TableModel::setComicsRead(QList<QModelIndex> l
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
|
||||
emit dataChanged(index(list.first().row(),TableModel::ReadColumn),index(list.last().row(),TableModel::HasBeenOpened),QVector<int>() << ReadColumnRole << CurrentPageRole << HasBeenOpenedRole);
|
||||
emit dataChanged(index(list.first().row(),ComicModel::ReadColumn),index(list.last().row(),ComicModel::HasBeenOpened),QVector<int>() << ReadColumnRole << CurrentPageRole << HasBeenOpenedRole);
|
||||
|
||||
return getReadList();
|
||||
}
|
||||
qint64 TableModel::asignNumbers(QList<QModelIndex> list,int startingNumber)
|
||||
qint64 ComicModel::asignNumbers(QList<QModelIndex> list,int startingNumber)
|
||||
{
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
db.transaction();
|
||||
qint64 idFirst = _data.value(list[0].row())->data(TableModel::Id).toULongLong();
|
||||
qint64 idFirst = _data.value(list[0].row())->data(ComicModel::Id).toULongLong();
|
||||
int i = 0;
|
||||
foreach (QModelIndex mi, list)
|
||||
{
|
||||
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(TableModel::Id).toULongLong(),db);
|
||||
ComicDB c = DBHelper::loadComic(_data.value(mi.row())->data(ComicModel::Id).toULongLong(),db);
|
||||
c.info.number = startingNumber+i;
|
||||
c.info.edited = true;
|
||||
DBHelper::update(&(c.info),db);
|
||||
@ -602,13 +602,13 @@ qint64 TableModel::asignNumbers(QList<QModelIndex> list,int startingNumber)
|
||||
|
||||
return idFirst;
|
||||
}
|
||||
QModelIndex TableModel::getIndexFromId(quint64 id)
|
||||
QModelIndex ComicModel::getIndexFromId(quint64 id)
|
||||
{
|
||||
QList<TableItem *>::ConstIterator itr;
|
||||
QList<ComicItem *>::ConstIterator itr;
|
||||
int i=0;
|
||||
for(itr = _data.constBegin();itr != _data.constEnd();itr++)
|
||||
{
|
||||
if((*itr)->data(TableModel::Id).toULongLong() == id)
|
||||
if((*itr)->data(ComicModel::Id).toULongLong() == id)
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
@ -616,14 +616,14 @@ QModelIndex TableModel::getIndexFromId(quint64 id)
|
||||
return index(i,0);
|
||||
}
|
||||
|
||||
void TableModel::startTransaction()
|
||||
void ComicModel::startTransaction()
|
||||
{
|
||||
|
||||
dbTransaction = DataBaseManagement::loadDatabase(_databasePath);
|
||||
dbTransaction.transaction();
|
||||
}
|
||||
|
||||
void TableModel::finishTransaction()
|
||||
void ComicModel::finishTransaction()
|
||||
{
|
||||
dbTransaction.commit();
|
||||
dbTransaction.close();
|
||||
@ -632,9 +632,9 @@ void TableModel::finishTransaction()
|
||||
|
||||
}
|
||||
|
||||
void TableModel::removeInTransaction(int row)
|
||||
void ComicModel::removeInTransaction(int row)
|
||||
{
|
||||
ComicDB c = DBHelper::loadComic(_data.at(row)->data(TableModel::Id).toULongLong(),dbTransaction);
|
||||
ComicDB c = DBHelper::loadComic(_data.at(row)->data(ComicModel::Id).toULongLong(),dbTransaction);
|
||||
|
||||
DBHelper::removeFromDB(&c,dbTransaction);
|
||||
beginRemoveRows(QModelIndex(),row,row);
|
||||
@ -645,7 +645,7 @@ void TableModel::removeInTransaction(int row)
|
||||
endRemoveRows();
|
||||
}
|
||||
|
||||
void TableModel::remove(ComicDB * comic, int row)
|
||||
void ComicModel::remove(ComicDB * comic, int row)
|
||||
{
|
||||
beginRemoveRows(QModelIndex(),row,row);
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
@ -666,23 +666,23 @@ void TableModel::remove(ComicDB * comic, int row)
|
||||
return getComic(index(row,0));
|
||||
}*/
|
||||
|
||||
void TableModel::remove(int row)
|
||||
void ComicModel::remove(int row)
|
||||
{
|
||||
removeInTransaction(row);
|
||||
}
|
||||
|
||||
void TableModel::reload(const ComicDB & comic)
|
||||
void ComicModel::reload(const ComicDB & comic)
|
||||
{
|
||||
int row = 0;
|
||||
bool found = false;
|
||||
foreach(TableItem * item,_data)
|
||||
foreach(ComicItem * item,_data)
|
||||
{
|
||||
if(item->data(TableModel::Id).toULongLong() == comic.id)
|
||||
if(item->data(ComicModel::Id).toULongLong() == comic.id)
|
||||
{
|
||||
found = true;
|
||||
item->setData(TableModel::ReadColumn,comic.info.read);
|
||||
item->setData(TableModel::CurrentPage,comic.info.currentPage);
|
||||
item->setData(TableModel::HasBeenOpened,true);
|
||||
item->setData(ComicModel::ReadColumn,comic.info.read);
|
||||
item->setData(ComicModel::CurrentPage,comic.info.currentPage);
|
||||
item->setData(ComicModel::HasBeenOpened,true);
|
||||
break;
|
||||
|
||||
}
|
||||
@ -692,14 +692,14 @@ void TableModel::reload(const ComicDB & comic)
|
||||
emit dataChanged(index(row,ReadColumn),index(row,HasBeenOpened), QVector<int>() << ReadColumnRole << CurrentPageRole << HasBeenOpenedRole);
|
||||
}
|
||||
|
||||
void TableModel::resetComicRating(const QModelIndex &mi)
|
||||
void ComicModel::resetComicRating(const QModelIndex &mi)
|
||||
{
|
||||
ComicDB comic = getComic(mi);
|
||||
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
|
||||
comic.info.rating = 0;
|
||||
_data[mi.row()]->setData(TableModel::Rating,0);
|
||||
_data[mi.row()]->setData(ComicModel::Rating,0);
|
||||
DBHelper::update(&(comic.info),db);
|
||||
|
||||
emit dataChanged(mi,mi);
|
||||
@ -709,7 +709,7 @@ void TableModel::resetComicRating(const QModelIndex &mi)
|
||||
}
|
||||
|
||||
|
||||
void TableModel::updateRating(int rating, QModelIndex mi)
|
||||
void ComicModel::updateRating(int rating, QModelIndex mi)
|
||||
{
|
||||
ComicDB comic = getComic(mi);
|
||||
|
||||
@ -717,7 +717,7 @@ void TableModel::updateRating(int rating, QModelIndex mi)
|
||||
//TODO optimize update
|
||||
|
||||
comic.info.rating = rating;
|
||||
_data[mi.row()]->setData(TableModel::Rating,rating);
|
||||
_data[mi.row()]->setData(ComicModel::Rating,rating);
|
||||
DBHelper::update(&(comic.info),db);
|
||||
|
||||
emit dataChanged(mi,mi);
|
@ -11,19 +11,19 @@
|
||||
|
||||
class ComicDB;
|
||||
|
||||
class TableItem;
|
||||
class ComicItem;
|
||||
|
||||
using namespace YACReader;
|
||||
|
||||
//! [0]
|
||||
class TableModel : public QAbstractItemModel
|
||||
class ComicModel : public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TableModel(QObject *parent = 0);
|
||||
TableModel( QSqlQuery &sqlquery, QObject *parent = 0);
|
||||
~TableModel();
|
||||
ComicModel(QObject *parent = 0);
|
||||
ComicModel( QSqlQuery &sqlquery, QObject *parent = 0);
|
||||
~ComicModel();
|
||||
|
||||
QVariant data(const QModelIndex &index, int role) const;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
@ -106,7 +106,7 @@ protected:
|
||||
private:
|
||||
void setupModelData( QSqlQuery &sqlquery);
|
||||
ComicDB _getComic(const QModelIndex & mi);
|
||||
QList<TableItem *> _data;
|
||||
QList<ComicItem *> _data;
|
||||
|
||||
QString _databasePath;
|
||||
|
@ -5,7 +5,7 @@
|
||||
#include <QtSql>
|
||||
#include <QSqlDatabase>
|
||||
|
||||
#include "treemodel.h"
|
||||
#include "folder_model.h"
|
||||
|
||||
class ComicsInfoExporter : public QThread
|
||||
{
|
||||
|
@ -1,20 +1,20 @@
|
||||
#include <QStringList>
|
||||
|
||||
#include "treeitem.h"
|
||||
#include "folder_item.h"
|
||||
#include "qnaturalsorting.h"
|
||||
|
||||
TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
|
||||
FolderItem::FolderItem(const QList<QVariant> &data, FolderItem *parent)
|
||||
{
|
||||
parentItem = parent;
|
||||
itemData = data;
|
||||
}
|
||||
|
||||
TreeItem::~TreeItem()
|
||||
FolderItem::~FolderItem()
|
||||
{
|
||||
qDeleteAll(childItems);
|
||||
}
|
||||
|
||||
void TreeItem::appendChild(TreeItem *item)
|
||||
void FolderItem::appendChild(FolderItem *item)
|
||||
{
|
||||
item->parentItem = this;
|
||||
|
||||
@ -22,10 +22,10 @@ void TreeItem::appendChild(TreeItem *item)
|
||||
childItems.append(item);
|
||||
else
|
||||
{
|
||||
TreeItem * last = childItems.back();
|
||||
FolderItem * last = childItems.back();
|
||||
QString nameLast = last->data(1).toString(); //TODO usar info name si est<73> disponible, sino el nombre del fichero.....
|
||||
QString nameCurrent = item->data(1).toString();
|
||||
QList<TreeItem *>::iterator i;
|
||||
QList<FolderItem *>::iterator i;
|
||||
i = childItems.end();
|
||||
i--;
|
||||
while (naturalSortLessThanCI(nameCurrent,nameLast) && i != childItems.begin())
|
||||
@ -43,61 +43,61 @@ void TreeItem::appendChild(TreeItem *item)
|
||||
//childItems.append(item);
|
||||
}
|
||||
|
||||
TreeItem *TreeItem::child(int row)
|
||||
FolderItem *FolderItem::child(int row)
|
||||
{
|
||||
return childItems.value(row);
|
||||
}
|
||||
|
||||
int TreeItem::childCount() const
|
||||
int FolderItem::childCount() const
|
||||
{
|
||||
return childItems.count();
|
||||
}
|
||||
|
||||
int TreeItem::columnCount() const
|
||||
int FolderItem::columnCount() const
|
||||
{
|
||||
return itemData.count();
|
||||
}
|
||||
|
||||
QVariant TreeItem::data(int column) const
|
||||
QVariant FolderItem::data(int column) const
|
||||
{
|
||||
return itemData.value(column);
|
||||
}
|
||||
|
||||
void TreeItem::setData(int column, const QVariant & value)
|
||||
void FolderItem::setData(int column, const QVariant & value)
|
||||
{
|
||||
itemData[column] = value;
|
||||
}
|
||||
|
||||
void TreeItem::removeChild(int childIndex)
|
||||
void FolderItem::removeChild(int childIndex)
|
||||
{
|
||||
childItems.removeAt(childIndex);
|
||||
}
|
||||
|
||||
void TreeItem::clearChildren()
|
||||
void FolderItem::clearChildren()
|
||||
{
|
||||
qDeleteAll(childItems);
|
||||
childItems.clear();
|
||||
}
|
||||
|
||||
QList<TreeItem *> TreeItem::children()
|
||||
QList<FolderItem *> FolderItem::children()
|
||||
{
|
||||
return childItems;
|
||||
}
|
||||
|
||||
TreeItem *TreeItem::parent()
|
||||
FolderItem *FolderItem::parent()
|
||||
{
|
||||
return parentItem;
|
||||
}
|
||||
|
||||
int TreeItem::row() const
|
||||
int FolderItem::row() const
|
||||
{
|
||||
if (parentItem)
|
||||
return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
|
||||
return parentItem->childItems.indexOf(const_cast<FolderItem*>(this));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
QList<QVariant> TreeItem::getData() const
|
||||
QList<QVariant> FolderItem::getData() const
|
||||
{
|
||||
return itemData;
|
||||
}
|
@ -45,31 +45,31 @@
|
||||
#include <QVariant>
|
||||
#include <QModelIndex>
|
||||
|
||||
class TreeItem
|
||||
class FolderItem
|
||||
{
|
||||
public:
|
||||
TreeItem(const QList<QVariant> &data, TreeItem *parent = 0);
|
||||
~TreeItem();
|
||||
FolderItem(const QList<QVariant> &data, FolderItem *parent = 0);
|
||||
~FolderItem();
|
||||
|
||||
void appendChild(TreeItem *child);
|
||||
void appendChild(FolderItem *child);
|
||||
|
||||
TreeItem *child(int row);
|
||||
FolderItem *child(int row);
|
||||
int childCount() const;
|
||||
int columnCount() const;
|
||||
QVariant data(int column) const;
|
||||
QList<QVariant> getData() const;
|
||||
int row() const;
|
||||
TreeItem *parent();
|
||||
TreeItem *parentItem;
|
||||
FolderItem *parent();
|
||||
FolderItem *parentItem;
|
||||
unsigned long long int id;
|
||||
QList<QString> comicNames;
|
||||
TreeItem * originalItem;
|
||||
FolderItem * originalItem;
|
||||
void setData(int column, const QVariant &value);
|
||||
void removeChild(int childIndex);
|
||||
void clearChildren();
|
||||
QList<TreeItem*> children();
|
||||
QList<FolderItem*> children();
|
||||
private:
|
||||
QList<TreeItem*> childItems;
|
||||
QList<FolderItem*> childItems;
|
||||
QList<QVariant> itemData;
|
||||
|
||||
|
@ -48,8 +48,8 @@
|
||||
#include <QtGui>
|
||||
|
||||
|
||||
#include "treeitem.h"
|
||||
#include "treemodel.h"
|
||||
#include "folder_item.h"
|
||||
#include "folder_model.h"
|
||||
#include "data_base_management.h"
|
||||
#include "folder.h"
|
||||
#include "db_helper.h"
|
||||
@ -98,7 +98,7 @@ void drawMacOSXFinishedFolderIcon()
|
||||
|
||||
#define ROOT 1
|
||||
|
||||
TreeModel::TreeModel(QObject *parent)
|
||||
FolderModel::FolderModel(QObject *parent)
|
||||
: QAbstractItemModel(parent),rootItem(0),rootBeforeFilter(0),filterEnabled(false),includeComics(false)
|
||||
{
|
||||
connect(this,SIGNAL(beforeReset()),this,SIGNAL(modelAboutToBeReset()));
|
||||
@ -106,13 +106,13 @@ TreeModel::TreeModel(QObject *parent)
|
||||
}
|
||||
|
||||
//! [0]
|
||||
TreeModel::TreeModel( QSqlQuery &sqlquery, QObject *parent)
|
||||
FolderModel::FolderModel( QSqlQuery &sqlquery, QObject *parent)
|
||||
: QAbstractItemModel(parent),rootItem(0),rootBeforeFilter(0),filterEnabled(false),includeComics(false)
|
||||
{
|
||||
//lo m<>s probable es que el nodo ra<72>z no necesite tener informaci<63>n
|
||||
QList<QVariant> 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 = new FolderItem(rootData);
|
||||
rootItem->id = ROOT;
|
||||
rootItem->parentItem = 0;
|
||||
setupModelData(sqlquery, rootItem);
|
||||
@ -121,7 +121,7 @@ TreeModel::TreeModel( QSqlQuery &sqlquery, QObject *parent)
|
||||
//! [0]
|
||||
|
||||
//! [1]
|
||||
TreeModel::~TreeModel()
|
||||
FolderModel::~FolderModel()
|
||||
{
|
||||
if(rootItem != 0)
|
||||
delete rootItem;
|
||||
@ -129,22 +129,22 @@ TreeModel::~TreeModel()
|
||||
//! [1]
|
||||
|
||||
//! [2]
|
||||
int TreeModel::columnCount(const QModelIndex &parent) const
|
||||
int FolderModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
if (parent.isValid())
|
||||
return static_cast<TreeItem*>(parent.internalPointer())->columnCount();
|
||||
return static_cast<FolderItem*>(parent.internalPointer())->columnCount();
|
||||
else
|
||||
return rootItem->columnCount();
|
||||
}
|
||||
//! [2]
|
||||
|
||||
//! [3]
|
||||
QVariant TreeModel::data(const QModelIndex &index, int role) const
|
||||
QVariant FolderModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
return QVariant();
|
||||
|
||||
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
|
||||
FolderItem *item = static_cast<FolderItem*>(index.internalPointer());
|
||||
|
||||
if (role == Qt::DecorationRole)
|
||||
|
||||
@ -160,7 +160,7 @@ QVariant TreeModel::data(const QModelIndex &index, int role) const
|
||||
return QVariant(QFileIconProvider().icon(QFileIconProvider::Folder));
|
||||
}
|
||||
#else
|
||||
if(item->data(TreeModel::Finished).toBool())
|
||||
if(item->data(FolderModel::Finished).toBool())
|
||||
return QVariant(QIcon(":/images/folder_finished.png"));
|
||||
else
|
||||
return QVariant(QIcon(":/images/folder.png"));
|
||||
@ -176,7 +176,7 @@ QVariant TreeModel::data(const QModelIndex &index, int role) const
|
||||
//! [3]
|
||||
|
||||
//! [4]
|
||||
Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const
|
||||
Qt::ItemFlags FolderModel::flags(const QModelIndex &index) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
return 0;
|
||||
@ -186,7 +186,7 @@ Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const
|
||||
//! [4]
|
||||
|
||||
//! [5]
|
||||
QVariant TreeModel::headerData(int section, Qt::Orientation orientation,
|
||||
QVariant FolderModel::headerData(int section, Qt::Orientation orientation,
|
||||
int role) const
|
||||
{
|
||||
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
|
||||
@ -197,20 +197,20 @@ QVariant TreeModel::headerData(int section, Qt::Orientation orientation,
|
||||
//! [5]
|
||||
|
||||
//! [6]
|
||||
QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent)
|
||||
QModelIndex FolderModel::index(int row, int column, const QModelIndex &parent)
|
||||
const
|
||||
{
|
||||
if (!hasIndex(row, column, parent))
|
||||
return QModelIndex();
|
||||
|
||||
TreeItem *parentItem;
|
||||
FolderItem *parentItem;
|
||||
|
||||
if (!parent.isValid())
|
||||
parentItem = rootItem;
|
||||
else
|
||||
parentItem = static_cast<TreeItem*>(parent.internalPointer());
|
||||
parentItem = static_cast<FolderItem*>(parent.internalPointer());
|
||||
|
||||
TreeItem *childItem = parentItem->child(row);
|
||||
FolderItem *childItem = parentItem->child(row);
|
||||
if (childItem)
|
||||
return createIndex(row, column, childItem);
|
||||
else
|
||||
@ -219,13 +219,13 @@ QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent)
|
||||
//! [6]
|
||||
|
||||
//! [7]
|
||||
QModelIndex TreeModel::parent(const QModelIndex &index) const
|
||||
QModelIndex FolderModel::parent(const QModelIndex &index) const
|
||||
{
|
||||
if (!index.isValid())
|
||||
return QModelIndex();
|
||||
|
||||
TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
|
||||
TreeItem *parentItem = childItem->parent();
|
||||
FolderItem *childItem = static_cast<FolderItem*>(index.internalPointer());
|
||||
FolderItem *parentItem = childItem->parent();
|
||||
|
||||
if (parentItem == rootItem)
|
||||
return QModelIndex();
|
||||
@ -234,7 +234,7 @@ QModelIndex TreeModel::parent(const QModelIndex &index) const
|
||||
}
|
||||
//! [7]
|
||||
|
||||
QModelIndex TreeModel::indexFromItem(TreeItem * item,int column)
|
||||
QModelIndex FolderModel::indexFromItem(FolderItem * item,int column)
|
||||
{
|
||||
//if(item->parent() != 0)
|
||||
// return index(item->row(),column,parent(indexFromItem(item->parent(),column-1)));
|
||||
@ -245,22 +245,22 @@ QModelIndex TreeModel::indexFromItem(TreeItem * item,int column)
|
||||
|
||||
|
||||
//! [8]
|
||||
int TreeModel::rowCount(const QModelIndex &parent) const
|
||||
int FolderModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
TreeItem *parentItem;
|
||||
FolderItem *parentItem;
|
||||
if (parent.column() > 0)
|
||||
return 0;
|
||||
|
||||
if (!parent.isValid())
|
||||
parentItem = rootItem;
|
||||
else
|
||||
parentItem = static_cast<TreeItem*>(parent.internalPointer());
|
||||
parentItem = static_cast<FolderItem*>(parent.internalPointer());
|
||||
|
||||
return parentItem->childCount();
|
||||
}
|
||||
//! [8]
|
||||
|
||||
void TreeModel::setupModelData(QString path)
|
||||
void FolderModel::setupModelData(QString path)
|
||||
{
|
||||
beginResetModel();
|
||||
if(rootItem != 0)
|
||||
@ -271,7 +271,7 @@ void TreeModel::setupModelData(QString path)
|
||||
//inicializar el nodo ra<72>z
|
||||
QList<QVariant> 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 = new FolderItem(rootData);
|
||||
rootItem->id = ROOT;
|
||||
rootItem->parentItem = 0;
|
||||
|
||||
@ -292,7 +292,7 @@ void TreeModel::setupModelData(QString path)
|
||||
}
|
||||
|
||||
|
||||
void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
void FolderModel::setupModelData(QSqlQuery &sqlquery, FolderItem *parent)
|
||||
{
|
||||
//64 bits para la primary key, es decir la misma precisi<73>n que soporta sqlit 2^64
|
||||
//el diccionario permitir<69> encontrar cualquier nodo del <20>rbol r<>pidamente, de forma que a<>adir un hijo a un padre sea O(1)
|
||||
@ -308,11 +308,11 @@ void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
data << record.value("path").toString();
|
||||
data << record.value("finished").toBool();
|
||||
data << record.value("completed").toBool();
|
||||
TreeItem * item = new TreeItem(data);
|
||||
FolderItem * item = new FolderItem(data);
|
||||
|
||||
item->id = record.value("id").toULongLong();
|
||||
//la inserci<63>n de hijos se hace de forma ordenada
|
||||
TreeItem * parent = items.value(record.value("parentId").toULongLong());
|
||||
FolderItem * parent = items.value(record.value("parentId").toULongLong());
|
||||
//if(parent !=0) //TODO if parent==0 the parent of item was removed from the DB and delete on cascade didn't work, ERROR.
|
||||
parent->appendChild(item);
|
||||
//se a<>ade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
|
||||
@ -320,7 +320,7 @@ void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
}
|
||||
}
|
||||
|
||||
void TreeModel::updateFolderModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
void FolderModel::updateFolderModelData(QSqlQuery &sqlquery, FolderItem *parent)
|
||||
{
|
||||
while (sqlquery.next()) {
|
||||
QList<QVariant> data;
|
||||
@ -330,11 +330,11 @@ void TreeModel::updateFolderModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
data << record.value("path").toString();
|
||||
data << record.value("finished").toBool();
|
||||
data << record.value("completed").toBool();
|
||||
TreeItem * item = new TreeItem(data);
|
||||
FolderItem * item = new FolderItem(data);
|
||||
|
||||
item->id = record.value("id").toULongLong();
|
||||
//la inserci<63>n de hijos se hace de forma ordenada
|
||||
TreeItem * parent = items.value(record.value("parentId").toULongLong());
|
||||
FolderItem * parent = items.value(record.value("parentId").toULongLong());
|
||||
if(parent !=0) //TODO if parent==0 the parent of item was removed from the DB and delete on cascade didn't work, ERROR.
|
||||
parent->appendChild(item);
|
||||
//se a<>ade el item al map, de forma que se pueda encontrar como padre en siguientes iteraciones
|
||||
@ -342,7 +342,7 @@ void TreeModel::updateFolderModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
}
|
||||
}
|
||||
|
||||
void TreeModel::setupFilteredModelData()
|
||||
void FolderModel::setupFilteredModelData()
|
||||
{
|
||||
beginResetModel();
|
||||
|
||||
@ -357,7 +357,7 @@ void TreeModel::setupFilteredModelData()
|
||||
|
||||
QList<QVariant> rootData;
|
||||
rootData << "root"; //id 1, padre 1, title "root" (el id, y el id del padre van a ir en la clase TreeItem)
|
||||
rootItem = new TreeItem(rootData);
|
||||
rootItem = new FolderItem(rootData);
|
||||
rootItem->id = ROOT;
|
||||
rootItem->parentItem = 0;
|
||||
|
||||
@ -418,7 +418,7 @@ void TreeModel::setupFilteredModelData()
|
||||
endResetModel();
|
||||
}
|
||||
|
||||
void TreeModel::setupFilteredModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
void FolderModel::setupFilteredModelData(QSqlQuery &sqlquery, FolderItem *parent)
|
||||
{
|
||||
//64 bits para la primary key, es decir la misma precisi<73>n que soporta sqlit 2^64
|
||||
filteredItems.clear();
|
||||
@ -436,7 +436,7 @@ void TreeModel::setupFilteredModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
data << record.value("finished").toBool();
|
||||
data << record.value("completed").toBool();
|
||||
|
||||
TreeItem * item = new TreeItem(data);
|
||||
FolderItem * item = new FolderItem(data);
|
||||
item->id = sqlquery.value(0).toULongLong();
|
||||
|
||||
//id del padre
|
||||
@ -461,9 +461,9 @@ void TreeModel::setupFilteredModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
while(parentId != ROOT )
|
||||
{
|
||||
//el padre no estaba en el modelo filtrado, as<61> que se rescata del modelo original
|
||||
TreeItem * parentItem = items.value(parentId);
|
||||
FolderItem * parentItem = items.value(parentId);
|
||||
//se debe crear un nuevo nodo (para no compartir los hijos con el nodo original)
|
||||
TreeItem * newparentItem = new TreeItem(parentItem->getData()); //padre que se a<>adir<69> a la estructura de directorios filtrados
|
||||
FolderItem * newparentItem = new FolderItem(parentItem->getData()); //padre que se a<>adir<69> a la estructura de directorios filtrados
|
||||
newparentItem->id = parentId;
|
||||
|
||||
newparentItem->originalItem = parentItem;
|
||||
@ -496,19 +496,19 @@ void TreeModel::setupFilteredModelData(QSqlQuery &sqlquery, TreeItem *parent)
|
||||
|
||||
|
||||
|
||||
QString TreeModel::getDatabase()
|
||||
QString FolderModel::getDatabase()
|
||||
{
|
||||
return _databasePath;
|
||||
}
|
||||
|
||||
QString TreeModel::getFolderPath(const QModelIndex &folder)
|
||||
QString FolderModel::getFolderPath(const QModelIndex &folder)
|
||||
{
|
||||
if(!folder.isValid()) //root folder
|
||||
return "/";
|
||||
return static_cast<TreeItem*>(folder.internalPointer())->data(TreeModel::Path).toString();
|
||||
return static_cast<FolderItem*>(folder.internalPointer())->data(FolderModel::Path).toString();
|
||||
}
|
||||
|
||||
void TreeModel::setFilter(const YACReader::SearchModifiers modifier, QString filter, bool includeComics)
|
||||
void FolderModel::setFilter(const YACReader::SearchModifiers modifier, QString filter, bool includeComics)
|
||||
{
|
||||
this->filter = filter;
|
||||
this->includeComics = includeComics;
|
||||
@ -517,7 +517,7 @@ void TreeModel::setFilter(const YACReader::SearchModifiers modifier, QString fil
|
||||
setupFilteredModelData();
|
||||
}
|
||||
|
||||
void TreeModel::resetFilter()
|
||||
void FolderModel::resetFilter()
|
||||
{
|
||||
beginResetModel();
|
||||
filter = "";
|
||||
@ -525,7 +525,7 @@ void TreeModel::resetFilter()
|
||||
//TODO hay que liberar la memoria reservada para el filtrado
|
||||
//items.clear();
|
||||
filteredItems.clear();
|
||||
TreeItem * root = rootItem;
|
||||
FolderItem * root = rootItem;
|
||||
rootItem = rootBeforeFilter; //TODO si no se aplica el filtro previamente, esto invalidar<61>a en modelo
|
||||
if(root !=0)
|
||||
delete root;
|
||||
@ -537,14 +537,14 @@ void TreeModel::resetFilter()
|
||||
|
||||
}
|
||||
|
||||
void TreeModel::updateFolderCompletedStatus(const QModelIndexList &list, bool status)
|
||||
void FolderModel::updateFolderCompletedStatus(const QModelIndexList &list, bool status)
|
||||
{
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
db.transaction();
|
||||
foreach (QModelIndex mi, list)
|
||||
{
|
||||
TreeItem * item = static_cast<TreeItem*>(mi.internalPointer());
|
||||
item->setData(TreeModel::Completed,status);
|
||||
FolderItem * item = static_cast<FolderItem*>(mi.internalPointer());
|
||||
item->setData(FolderModel::Completed,status);
|
||||
|
||||
Folder f = DBHelper::loadFolder(item->id,db);
|
||||
f.setCompleted(status);
|
||||
@ -554,17 +554,17 @@ void TreeModel::updateFolderCompletedStatus(const QModelIndexList &list, bool st
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
|
||||
emit dataChanged(index(list.first().row(),TreeModel::Name),index(list.last().row(),TreeModel::Completed));
|
||||
emit dataChanged(index(list.first().row(),FolderModel::Name),index(list.last().row(),FolderModel::Completed));
|
||||
}
|
||||
|
||||
void TreeModel::updateFolderFinishedStatus(const QModelIndexList &list, bool status)
|
||||
void FolderModel::updateFolderFinishedStatus(const QModelIndexList &list, bool status)
|
||||
{
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
db.transaction();
|
||||
foreach (QModelIndex mi, list)
|
||||
{
|
||||
TreeItem * item = static_cast<TreeItem*>(mi.internalPointer());
|
||||
item->setData(TreeModel::Finished,status);
|
||||
FolderItem * item = static_cast<FolderItem*>(mi.internalPointer());
|
||||
item->setData(FolderModel::Finished,status);
|
||||
|
||||
Folder f = DBHelper::loadFolder(item->id,db);
|
||||
f.setFinished(status);
|
||||
@ -574,15 +574,15 @@ void TreeModel::updateFolderFinishedStatus(const QModelIndexList &list, bool sta
|
||||
db.close();
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
|
||||
emit dataChanged(index(list.first().row(),TreeModel::Name),index(list.last().row(),TreeModel::Completed));
|
||||
emit dataChanged(index(list.first().row(),FolderModel::Name),index(list.last().row(),FolderModel::Completed));
|
||||
}
|
||||
|
||||
QStringList TreeModel::getSubfoldersNames(const QModelIndex &mi)
|
||||
QStringList FolderModel::getSubfoldersNames(const QModelIndex &mi)
|
||||
{
|
||||
QStringList result;
|
||||
qulonglong id = 1;
|
||||
if(mi.isValid()){
|
||||
TreeItem * item = static_cast<TreeItem*>(mi.internalPointer());
|
||||
FolderItem * item = static_cast<FolderItem*>(mi.internalPointer());
|
||||
id = item->id;
|
||||
}
|
||||
|
||||
@ -600,11 +600,11 @@ QStringList TreeModel::getSubfoldersNames(const QModelIndex &mi)
|
||||
return result;
|
||||
}
|
||||
|
||||
void TreeModel::fetchMoreFromDB(const QModelIndex &parent)
|
||||
void FolderModel::fetchMoreFromDB(const QModelIndex &parent)
|
||||
{
|
||||
TreeItem * item;
|
||||
FolderItem * item;
|
||||
if(parent.isValid())
|
||||
item = static_cast<TreeItem*>(parent.internalPointer());
|
||||
item = static_cast<FolderItem*>(parent.internalPointer());
|
||||
else
|
||||
item = rootItem;
|
||||
|
||||
@ -615,8 +615,8 @@ void TreeModel::fetchMoreFromDB(const QModelIndex &parent)
|
||||
|
||||
QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath);
|
||||
|
||||
QList<TreeItem *> items;
|
||||
QList<TreeItem *> nextLevelItems;
|
||||
QList<FolderItem *> items;
|
||||
QList<FolderItem *> nextLevelItems;
|
||||
|
||||
QSqlQuery selectQuery(db);
|
||||
selectQuery.prepare("select * from folder where id <> 1 and parentId = :parentId order by parentId,name");
|
||||
@ -626,7 +626,7 @@ void TreeModel::fetchMoreFromDB(const QModelIndex &parent)
|
||||
while(items.size() > 0)
|
||||
{
|
||||
nextLevelItems.clear();
|
||||
foreach(TreeItem * item, items)
|
||||
foreach(FolderItem * item, items)
|
||||
{
|
||||
selectQuery.bindValue(":parentId", item->id);
|
||||
|
||||
@ -655,12 +655,12 @@ void TreeModel::fetchMoreFromDB(const QModelIndex &parent)
|
||||
QSqlDatabase::removeDatabase(_databasePath);
|
||||
}
|
||||
|
||||
QModelIndex TreeModel::addFolderAtParent(const QString &folderName, const QModelIndex &parent)
|
||||
QModelIndex FolderModel::addFolderAtParent(const QString &folderName, const QModelIndex &parent)
|
||||
{
|
||||
TreeItem * parentItem;
|
||||
FolderItem * parentItem;
|
||||
|
||||
if(parent.isValid())
|
||||
parentItem = static_cast<TreeItem*>(parent.internalPointer());
|
||||
parentItem = static_cast<FolderItem*>(parent.internalPointer());
|
||||
else
|
||||
parentItem = rootItem;
|
||||
|
||||
@ -681,7 +681,7 @@ QModelIndex TreeModel::addFolderAtParent(const QString &folderName, const QModel
|
||||
data << false; //finished
|
||||
data << true; //completed
|
||||
|
||||
TreeItem * item = new TreeItem(data);
|
||||
FolderItem * item = new FolderItem(data);
|
||||
item->id = newFolder.id;
|
||||
|
||||
parentItem->appendChild(item);
|
||||
@ -695,13 +695,13 @@ QModelIndex TreeModel::addFolderAtParent(const QString &folderName, const QModel
|
||||
return index(destRow,0,parent);
|
||||
}
|
||||
|
||||
void TreeModel::deleteFolder(const QModelIndex &mi)
|
||||
void FolderModel::deleteFolder(const QModelIndex &mi)
|
||||
{
|
||||
beginRemoveRows(mi.parent(),mi.row(),mi.row());
|
||||
|
||||
TreeItem * item = static_cast<TreeItem*>(mi.internalPointer());
|
||||
FolderItem * item = static_cast<FolderItem*>(mi.internalPointer());
|
||||
|
||||
TreeItem * parent = item->parent();
|
||||
FolderItem * parent = item->parent();
|
||||
parent->removeChild(mi.row());
|
||||
|
||||
Folder f;
|
@ -49,17 +49,17 @@
|
||||
|
||||
#include "yacreader_global.h"
|
||||
|
||||
class TreeItem;
|
||||
class FolderItem;
|
||||
|
||||
//! [0]
|
||||
class TreeModel : public QAbstractItemModel
|
||||
class FolderModel : public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TreeModel(QObject *parent = 0);
|
||||
TreeModel( QSqlQuery &sqlquery, QObject *parent = 0);
|
||||
~TreeModel();
|
||||
FolderModel(QObject *parent = 0);
|
||||
FolderModel( QSqlQuery &sqlquery, QObject *parent = 0);
|
||||
~FolderModel();
|
||||
|
||||
QVariant data(const QModelIndex &index, int role) const;
|
||||
Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
@ -68,7 +68,7 @@ public:
|
||||
QModelIndex index(int row, int column,
|
||||
const QModelIndex &parent = QModelIndex()) const;
|
||||
QModelIndex parent(const QModelIndex &index) const;
|
||||
QModelIndex indexFromItem(TreeItem * item, int column);
|
||||
QModelIndex indexFromItem(FolderItem * item, int column);
|
||||
/*QModelIndex _indexFromItem(TreeItem * item, int column);
|
||||
int column;*/
|
||||
|
||||
@ -104,16 +104,16 @@ public slots:
|
||||
void deleteFolder(const QModelIndex & mi);
|
||||
|
||||
private:
|
||||
void setupModelData( QSqlQuery &sqlquery, TreeItem *parent);
|
||||
void updateFolderModelData( QSqlQuery &sqlquery, TreeItem *parent);
|
||||
void setupFilteredModelData( QSqlQuery &sqlquery, TreeItem *parent);
|
||||
void setupModelData( QSqlQuery &sqlquery, FolderItem *parent);
|
||||
void updateFolderModelData( QSqlQuery &sqlquery, FolderItem *parent);
|
||||
void setupFilteredModelData( QSqlQuery &sqlquery, FolderItem *parent);
|
||||
void setupFilteredModelData();
|
||||
|
||||
TreeItem *rootItem; //el árbol
|
||||
QMap<unsigned long long int, TreeItem *> items; //relación entre folders
|
||||
FolderItem *rootItem; //el árbol
|
||||
QMap<unsigned long long int, FolderItem *> items; //relación entre folders
|
||||
|
||||
TreeItem *rootBeforeFilter;
|
||||
QMap<unsigned long long int, TreeItem *> filteredItems; //relación entre folders
|
||||
FolderItem *rootBeforeFilter;
|
||||
QMap<unsigned long long int, FolderItem *> filteredItems; //relación entre folders
|
||||
|
||||
QString _databasePath;
|
||||
|
5
YACReaderLibrary/db/reading_list_item.cpp
Normal file
5
YACReaderLibrary/db/reading_list_item.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
#include "reading_list_item.h"
|
||||
|
||||
ReadingListItem::ReadingListItem()
|
||||
{
|
||||
}
|
10
YACReaderLibrary/db/reading_list_item.h
Normal file
10
YACReaderLibrary/db/reading_list_item.h
Normal file
@ -0,0 +1,10 @@
|
||||
#ifndef READING_LIST_ITEM_H
|
||||
#define READING_LIST_ITEM_H
|
||||
|
||||
class ReadingListItem
|
||||
{
|
||||
public:
|
||||
ReadingListItem();
|
||||
};
|
||||
|
||||
#endif // READING_LIST_ITEM_H
|
6
YACReaderLibrary/db/reading_list_model.cpp
Normal file
6
YACReaderLibrary/db/reading_list_model.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
#include "reading_list_model.h"
|
||||
|
||||
ReadingListModel::ReadingListModel(QObject *parent) :
|
||||
QAbstractItemModel(parent)
|
||||
{
|
||||
}
|
18
YACReaderLibrary/db/reading_list_model.h
Normal file
18
YACReaderLibrary/db/reading_list_model.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef READING_LIST_MODEL_H
|
||||
#define READING_LIST_MODEL_H
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
|
||||
class ReadingListModel : public QAbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit ReadingListModel(QObject *parent = 0);
|
||||
|
||||
signals:
|
||||
|
||||
public slots:
|
||||
|
||||
};
|
||||
|
||||
#endif // READING_LIST_MODEL_H
|
@ -1,47 +0,0 @@
|
||||
|
||||
#include <QStringList>
|
||||
|
||||
#include "tableitem.h"
|
||||
|
||||
//! [0]
|
||||
TableItem::TableItem(const QList<QVariant> &data)
|
||||
|
||||
{
|
||||
itemData = data;
|
||||
}
|
||||
//! [0]
|
||||
|
||||
//! [1]
|
||||
TableItem::~TableItem()
|
||||
{
|
||||
|
||||
}
|
||||
//! [1]
|
||||
|
||||
|
||||
//! [5]
|
||||
int TableItem::columnCount() const
|
||||
{
|
||||
return itemData.count();
|
||||
}
|
||||
//! [5]
|
||||
|
||||
//! [6]
|
||||
QVariant TableItem::data(int column) const
|
||||
{
|
||||
return itemData.value(column);
|
||||
}
|
||||
//! [6]
|
||||
|
||||
void TableItem::setData(int column,const QVariant & value)
|
||||
{
|
||||
itemData[column] = value;
|
||||
}
|
||||
|
||||
//! [8]
|
||||
int TableItem::row() const
|
||||
{
|
||||
|
||||
return 0;
|
||||
}
|
||||
//! [8]
|
Reference in New Issue
Block a user