Improve network

pull/11/head
cutefishd 5 years ago
parent 0ab3bc6462
commit 3c61f2ae7c

@ -1,135 +0,0 @@
import QtQuick 2.4
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3
import QtGraphicalEffects 1.0
import FishUI 1.0 as FishUI
import Cutefish.NetworkManagement 1.0 as NM
ItemPage {
id: control
headerTitle: qsTr("Network")
property var itemHeight: 50
property var settingsMap: ({})
NM.Networking {
id: networking
}
NM.NetworkModel {
id: networkModel
}
Scrollable {
anchors.fill: parent
contentHeight: mainLayout.implicitHeight
ColumnLayout {
id: mainLayout
anchors.fill: parent
// Wired connection
ColumnLayout {
id: wiredLayout
visible: networking.enabled && wiredView.count > 0
RowLayout {
Label {
text: qsTr("Wired")
color: FishUI.Theme.disabledTextColor
Layout.fillWidth: true
}
}
ListView {
id: wiredView
Layout.fillWidth: true
implicitHeight: wiredView.count * control.itemHeight
clip: true
model: NM.TechnologyProxyModel {
type: NM.TechnologyProxyModel.WiredType
sourceModel: networkModel
}
ScrollBar.vertical: ScrollBar {}
delegate: WiredItem {
height: control.itemHeight
width: wiredView.width
}
}
}
HorizontalDivider {
visible: wiredView.visible && networking.wirelessHardwareEnabled
}
// Wireless
ColumnLayout {
id: wirelessLayout
spacing: FishUI.Units.largeSpacing
RowLayout {
spacing: FishUI.Units.largeSpacing
Label {
text: qsTr("Wi-Fi")
color: FishUI.Theme.disabledTextColor
}
FishUI.BusyIndicator {
id: wlanBusyIndicator
width: wirelessSwitch.height
height: width
visible: networking.wirelessEnabled && wirelessView.count === 0
running: wlanBusyIndicator.visible
}
Item {
Layout.fillWidth: true
}
Switch {
id: wirelessSwitch
Layout.fillHeight: true
leftPadding: 0
rightPadding: 0
onCheckedChanged: networking.wirelessEnabled = checked
}
Component.onCompleted: {
wirelessSwitch.checked = networking.wirelessEnabled
}
}
ListView {
id: wirelessView
visible: networking.wirelessEnabled && networking.wirelessHardwareEnabled
Layout.fillWidth: true
implicitHeight: count * control.itemHeight
interactive: false
clip: true
model: NM.TechnologyProxyModel {
type: NM.TechnologyProxyModel.WirelessType
sourceModel: networkModel
showInactiveConnections: true
}
ScrollBar.vertical: ScrollBar {}
delegate: WirelessItem {
height: control.itemHeight
width: wirelessView.width
}
}
}
}
}
}

