diff --git a/qml/AppUI/AppPageHeader.qml b/qml/AppUI/AppPageHeader.qml
index 38b4f3b..e2c1f00 100644
--- a/qml/AppUI/AppPageHeader.qml
+++ b/qml/AppUI/AppPageHeader.qml
@@ -30,12 +30,6 @@ Item {
property Component content: null
clip: true
- function changeToSearch(keyEvent) {
- if (appPageHeaderRoot.content === null) {
- loader.item.changeToSearchState(keyEvent);
- }
- }
-
Loader {
id: loader
anchors.fill: parent
@@ -50,65 +44,6 @@ Item {
Item {
id: root
- Item {
- id: searchBar
- width: parent.width; height: 30
- Component.onCompleted: {
- visible = false;
- mainWindow.visibleChanged.connect(searchBarHide);
- }
- Component.onDestruction: mainWindow.visibleChanged.disconnect(searchBarHide);
-
- function searchBarHide() {
- if (!mainWindow.visible) {
- root.state = "normal"
- }
- }
-
- RowLayout {
- anchors.fill: parent
- anchors.leftMargin: 15
- anchors.rightMargin: 15
- spacing: 10
-
- SearchInputBar {
- id: searchInputBar
- property string providerId: ""
-
- Layout.fillWidth: true
- Layout.fillHeight: true
- radius: 16
- changeFocusTarget: focusToPageContent
- onTextChanged: {
- if (text === "") {
- pluginSelectMenu.model.reactivateProvider();
- } else {
- appPageHeaderUtils.activateProvider(providerId);
- appPageHeaderUtils.startSearch(text);
- }
- }
- }
-
- AppControls2.RoundButton {
- Layout.preferredWidth: parent.height; Layout.preferredHeight: parent.height
- buttonIcon: "image://appicon/edit-clear-symbolic"
- activeFocusOnTab: true
-
- onClicked: {
- normalUI.focusToFalse();
- searchInputBar.clear();
- root.state = "normal";
- }
- Keys.onPressed: {
- if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) {
- searchInputBar.clear();
- root.state = "normal";
- }
- }
- }
- }
- }
-
Item {
id: pluginSelectionBar
width: parent.width
@@ -125,12 +60,12 @@ Item {
font.bold: true
}
- PluginSelectMenu {
- id: pluginSelectMenu
- Layout.preferredWidth: childrenRect.width
+ PluginSelectButton {
+ id: pluginSelectButton
+ Layout.preferredWidth: 64
Layout.preferredHeight: 32
Layout.maximumHeight: 32
- Layout.minimumWidth: 32
+ Layout.minimumWidth: 64
Layout.rightMargin: 8
Layout.alignment: Qt.AlignVCenter
}
diff --git a/qml/AppUI/FullScreenHeader.qml b/qml/AppUI/FullScreenHeader.qml
index 39ac80f..566f5bc 100644
--- a/qml/AppUI/FullScreenHeader.qml
+++ b/qml/AppUI/FullScreenHeader.qml
@@ -9,6 +9,15 @@ Item {
clip: true
property alias searchOpacity: searchInputBar.opacity
property alias searchText: searchInputBar.text
+
+ PluginSelectButton {
+ id: pluginSelectButton
+ anchors.left: parent.left
+ anchors.leftMargin: 72
+ anchors.verticalCenter: parent.verticalCenter
+ height: 32; width: 64
+ }
+
SearchInputBar {
id: searchInputBar
width: 372; height: 36
@@ -18,7 +27,7 @@ Item {
onTextChanged: {
if (text === "") {
- pluginSelectMenu.model.reactivateProvider();
+ pluginSelectButton.model.reactivateProvider();
} else {
appPageHeaderUtils.model(PluginGroup.Button).reactivateProvider();
appPageHeaderUtils.startSearch(text);
@@ -29,15 +38,6 @@ Item {
}
}
- PluginSelectMenu {
- id: pluginSelectMenu
- anchors.right: parent.right
- anchors.rightMargin: 72 // 48+24
- anchors.verticalCenter: parent.verticalCenter
- height: 48; width: 72 // 48+16+8
- spacing: 8
- }
-
AppControls2.StyleBackground {
width: 48; height: width
radius: 4
diff --git a/qml/AppUI/PluginSelectButton.qml b/qml/AppUI/PluginSelectButton.qml
new file mode 100644
index 0000000..bd09a5a
--- /dev/null
+++ b/qml/AppUI/PluginSelectButton.qml
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2023, 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.12
+import QtQuick.Layouts 1.12
+import QtQuick.Controls 2.12
+
+import AppControls2 1.0 as AppControls2
+import org.ukui.menu.core 1.0
+import org.ukui.menu.utils 1.0
+import org.ukui.quick.items 1.0 as UkuiItems
+
+UkuiItems.StyleBackground {
+ useStyleTransparency: false
+ paletteRole: UkuiItems.Theme.Text
+ radius: childrenRect.width / 2
+ alpha: 0.06
+
+
+ function resetFocus() {
+ if(!mainWindow.isFullScreen) {
+ normalUI.focusToFalse();
+ }
+ }
+
+ RowLayout {
+ id: pluginSortButtonRoot
+ property int currentId: 0
+ anchors.fill: parent
+ anchors.topMargin: 2
+ anchors.bottomMargin: 2
+ anchors.leftMargin: 2
+ anchors.rightMargin: 2
+ property var model: appPageHeaderUtils.model(PluginGroup.SortMenuItem)
+ spacing: 4
+
+ UkuiItems.Button {
+ id: pluginLetterSortButton
+
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ Layout.maximumWidth: height
+ activeFocusOnTab: true
+ ToolTip.delay: 500
+ ToolTip.text: qsTr("Letter Sort")
+ ToolTip.visible: containsMouse
+
+ background.radius: width / 2
+ icon.mode: parent.currentId === 0 ? mainWindow.isFullScreen ? UkuiItems.Icon.AutoHighlight : UkuiItems.Icon.Normal : UkuiItems.Icon.Disabled
+ icon.source: pluginSortButtonRoot.model.getProviderIcon(0);
+ background.paletteRole: UkuiItems.Theme.Light
+ background.alpha: parent.currentId === 0 ? 0.7 : 0
+
+ onClicked: {
+ resetFocus();
+ pluginSortButtonRoot.model.changeProvider(0);
+ }
+ Keys.onPressed: {
+ if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) {
+ pluginSortButtonRoot.model.changeProvider(0);
+ }
+ }
+ }
+
+ UkuiItems.Button {
+ id: pluginCateGoryButton
+
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ Layout.maximumWidth: height
+ activeFocusOnTab: true
+ ToolTip.delay: 500
+ ToolTip.text: qsTr("Category")
+ ToolTip.visible: containsMouse
+
+ background.radius: width / 2
+ icon.mode: parent.currentId === 1 ? mainWindow.isFullScreen ? UkuiItems.Icon.AutoHighlight : UkuiItems.Icon.Normal : UkuiItems.Icon.Disabled
+ icon.source: pluginSortButtonRoot.model.getProviderIcon(1);
+ background.paletteRole: UkuiItems.Theme.Light
+ background.alpha: parent.currentId === 1 ? 0.7 : 0
+
+ onClicked: {
+ resetFocus();
+ pluginSortButtonRoot.model.changeProvider(1);
+ }
+ Keys.onPressed: {
+ if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) {
+ pluginSortButtonRoot.model.changeProvider(1);
+ }
+ }
+ }
+
+ Component.onCompleted: {
+ updateProviderId();
+ pluginSortButtonRoot.model.currentIndexChanged.connect(updateProviderId);
+ }
+
+ Component.onDestruction: {
+ pluginSortButtonRoot.model.currentIndexChanged.disconnect(updateProviderId);
+ }
+
+ function updateProviderId() {
+ currentId = pluginSortButtonRoot.model.currentProviderId();
+ }
+ }
+}
diff --git a/qml/AppUI/PluginSelectMenu.qml b/qml/AppUI/PluginSelectMenu.qml
deleted file mode 100644
index d6673dd..0000000
--- a/qml/AppUI/PluginSelectMenu.qml
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2023, 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.12
-import QtQuick.Layouts 1.12
-import QtQuick.Controls 2.12
-
-import AppControls2 1.0 as AppControls2
-import org.ukui.menu.core 1.0
-import org.ukui.menu.utils 1.0
-
-RowLayout {
- id: pluginSelectMenuRoot
- property var model: appPageHeaderUtils.model(PluginGroup.SortMenuItem)
- spacing: 2
- function resetFocus() {
- if(!mainWindow.isFullScreen) {
- normalUI.focusToFalse();
- }
- }
-
- AppControls2.RoundButton {
- id: pluginSelectButton
- Layout.fillHeight: true
- Layout.fillWidth: true
- Layout.maximumWidth: height
- activeFocusOnTab: true
- ToolTip.delay: 500
- ToolTip.text: qsTr("Switch Sort Type")
- ToolTip.visible: containsMouse
-
- highlight: mainWindow.isFullScreen
- autoHighLight: !mainWindow.isFullScreen
- buttonIcon: "image://appicon/ukui-selected"
- onClicked: {
- resetFocus();
- pluginSelectMenuRoot.model.autoSwitchProvider();
- }
- Keys.onPressed: {
- if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) {
- pluginSelectMenuRoot.model.autoSwitchProvider();
- }
- }
- }
-
- MouseArea {
- id: sortMenuMouseArea
- Layout.alignment: Qt.AlignVCenter
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.maximumWidth: 16
- Layout.maximumHeight: 16
- ToolTip.delay: 500
- ToolTip.text: qsTr("Sort Type Options")
- ToolTip.visible: containsMouse
- hoverEnabled: true
-
- activeFocusOnTab: true
- Keys.onPressed: {
- if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) {
- sortMenuClicked();
- }
- }
- onClicked: {
- resetFocus();
- sortMenuClicked();
- }
- function sortMenuClicked() {
- if(sortMenuSelector.state === "sortMenuClose") {
- sortMenuSelector.state = "sortMenuOpen";
- }
- var pressY = sortMenuMouseArea.mapToGlobal(0, 0).y;
- var pressX = sortMenuMouseArea.mapToGlobal(0, 0).x;
- pluginSelectMenuRoot.model.openMenu(pluginSelectButton.height - y - mouseY + 8, pressX, pressY);
- }
-
- AppControls2.StyleBackground {
- anchors.fill: parent
- useStyleTransparent: false
- paletteRole: Palette.Highlight
- alpha: 0
- borderColor: Palette.Highlight
- border.width: sortMenuMouseArea.activeFocus ? 2 : 0
- }
-
- ThemeIcon {
- id: sortMenuSelector
- anchors.fill: parent
- source: "image://appicon/ukui-up-symbolic"
- opacity: 0.5
- highLight: mainWindow.isFullScreen
- autoHighLight: !mainWindow.isFullScreen
- state: "sortMenuClose"
-
- states: [
- State {
- name: "sortMenuOpen"
- PropertyChanges { target: sortMenuSelector; rotation: 0 }
- },
- State {
- name: "sortMenuClose"
- PropertyChanges { target: sortMenuSelector; rotation: 180 }
- }
- ]
- transitions: [
- Transition {
- to: "sortMenuOpen"
- RotationAnimation { duration: 100; direction: RotationAnimation.Counterclockwise}
- },
- Transition {
- to: "sortMenuClose"
- RotationAnimation { duration: 100; direction: RotationAnimation.Clockwise }
- }
- ]
-
- Component.onCompleted: {
- updateProviderIcon();
- pluginSelectMenuRoot.model.currentIndexChanged.connect(updateProviderIcon);
- pluginSelectMenuRoot.model.menuClosed.connect(changeMenuStatus);
- }
-
- Component.onDestruction: {
- pluginSelectMenuRoot.model.currentIndexChanged.disconnect(updateProviderIcon);
- pluginSelectMenuRoot.model.menuClosed.disconnect(changeMenuStatus);
- }
-
- function updateProviderIcon() {
- pluginSelectButton.buttonIcon = pluginSelectMenuRoot.model.currentProviderIcon();
- }
-
- function changeMenuStatus() {
- sortMenuSelector.state = "sortMenuClose";
- }
- }
- }
-}
diff --git a/qml/AppUI/qmldir b/qml/AppUI/qmldir
index 8d5cdc3..edf547f 100644
--- a/qml/AppUI/qmldir
+++ b/qml/AppUI/qmldir
@@ -8,7 +8,7 @@ FullScreenUI 1.0 FullScreenUI.qml
AppPageHeader 1.0 AppPageHeader.qml
AppListView 1.0 AppListView.qml
SearchInputBar 1.0 SearchInputBar.qml
-PluginSelectMenu 1.0 PluginSelectMenu.qml
+PluginSelectButton 1.0 PluginSelectButton.qml
FullScreenHeader 1.0 FullScreenHeader.qml
FullScreenContent 1.0 FullScreenContent.qml
FullScreenFooter 1.0 FullScreenFooter.qml
diff --git a/qml/qml.qrc b/qml/qml.qrc
index 2522c60..61faa3d 100644
--- a/qml/qml.qrc
+++ b/qml/qml.qrc
@@ -29,7 +29,7 @@
AppControls2/FolderIcon.qml
AppUI/SelectionPage.qml
AppUI/AppPageContent.qml
- AppUI/PluginSelectMenu.qml
+ AppUI/PluginSelectButton.qml
AppUI/EditText.qml
AppUI/FullScreenFolder.qml
AppUI/AppPageSearch.qml
diff --git a/src/appdata/data-provider-manager.cpp b/src/appdata/data-provider-manager.cpp
index 85dcf74..2e617c3 100644
--- a/src/appdata/data-provider-manager.cpp
+++ b/src/appdata/data-provider-manager.cpp
@@ -44,10 +44,6 @@ DataProviderManager::DataProviderManager()
void DataProviderManager::initProviders()
{
- auto *allProvider = new AllAppDataProvider;
- connect(this, &DataProviderManager::toUpdate, allProvider, &AllAppDataProvider::update);
- registerProvider(allProvider);
-
auto *search = new AppSearchPlugin;
connect(this, &DataProviderManager::toUpdate, search, &AppSearchPlugin::update);
registerProvider(search);
@@ -60,8 +56,7 @@ void DataProviderManager::initProviders()
connect(this, &DataProviderManager::toUpdate, sort, &AppLetterSortPlugin::update);
registerProvider(sort);
- activateProvider(allProvider->id(), false);
- allProvider->moveToThread(&m_worker);
+ activateProvider(sort->id(), false);
search->moveToThread(&m_worker);
category->moveToThread(&m_worker);
sort->moveToThread(&m_worker);
diff --git a/src/appdata/plugin/all-app-data-provider.cpp b/src/appdata/plugin/all-app-data-provider.cpp
index 3cbaabd..209bbf8 100644
--- a/src/appdata/plugin/all-app-data-provider.cpp
+++ b/src/appdata/plugin/all-app-data-provider.cpp
@@ -41,7 +41,7 @@ AllAppDataProvider::AllAppDataProvider() : DataProviderPluginIFace()
int AllAppDataProvider::index()
{
- return 0;
+ return 2;
}
QString AllAppDataProvider::id()
diff --git a/src/appdata/plugin/app-letter-sort-plugin.cpp b/src/appdata/plugin/app-letter-sort-plugin.cpp
index c158a25..5612102 100644
--- a/src/appdata/plugin/app-letter-sort-plugin.cpp
+++ b/src/appdata/plugin/app-letter-sort-plugin.cpp
@@ -33,7 +33,7 @@ AppLetterSortPlugin::AppLetterSortPlugin()
int AppLetterSortPlugin::index()
{
- return 2;
+ return 0;
}
QString AppLetterSortPlugin::id()
diff --git a/src/utils/app-page-header-utils.cpp b/src/utils/app-page-header-utils.cpp
index 6737d9f..1083dc3 100644
--- a/src/utils/app-page-header-utils.cpp
+++ b/src/utils/app-page-header-utils.cpp
@@ -39,12 +39,11 @@ public:
QHash roleNames() const override;
void updateCurrentPId(const QString &providerId);
- //自动在各个插件之间切换
+ //在各个插件之间切换
Q_INVOKABLE void reactivateProvider();
- Q_INVOKABLE void autoSwitchProvider();
- Q_INVOKABLE QString currentProviderIcon();
-
- Q_INVOKABLE void openMenu(int offset, int mouseX, int mouseY);
+ Q_INVOKABLE void changeProvider(int i);
+ Q_INVOKABLE QString getProviderIcon(int i);
+ Q_INVOKABLE int currentProviderId();
Q_SIGNALS:
void currentIndexChanged();
@@ -137,47 +136,19 @@ int ProviderModel::indexOfProvider(const QString &providerId)
return -1;
}
-void ProviderModel::autoSwitchProvider()
+void ProviderModel::changeProvider(int i)
{
- m_currentIndex = (m_currentIndex + 1) % m_providers.size();
- DataProviderManager::instance()->activateProvider(m_providers.at(m_currentIndex).id);
+ DataProviderManager::instance()->activateProvider(m_providers.at(i).id);
}
-QString ProviderModel::currentProviderIcon()
+QString ProviderModel::getProviderIcon(int i)
{
- return data(createIndex(m_currentIndex, 0), Icon).toString();
+ return data(createIndex(i, 0), Icon).toString();
}
-void ProviderModel::openMenu(int offset, int mouseX, int mouseY)
+int ProviderModel::currentProviderId()
{
- if (m_menu) {
- m_menu.data()->close();
- return;
- }
-
- QMenu *menu = new QMenu;
- menu->setAttribute(Qt::WA_DeleteOnClose);
-
- if (m_providers.isEmpty()) {
- return;
- }
-
- for (const ProviderInfo &info : m_providers) {
- QAction *action = new QAction(info.name, menu);
- action->setCheckable(true);
- connect(action, &QAction::triggered, menu, [info]() {
- DataProviderManager::instance()->activateProvider(info.id);
- });
- menu->addAction(action);
- }
-
- menu->actions().at(m_currentIndex)->setChecked(true);
- int x = mouseX - menu->sizeHint().width();
- int y = mouseY + offset;
-
- m_menu = menu;
- connect(menu, &QMenu::aboutToHide, this, &ProviderModel::menuClosed);
- menu->popup(QPoint(x, y));
+ return m_currentIndex;
}
void ProviderModel::reactivateProvider()