From 0b9e8fa0672802ed91d0519e1e920f4b0396f2cf Mon Sep 17 00:00:00 2001 From: Anika Raemer Date: Fri, 19 Oct 2018 20:41:14 +0200 Subject: [PATCH] show child list on click --- LenaPi/controllers/NavigationController.cpp | 13 +++++++++++-- LenaPi/controllers/NavigationController.h | 5 ++++- LenaPi/models/NavigationItemModel.cpp | 10 ++++++++++ LenaPi/models/NavigationItemModel.h | 5 ++++- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/LenaPi/controllers/NavigationController.cpp b/LenaPi/controllers/NavigationController.cpp index 8467c60..c528e98 100644 --- a/LenaPi/controllers/NavigationController.cpp +++ b/LenaPi/controllers/NavigationController.cpp @@ -38,7 +38,6 @@ void NavigationController::setContextProperties() void NavigationController::add(const QString &path, NavigationItemModel *parentItem, bool isCircleDelegate) { - ///@todo recursively do the following for all subdirs auto dir = QDir(path); if(!dir.exists()) return; @@ -48,12 +47,13 @@ void NavigationController::add(const QString &path, NavigationItemModel *parentI for(const auto& name : subDirsNames){ if(name == "." || name == "..") continue; auto item = new NavigationItemModel(parentItem); - item->setCircleDelegate(isCircleDelegate); if(!item->setPath(path + "/" + name)) { item->deleteLater(); continue; } qDebug() << "appending item " << item->getPath(); + item->setCircleDelegate(isCircleDelegate); + connect(item, &NavigationItemModel::clicked, this, &NavigationController::onNavigationRequest); parentItem->appendChild(item); add(item->getPath(), item, false); } @@ -65,3 +65,12 @@ void NavigationController::add(const QString &path, NavigationItemModel *parentI } // end testing } + +void NavigationController::onNavigationRequest() +{ + auto item = qobject_cast(QObject::sender()); + if(!item) return; + + if(item->hasChildren()) + mNavList->setModelItems(item->getChildren()); +} diff --git a/LenaPi/controllers/NavigationController.h b/LenaPi/controllers/NavigationController.h index c1f5cc4..709556d 100644 --- a/LenaPi/controllers/NavigationController.h +++ b/LenaPi/controllers/NavigationController.h @@ -25,7 +25,10 @@ private: NavigationListModel* mNavList; QString mRootPath = "."; - QQmlContext* mContext; + QQmlContext* mContext = Q_NULLPTR; + +private slots: + void onNavigationRequest(); }; #endif // NAVIGATIONCONTROLLER_H diff --git a/LenaPi/models/NavigationItemModel.cpp b/LenaPi/models/NavigationItemModel.cpp index 0b04ca5..e57fb5f 100644 --- a/LenaPi/models/NavigationItemModel.cpp +++ b/LenaPi/models/NavigationItemModel.cpp @@ -55,11 +55,21 @@ void NavigationItemModel::setCircleDelegate(bool value) } } +bool NavigationItemModel::isRoot() const +{ + return mParentItem; +} + NavigationItemModel *NavigationItemModel::getParentItem() { return mParentItem; } +bool NavigationItemModel::hasChildren() const +{ + return !mChildren.isEmpty(); +} + QList NavigationItemModel::getChildren() { return mChildren; diff --git a/LenaPi/models/NavigationItemModel.h b/LenaPi/models/NavigationItemModel.h index 6d1801a..f789f43 100644 --- a/LenaPi/models/NavigationItemModel.h +++ b/LenaPi/models/NavigationItemModel.h @@ -26,8 +26,11 @@ public: bool isCircleDelegate() const; void setCircleDelegate(bool value); + bool isRoot() const; NavigationItemModel* getParentItem(); - QList getChildren(); + + bool hasChildren() const; + QList getChildren(); void appendChild(NavigationItemModel* item); void clearChildren();