添加应用组件

This commit is contained in:
qiqi 2023-02-20 17:23:08 +08:00 committed by hewenfei
parent 240c1b04f8
commit 8bc2709564
9 changed files with 205 additions and 43 deletions

View File

@ -95,6 +95,7 @@ set(SOURCE_FILES
src/extension/extensions/recent-file-extension.cpp src/extension/extensions/recent-file-extension.h src/extension/extensions/recent-file-extension.cpp src/extension/extensions/recent-file-extension.h
src/utils/app-page-header-utils.cpp src/utils/app-page-header-utils.h src/utils/app-page-header-utils.cpp src/utils/app-page-header-utils.h
src/utils/power-button.cpp src/utils/power-button.h src/utils/power-button.cpp src/utils/power-button.h
src/utils/app-manager.cpp src/utils/app-manager.h
) )
# qrc # qrc

View File

@ -1,24 +1,39 @@
import QtQuick 2.0 import QtQuick 2.12
import QtQuick.Layouts 1.12 import QtQuick.Layouts 1.12
import QtQuick.Controls 2.5
import org.ukui.menu.core 1.0
Item { StyleBackground {
RowLayout {
anchors.fill: parent anchors.fill: parent
Image { radius: 4
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter useStyleTransparent: false
Layout.preferredWidth: 32 alpha: control.containsPress ? 0.82 : control.containsMouse ? 0.55 : 0.00
Layout.preferredHeight: 32 ToolTip.visible: content.textTruncated && control.containsMouse
source: icon ToolTip.text: name
}
Text { IconLabel {
Layout.fillWidth: true id: content
Layout.fillHeight: true anchors.fill: parent
Layout.leftMargin: 5 iconHeight: 32; iconWidth: iconHeight
appName: name; appIcon: icon
display: Display.TextBesideIcon
spacing: 12
}
MouseArea {
id: control
anchors.fill: parent
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton
horizontalAlignment: Qt.AlignLeft onPressed: {
verticalAlignment: Qt.AlignVCenter if (mouse.button === Qt.RightButton) {
text: name console.log("RightButtononPressed:",mouse.x,mouse.y);
}
}
onClicked: {
if (mouse.button === Qt.LeftButton) {
appListView.model.appClicked(index);
}
} }
} }
} }

View File

@ -12,14 +12,17 @@ Item {
property string appIcon: "" property string appIcon: ""
// spacing0 spacing12 // spacing0 spacing12
property int spacing: 2 property int spacing: 2
property bool textTruncated: iconText.truncated
state: root.display state: root.display
states: [ states: [
State { State {
name: Display.TextBesideIcon name: Display.TextBesideIcon
AnchorChanges { PropertyChanges {
target: iconImage target: iconImage
anchors.verticalCenter: root.verticalCenter anchors.verticalCenter: root.verticalCenter
anchors.left: root.left
anchors.leftMargin: root.spacing
} }
PropertyChanges { PropertyChanges {
target: iconText target: iconText

View File

@ -18,13 +18,31 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQml 2.12 import QtQml 2.12
import QtQuick.Controls 2.5
import QtQuick.Layouts 1.12
import AppControls2 1.0 as AppControls2 import AppControls2 1.0 as AppControls2
import org.ukui.menu.core 1.0 import org.ukui.menu.core 1.0
ListView { Item {
property string title: "" property string title: ""
MouseArea {
id: appListArea
hoverEnabled: true
anchors.fill: parent
RowLayout {
anchors.fill: parent
spacing: 0
ListView {
id: appListView
spacing: 4
Layout.fillHeight: true
Layout.fillWidth: true
ScrollBar.vertical: appListScrollBar
model: modelManager.getAppModel() model: modelManager.getAppModel()
delegate: Component { delegate: Component {
Loader { Loader {
width: ListView.view ? ListView.view.width : 0 width: ListView.view ? ListView.view.width : 0
@ -46,6 +64,16 @@ ListView {
} }
} }
} }
}
AppControls2.ScrollBar {
id: appListScrollBar
Layout.fillHeight: true
Layout.preferredWidth: 14
visible: appListArea.containsMouse
}
}
}
Component { Component {
id: appItem id: appItem
@ -62,3 +90,4 @@ ListView {
AppControls2.FolderItem {} AppControls2.FolderItem {}
} }
} }

View File

@ -16,9 +16,9 @@
* *
*/ */
import QtQuick 2.0 import QtQuick 2.12
import QtQuick.Layouts 1.12 import QtQuick.Layouts 1.12
import QtQuick.Controls 2.5
import AppControls2 1.0 as AppControls2 import AppControls2 1.0 as AppControls2
import org.ukui.menu.core 1.0 import org.ukui.menu.core 1.0
@ -37,11 +37,10 @@ AppControls2.StyleBackground {
} }
AppList { AppList {
id: appList clip: true
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
Layout.leftMargin: 16 Layout.leftMargin: 4
clip: true
} }
} }
} }

View File

@ -17,6 +17,7 @@
*/ */
#include "model.h" #include "model.h"
#include "app-manager.h"
#include "data-provider-manager.h" #include "data-provider-manager.h"
#include <QObject> #include <QObject>
@ -92,4 +93,13 @@ QVariantList AppModel::folderApps(const QString &folderName)
return list; return list;
} }
void AppModel::appClicked(const int &index)
{
if (index < 0 || index >= m_apps.size()) {
return;
}
AppManager::instance()->launchApp(m_apps.at(index).id());
}
} // UkuiMenu } // UkuiMenu

