From 15873fdaff9990411685fde762bbf86a4c56183e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Wed, 22 Oct 2014 17:08:21 +0200 Subject: [PATCH] added support for creating new folders --- YACReaderLibrary/db/treemodel.cpp | 36 +++++++++++++++++++++++++++++ YACReaderLibrary/db/treemodel.h | 2 ++ YACReaderLibrary/library_window.cpp | 12 ++++++---- 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/YACReaderLibrary/db/treemodel.cpp b/YACReaderLibrary/db/treemodel.cpp index 01aeb7a9..bb5e571f 100644 --- a/YACReaderLibrary/db/treemodel.cpp +++ b/YACReaderLibrary/db/treemodel.cpp @@ -622,6 +622,42 @@ void TreeModel::fetchMoreFromDB(const QModelIndex &parent) QSqlDatabase::removeDatabase(_databasePath); } +void TreeModel::addFolderAtParent(const QString &folderName, const QModelIndex &parent) +{ + TreeItem * parentItem; + + if(parent.isValid()) + parentItem = static_cast(parent.internalPointer()); + else + parentItem = rootItem; + + Folder newFolder; + newFolder.name = folderName; + newFolder.parentId = parentItem->id; + newFolder.path = parentItem->data(1).toString() + "/" + folderName; + + QSqlDatabase db = DataBaseManagement::loadDatabase(_databasePath); + newFolder.id = DBHelper::insert(&newFolder, db); + QSqlDatabase::removeDatabase(_databasePath); + + int destRow = 0; + + QList data; + data << newFolder.name; + data << newFolder.path; + data << false; + data << false; + + TreeItem * item = new TreeItem(data); + item->id = newFolder.id; + + parentItem->appendChild(item); + destRow = parentItem->children().indexOf(item); //TODO optimize this, appendChild should return the index of the new item + + beginInsertRows(parent,destRow,destRow); + endInsertRows(); +} + void TreeModel::deleteFolder(const QModelIndex &mi) { beginRemoveRows(mi.parent(),mi.row(),mi.row()); diff --git a/YACReaderLibrary/db/treemodel.h b/YACReaderLibrary/db/treemodel.h index c164a536..b15119d6 100644 --- a/YACReaderLibrary/db/treemodel.h +++ b/YACReaderLibrary/db/treemodel.h @@ -89,6 +89,8 @@ public: void fetchMoreFromDB(const QModelIndex & parent); + void addFolderAtParent(const QString & folderName, const QModelIndex & parent); + enum Columns { Name = 0, Path = 1, diff --git a/YACReaderLibrary/library_window.cpp b/YACReaderLibrary/library_window.cpp index 4d416638..c65bbfc8 100644 --- a/YACReaderLibrary/library_window.cpp +++ b/YACReaderLibrary/library_window.cpp @@ -1474,13 +1474,17 @@ void LibraryWindow::addFolderToCurrentIndex() QModelIndex currentIndex = getCurrentFolderIndex(); bool ok; - QString text = QInputDialog::getText(this, tr("Add new folder"), + QString newFolderName = QInputDialog::getText(this, tr("Add new folder"), tr("Folder name:"), QLineEdit::Normal, "", &ok); - if (ok && !text.isEmpty()) - QLOG_INFO() << text; - + if (ok && !newFolderName.isEmpty()) + QLOG_INFO() << newFolderName; + QString parentPath = QDir::cleanPath(currentPath()+foldersModel->getFolderPath(currentIndex)); + QDir parentDir(parentPath); + QDir newFolder(parentPath+"/"+newFolderName); + if(parentDir.mkdir(newFolderName) || newFolder.exists()) + foldersModel->addFolderAtParent(newFolderName,currentIndex); } void LibraryWindow::deleteSelectedFolder()