From 331b5988a14b662073a5ce05e1519d2a48cdbc05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Thu, 13 Nov 2014 09:32:09 +0100 Subject: [PATCH] added support for deleting labels/lists --- YACReaderLibrary/db/reading_list_item.cpp | 6 ++++++ YACReaderLibrary/db/reading_list_item.h | 2 ++ YACReaderLibrary/db/reading_list_model.cpp | 24 ++++++++++++++++++++++ YACReaderLibrary/db/reading_list_model.h | 4 +--- YACReaderLibrary/db_helper.cpp | 18 +++++++++++++++- YACReaderLibrary/db_helper.h | 2 ++ YACReaderLibrary/library_window.cpp | 14 ++++++++++++- 7 files changed, 65 insertions(+), 5 deletions(-) diff --git a/YACReaderLibrary/db/reading_list_item.cpp b/YACReaderLibrary/db/reading_list_item.cpp index ace3b890..8f1faf0a 100644 --- a/YACReaderLibrary/db/reading_list_item.cpp +++ b/YACReaderLibrary/db/reading_list_item.cpp @@ -114,6 +114,7 @@ ReadingListItem *ReadingListItem::child(int row) void ReadingListItem::appendChild(ReadingListItem *item) { childItems.append(item); + item->parent = this; return; //TODO item->parent = this; @@ -151,6 +152,11 @@ void ReadingListItem::appendChild(ReadingListItem *item) } +void ReadingListItem::removeChild(ReadingListItem *item) +{ + childItems.removeOne(item); +} + qulonglong ReadingListItem::getId() const { if(itemData.count()>1) diff --git a/YACReaderLibrary/db/reading_list_item.h b/YACReaderLibrary/db/reading_list_item.h index f68865d9..5d82bc27 100644 --- a/YACReaderLibrary/db/reading_list_item.h +++ b/YACReaderLibrary/db/reading_list_item.h @@ -53,9 +53,11 @@ public: int row() const; ReadingListItem * child(int row); void appendChild(ReadingListItem *item); + void removeChild(ReadingListItem *item); qulonglong getId() const; QString name() const; void setName(const QString & name); + QList children(); private: diff --git a/YACReaderLibrary/db/reading_list_model.cpp b/YACReaderLibrary/db/reading_list_model.cpp index ded924a3..e3eb2ba5 100644 --- a/YACReaderLibrary/db/reading_list_model.cpp +++ b/YACReaderLibrary/db/reading_list_model.cpp @@ -276,7 +276,31 @@ void ReadingListModel::rename(const QModelIndex &mi, const QString &name) void ReadingListModel::deleteItem(const QModelIndex &mi) { + if(isEditable(mi)) + { + beginRemoveRows(mi.parent(),mi.row(),mi.row()); + QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath); + + ListItem * item = static_cast(mi.internalPointer()); + + if(typeid(*item) == typeid(ReadingListItem)) + { + ReadingListItem * rli = static_cast(item); + rli->parent->removeChild(rli); + DBHelper::removeListFromDB(item->getId(), db); + } + else if(typeid(*item) == typeid(LabelItem)) + { + LabelItem * li = static_cast(item); + labels.removeOne(li); + DBHelper::removeLabelFromDB(item->getId(), db); + } + + QSqlDatabase::removeDatabase(_databasePath); + + endRemoveRows(); + } } void ReadingListModel::cleanAll() diff --git a/YACReaderLibrary/db/reading_list_model.h b/YACReaderLibrary/db/reading_list_model.h index 8579927a..c9ef1448 100644 --- a/YACReaderLibrary/db/reading_list_model.h +++ b/YACReaderLibrary/db/reading_list_model.h @@ -40,12 +40,10 @@ public: bool isReadingList(const QModelIndex & mi); QString name(const QModelIndex & mi); void rename(const QModelIndex & mi, const QString & name); + void deleteItem(const QModelIndex & mi); signals: -public slots: - void deleteItem(const QModelIndex & mi); - private: void cleanAll(); void setupReadingListsData(QSqlQuery &sqlquery, ReadingListItem *parent); diff --git a/YACReaderLibrary/db_helper.cpp b/YACReaderLibrary/db_helper.cpp index 10d69a37..a3a390a6 100644 --- a/YACReaderLibrary/db_helper.cpp +++ b/YACReaderLibrary/db_helper.cpp @@ -142,7 +142,23 @@ void DBHelper::removeFromDB(ComicDB * comic, QSqlDatabase & db) QSqlQuery query(db); query.prepare("DELETE FROM comic WHERE id = :id"); query.bindValue(":id", comic->id); - query.exec(); + query.exec(); +} + +void DBHelper::removeLabelFromDB(qulonglong id, QSqlDatabase &db) +{ + QSqlQuery query(db); + query.prepare("DELETE FROM label WHERE id = :id"); + query.bindValue(":id", id); + query.exec(); +} + +void DBHelper::removeListFromDB(qulonglong id, QSqlDatabase &db) +{ + QSqlQuery query(db); + query.prepare("DELETE FROM reading_list WHERE id = :id"); + query.bindValue(":id", id); + query.exec(); } //updates diff --git a/YACReaderLibrary/db_helper.h b/YACReaderLibrary/db_helper.h index 01c4cc1f..59daa28f 100644 --- a/YACReaderLibrary/db_helper.h +++ b/YACReaderLibrary/db_helper.h @@ -34,6 +34,8 @@ public: static void removeFromDB(LibraryItem * item, QSqlDatabase & db); static void removeFromDB(Folder * folder, QSqlDatabase & db); static void removeFromDB(ComicDB * comic, QSqlDatabase & db); + static void removeLabelFromDB(qulonglong id, QSqlDatabase & db); + static void removeListFromDB(qulonglong id, QSqlDatabase & db); //inserts static qulonglong insert(Folder * folder, QSqlDatabase & db); static qulonglong insert(ComicDB * comic, QSqlDatabase & db); diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index ebc37479..98bfbc84 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -1646,7 +1646,19 @@ void LibraryWindow::addNewReadingList() void LibraryWindow::deleteSelectedReadingList() { - + QModelIndexList selectedLists = listsView->selectionModel()->selectedIndexes(); + if(!selectedLists.isEmpty()) + { + QModelIndex mi = selectedLists.at(0); + if(listsModel->isEditable(mi)) + { + int ret = QMessageBox::question(this,tr("Delete list/label"),tr("The selected item will be deleted, your comics or folders will NOT be deleted from your disk. Are you sure?"),QMessageBox::Yes,QMessageBox::No); + if(ret == QMessageBox::Yes) + { + listsModel->deleteItem(mi); + } + } + } } void LibraryWindow::showAddNewLabelDialog()