a?adida ordenaci?n por "number" y "fileName"

a?adidos separadores verticales en comicsView

a?adido asignNumbers (falta a?adir el icono)
This commit is contained in:
Luis Ángel San Martín 2012-07-01 22:46:42 +02:00
parent 37dcc4858f
commit f8ee0da89b
3 changed files with 107 additions and 15 deletions

View File

@ -17,6 +17,7 @@
#define PATH 6
#define HASH 7
#define READ 8
#define IS_BIS 9
TableModel::TableModel(QObject *parent)
: QAbstractItemModel(parent)
@ -169,7 +170,7 @@ void TableModel::setupModelData(unsigned long long int folderId,const QString &
//crear la consulta
//timer.restart();
QSqlQuery selectQuery(db); //TODO check
selectQuery.prepare("select ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read from comic c inner join comic_info ci on (c.comicInfoId = ci.id) where c.parentId = :parentId");
selectQuery.prepare("select ci.number,ci.title,c.fileName,ci.numPages,c.id,c.parentId,c.path,ci.hash,ci.read,ci.isBis from comic c inner join comic_info ci on (c.comicInfoId = ci.id) where c.parentId = :parentId");
selectQuery.bindValue(":parentId", folderId);
selectQuery.exec();
//txtS << "TABLEMODEL: Tiempo de consulta: " << timer.elapsed() << "ms\r\n";
@ -190,6 +191,7 @@ QString TableModel::getComicPath(QModelIndex mi)
return _data.at(mi.row())->data(PATH).toString();
return "";
}
#define NUMBER_MAX 99999999
void TableModel::setupModelData(QSqlQuery &sqlquery)
{
TableItem * currentItem;
@ -209,18 +211,64 @@ void TableModel::setupModelData(QSqlQuery &sqlquery)
TableItem * last = _data.back();
QString nameLast = last->data(FILE_NAME).toString(); //TODO usar info name si está disponible, sino el nombre del fichero.....
QString nameCurrent = currentItem->data(FILE_NAME).toString();
int numberLast,numberCurrent;
numberLast = numberCurrent = NUMBER_MAX; //TODO change by std limit
if(!last->data(NUMBER).isNull())
numberLast = last->data(NUMBER).toInt();
if(!currentItem->data(NUMBER).isNull())
numberCurrent = currentItem->data(NUMBER).toInt();
QList<TableItem *>::iterator i;
i = _data.end();
i--;
while ((lessThan = naturalSortLessThanCI(nameCurrent,nameLast)) && i != _data.begin())
if(numberCurrent != NUMBER_MAX)
{
i--;
nameLast = (*i)->data(FILE_NAME).toString();
while ((lessThan =numberCurrent < numberLast) && i != _data.begin())
{
i--;
numberLast = NUMBER_MAX; //TODO change by std limit
if(!(*i)->data(NUMBER).isNull())
numberLast = (*i)->data(NUMBER).toInt();
}
}
else
{
while ((lessThan = naturalSortLessThanCI(nameCurrent,nameLast)) && i != _data.begin() && numberLast == 99999999)
{
i--;
nameLast = (*i)->data(FILE_NAME).toString();
numberLast = NUMBER_MAX; //TODO change by std limit
if(!(*i)->data(NUMBER).isNull())
numberLast = (*i)->data(NUMBER).toInt();
}
}
if(!lessThan) //si se ha encontrado un elemento menor que current, se inserta justo después
_data.insert(++i,currentItem);
{
if(numberCurrent != NUMBER_MAX)
{
if(numberCurrent == numberLast)
if(currentItem->data(IS_BIS).toBool())
{
_data.insert(++i,currentItem);
}
else
_data.insert(i,currentItem);
else
_data.insert(++i,currentItem);
}
else
_data.insert(++i,currentItem);
}
else
{
_data.insert(i,currentItem);
}
}
}

View File

