summaryrefslogtreecommitdiff
path: root/raveos-calamares-module/wifi/ui/wifi.qml
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-calamares-module/wifi/ui/wifi.qml')
-rw-r--r--raveos-calamares-module/wifi/ui/wifi.qml655
1 files changed, 328 insertions, 327 deletions
diff --git a/raveos-calamares-module/wifi/ui/wifi.qml b/raveos-calamares-module/wifi/ui/wifi.qml
index aee3ddc..e3b0b0c 100644
--- a/raveos-calamares-module/wifi/ui/wifi.qml
+++ b/raveos-calamares-module/wifi/ui/wifi.qml
@@ -1,404 +1,405 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
+import RaveOS 1.0
import "." as WifiModule
Rectangle {
id: root
- color: WifiModule.Style.backgroundColor
+ color: Stilus.hatter
- property string selectedSsid: ""
- property bool showHiddenNetwork: false
- property bool isConnecting: false
- property bool showPassword: false
+ readonly property var t: WifiModule.Translations
+ property var kivalasztott: null
+ property bool rejtett: false
+ property bool csatlakozik: false
+ property bool sikertelen: false
+ property bool jelszoLatszik: false
+
+ readonly property string ssid: rejtett ? ssidMezo.text : (kivalasztott ? kivalasztott.ssid : "")
+ readonly property bool jelszoKell: rejtett || (kivalasztott !== null && kivalasztott.secured)
- // Function to update language - called from C++
function updateLanguage() {
WifiModule.Translations.setLanguage(systemLocale)
}
- // Initialize translations on load
- Component.onCompleted: {
- WifiModule.Translations.setLanguage(systemLocale)
+ function savok(erosseg) {
+ if (erosseg >= 75) return 4
+ if (erosseg >= 50) return 3
+ if (erosseg >= 25) return 2
+ return 1
}
- ColumnLayout {
- anchors.fill: parent
- anchors.margins: WifiModule.Style.margin
- spacing: WifiModule.Style.spacing
+ function allapotSzoveg() {
+ if (nm.connected) return t.statusConnected
+ if (csatlakozik) return t.statusConnecting
+ if (sikertelen) return t.statusFailed
+ return t.statusDisconnected
+ }
+
+ Component.onCompleted: WifiModule.Translations.setLanguage(systemLocale)
- // Header
- Label {
- text: WifiModule.Translations.title
- font.pixelSize: WifiModule.Style.fontSizeTitle
- font.bold: true
- color: WifiModule.Style.textColor
- Layout.alignment: Qt.AlignHCenter
+ Connections {
+ target: nm
+ function onConnectionChanged() {
+ if (nm.connected)
+ root.csatlakozik = false
+ }
+ function onConnectionFailed(error) {
+ root.csatlakozik = false
+ root.sikertelen = true
}
+ }
- Label {
- text: WifiModule.Translations.subtitle
- font.pixelSize: WifiModule.Style.fontSizeSubtitle
- color: WifiModule.Style.textSecondaryColor
- wrapMode: Text.WordWrap
- Layout.fillWidth: true
- Layout.alignment: Qt.AlignHCenter
- horizontalAlignment: Text.AlignHCenter
+ Timer {
+ interval: 30000
+ running: root.csatlakozik
+ onTriggered: {
+ if (!nm.connected) {
+ root.csatlakozik = false
+ root.sikertelen = true
+ }
}
+ }
- // Connection status banner
- Rectangle {
- Layout.fillWidth: true
- height: 40
- radius: WifiModule.Style.borderRadius
- color: nm.connected ? WifiModule.Style.successColor : WifiModule.Style.progressColor
- visible: nm.connected || isConnecting
+ component SzovegLink: Text {
+ signal kattint()
+ color: linkHover.hovered ? Stilus.zoldHover : Stilus.zold
+ font.family: Stilus.font
+ font.pixelSize: 13
+ font.weight: Font.DemiBold
- RowLayout {
- anchors.centerIn: parent
- spacing: 10
+ HoverHandler {
+ id: linkHover
+ cursorShape: Qt.PointingHandCursor
+ }
- BusyIndicator {
- running: isConnecting && !nm.connected
- visible: isConnecting && !nm.connected
- Layout.preferredWidth: 24
- Layout.preferredHeight: 24
- }
+ TapHandler {
+ onTapped: parent.kattint()
+ }
+ }
- Label {
- text: nm.connected ? WifiModule.Translations.connected : WifiModule.Translations.connecting
- color: WifiModule.Style.textColor
- font.pixelSize: WifiModule.Style.fontSizeNormal
- font.bold: true
- }
+ ColumnLayout {
+ anchors.fill: parent
+ anchors.topMargin: 40
+ anchors.bottomMargin: 32
+ anchors.leftMargin: 56
+ anchors.rightMargin: 56
+ spacing: 20
+
+ ColumnLayout {
+ Layout.fillWidth: true
+ spacing: 10
+
+ Fejlec {
+ Layout.fillWidth: true
+ felirat: root.t.eyebrow
+ cim: root.t.title
+ }
+
+ Text {
+ Layout.fillWidth: true
+ text: root.t.subtitle
+ wrapMode: Text.WordWrap
+ color: Stilus.szovegMasodlagos
+ font.family: Stilus.font
+ font.pixelSize: 14
}
}
- // Network list
- Rectangle {
+ RowLayout {
Layout.fillWidth: true
Layout.fillHeight: true
- color: WifiModule.Style.listBackgroundColor
- radius: WifiModule.Style.borderRadiusLarge
- border.color: WifiModule.Style.borderColor
- border.width: 1
+ spacing: 24
ColumnLayout {
- anchors.fill: parent
- anchors.margins: 1
- spacing: 0
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ spacing: 8
- // List header with refresh button
- Rectangle {
+ RowLayout {
Layout.fillWidth: true
- height: 44
- color: WifiModule.Style.listHeaderColor
- radius: WifiModule.Style.borderRadiusLarge
- Rectangle {
- anchors.bottom: parent.bottom
- anchors.left: parent.left
- anchors.right: parent.right
- height: 8
- color: parent.color
+ Text {
+ Layout.fillWidth: true
+ text: root.t.availableNetworks
+ color: Stilus.szovegHalvany
+ font.family: Stilus.font
+ font.pixelSize: 12
+ font.weight: Font.Medium
+ font.letterSpacing: 1
+ font.capitalization: Font.AllUppercase
}
- RowLayout {
- anchors.fill: parent
- anchors.leftMargin: 12
- anchors.rightMargin: 8
+ SzovegLink {
+ text: root.t.refresh
+ onKattint: nm.scan()
+ }
+ }
- Label {
- text: WifiModule.Translations.availableNetworks
- color: WifiModule.Style.textColor
- font.pixelSize: WifiModule.Style.fontSizeSmall
- font.bold: true
- }
+ Rectangle {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ color: Stilus.felulet
+ border.width: 1
+ border.color: Stilus.keret
- Item { Layout.fillWidth: true }
+ ListView {
+ id: lista
+ anchors.fill: parent
+ anchors.margins: 1
+ clip: true
+ model: nm.accessPoints
+ boundsBehavior: Flickable.StopAtBounds
+ ScrollBar.vertical: Gorgeto {}
- Button {
- text: WifiModule.Translations.refresh
- Layout.preferredHeight: 32
- onClicked: nm.scan()
+ delegate: Rectangle {
+ id: sor
+ readonly property bool kijelolt: !root.rejtett && root.kivalasztott !== null && root.kivalasztott.ssid === modelData.ssid
+ width: lista.width
+ height: 48
+ color: kijelolt ? Stilus.aktiv : (sorHover.hovered ? Stilus.aktiv : "transparent")
- background: Rectangle {
- color: parent.hovered ? WifiModule.Style.buttonSecondaryHoverColor : WifiModule.Style.buttonSecondaryColor
- radius: 4
+ Rectangle {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ height: 1
+ color: Stilus.aktiv
}
- contentItem: Label {
- text: parent.text
- color: WifiModule.Style.textColor
- font.pixelSize: WifiModule.Style.fontSizeSmall
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
+ Rectangle {
+ visible: sor.kijelolt
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ width: 2
+ color: Stilus.zold
}
- }
- }
- }
- // WiFi list
- ListView {
- id: networkList
- Layout.fillWidth: true
- Layout.fillHeight: true
- clip: true
- model: nm.networks
+ RowLayout {
+ anchors.fill: parent
+ anchors.leftMargin: 14
+ anchors.rightMargin: 14
+ spacing: 12
- delegate: Rectangle {
- width: networkList.width
- height: WifiModule.Style.listItemHeight
- color: modelData === selectedSsid ? WifiModule.Style.itemSelectedColor :
- (mouseArea.containsMouse ? WifiModule.Style.itemHoverColor : "transparent")
+ Row {
+ Layout.alignment: Qt.AlignVCenter
+ spacing: 2
+ height: 14
- RowLayout {
- anchors.fill: parent
- anchors.leftMargin: 16
- anchors.rightMargin: 16
- spacing: 12
+ Repeater {
+ model: 4
+ Rectangle {
+ anchors.bottom: parent.bottom
+ width: 3
+ height: 4 + index * 3.3
+ color: index < root.savok(modelData.strength)
+ ? (sor.kijelolt ? Stilus.zold : Stilus.szoveg)
+ : Stilus.keretErosebb
+ }
+ }
+ }
- Label {
- text: ""
- font.pixelSize: 18
- }
+ Text {
+ Layout.fillWidth: true
+ text: modelData.ssid
+ elide: Text.ElideRight
+ color: Stilus.szoveg
+ font.family: Stilus.font
+ font.pixelSize: 14
+ font.weight: sor.kijelolt ? Font.DemiBold : Font.Normal
+ }
- Label {
- text: modelData
- color: WifiModule.Style.textColor
- font.pixelSize: WifiModule.Style.fontSizeNormal
- Layout.fillWidth: true
- elide: Text.ElideRight
- }
+ Canvas {
+ visible: modelData.secured
+ Layout.preferredWidth: 14
+ Layout.preferredHeight: 14
+ Accessible.name: root.t.secured
+ onPaint: {
+ var c = getContext("2d")
+ c.reset()
+ c.strokeStyle = Stilus.szovegHalvany
+ c.lineWidth = 1.5
+ c.strokeRect(3, 6.5, 8, 6)
+ c.beginPath()
+ c.moveTo(4.5, 6.5)
+ c.lineTo(4.5, 4.5)
+ c.arc(7, 4.5, 2.5, Math.PI, 0)
+ c.lineTo(9.5, 6.5)
+ c.stroke()
+ }
+ }
- Label {
- text: modelData === selectedSsid ? "✓" : ""
- color: WifiModule.Style.successCheckColor
- font.pixelSize: 16
- font.bold: true
+ Text {
+ Layout.preferredWidth: 52
+ horizontalAlignment: Text.AlignRight
+ text: modelData.band
+ color: Stilus.szovegHalvany
+ font.family: Stilus.mono
+ font.pixelSize: 11
+ }
}
- }
- MouseArea {
- id: mouseArea
- anchors.fill: parent
- hoverEnabled: true
- onClicked: {
- selectedSsid = modelData
- showHiddenNetwork = false
- ssidField.text = modelData
+ HoverHandler { id: sorHover }
+
+ TapHandler {
+ onTapped: {
+ root.rejtett = false
+ root.sikertelen = false
+ root.kivalasztott = modelData
+ jelszoMezo.text = ""
+ }
}
}
- Rectangle {
- anchors.bottom: parent.bottom
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.leftMargin: 16
- anchors.rightMargin: 16
- height: 1
- color: WifiModule.Style.separatorColor
+ Text {
+ anchors.centerIn: parent
+ width: parent.width - 40
+ visible: lista.count === 0
+ text: root.t.noNetworks
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.WordWrap
+ color: Stilus.szovegHalvany
+ font.family: Stilus.font
+ font.pixelSize: 13
}
}
-
- Label {
- anchors.centerIn: parent
- text: WifiModule.Translations.noNetworks
- color: WifiModule.Style.textMutedColor
- font.pixelSize: WifiModule.Style.fontSizeSmall
- horizontalAlignment: Text.AlignHCenter
- visible: nm.networks.length === 0
- }
}
- }
- }
- // Hidden network toggle
- Rectangle {
- Layout.fillWidth: true
- height: WifiModule.Style.inputHeight
- color: "#3d7839"
- radius: WifiModule.Style.borderRadius
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- showHiddenNetwork = !showHiddenNetwork
- if (showHiddenNetwork) {
- selectedSsid = ""
- ssidField.text = ""
- ssidField.focus = true
+ SzovegLink {
+ text: root.t.hiddenNetwork
+ onKattint: {
+ root.rejtett = true
+ root.kivalasztott = null
+ root.sikertelen = false
}
}
}
- RowLayout {
- anchors.fill: parent
- anchors.leftMargin: 16
- anchors.rightMargin: 16
-
- Label {
- text: WifiModule.Translations.hiddenNetwork
- color: WifiModule.Style.textColor
- font.pixelSize: WifiModule.Style.fontSizeNormal
- }
-
- Item { Layout.fillWidth: true }
+ Rectangle {
+ Layout.preferredWidth: 300
+ Layout.alignment: Qt.AlignTop
+ implicitHeight: panel.implicitHeight + 36
+ color: Stilus.felulet
+ border.width: 1
+ border.color: Stilus.keret
- Rectangle {
- width: 44
- height: 24
- radius: 12
- color: showHiddenNetwork ? WifiModule.Style.toggleOnColor : WifiModule.Style.toggleOffColor
+ ColumnLayout {
+ id: panel
+ x: 18
+ y: 18
+ width: parent.width - 36
+ spacing: 14
- Rectangle {
- width: 20
- height: 20
- radius: 10
- color: WifiModule.Style.textColor
- x: showHiddenNetwork ? 22 : 2
- anchors.verticalCenter: parent.verticalCenter
+ Text {
+ text: root.t.selected
+ color: Stilus.szovegHalvany
+ font.family: Stilus.font
+ font.pixelSize: 12
+ font.letterSpacing: 1
+ font.capitalization: Font.AllUppercase
+ }
- Behavior on x {
- NumberAnimation { duration: 150 }
- }
+ Text {
+ visible: !root.rejtett
+ Layout.fillWidth: true
+ text: root.kivalasztott ? root.kivalasztott.ssid : root.t.noSelection
+ elide: Text.ElideRight
+ color: root.kivalasztott ? Stilus.szoveg : Stilus.szovegHalvany
+ font.family: Stilus.font
+ font.pixelSize: root.kivalasztott ? 16 : 13
+ font.weight: root.kivalasztott ? Font.DemiBold : Font.Normal
}
- }
- }
- }
- // SSID field (for hidden networks)
- TextField {
- id: ssidField
- Layout.fillWidth: true
- placeholderText: WifiModule.Translations.ssidPlaceholder
- visible: showHiddenNetwork
- color: WifiModule.Style.textColor
- placeholderTextColor: WifiModule.Style.inputPlaceholderColor
- font.pixelSize: WifiModule.Style.fontSizeNormal
+ ColumnLayout {
+ visible: root.rejtett
+ Layout.fillWidth: true
+ spacing: 6
- background: Rectangle {
- color: WifiModule.Style.inputBackgroundColor
- radius: WifiModule.Style.borderRadius
- border.color: ssidField.focus ? WifiModule.Style.inputFocusBorderColor : WifiModule.Style.inputBorderColor
- border.width: 1
- }
- }
+ Text {
+ text: root.t.ssidLabel
+ color: Stilus.szovegHalvany
+ font.family: Stilus.font
+ font.pixelSize: 12
+ }
- // Password field with show/hide toggle
- Item {
- Layout.fillWidth: true
- Layout.preferredHeight: WifiModule.Style.inputHeight
+ TextField {
+ id: ssidMezo
+ Layout.fillWidth: true
+ implicitHeight: 44
+ leftPadding: 12
+ color: Stilus.szoveg
+ font.family: Stilus.font
+ font.pixelSize: 14
+ background: Rectangle {
+ color: Stilus.hatter
+ border.width: 1
+ border.color: ssidMezo.activeFocus ? Stilus.zold : Stilus.keretErosebb
+ }
+ }
+ }
- TextField {
- id: passField
- anchors.fill: parent
- rightPadding: showPasswordButton.width + 16
- placeholderText: WifiModule.Translations.passwordPlaceholder
- echoMode: showPassword ? TextInput.Normal : TextInput.Password
- color: WifiModule.Style.textColor
- placeholderTextColor: WifiModule.Style.inputPlaceholderColor
- font.pixelSize: WifiModule.Style.fontSizeNormal
- enabled: selectedSsid !== "" || showHiddenNetwork
- opacity: 1
+ ColumnLayout {
+ visible: root.jelszoKell
+ Layout.fillWidth: true
+ spacing: 6
- background: Rectangle {
- color: passField.enabled ? WifiModule.Style.inputBackgroundColor : WifiModule.Style.inputDisabledColor
- radius: WifiModule.Style.borderRadius
- border.color: passField.focus ? WifiModule.Style.inputFocusBorderColor : WifiModule.Style.inputBorderColor
- border.width: 1
- }
- }
+ Text {
+ text: root.t.password
+ color: Stilus.szovegHalvany
+ font.family: Stilus.font
+ font.pixelSize: 12
+ }
- Button {
- id: showPasswordButton
- anchors.right: parent.right
- anchors.rightMargin: 8
- anchors.verticalCenter: parent.verticalCenter
- height: 32
- text: showPassword ? WifiModule.Translations.hidePassword : WifiModule.Translations.showPassword
- enabled: passField.enabled
- onClicked: showPassword = !showPassword
+ JelszoMezo {
+ id: jelszoMezo
+ Layout.fillWidth: true
+ reveal: root.jelszoLatszik
+ revealName: root.t.showPassword
+ onRevealClicked: root.jelszoLatszik = !root.jelszoLatszik
+ onAccepted: csatlakozGomb.clicked()
+ }
+ }
- background: Rectangle {
- color: parent.hovered ? WifiModule.Style.buttonSecondaryHoverColor : WifiModule.Style.buttonSecondaryColor
- radius: 4
- }
+ Button {
+ id: csatlakozGomb
+ Layout.fillWidth: true
+ implicitHeight: 44
+ text: root.t.connect
+ enabled: root.ssid !== "" && (!root.jelszoKell || jelszoMezo.text !== "") && !root.csatlakozik
+ onClicked: {
+ if (!enabled)
+ return
+ root.sikertelen = false
+ root.csatlakozik = true
+ nm.connectTo(root.ssid, root.jelszoKell ? jelszoMezo.text : "")
+ }
+ background: Rectangle {
+ color: !csatlakozGomb.enabled ? "transparent" : (csatlakozGomb.hovered ? Stilus.zoldHover : Stilus.zold)
+ border.width: csatlakozGomb.enabled ? 0 : 1
+ border.color: Stilus.keret
+ }
+ contentItem: Text {
+ text: csatlakozGomb.text
+ color: csatlakozGomb.enabled ? Stilus.zoldonSzoveg : Stilus.szovegHalvany
+ font.family: Stilus.font
+ font.pixelSize: 14
+ font.weight: Font.DemiBold
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
- contentItem: Label {
- text: parent.text
- color: parent.enabled ? WifiModule.Style.textColor : WifiModule.Style.textDisabledColor
- font.pixelSize: WifiModule.Style.fontSizeSmall
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
+ Text {
+ Layout.fillWidth: true
+ text: root.t.statusLabel + ": " + root.allapotSzoveg()
+ wrapMode: Text.WordWrap
+ color: nm.connected ? Stilus.zold : (root.sikertelen ? Stilus.sarga : Stilus.szovegHalvany)
+ font.family: Stilus.mono
+ font.pixelSize: 12
+ }
}
}
}
-
- // Connect button
- Button {
- Layout.fillWidth: true
- Layout.preferredHeight: WifiModule.Style.buttonHeight
- text: WifiModule.Translations.connect
- enabled: (selectedSsid !== "" || (showHiddenNetwork && ssidField.text !== "")) &&
- passField.text !== "" && !isConnecting && !nm.connected
-
- onClicked: {
- isConnecting = true
- var ssid = showHiddenNetwork ? ssidField.text : selectedSsid
- nm.connectTo(ssid, passField.text)
- }
-
- background: Rectangle {
- color: parent.enabled ? (parent.hovered ? WifiModule.Style.buttonPrimaryHoverColor : WifiModule.Style.buttonPrimaryColor) : WifiModule.Style.buttonDisabledColor
- radius: WifiModule.Style.borderRadius
- }
-
- contentItem: Label {
- text: parent.text
- color: parent.enabled ? WifiModule.Style.textColor : WifiModule.Style.textDisabledColor
- font.pixelSize: 15
- font.bold: true
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- }
- }
-
- // Skip info
- Label {
- text: nm.connected ?
- WifiModule.Translations.clickNextToContinue :
- WifiModule.Translations.canSkipWithEthernet
- color: WifiModule.Style.textMutedColor
- font.pixelSize: WifiModule.Style.fontSizeTiny
- Layout.alignment: Qt.AlignHCenter
- horizontalAlignment: Text.AlignHCenter
- }
- }
-
- // Connection state change handler
- Connections {
- target: nm
- function onConnectionChanged() {
- if (nm.connected) {
- isConnecting = false
- }
- }
- function onConnectionFailed(error) {
- isConnecting = false
- console.log("Connection failed: " + error)
- }
- }
-
- // Timer to reset connecting state if it takes too long
- Timer {
- id: connectTimeout
- interval: 30000
- running: isConnecting
- onTriggered: {
- if (!nm.connected) {
- isConnecting = false
- }
- }
}
-} \ No newline at end of file
+}