@ -6,13 +6,14 @@ import QtQuick.Window 2.3
import FishUI 1.0 as FishUI
import Cutefish.NetworkManagement 1.0 as NM
import "../"
Item {
id: control
property bool passwordIsStatic: (model.securityType === NM.NetworkModel.StaticWep || model.securityType === NM.NetworkModel.WpaPsk ||
model.securityType === NM.NetworkModel.Wpa2Psk || model.securityType === NM.NetworkModel.SAE)
property bool predictableWirelessPassword: !model.uuid && model.type === NM.NetworkModel.Wireless && passwordIsStatic
property bool passwordIsStatic: (model.securityType === NM.Enums.StaticWep || model.securityType === NM.Enums.WpaPsk ||
model.securityType === NM.Enums.Wpa2Psk || model.securityType === NM.Enums.SAE)
property bool predictableWirelessPassword: !model.uuid && model.type === NM.Enums.Wireless && passwordIsStatic
Rectangle {
anchors.fill: parent
@ -38,14 +39,14 @@ Item {
onClicked: {
if (model.uuid || !predictableWirelessPassword) {
if (connectionState === NM.NetworkModel.Deactivated) {
if (connectionState === NM.Enums.Deactivated) {
if (!predictableWirelessPassword && !model.uuid) {
networking.addAndActivateConnection(model.devicePath, model.specificPath);
handler.addAndActivateConnection(model.devicePath, model.specificPath);
} else {
networking.activateConnection(model.connectionPath, model.devicePath, model.specificPath);
handler.activateConnection(model.connectionPath, model.devicePath, model.specificPath);
}
} else {
networking.deactivateConnection(model.connectionPath, model.devicePath);
handler.deactivateConnection(model.connectionPath, model.devicePath);
}
} else if (predictableWirelessPassword) {
passwordDialog.show()
@ -77,8 +78,8 @@ Item {
id: busyIndicator
width: 22
height: width
visible: connectionState === NM.NetworkModel.Activating ||
connectionState === NM.NetworkModel.Deactivating
visible: connectionState === NM.Enums.Activating ||
connectionState === NM.Enums.Deactivating
running: busyIndicator.visible
}
@ -88,7 +89,7 @@ Item {
height: width
sourceSize: Qt.size(width, height)
source: "qrc:/images/checked.svg"
visible: model.connectionState === NM.NetworkModel.Activated
visible: model.connectionState === NM.Enums.Activated
ColorOverlay {
anchors.fill: parent
@ -105,7 +106,7 @@ Item {
height: width
sourceSize: Qt.size(width, height)
source: "qrc:/images/locked.svg"
visible: model.securityType !== -1 && model.securityType !== 0
visible: (model.securityType === -1 | model.securityType === 0) ? false : true
ColorOverlay {
anchors.fill: parent
@ -150,7 +151,7 @@ Item {
}
onAccept: {
networking.addAndActivateConnection(model.devicePath, model.specificPath, passwordField.text)
handler.addAndActivateConnection(model.devicePath, model.specificPath, passwordField.text)
passwordDialog.close()
}
@ -172,7 +173,7 @@ Item {
placeholderText: qsTr("Password")
validator: RegExpValidator {
regExp: {
if (model.securityType === NM.NetworkModel.StaticWep)
if (model.securityType === NM.Enums.StaticWep)
return /^(?:[\x20-\x7F]{5}|[0-9a-fA-F]{10}|[\x20-\x7F]{13}|[0-9a-fA-F]{26}){1}$/;
return /^(?:[\x20-\x7F]{8,64}){1}$/;
}

@ -0,0 +1,72 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import FishUI 1.0 as FishUI
Item {
implicitHeight: _contentLayout.implicitHeight + FishUI.Theme.mediumRadius * 2
ColumnLayout {
id: _contentLayout
anchors.fill: parent
spacing: FishUI.Units.smallSpacing
RowLayout {
Label {
id: wlanLabel
text: qsTr("WLAN")
}
FishUI.BusyIndicator {
id: wlanBusyIndicator
width: wirelessSwitch.height
height: width
visible: enabledConnections.wirelessEnabled && wirelessView.count === 0
running: wlanBusyIndicator.visible
}
Item {
Layout.fillWidth: true
}
Switch {
id: wirelessSwitch
height: wlanLabel.implicitHeight
leftPadding: 0
rightPadding: 0
checked: enabledConnections.wirelessEnabled
onCheckedChanged: {
if (checked) {
if (!enabledConnections.wirelessEnabled) {
handler.enableWireless(checked)
handler.requestScan()
}
} else {
if (enabledConnections.wirelessEnabled) {
handler.enableWireless(checked)
}
}
}
}
}
ListView {
id: wirelessView
Layout.fillWidth: true
Layout.preferredHeight: itemHeight * count
clip: true
model: appletProxyModel
interactive: false
visible: enabledConnections.wirelessEnabled
property var itemHeight: 45
delegate: WifiItem {
width: ListView.view.width
height: ListView.view.itemHeight
}
}
}
}

@ -164,7 +164,8 @@ Dialog {
Layout.fillWidth: true
flat: true
onClicked: {
networking.removeConnection(model.connectionPath)
handler.removeConnection(model.connectionPath)
control.reject()
}
}
}

@ -0,0 +1,106 @@
import QtQuick 2.4
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.3
import QtGraphicalEffects 1.0
import FishUI 1.0 as FishUI
import Cutefish.NetworkManagement 1.0 as NM
import "../"
ItemPage {
id: control
headerTitle: qsTr("Network")
property var itemHeight: 50
property var settingsMap: ({})
NM.Handler {
id: handler
}
NM.WifiSettings {
id: wifiSettings
}
NM.NetworkModel {
id: networkModel
}
NM.EnabledConnections {
id: enabledConnections
}
NM.IdentityModel {
id: connectionModel
}
NM.AppletProxyModel {
id: appletProxyModel
sourceModel: connectionModel
}
Component.onCompleted: handler.requestScan()
Timer {
id: scanTimer
interval: 10200
repeat: true
running: control.visible
onTriggered: handler.requestScan()
}
Scrollable {
anchors.fill: parent
contentHeight: mainLayout.implicitHeight
ColumnLayout {
id: mainLayout
anchors.fill: parent
// Wired connection
ColumnLayout {
id: wiredLayout
visible: enabledConnections.wwanEnabled && wiredView.count > 0
RowLayout {
Label {
text: qsTr("Wired")
color: FishUI.Theme.disabledTextColor
Layout.fillWidth: true
}
}
ListView {
id: wiredView
Layout.fillWidth: true
implicitHeight: wiredView.count * control.itemHeight
clip: true
model: NM.TechnologyProxyModel {
type: NM.TechnologyProxyModel.WiredType
sourceModel: networkModel
}
ScrollBar.vertical: ScrollBar {}
delegate: WiredItem {
height: control.itemHeight
width: wiredView.width
}
}
}
HorizontalDivider {
visible: wiredView.visible && enabledConnections.wirelessHwEnabled
}
WifiView {
Layout.fillWidth: true
visible: enabledConnections.wirelessHwEnabled
}
}
}
}

@ -45,7 +45,7 @@ Item {
ListElement {
title: qsTr("Network")
name: "network"
page: "qrc:/qml/NetworkPage.qml"
page: "qrc:/qml/NetworkPage/main.qml"
iconSource: "network.svg"
}

@ -57,125 +57,123 @@ ItemPage {
}
}
Loader {
Layout.fillWidth: true
height: item.height
sourceComponent: background.backgroundType === 0 ? imageView : colorView
}
}
}
Component {
id: imageView
GridView {
id: _view
GridView {
id: _view
// spacing: FishUI.Units.smallSpacing
// orientation: Qt.Horizontal
property int rowCount: _view.width / itemWidth
property int rowCount: _view.width / itemWidth
Layout.fillWidth: true
implicitHeight: Math.ceil(_view.count / rowCount) * cellHeight + FishUI.Units.largeSpacing
implicitHeight: Math.ceil(_view.count / rowCount) * (itemHeight + FishUI.Units.largeSpacing * 2)
visible: background.backgroundType === 0
clip: true
model: background.backgrounds
currentIndex: -1
interactive: false
clip: true
model: background.backgrounds
currentIndex: -1
interactive: false
cellHeight: calcExtraSpacing(itemHeight, _view.height) + itemHeight
cellWidth: calcExtraSpacing(itemWidth, _view.width) + itemWidth
cellHeight: itemHeight
cellWidth: calcExtraSpacing(itemWidth, _view.width) + itemWidth
property int itemWidth: 250
property int itemHeight: 170
property int itemWidth: 250
property int itemHeight: 170
delegate: Item {
id: item
delegate: Item {
id: item
property bool isSelected: modelData === background.currentBackgroundPath
property bool isSelected: modelData === background.currentBackgroundPath
width: GridView.view.cellWidth
height: GridView.view.cellHeight
scale: 1.0
width: GridView.view.cellWidth
height: GridView.view.cellHeight
scale: 1.0
Behavior on scale {
NumberAnimation {
duration: 100
Behavior on scale {
NumberAnimation {
duration: 100
}
}
}
Rectangle {
anchors.fill: parent
anchors.margins: FishUI.Units.smallSpacing
color: "transparent"
radius: FishUI.Theme.bigRadius + FishUI.Units.smallSpacing / 2
border.color: FishUI.Theme.highlightColor
border.width: image.status == Image.Ready & isSelected ? 3 : 0
Image {
id: image
Rectangle {
anchors.fill: parent
anchors.margins: FishUI.Units.smallSpacing
source: "file://" + modelData
sourceSize: Qt.size(width, height)
fillMode: Image.PreserveAspectCrop
asynchronous: true
mipmap: true
cache: true
opacity: 1.0
smooth: false
Behavior on opacity {
NumberAnimation {
duration: 100
easing.type: Easing.InOutCubic
color: "transparent"
radius: FishUI.Theme.bigRadius + FishUI.Units.smallSpacing / 2
border.color: FishUI.Theme.highlightColor
border.width: image.status == Image.Ready & isSelected ? 3 : 0
Image {
id: image
anchors.fill: parent
anchors.margins: FishUI.Units.smallSpacing
source: "file://" + modelData
sourceSize: Qt.size(width, height)
fillMode: Image.PreserveAspectCrop
asynchronous: true
mipmap: true
cache: true
smooth: true
opacity: 1.0
Behavior on opacity {
NumberAnimation {
duration: 100
easing.type: Easing.InOutCubic
}
}
}
layer.enabled: true
layer.effect: OpacityMask {
maskSource: Item {
width: image.width
height: image.height
layer.enabled: true
layer.effect: OpacityMask {
maskSource: Item {
width: image.width
height: image.height
Rectangle {
anchors.fill: parent
radius: FishUI.Theme.bigRadius
Rectangle {
anchors.fill: parent
radius: FishUI.Theme.bigRadius
}
}
}
}
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
hoverEnabled: true
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
hoverEnabled: true
onClicked: {
background.setBackground(modelData)
}
onClicked: {
background.setBackground(modelData)
}
onEntered: function() {
image.opacity = 0.7
}
onExited: function() {
image.opacity = 1.0
onEntered: function() {
image.opacity = 0.7
}
onExited: function() {
image.opacity = 1.0
}
onPressedChanged: item.scale = pressed ? 0.97 : 1.0
}
}
}
onPressedChanged: item.scale = pressed ? 0.97 : 1.0
function calcExtraSpacing(cellSize, containerSize) {
var availableColumns = Math.floor(containerSize / cellSize)
var extraSpacing = 0
if (availableColumns > 0) {
var allColumnSize = availableColumns * cellSize
var extraSpace = Math.max(containerSize - allColumnSize, FishUI.Units.largeSpacing)
extraSpacing = extraSpace / availableColumns
}
return Math.floor(extraSpacing)
}
}
function calcExtraSpacing(cellSize, containerSize) {
var availableColumns = Math.floor(containerSize / cellSize)
var extraSpacing = 0
if (availableColumns > 0) {
var allColumnSize = availableColumns * cellSize
var extraSpace = Math.max(containerSize - allColumnSize, FishUI.Units.largeSpacing)
extraSpacing = extraSpace / availableColumns
}
return Math.floor(extraSpacing)
Loader {
Layout.fillWidth: true
height: item.height
visible: background.backgroundType === 1
sourceComponent: colorView
}
}
}

@ -24,7 +24,6 @@
<file>qml/HorizontalDivider.qml</file>
<file>qml/DockPage.qml</file>
<file>qml/LanguagePage.qml</file>
<file>qml/NetworkPage.qml</file>
<file>images/locked.svg</file>
<file>images/checked.svg</file>
<file>images/light/network-wired.svg</file>
@ -42,10 +41,7 @@
<file>images/view-refresh.svg</file>
<file>images/info.svg</file>
<file>qml/IconButton.qml</file>
<file>qml/WirelessItem.qml</file>
<file>images/go-previous.svg</file>
<file>qml/WirelessDetailsDialog.qml</file>
<file>qml/WiredItem.qml</file>
<file>qml/AccountsPage.qml</file>
<file>qml/Hideable.qml</file>
<file>qml/AddUserDialog.qml</file>
@ -85,5 +81,10 @@
<file>images/sidebar/light/language.svg</file>
<file>images/sidebar/light/network.svg</file>
<file>images/sidebar/light/wallpaper.svg</file>
<file>qml/NetworkPage/WifiView.qml</file>
<file>qml/NetworkPage/main.qml</file>
<file>qml/NetworkPage/WifiItem.qml</file>
<file>qml/NetworkPage/WirelessDetailsDialog.qml</file>
<file>qml/NetworkPage/WiredItem.qml</file>
</qresource>
</RCC>

Loading…
Cancel
Save