diff --git a/sharing/linux/app/AppContent.qml b/sharing/linux/app/AppContent.qml index aaccea23..a573c5f0 100644 --- a/sharing/linux/app/AppContent.qml +++ b/sharing/linux/app/AppContent.qml @@ -12,7 +12,7 @@ RowLayout { id: contentStack Layout.fillWidth: true Layout.fillHeight: true - currentIndex: 1 + currentIndex: 2 Drop {} @@ -21,18 +21,15 @@ RowLayout { Layout.fillWidth: true Layout.fillHeight: true - Targets{} - + Targets {} } - Rectangle { - color: "transparent" - - Text { - text: "User Profile Management" - anchors.centerIn: parent - font.pointSize: 22 - color: "#333333" - } + IncomingShare { + filename: "VacationPhoto_2026.jpg" + targetname: "Lasan's A55" + progressValue: 0.64 + statusText: "Receiving 1 of 1 items" + transferring: true } + } } diff --git a/sharing/linux/app/BUILD b/sharing/linux/app/BUILD index a7d6593f..11db23b0 100644 --- a/sharing/linux/app/BUILD +++ b/sharing/linux/app/BUILD @@ -25,11 +25,17 @@ genrule( srcs = [ "resources.qrc", "main.qml", + "AppContent.qml", "Drop.qml", "Sidebar.qml", + "ShareTarget.qml", + "Targets.qml", "googlesans_var.ttf", "icons/file.svg", - "icons/up_file.svg" + "icons/laptop.svg", + "icons/smartphone.svg", + "icons/tablet.svg", + "icons/up_file.svg", ], outs = ["qrc_resources.cpp"], cmd = "/usr/lib64/qt6/libexec/rcc $(location resources.qrc) -o $(location qrc_resources.cpp)", diff --git a/sharing/linux/app/IncomingShare.qml b/sharing/linux/app/IncomingShare.qml new file mode 100644 index 00000000..67ded9e7 --- /dev/null +++ b/sharing/linux/app/IncomingShare.qml @@ -0,0 +1,264 @@ +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls +import QtQuick.Shapes + +Rectangle { + id: root + color: "#DCF5FF" + Layout.fillWidth: true + Layout.fillHeight: true + + property string filename: "ThisIsAnImage.jpg" + property string targetname: "Lasan's A55" + property bool transferring: true + property real progressValue: 0.64 + property string statusText: "Receiving file" + + Item { + visible: root.transferring + anchors.centerIn: parent + width: Math.min(parent.width * 0.9, 700) + height: 212 + + Rectangle { + anchors.fill: parent + radius: 24 + color: "#FFFFFF" + border.color: "#BCE5F5" + border.width: 1 + } + + RowLayout { + anchors.fill: parent + anchors.margins: 28 + spacing: 24 + + Rectangle { + Layout.preferredWidth: 96 + Layout.preferredHeight: 96 + radius: 24 + color: "#E8F7FC" + + Image { + anchors.centerIn: parent + width: 60 + height: 60 + source: "qrc:/icons/file.svg" + fillMode: Image.PreserveAspectFit + sourceSize.width: width + sourceSize.height: height + smooth: true + antialiasing: true + } + } + + ColumnLayout { + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter + spacing: 10 + + Text { + text: root.targetname + font.pointSize: 17 + font.weight: 700 + color: "#1A1C1E" + elide: Text.ElideRight + Layout.fillWidth: true + } + + Text { + text: root.filename + color: "#57707A" + font.pointSize: 12 + elide: Text.ElideMiddle + Layout.fillWidth: true + } + + ProgressBar { + id: transferProgress + Layout.fillWidth: true + from: 0 + to: 1 + value: Math.max(0, Math.min(1, root.progressValue)) + + background: Rectangle { + implicitHeight: 10 + radius: 5 + color: "#DDEEF5" + } + + contentItem: Item { + Rectangle { + width: transferProgress.visualPosition * parent.width + height: 10 + radius: 5 + color: "#0D6D90" + } + } + } + + RowLayout { + Layout.fillWidth: true + + Text { + text: root.statusText + color: "#57707A" + font.pointSize: 12 + Layout.fillWidth: true + elide: Text.ElideRight + } + + Text { + text: Math.round(Math.max(0, Math.min(1, root.progressValue)) * 100) + "%" + color: "#0D6D90" + font.pointSize: 13 + font.weight: 700 + } + } + + RowLayout { + Layout.fillWidth: true + + Item { + Layout.fillWidth: true + } + + Button { + id: cancelButton + text: "Cancel" + + contentItem: Text { + text: cancelButton.text + font.pointSize: 14 + font.weight: 600 + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + implicitWidth: 118 + implicitHeight: 46 + radius: 12 + color: cancelButton.hovered ? "#B62828" : "#D94C4C" + } + } + } + } + } + } + + Item { + visible: !root.transferring + anchors.centerIn: parent + width: Math.min(parent.width * 0.85, 360) + height: 460 + + Rectangle { + id: cardBackground + anchors.fill: parent + radius: 24 + color: "#FFFFFF" + border.color: "#BCE5F5" + border.width: 1 + } + + ColumnLayout { + anchors.fill: parent + anchors.margins: 28 + spacing: 16 + + Text { + Layout.fillWidth: true + font.pointSize: 18 + font.weight: 700 + color: "#377B95" + text: "Incoming share" + horizontalAlignment: Text.AlignHCenter + } + + Image { + source: "qrc:/icons/file.svg" + Layout.fillHeight: true + Layout.fillWidth: true + fillMode: Image.PreserveAspectCrop + sourceSize.height: height + sourceSize.width: width + smooth: true + antialiasing: true + } + + Text { + Layout.fillWidth: true + color: "#57707A" + font.pointSize: 11 + wrapMode: Text.WrapAnywhere + text: root.filename + horizontalAlignment: Text.AlignHCenter + maximumLineCount: 2 + elide: Text.ElideMiddle + } + + Text { + Layout.fillWidth: true + color: "#57707A" + font.pointSize: 15 + font.weight: 700 + wrapMode: Text.WrapAnywhere + text: root.targetname + horizontalAlignment: Text.AlignHCenter + maximumLineCount: 2 + elide: Text.ElideMiddle + } + + RowLayout { + Button { + id: cancelbutton + Layout.fillWidth: true + text: "Cancel" + + contentItem: Text { + text: cancelbutton.text + font.pointSize: 14 + font.weight: 600 + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + implicitHeight: 46 + radius: 12 + color: cancelbutton.hovered ? "#db1e1e" : "#6EA7B6" + border.color: "#91C8DE" + border.width: 1 + } + } + + Button { + id: acceptButton + Layout.fillWidth: true + text: "Accept" + + contentItem: Text { + text: acceptButton.text + font.pointSize: 14 + font.weight: 600 + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + implicitHeight: 46 + radius: 12 + color: acceptButton.hovered ? "#195871" : "#06384C" + border.color: "#91C8DE" + border.width: 1 + } + } + } + } + } +} diff --git a/sharing/linux/app/main.cc b/sharing/linux/app/main.cc index f678a73e..74000af1 100644 --- a/sharing/linux/app/main.cc +++ b/sharing/linux/app/main.cc @@ -58,8 +58,8 @@ bool ReloadInnerContent(QQmlApplicationEngine& engine) { return QMetaObject::invokeMethod(root, "reloadInnerContent"); } -bool CanReloadInnerContent(const QFileInfo& changed_file) { - return changed_file.fileName() == QStringLiteral("AppContent.qml"); +bool RequiresFullReload(const QFileInfo& changed_file) { + return changed_file.fileName() == QStringLiteral("main.qml"); } } // namespace @@ -101,9 +101,7 @@ int main(int argc, char* argv[]) { WatchQmlFiles(watcher, qml_source_dir); const QFileInfo changed_file(changed_path); - if (changed_file.fileName() == QStringLiteral("main.qml") || - !CanReloadInnerContent(changed_file) || - engine.rootObjects().isEmpty()) { + if (RequiresFullReload(changed_file) || engine.rootObjects().isEmpty()) { fullReload(); return; } diff --git a/sharing/linux/app/resources.qrc b/sharing/linux/app/resources.qrc index b90f6d80..6a515ad8 100644 --- a/sharing/linux/app/resources.qrc +++ b/sharing/linux/app/resources.qrc @@ -12,6 +12,5 @@ icons/tablet.svg icons/laptop.svg icons/smartphone.svg -