diff --git a/CMakeLists.txt b/CMakeLists.txt
index 98ed6d4..a29fa18 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -87,6 +87,7 @@ set(SOURCE_FILES
src/extension/menu-extension.cpp src/extension/menu-extension.h
src/extension/menu-extension-iface.h
src/appdata/data-provider-plugin-iface.h
+ src/extension/extensions/folder-extension.cpp src/extension/extensions/folder-extension.h
)
# qrc文件
diff --git a/qml/extensions/FolderExtension.qml b/qml/extensions/FolderExtension.qml
new file mode 100644
index 0000000..1958f7b
--- /dev/null
+++ b/qml/extensions/FolderExtension.qml
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2022, KylinSoft Co., Ltd.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+import QtQuick 2.0
+import org.ukui.menu.extension 1.0
+
+UkuiMenuExtension {
+ onExtensionDataChanged: {
+ folderView.model = extensionData.folders
+ }
+
+ Component.onCompleted: {
+ folderView.model = extensionData.folders
+ }
+
+ Rectangle {
+ anchors.fill: parent;
+ color: "green"
+
+ ListView {
+ id: folderView
+ anchors.fill: parent
+ delegate: Item {
+ width: ListView.view.width
+ height: 150
+
+ Column {
+ anchors.fill: parent
+ Row {
+ width: parent.width;
+ height: 50
+ Text {
+ width: 100
+ height: parent.height
+ text: "index: " + index
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ }
+
+ Text {
+ width: 200
+ height: parent.height
+ text: "name: " + modelData.name
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ }
+ }
+
+ Text {
+ width: parent.width;
+ height: 100
+ text: "name: " + modelData.apps
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignLeft
+ wrapMode: Text.WordWrap
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/qml/qml.qrc b/qml/qml.qrc
index efc3fb5..49f290d 100644
--- a/qml/qml.qrc
+++ b/qml/qml.qrc
@@ -14,5 +14,6 @@
AppControls2/StyleBackground.qml
AppControls2/StyleText.qml
AppControls2/IconLabel.qml
+ extensions/FolderExtension.qml
diff --git a/src/extension/extensions/folder-extension.cpp b/src/extension/extensions/folder-extension.cpp
new file mode 100644
index 0000000..f2c34d0
--- /dev/null
+++ b/src/extension/extensions/folder-extension.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2022, KylinSoft Co., Ltd.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#include "folder-extension.h"
+#include "app-folder-helper.h"
+
+#include
+
+namespace UkuiMenu {
+
+FolderExtension::FolderExtension(QObject *parent) : MenuExtensionIFace(parent)
+{
+ qRegisterMetaType("Folder");
+ m_data.insert("name", "old name: hxf");
+
+ QVariantList folders;
+ for (const auto &item: AppFolderHelper::instance()->folderData()) {
+ folders.append(QVariant::fromValue(item));
+ }
+
+ m_data.insert("folders", folders);
+}
+
+int FolderExtension::index()
+{
+ return 0;
+}
+
+QString FolderExtension::name()
+{
+ return "Folder";
+}
+
+QUrl FolderExtension::url()
+{
+ return {"qrc:///qml/extensions/FolderExtension.qml"};
+}
+
+QVariantMap FolderExtension::data()
+{
+ return m_data;
+}
+
+void FolderExtension::receive(QVariantMap data)
+{
+ for (const auto &item: data) {
+ qDebug() << "receive item:" << item.toString();
+ }
+
+ m_data.insert("name", "new name: hxf");
+ Q_EMIT dataUpdated();
+}
+
+} // UkuiMenu
diff --git a/src/extension/extensions/folder-extension.h b/src/extension/extensions/folder-extension.h
new file mode 100644
index 0000000..7a54ee2
--- /dev/null
+++ b/src/extension/extensions/folder-extension.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2022, KylinSoft Co., Ltd.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+#ifndef UKUI_MENU_FOLDER_EXTENSION_H
+#define UKUI_MENU_FOLDER_EXTENSION_H
+
+#include "../menu-extension-iface.h"
+
+namespace UkuiMenu {
+
+class FolderExtension : public MenuExtensionIFace
+{
+ Q_OBJECT
+public:
+ explicit FolderExtension(QObject *parent = nullptr);
+
+ int index() override;
+ QString name() override;
+ QUrl url() override;
+ QVariantMap data() override;
+ void receive(QVariantMap data) override;
+
+private:
+ QVariantMap m_data;
+};
+
+} // UkuiMenu
+
+#endif //UKUI_MENU_FOLDER_EXTENSION_H
diff --git a/src/extension/menu-extension.cpp b/src/extension/menu-extension.cpp
index a0cc168..25c4ab6 100644
--- a/src/extension/menu-extension.cpp
+++ b/src/extension/menu-extension.cpp
@@ -17,6 +17,7 @@
*/
#include "menu-extension.h"
+#include "extensions/folder-extension.h"
#include
#include
@@ -36,6 +37,7 @@ MenuExtension::MenuExtension()
// TODO load extension from filesystem.
// register extension.
+ registerExtension(new FolderExtension(this));
initModel();
}