ukui-menu/qml/AppUI/PluginSelectMenu.qml

108 lines
3.6 KiB
QML

/*
* 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 <https://www.gnu.org/licenses/>.
*
*/
import QtQuick 2.0
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
AppControls2.RoundButton {
id: pluginSelectButton
Layout.fillHeight: true
Layout.fillWidth: true
Layout.maximumWidth: height
highlight: mainWindow.isFullScreen
autoHighLight: !mainWindow.isFullScreen
buttonIcon: "image://appicon/ukui-selected"
onClicked: pluginSelectMenuRoot.model.autoSwitchProvider();
}
MouseArea {
Layout.alignment: Qt.AlignVCenter
Layout.fillWidth: true
Layout.fillHeight: true
Layout.maximumWidth: 16
Layout.maximumHeight: 16
onClicked: {
if(sortMenuSelector.state === "sortMenuClose") {
sortMenuSelector.state = "sortMenuOpen";
}
pluginSelectMenuRoot.model.openMenu(pluginSelectButton.height - y - mouseY + 8);
}
ThemeIcon {
id: sortMenuSelector
anchors.fill: parent
source: "image://appicon/ukui-up-symbolic"
opacity: 0.5
highLight: 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";
}
}
}
}