View File

@ -37,6 +37,7 @@ public:
QHash<int, QByteArray> roleNames() const override; QHash<int, QByteArray> roleNames() const override;
Q_INVOKABLE QVariantList folderApps(const QString &folderName); Q_INVOKABLE QVariantList folderApps(const QString &folderName);
Q_INVOKABLE void appClicked(const int &index);
private: private:
QVector<DataEntity> m_apps; QVector<DataEntity> m_apps;

58
src/utils/app-manager.cpp Normal file
View File

@ -0,0 +1,58 @@
/*
* 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/>.
*
*/
#include "app-manager.h"
#include <QDebug>
#include <QDBusReply>
#include <QDBusInterface>
#define KYLIN_APP_MANAGER_NAME "com.kylin.AppManager"
#define KYLIN_APP_MANAGER_PATH "/com/kylin/AppManager"
#define KYLIN_APP_MANAGER_INTERFACE "com.kylin.AppManager"
namespace UkuiMenu {
AppManager *AppManager::instance()
{
static AppManager instance(nullptr);
return &instance;
}
AppManager::AppManager(QObject *parent) : QObject(parent)
{
m_appManagerDbusInterface = new QDBusInterface(KYLIN_APP_MANAGER_NAME,
KYLIN_APP_MANAGER_PATH,
KYLIN_APP_MANAGER_INTERFACE,
QDBusConnection::sessionBus());
if (!m_appManagerDbusInterface) {
qWarning() << "appManager dbus does not exists.";
}
}
bool AppManager::launchApp(const QString &desktopFile)
{
if (m_appManagerDbusInterface != nullptr) {
QDBusReply<bool> status = m_appManagerDbusInterface->call("LaunchApp", desktopFile);
return status;
} else {
qWarning() <<"LaunchApp is failed,return false";
return false;
}
}
} // UkuiMenu

46
src/utils/app-manager.h Normal file
View File

@ -0,0 +1,46 @@
/*
* 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/>.
*
*/
#ifndef UKUI_MENU_APP_MANAGER_H
#define UKUI_MENU_APP_MANAGER_H
#include <QObject>
class QDBusInterface;
namespace UkuiMenu {
class AppManager : public QObject
{
Q_OBJECT
public:
static AppManager *instance();
AppManager(const AppManager &obj) = delete;
AppManager &operator = (const AppManager &obj) = delete;
bool launchApp(const QString &desktopFile);
private:
explicit AppManager(QObject *parent = nullptr);
private:
QDBusInterface *m_appManagerDbusInterface = nullptr;
};
} // UkuiMenu
#endif //UKUI_MENU_APP_MANAGER_H