diff --git a/CMakeLists.txt b/CMakeLists.txt index 032a0ff..2ff7ce4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) -find_package(Qt6 REQUIRED COMPONENTS Core) +find_package(Qt6 REQUIRED COMPONENTS Core Quick) find_package(Dtk6 REQUIRED COMPONENTS Core) add_library(org.deepin.ds.graphics-driver SHARED @@ -27,9 +27,11 @@ target_include_directories(org.deepin.ds.graphics-driver PRIVATE target_link_libraries(org.deepin.ds.graphics-driver PRIVATE Qt6::Core + Qt6::Quick Dtk6::Core ) # 安装到dde-shell插件目录 install(TARGETS org.deepin.ds.graphics-driver DESTINATION /usr/lib/x86_64-linux-gnu/dde-shell) install(FILES package/metadata.json DESTINATION /usr/share/dde-shell/org.deepin.ds.graphics-driver) +install(FILES package/driverview.qml DESTINATION /usr/share/dde-shell/org.deepin.ds.graphics-driver) diff --git a/package/driverview.qml b/package/driverview.qml index 9d3a6f9..1a4b2e0 100644 --- a/package/driverview.qml +++ b/package/driverview.qml @@ -4,384 +4,24 @@ import QtQuick 2.11 import QtQuick.Controls 2.4 -import QtQuick.Layouts 1.11 import org.deepin.ds 1.0 AppletItem { id: root objectName: "graphics driver applet" - implicitWidth: 320 - implicitHeight: 400 - - property var applet: Applet - - Connections { - target: root.applet - function onInstallSuccess() { - successDialog.open() - } - function onInstallFailed(error) { - errorDialog.text = error - errorDialog.open() - } - function onRequestReboot() { - rebootDialog.open() - } - } + implicitWidth: 100 + implicitHeight: 32 Rectangle { anchors.fill: parent - color: palette.window - radius: 8 - - ColumnLayout { - anchors.fill: parent - anchors.margins: 16 - spacing: 12 - - RowLayout { - Layout.fillWidth: true - - Image { - source: "qrc:/icons/graphics-card.svg" - Layout.preferredWidth: 24 - Layout.preferredHeight: 24 - } - - Text { - text: qsTr("Graphics Driver Manager") - font.pixelSize: 14 - font.bold: true - color: palette.text - Layout.fillWidth: true - } - - Button { - text: qsTr("Refresh") - flat: true - onClicked: root.applet.refreshDeviceInfo() - } - } - - Rectangle { - Layout.fillWidth: true - Layout.preferredHeight: 1 - color: palette.separator - } - - GroupBox { - Layout.fillWidth: true - title: qsTr("Device Information") - - ColumnLayout { - anchors.fill: parent - spacing: 8 - - RowLayout { - Text { - text: qsTr("Vendor:") - font.pixelSize: 12 - color: palette.placeholderText - Layout.preferredWidth: 80 - } - Text { - text: root.applet.deviceInfo ? JSON.parse(root.applet.deviceInfo).vendor || "-" : "-" - font.pixelSize: 12 - color: palette.text - Layout.fillWidth: true - } - } - - RowLayout { - Text { - text: qsTr("Model:") - font.pixelSize: 12 - color: palette.placeholderText - Layout.preferredWidth: 80 - } - Text { - text: root.applet.deviceInfo ? JSON.parse(root.applet.deviceInfo).model || "-" : "-" - font.pixelSize: 12 - color: palette.text - Layout.fillWidth: true - } - } - - RowLayout { - Text { - text: qsTr("Current Driver:") - font.pixelSize: 12 - color: palette.placeholderText - Layout.preferredWidth: 80 - } - Text { - text: root.applet.currentDriver || "-" - font.pixelSize: 12 - color: palette.text - Layout.fillWidth: true - } - } - } - } - - GroupBox { - Layout.fillWidth: true - Layout.fillHeight: true - title: qsTr("Available Drivers") - - ListView { - anchors.fill: parent - model: root.applet.availableDrivers - clip: true - - delegate: ItemDelegate { - width: parent.width - height: 60 - - contentItem: ColumnLayout { - spacing: 4 - - RowLayout { - Text { - text: modelData.name || qsTr("Unknown Driver") - font.pixelSize: 13 - font.bold: true - color: palette.text - Layout.fillWidth: true - } - - Badge { - visible: modelData.name === root.applet.currentDriver - text: qsTr("Current") - color: "green" - } - - Badge { - visible: modelData.name === root.applet.newDriver && modelData.name !== root.applet.currentDriver - text: qsTr("Recommended") - color: "blue" - } - } - - Text { - text: modelData.description || "" - font.pixelSize: 11 - color: palette.placeholderText - Layout.fillWidth: true - elide: Text.ElideRight - maximumLineCount: 1 - } - - Button { - visible: modelData.name !== root.applet.currentDriver && !root.applet.isInstalling - text: qsTr("Switch") - flat: true - Layout.alignment: Qt.AlignRight - onClicked: { - root.applet.prepareInstall(modelData.name) - installConfirmDialog.driverName = modelData.name - installConfirmDialog.open() - } - } - } - } - } - } - - ColumnLayout { - Layout.fillWidth: true - visible: root.applet.isInstalling - spacing: 8 - - RowLayout { - Text { - text: qsTr("Installing...") - font.pixelSize: 12 - color: palette.text - Layout.fillWidth: true - } - - Text { - text: root.applet.installProgress + "%" - font.pixelSize: 12 - color: palette.text - } - } - - ProgressBar { - Layout.fillWidth: true - value: root.applet.installProgress / 100 - } - - Button { - text: qsTr("Cancel") - flat: true - Layout.alignment: Qt.AlignRight - onClicked: root.applet.cancelInstall() - } - } - } - } - - Dialog { - id: installConfirmDialog - property string driverName - title: qsTr("Confirm Driver Switch") - modal: true - anchors.centerIn: parent - width: 300 - - contentItem: ColumnLayout { - spacing: 16 - - Text { - text: qsTr("Are you sure you want to switch to driver: %1?").arg(installConfirmDialog.driverName) - wrapMode: Text.WordWrap - Layout.fillWidth: true - } - - RowLayout { - Layout.fillWidth: true - Layout.alignment: Qt.AlignRight - spacing: 8 - - Button { - text: qsTr("Cancel") - flat: true - onClicked: installConfirmDialog.close() - } - - Button { - text: qsTr("Confirm") - onClicked: { - root.applet.testInstall() - installConfirmDialog.close() - } - } - } - } - } - - Dialog { - id: successDialog - title: qsTr("Installation Success") - modal: true - anchors.centerIn: parent - width: 300 - - contentItem: ColumnLayout { - spacing: 16 - - Text { - text: qsTr("Driver has been installed successfully. Do you want to reboot now?") - wrapMode: Text.WordWrap - Layout.fillWidth: true - } - - RowLayout { - Layout.fillWidth: true - Layout.alignment: Qt.AlignRight - spacing: 8 - - Button { - text: qsTr("Later") - flat: true - onClicked: successDialog.close() - } - - Button { - text: qsTr("Reboot Now") - onClicked: { - DUtil.reboot() - successDialog.close() - } - } - } - } - } - - Dialog { - id: errorDialog - property string text - title: qsTr("Installation Failed") - modal: true - anchors.centerIn: parent - width: 300 - - contentItem: ColumnLayout { - spacing: 16 - - Text { - text: errorDialog.text - wrapMode: Text.WordWrap - Layout.fillWidth: true - } - - RowLayout { - Layout.fillWidth: true - Layout.alignment: Qt.AlignRight - - Button { - text: qsTr("OK") - onClicked: errorDialog.close() - } - } - } - } - - Dialog { - id: rebootDialog - title: qsTr("Reboot Required") - modal: true - anchors.centerIn: parent - width: 300 - - contentItem: ColumnLayout { - spacing: 16 - - Text { - text: qsTr("A reboot is required to apply the driver changes. Do you want to reboot now?") - wrapMode: Text.WordWrap - Layout.fillWidth: true - } - - RowLayout { - Layout.fillWidth: true - Layout.alignment: Qt.AlignRight - spacing: 8 - - Button { - text: qsTr("Later") - flat: true - onClicked: rebootDialog.close() - } - - Button { - text: qsTr("Reboot Now") - onClicked: { - DUtil.reboot() - rebootDialog.close() - } - } - } - } - } - - component Badge: Rectangle { - property string text - property color color: "blue" - - width: badgeText.implicitWidth + 12 - height: 18 - radius: 9 - color: Qt.rgba(color.r, color.g, color.b, 0.2) + color: "#3498db" + radius: 4 Text { - id: badgeText anchors.centerIn: parent - text: root.text - font.pixelSize: 10 - color: root.color + text: "GPU" + font.pixelSize: 12 + color: "white" } } } diff --git a/package/metadata.json b/package/metadata.json index 122fc45..720030f 100644 --- a/package/metadata.json +++ b/package/metadata.json @@ -2,6 +2,8 @@ "Plugin": { "Version": "1.0", "Id": "org.deepin.ds.graphics-driver", + "Url": "driverview.qml", + "Parent": "org.deepin.ds.dock", "Category": "DDE" } }