From 99a2d118c87f5bdfff43dc162acc4606e3b9b9d1 Mon Sep 17 00:00:00 2001 From: Anika Raemer Date: Fri, 19 Oct 2018 20:22:25 +0200 Subject: [PATCH] add subdirectories recursively --- LenaPi/NavigationListDelegate.qml | 3 +- LenaPi/controllers/NavigationController.cpp | 50 +++++++++++++-------- LenaPi/controllers/NavigationController.h | 1 + LenaPi/main.qml | 37 ++++++++------- LenaPi/models/NavigationItemModel.cpp | 13 ++++++ LenaPi/models/NavigationItemModel.h | 6 +++ 6 files changed, 70 insertions(+), 40 deletions(-) diff --git a/LenaPi/NavigationListDelegate.qml b/LenaPi/NavigationListDelegate.qml index 0b5dda4..753d9f8 100644 --- a/LenaPi/NavigationListDelegate.qml +++ b/LenaPi/NavigationListDelegate.qml @@ -5,12 +5,11 @@ Rectangle{ id: container property var model - property bool isCircle : true property alias imageSource: contentImage.source width: 100 height: width - radius: isCircle ? width/2 : 0 + radius: model.pIsCircleDelegate ? width/2 : 0 color: "blue" Image{ diff --git a/LenaPi/controllers/NavigationController.cpp b/LenaPi/controllers/NavigationController.cpp index bf000f0..8467c60 100644 --- a/LenaPi/controllers/NavigationController.cpp +++ b/LenaPi/controllers/NavigationController.cpp @@ -20,25 +20,7 @@ void NavigationController::init(const QString &rootPath) if(!rootDir.exists()) return; mRootPath = rootPath; - ///@todo recursively do the following for all subdirs - auto subDirsNames = rootDir.entryList(QDir::AllDirs); - qDebug() << subDirsNames; - for(const auto& name : subDirsNames){ - if(name == "." || name == "..") continue; - auto item = new NavigationItemModel(mRootItem); - if(!item->setPath(mRootPath + name)) { - item->deleteLater(); - continue; - } - mRootItem->appendChild(item); - - } - // just for testing! - auto list = mRootItem->getChildren(); - for (const auto& elem: list){ - qDebug() << elem->getImageSource(); - } - // end testing + add(mRootPath, mRootItem, true); mNavList->setModelItems(mRootItem->getChildren()); } @@ -53,3 +35,33 @@ void NavigationController::setContextProperties() { mContext->setContextProperty("navigationList", mNavList); } + +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; + + auto subDirsNames = dir.entryList(QDir::AllDirs); + qDebug() << path << subDirsNames; + + 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(); + parentItem->appendChild(item); + add(item->getPath(), item, false); + } + + // just for testing! + auto list = parentItem->getChildren(); + for (const auto& elem: list){ + qDebug() << elem->getImageSource() << elem->isCircleDelegate(); + } + // end testing +} diff --git a/LenaPi/controllers/NavigationController.h b/LenaPi/controllers/NavigationController.h index 7efa6c1..c1f5cc4 100644 --- a/LenaPi/controllers/NavigationController.h +++ b/LenaPi/controllers/NavigationController.h @@ -19,6 +19,7 @@ public: private: void setContextProperties(); + void add(const QString & path, NavigationItemModel* parentItem, bool isCircleDelegate); NavigationItemModel* mRootItem; NavigationListModel* mNavList; diff --git a/LenaPi/main.qml b/LenaPi/main.qml index d69e653..c229698 100644 --- a/LenaPi/main.qml +++ b/LenaPi/main.qml @@ -29,24 +29,23 @@ Window { } } } - MyScrollView{ - anchors.left: parent.left - anchors.right: parent.right - anchors.top: circleList.bottom - anchors.margins: 20 +// MyScrollView{ +// anchors.left: parent.left +// anchors.right: parent.right +// anchors.top: circleList.bottom +// anchors.margins: 20 - flickableItem.interactive: true - contentItem: - ListView{ - model: 20 - anchors.fill: parent - spacing: 10 - orientation: ListView.Horizontal - delegate: - NavigationListDelegate{ - id: test - isCircle: false - } - } - } +// flickableItem.interactive: true +// contentItem: +// ListView{ +// model: 20 +// anchors.fill: parent +// spacing: 10 +// orientation: ListView.Horizontal +// delegate: +// NavigationListDelegate{ +// id: test +// } +// } +// } } diff --git a/LenaPi/models/NavigationItemModel.cpp b/LenaPi/models/NavigationItemModel.cpp index 1e3a0a3..0b04ca5 100644 --- a/LenaPi/models/NavigationItemModel.cpp +++ b/LenaPi/models/NavigationItemModel.cpp @@ -42,6 +42,19 @@ bool NavigationItemModel::setPath(const QString &path) return true; } +bool NavigationItemModel::isCircleDelegate() const +{ + return mIsCircleDelegate; +} + +void NavigationItemModel::setCircleDelegate(bool value) +{ + if(value != mIsCircleDelegate){ + mIsCircleDelegate = value; + emit isCircleDelegateChanged(); + } +} + NavigationItemModel *NavigationItemModel::getParentItem() { return mParentItem; diff --git a/LenaPi/models/NavigationItemModel.h b/LenaPi/models/NavigationItemModel.h index 97749be..6d1801a 100644 --- a/LenaPi/models/NavigationItemModel.h +++ b/LenaPi/models/NavigationItemModel.h @@ -8,8 +8,10 @@ class NavigationItemModel : public QObject Q_OBJECT Q_PROPERTY(QString pImageSource READ getImageSource NOTIFY imageSourceChanged) + Q_PROPERTY(bool pIsCircleDelegate READ isCircleDelegate NOTIFY isCircleDelegateChanged) signals: + void isCircleDelegateChanged(); void imageSourceChanged(); void clicked(); @@ -21,6 +23,9 @@ public: QString getPath() const; bool setPath(const QString & path); + bool isCircleDelegate() const; + void setCircleDelegate(bool value); + NavigationItemModel* getParentItem(); QList getChildren(); @@ -32,6 +37,7 @@ public: private: QString mPath = QString(""); QString mImageSource; + bool mIsCircleDelegate = false; QList mChildren = QList(); NavigationItemModel* mParentItem = nullptr;