Modificaciones en pictureflow/goto_flow y comic_flow que aumentan la fuidez

Ordenaci?n naturalSorting a?adida a los modelos ?rbol y tabla

Primera versi?n de la actualizaci?n de librer?as basadas en BD (falta realizar bateria de pruebas)

Los di?logos deben ser mostrados antes de lanzar los hilos que los cerrar?n para evitar estados inconsistentes en la GUI
This commit is contained in:
Luis Ángel San Martín
2012-05-27 22:32:46 +02:00
parent faebba5a2e
commit 9dfa9c5f62
11 changed files with 345 additions and 142 deletions

View File

@ -36,13 +36,6 @@ QSqlDatabase DataBaseManagement::loadDatabase(QString path)
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
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"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information how "
"to build it.\n\n"
"Click Cancel to exit."), QMessageBox::Cancel);*/
//se devuelve una base de datos vac<61>a e inv<6E>lida
return QSqlDatabase();
}

View File

@ -47,6 +47,7 @@
#include <QStringList>
#include "treeitem.h"
#include "qnaturalsorting.h"
//! [0]
TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
@ -68,7 +69,29 @@ void TreeItem::appendChild(TreeItem *item)
{
item->parentItem = this;
//TODO insertar odernado
childItems.append(item);
if(childItems.isEmpty())
childItems.append(item);
else
{
TreeItem * 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;
i = childItems.end();
i--;
while (naturalSortLessThanCI(nameCurrent,nameLast) && i != childItems.begin())
{
i--;
nameLast = (*i)->data(1).toString();
}
if(!naturalSortLessThanCI(nameCurrent,nameLast)) //si se ha encontrado un elemento menor que current, se inserta justo despu<70>s
childItems.insert(++i,item);
else
childItems.insert(i,item);
}
//childItems.append(item);
}
//! [2]

View File

@ -195,12 +195,16 @@ void TreeModel::setupModelData(QString path)
rootItem->id = 0;
//cargar la base de datos
if(_database.isOpen())
_database.close();
_database = DataBaseManagement::loadDatabase(path);
//crear la consulta
QSqlQuery selectQuery("select * from folder order by parentId,name",_database);
setupModelData(selectQuery,rootItem);
_database.close();
emit(reset());
}
void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent)
@ -215,6 +219,7 @@ void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent)
while (sqlquery.next()) {
QList<QVariant> data;
data << sqlquery.value(2).toString();
data << sqlquery.value(3).toString();
TreeItem * item = new TreeItem(data);
item->id = sqlquery.value(0).toLongLong();
items.value(sqlquery.value(1).toLongLong())->appendChild(item);
@ -226,4 +231,9 @@ void TreeModel::setupModelData(QSqlQuery &sqlquery, TreeItem *parent)
QSqlDatabase & TreeModel::getDatabase()
{
return _database;
}
QString TreeModel::getFolderPath(const QModelIndex &folder)
{
return static_cast<TreeItem*>(folder.internalPointer())->data(1).toString();
}

View File

@ -70,6 +70,9 @@ public:
int columnCount(const QModelIndex &parent = QModelIndex()) const;
void setupModelData(QString path);
QSqlDatabase & getDatabase();
//M<>todos de conveniencia
QString getFolderPath(const QModelIndex &folder);
private:
void setupModelData( QSqlQuery &sqlquery, TreeItem *parent);