From 905a3a30f37b299580dd94fdba818997085303be Mon Sep 17 00:00:00 2001 From: "vladimir.kuznetsov" Date: Wed, 12 Apr 2023 19:13:41 +0300 Subject: [PATCH] added some new controls and started layout of pageStart and pageCredentials --- client/amnezia_application.cpp | 2 +- client/images/amneziaBigLogo.png | Bin 0 -> 25211 bytes client/images/amneziaBigLogo.svg | 1 + client/images/controls/arrow-left.svg | 4 + client/resources.qrc | 12 ++ client/ui/pages.h | 2 +- client/ui/qml/Controls2/BodyTextType.qml | 12 ++ client/ui/qml/Controls2/DropDownType.qml | 5 + client/ui/qml/Controls2/FlickableType.qml | 23 +++ client/ui/qml/Controls2/Header2TextType.qml | 10 ++ client/ui/qml/Controls2/HeaderTextType.qml | 40 +++++ .../qml/Controls2/TextFieldWithHeaderType.qml | 4 + client/ui/qml/PageLoader.qml | 57 ++++++ client/ui/qml/Pages/PageTest.qml | 1 - client/ui/qml/Pages2/PageCredentials.qml | 83 +++++++++ client/ui/qml/Pages2/PageStart.qml | 163 ++++++++++++++++++ client/ui/qml/main.qml | 1 - client/ui/qml/main2.qml | 142 +++++++++++++++ 18 files changed, 558 insertions(+), 4 deletions(-) create mode 100644 client/images/amneziaBigLogo.png create mode 100644 client/images/amneziaBigLogo.svg create mode 100644 client/images/controls/arrow-left.svg create mode 100644 client/ui/qml/Controls2/BodyTextType.qml create mode 100644 client/ui/qml/Controls2/DropDownType.qml create mode 100644 client/ui/qml/Controls2/FlickableType.qml create mode 100644 client/ui/qml/Controls2/Header2TextType.qml create mode 100644 client/ui/qml/Controls2/HeaderTextType.qml create mode 100644 client/ui/qml/PageLoader.qml create mode 100644 client/ui/qml/Pages2/PageCredentials.qml create mode 100644 client/ui/qml/Pages2/PageStart.qml create mode 100644 client/ui/qml/main2.qml diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 588854d3..3fb76be2 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -92,7 +92,7 @@ void AmneziaApplication::init() m_engine = new QQmlApplicationEngine; m_uiLogic = new UiLogic(m_settings, m_configurator, m_serverController); - const QUrl url(QStringLiteral("qrc:/ui/qml/main.qml")); + const QUrl url(QStringLiteral("qrc:/ui/qml/main2.qml")); QObject::connect(m_engine, &QQmlApplicationEngine::objectCreated, this, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) diff --git a/client/images/amneziaBigLogo.png b/client/images/amneziaBigLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..35a45f3b78807c74143c2fd3b430b8e406880448 GIT binary patch literal 25211 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 literal 0 HcmV?d00001 diff --git a/client/images/amneziaBigLogo.svg b/client/images/amneziaBigLogo.svg new file mode 100644 index 00000000..c50c7743 --- /dev/null +++ b/client/images/amneziaBigLogo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/images/controls/arrow-left.svg b/client/images/controls/arrow-left.svg new file mode 100644 index 00000000..98c9950b --- /dev/null +++ b/client/images/controls/arrow-left.svg @@ -0,0 +1,4 @@ + + + + diff --git a/client/resources.qrc b/client/resources.qrc index bda89bf2..f95ef585 100644 --- a/client/resources.qrc +++ b/client/resources.qrc @@ -176,5 +176,17 @@ ui/qml/Controls2/CardType.qml ui/qml/Controls2/CheckBoxType.qml images/controls/check.svg + ui/qml/Controls2/DropDownType.qml + ui/qml/Pages2/PageStart.qml + ui/qml/main2.qml + ui/qml/PageLoader.qml + images/amneziaBigLogo.png + images/amneziaBigLogo.svg + ui/qml/Controls2/BodyTextType.qml + ui/qml/Controls2/FlickableType.qml + ui/qml/Controls2/Header2TextType.qml + ui/qml/Pages2/PageCredentials.qml + ui/qml/Controls2/HeaderTextType.qml + images/controls/arrow-left.svg diff --git a/client/ui/pages.h b/client/ui/pages.h index a639d63b..c33289bb 100644 --- a/client/ui/pages.h +++ b/client/ui/pages.h @@ -24,7 +24,7 @@ enum class Page {Start = 0, NewServer, NewServerProtocols, Vpn, Wizard, WizardLow, WizardMedium, WizardHigh, WizardVpnMode, ServerConfiguringProgress, GeneralSettings, AppSettings, NetworkSettings, ServerSettings, ServerContainers, ServersList, ShareConnection, Sites, - ProtocolSettings, ProtocolShare, QrDecoder, QrDecoderIos, About, ViewConfig, AdvancedServerSettings, Test}; + ProtocolSettings, ProtocolShare, QrDecoder, QrDecoderIos, About, ViewConfig, AdvancedServerSettings, Test, Credentials}; Q_ENUM_NS(Page) static void declareQmlPageEnum() { diff --git a/client/ui/qml/Controls2/BodyTextType.qml b/client/ui/qml/Controls2/BodyTextType.qml new file mode 100644 index 00000000..9d789385 --- /dev/null +++ b/client/ui/qml/Controls2/BodyTextType.qml @@ -0,0 +1,12 @@ +import QtQuick + +Text { + text: root.bodyText + wrapMode: Text.WordWrap + color: "#D7D8DB" + font.pixelSize: 16 + font.weight: 400 + font.family: "PT Root UI VF" + + height: 24 +} diff --git a/client/ui/qml/Controls2/DropDownType.qml b/client/ui/qml/Controls2/DropDownType.qml new file mode 100644 index 00000000..5560aee7 --- /dev/null +++ b/client/ui/qml/Controls2/DropDownType.qml @@ -0,0 +1,5 @@ +import QtQuick + +Item { + +} diff --git a/client/ui/qml/Controls2/FlickableType.qml b/client/ui/qml/Controls2/FlickableType.qml new file mode 100644 index 00000000..b7c1203f --- /dev/null +++ b/client/ui/qml/Controls2/FlickableType.qml @@ -0,0 +1,23 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.12 +import "../Config" + +Flickable { + id: fl + + clip: true + width: parent.width + + anchors.bottom: parent.bottom + anchors.left: root.left + anchors.right: root.right + anchors.rightMargin: 1 + + Keys.onUpPressed: scrollBar.decrease() + Keys.onDownPressed: scrollBar.increase() + + ScrollBar.vertical: ScrollBar { + id: scrollBar + policy: fl.height >= fl.contentHeight ? ScrollBar.AlwaysOff : ScrollBar.AlwaysOn + } +} diff --git a/client/ui/qml/Controls2/Header2TextType.qml b/client/ui/qml/Controls2/Header2TextType.qml new file mode 100644 index 00000000..4bbbc0d6 --- /dev/null +++ b/client/ui/qml/Controls2/Header2TextType.qml @@ -0,0 +1,10 @@ +import QtQuick + +Text { + color: "#D7D8DB" + font.pixelSize: 25 + font.weight: 700 + font.family: "PT Root UI VF" + + height: 30 +} diff --git a/client/ui/qml/Controls2/HeaderTextType.qml b/client/ui/qml/Controls2/HeaderTextType.qml new file mode 100644 index 00000000..60fa4e95 --- /dev/null +++ b/client/ui/qml/Controls2/HeaderTextType.qml @@ -0,0 +1,40 @@ +import QtQuick +import QtQuick.Layouts + +ColumnLayout { + id: root + + property string buttonImage + property string headerText + property var wrapMode + + ImageButtonType { + id: button + + Layout.leftMargin: -6 + + hoverEnabled: false + image: root.buttonImage + onClicked: { + if (onClickedFunc && typeof onClickedFunc === "function") { + onClickedFunc() + } + } + } + + Text { + id: header + + text: root.headerText + + color: "#D7D8DB" + font.pixelSize: 36 + font.weight: 700 + font.family: "PT Root UI VF" + font.letterSpacing: -0.03 + + wrapMode: Text.WordWrap + + height: 38 + } +} diff --git a/client/ui/qml/Controls2/TextFieldWithHeaderType.qml b/client/ui/qml/Controls2/TextFieldWithHeaderType.qml index 18f62344..dd0d2907 100644 --- a/client/ui/qml/Controls2/TextFieldWithHeaderType.qml +++ b/client/ui/qml/Controls2/TextFieldWithHeaderType.qml @@ -7,6 +7,7 @@ Item { property string headerText property string textFieldText + property string textFieldPlaceholderText property bool textFieldEditable: true implicitWidth: 328 @@ -45,6 +46,9 @@ Item { enabled: root.textFieldEditable text: root.textFieldText color: "#d7d8db" + + placeholderText: textFieldPlaceholderText + font.pixelSize: 16 font.weight: 400 font.family: "PT Root UI VF" diff --git a/client/ui/qml/PageLoader.qml b/client/ui/qml/PageLoader.qml new file mode 100644 index 00000000..5f2fc3c2 --- /dev/null +++ b/client/ui/qml/PageLoader.qml @@ -0,0 +1,57 @@ +import QtQuick + +import Qt.labs.folderlistmodel + +import PageType 1.0 + +Item { + property var pages: ({}) + + signal finished() + + FolderListModel { + id: folderModelPages + folder: "qrc:/ui/qml/Pages2/" + nameFilters: ["*.qml"] + showDirs: false + + onStatusChanged: { + if (status == FolderListModel.Ready) { + for (var i = 0; i < folderModelPages.count; i++) { + createPagesObjects(folderModelPages.get(i, "filePath"), PageType.Basic); + } + finished() + } + } + + function createPagesObjects(file, type) { + if (file.indexOf("Base") !== -1) { + return; // skip Base Pages + } + + var c = Qt.createComponent("qrc" + file); + + var finishCreation = function(component) { + if (component.status === Component.Ready) { + var obj = component.createObject(root); + if (obj === null) { + console.debug("Error creating object " + component.url); + } else { + obj.visible = false + if (type === PageType.Basic) { + pages[obj.page] = obj + } + } + } else if (component.status === Component.Error) { + console.debug("Error loading component:", component.errorString()); + } + } + + if (c.status === Component.Ready) { + finishCreation(c); + } else { + console.debug("Warning: " + file + " page components are not ready " + c.errorString()); + } + } + } +} diff --git a/client/ui/qml/Pages/PageTest.qml b/client/ui/qml/Pages/PageTest.qml index 9f820389..4c571ae0 100644 --- a/client/ui/qml/Pages/PageTest.qml +++ b/client/ui/qml/Pages/PageTest.qml @@ -13,7 +13,6 @@ PageBase { logic: ViewConfigLogic Rectangle { - y: 0 anchors.fill: parent color: "#0E0E11" } diff --git a/client/ui/qml/Pages2/PageCredentials.qml b/client/ui/qml/Pages2/PageCredentials.qml new file mode 100644 index 00000000..509ee6a6 --- /dev/null +++ b/client/ui/qml/Pages2/PageCredentials.qml @@ -0,0 +1,83 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +import PageEnum 1.0 + +import "./" +import "../Pages" +import "../Controls2" +import "../Config" + +PageBase { + id: root + page: PageEnum.Credentials + + FlickableType { + id: fl + anchors.top: root.top + anchors.bottom: root.bottom + contentHeight: content.height + + ColumnLayout { + id: content + + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.rightMargin: 16 + anchors.leftMargin: 16 + + spacing: 16 + + HeaderTextType { + Layout.fillWidth: true + Layout.bottomMargin: 16 + Layout.topMargin: 66 + + Layout.preferredWidth: 328 + + buttonImage: "qrc:/images/controls/arrow-left.svg" + + headerText: "Подключение к серверу" + wrapMode: Text.WordWrap + } + + TextFieldWithHeaderType { + Layout.fillWidth: true + headerText: "Server IP adress [:port]" + } + + TextFieldWithHeaderType { + Layout.fillWidth: true + headerText: "Login to connect via SSH" + } + + TextFieldWithHeaderType { + Layout.fillWidth: true + headerText: "Password / Private key" + } + + BasicButtonType { + Layout.fillWidth: true + Layout.topMargin: 40 + + text: qsTr("Настроить сервер простым образом") + } + + BasicButtonType { + Layout.fillWidth: true + Layout.topMargin: 8 + + defaultColor: "transparent" + hoveredColor: Qt.rgba(255, 255, 255, 0.08) + pressedColor: Qt.rgba(255, 255, 255, 0.12) + disabledColor: "#878B91" + textColor: "#D7D8DB" + borderWidth: 1 + + text: qsTr("Выбрать протокол для установки") + } + } + } +} diff --git a/client/ui/qml/Pages2/PageStart.qml b/client/ui/qml/Pages2/PageStart.qml new file mode 100644 index 00000000..6f8f0356 --- /dev/null +++ b/client/ui/qml/Pages2/PageStart.qml @@ -0,0 +1,163 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +import PageEnum 1.0 + +import "./" +import "../Pages" +import "../Controls2" +import "../Config" + +PageBase { + id: root + page: PageEnum.Start + + FlickableType { + id: fl + anchors.top: root.top + anchors.bottom: root.bottom + contentHeight: content.height + + ColumnLayout { + id: content + + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + + Image { + id: image + source: "qrc:/images/amneziaBigLogo.png" + + Layout.alignment: Qt.AlignCenter + Layout.topMargin: 80 + Layout.leftMargin: 8 + Layout.rightMargin: 8 + Layout.preferredWidth: 344 + Layout.preferredHeight: 279 + } + + BodyTextType { + Layout.fillWidth: true + Layout.topMargin: 50 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + text: "Бесплатный сервис для создания личного VPN на вашем сервере. Помогаем получать доступ к заблокированному контенту, не раскрывая конфиденциальность даже провайдерам VPN." + } + + BasicButtonType { + Layout.fillWidth: true + Layout.topMargin: 32 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + text: qsTr("У меня есть данные для подключения") + + onClicked: { + drawer.visible = true + } + } + + BasicButtonType { + Layout.fillWidth: true + Layout.topMargin: 8 + Layout.leftMargin: 16 + Layout.rightMargin: 16 + + defaultColor: "transparent" + hoveredColor: Qt.rgba(255, 255, 255, 0.08) + pressedColor: Qt.rgba(255, 255, 255, 0.12) + disabledColor: "#878B91" + textColor: "#D7D8DB" + borderWidth: 1 + + text: qsTr("У меня ничего нет") + +// onClicked: { +// UiLogic.goToPage(PageEnum.Start) +// } + } + } + + Drawer { + id: drawer + + y: 0 + x: 0 + edge: Qt.BottomEdge + width: parent.width + height: parent.height * 0.4375 + + clip: true + + background: Rectangle { + anchors.fill: parent + anchors.bottomMargin: -radius + radius: 16 + color: "#1C1D21" + } + + modal: true + //interactive: activeFocus + +// onAboutToHide: { +// pageLoader.focus = true +// } +// onAboutToShow: { +// tfSshLog.focus = true +// } + + ColumnLayout { + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + + anchors.rightMargin: 16 + anchors.leftMargin: 16 + + Header2TextType { + Layout.fillWidth: true + Layout.topMargin: 24 + Layout.alignment: Qt.AlignHCenter + + text: "Данные для подключения" + } + + LabelWithButtonType { + id: ip + Layout.fillWidth: true + Layout.topMargin: 32 + + text: "IP, логин и пароль от сервера" + buttonImage: "qrc:/images/controls/chevron-right.svg" + + onClickedFunc: function() { + UiLogic.goToPage(PageEnum.Credentials) + } + } + Rectangle { + Layout.fillWidth: true + height: 1 + color: "#2C2D30" + } + LabelWithButtonType { + Layout.fillWidth: true + + text: "QR-код, ключ или файл настроек" + buttonImage: "qrc:/images/controls/chevron-right.svg" + + // onClickedFunc: function() { + // UiLogic.goToPage(PageEnum.Start) + // } + } + Rectangle { + Layout.fillWidth: true + height: 1 + color: "#2C2D30" + } + } + } + } +} diff --git a/client/ui/qml/main.qml b/client/ui/qml/main.qml index b8758384..5194073e 100644 --- a/client/ui/qml/main.qml +++ b/client/ui/qml/main.qml @@ -85,7 +85,6 @@ Window { } Rectangle { - y: 0 anchors.fill: parent color: "white" } diff --git a/client/ui/qml/main2.qml b/client/ui/qml/main2.qml new file mode 100644 index 00000000..deb64e89 --- /dev/null +++ b/client/ui/qml/main2.qml @@ -0,0 +1,142 @@ +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Layouts + +import PageType 1.0 + +import "Config" + +Window { + id: root + visible: true + width: GC.screenWidth + height: GC.screenHeight + minimumWidth: GC.isDesktop() ? 360 : 0 + minimumHeight: GC.isDesktop() ? 640 : 0 + onClosing: function() { + console.debug("QML onClosing signal") + UiLogic.onCloseWindow() + } + + title: "AmneziaVPN" + + function gotoPage(type, page, reset, slide) { + let p_obj; + if (type === PageType.Basic) p_obj = pageLoader.pages[page] + else if (type === PageType.Proto) p_obj = protocolPages[page] + else if (type === PageType.ShareProto) p_obj = sharePages[page] + else return + + if (pageStackView.depth > 0) { + pageStackView.currentItem.deactivated() + } + + if (slide) { + pageStackView.push(p_obj, {}, StackView.PushTransition) + } else { + pageStackView.push(p_obj, {}, StackView.Immediate) + } + +// if (reset) { +// p_obj.logic.onUpdatePage(); +// } + + p_obj.activated(reset) + } + + function closePage() { + if (pageStackView.depth <= 1) { + return + } + pageStackView.currentItem.deactivated() + pageStackView.pop() + } + + function setStartPage(page, slide) { + if (pageStackView.depth > 0) { + pageStackView.currentItem.deactivated() + } + + pageStackView.clear() + if (slide) { + pageStackView.push(pages[page], {}, StackView.PushTransition) + } else { + pageStackView.push(pages[page], {}, StackView.Immediate) + } + if (page === PageEnum.Start) { + UiLogic.pushButtonBackFromStartVisible = !pageStackView.empty + UiLogic.onUpdatePage(); + } + } + + Rectangle { + anchors.fill: parent + color: "#0E0E11" + } + + StackView { + id: pageStackView + anchors.fill: parent + focus: true + + onCurrentItemChanged: function() { + UiLogic.currentPageValue = currentItem.page + } + + onDepthChanged: function() { + UiLogic.pagesStackDepth = depth + } + + Keys.onPressed: function(event) { + UiLogic.keyPressEvent(event.key) + event.accepted = true + } + } + + Connections { + target: UiLogic + function onGoToPage(page, reset, slide) { + root.gotoPage(PageType.Basic, page, reset, slide) + } + + function onGoToProtocolPage(protocol, reset, slide) { + root.gotoPage(PageType.Proto, protocol, reset, slide) + } + + function onGoToShareProtocolPage(protocol, reset, slide) { + root.gotoPage(PageType.ShareProto, protocol, reset, slide) + } + + function onClosePage() { + root.closePage() + } + + function onSetStartPage(page, slide) { + root.setStartPage(page, slide) + } + + function onShow() { + root.show() + } + + function onHide() { + root.hide() + } + + function onRaise() { + root.show() + root.raise() + root.requestActivate() + } + } + + PageLoader { + id: pageLoader + + onFinished: { + UiLogic.initalizeUiLogic() + } + } + +}