@ -98,11 +98,14 @@ void LibraryWindow::doLayout()
comicView->verticalHeader()->setDefaultSectionSize(24);
comicView->verticalHeader()->setClickable(false); //TODO comportamiento anómalo
comicView->setCornerButtonEnabled(false);
comicView->setStyleSheet("QTableView {selection-background-color: #d7d7c7; selection-color: #000000;}\n QTableView QTableView::item{"
qApp->setStyleSheet ( qApp->styleSheet() +" QTableView::item{border-right-style:solid;border-width:1;border-color: #d7d7c7;} QTableView::item:selected{background-color: #d7d7c7; color:#000000; border-right-style:solid;border-width:1;border-color: #8c8590;}");
//qApp->setStyleSheet ( qApp->styleSheet() +" QTableView {selection-background-color: #d7d7c7; selection-color: #000000;}" );
/*comicView->setStyleSheet("QTableView {selection-background-color: #d7d7c7; selection-color: #000000; selection-border: 1px solid;}\n QTableView::item{"
"border-right-style:solid;"
"border-width:1;"
"border-color: #9B9B9B;"
"}");
"border-color: #DEDEDE;"
"}");*/
// comicView->verticalHeader()->setStyleSheet("QHeaderView::section"
//"{"
// "background-color: white /* steelblue */"
@ -486,7 +489,7 @@ void LibraryWindow::createToolBars()
editInfoToolBar->addAction(editSelectedComicsAction);
editInfoToolBar->addAction(selectAllComicsAction);
editInfoToolBar->addSeparator();
//editInfoToolBar->addAction(forceConverExtractedAction);
editInfoToolBar->addAction(asignOrderActions);
editInfoToolBar->addWidget(new QToolBarStretch());
editInfoToolBar->addAction(hideComicViewAction);
}
@ -586,6 +589,7 @@ void LibraryWindow::createConnections()
//Comicts edition
connect(selectAllComicsAction,SIGNAL(triggered()),comicView,SLOT(selectAll()));
connect(editSelectedComicsAction,SIGNAL(triggered()),this,SLOT(showProperties()));
connect(asignOrderActions,SIGNAL(triggered()),this,SLOT(asignNumbers()));
connect(hideComicViewAction, SIGNAL(toggled(bool)),this, SLOT(hideComicFlow(bool)));
@ -678,11 +682,9 @@ void LibraryWindow::loadCovers(const QModelIndex & mi)
dmCV->setupModelData(folderId,dm->getDatabase());
comicView->setModel(dmCV);
comicView->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
comicView->horizontalHeader()->hideSection(4);
comicView->horizontalHeader()->hideSection(5);
comicView->horizontalHeader()->hideSection(6);
comicView->horizontalHeader()->hideSection(7);
comicView->horizontalHeader()->hideSection(8);
for(int i = 4;i<comicView->horizontalHeader()->count();i++)
comicView->horizontalHeader()->hideSection(i);
//debido a un bug, qt4 no es capaz de ajustar el ancho teniendo en cuenta todas la filas (no sólo las visibles)
//así que se ecala la primera vez y después se deja el control al usuario.
@ -727,6 +729,7 @@ void LibraryWindow::reloadCovers()
loadCovers(_rootIndexCV);
QModelIndex mi = dmCV->getIndexFromId(_comicIdEdited);
comicView->scrollTo(mi,QAbstractItemView::PositionAtCenter);
comicView->setCurrentIndex(mi);
//centerComicFlow(mi);
comicFlow->setCenterIndex(mi.row());
@ -1073,7 +1076,7 @@ void LibraryWindow::setFoldersFilter(QString filter)
}
}
}
#include "tableitem.h"
void LibraryWindow::showProperties()
{
QModelIndexList indexList = comicView->selectionModel()->selectedRows();
@ -1100,6 +1103,46 @@ void LibraryWindow::showProperties()
propertiesDialog->show();
}
void LibraryWindow::asignNumbers()
{
QModelIndexList indexList = comicView->selectionModel()->selectedRows();
QList<Comic> comics = dmCV->getComics(indexList);
Comic c = comics[0];
_comicIdEdited = c.id;
int startingNumber = dmCV->getIndexFromId(comics[0].id).row()+1;
if(comics.count()>1)
{
bool ok;
int n = QInputDialog::getInt(this, tr("Asign comics numbers"),
tr("Asign numbers starting in:"), dmCV->getIndexFromId(comics[0].id).row()+1,0,2147483647,1,&ok);
if (ok)
startingNumber = n;
else
return;
}
QSqlDatabase db = DataBaseManagement::loadDatabase(dm->getDatabase());
db.transaction();
for(int i = 0;i<comics.length();i++)
{
Comic c = comics[i];
c.info.setNumber(startingNumber+i);
c.info.update(db);
/*QString hash = comics[i].info.hash;
comics[i].info.setNumber(i+1);
comics[i].info.update(db);*/
}
db.commit();
db.close();
QSqlDatabase::removeDatabase(dm->getDatabase());
reloadCovers();
}
void LibraryWindow::openContainingFolderComic()
{
QModelIndex modelIndex = comicView->currentIndex();

View File

@ -197,6 +197,7 @@ public:
void hideComicFlow(bool hide);
void showExportComicsInfo();
void showImportComicsInfo();
void asignNumbers();
};
#endif