diff --git a/YACReaderLibrary/db/tablemodel.cpp b/YACReaderLibrary/db/tablemodel.cpp index 333c4c60..4625acb0 100644 --- a/YACReaderLibrary/db/tablemodel.cpp +++ b/YACReaderLibrary/db/tablemodel.cpp @@ -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::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); + } } } diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index b305f9f6..2cae223f 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -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;ihorizontalHeader()->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 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;igetDatabase()); + + reloadCovers(); +} + void LibraryWindow::openContainingFolderComic() { QModelIndex modelIndex = comicView->currentIndex(); diff --git a/YACReaderLibrary/library_window.h b/YACReaderLibrary/library_window.h index c25bdd22..9b6b80d1 100644 --- a/YACReaderLibrary/library_window.h +++ b/YACReaderLibrary/library_window.h @@ -197,6 +197,7 @@ public: void hideComicFlow(bool hide); void showExportComicsInfo(); void showImportComicsInfo(); + void asignNumbers(); }; #endif