202 lines
5.8 KiB
QML
202 lines
5.8 KiB
QML
import QtQuick 2.12
|
|
import QtQuick.Controls 2.12
|
|
import SortFilterProxyModel 0.2
|
|
import ProtocolEnum 1.0
|
|
import "./"
|
|
import "../../Controls"
|
|
import "../../Config"
|
|
|
|
Drawer {
|
|
id: root
|
|
signal containerSelected(int c_index)
|
|
property int selectedIndex: -1
|
|
property alias modelFilters: proxyModel.filters
|
|
|
|
z: -3
|
|
|
|
y: 0
|
|
x: 0
|
|
edge: Qt.RightEdge
|
|
width: parent.width * 0.85
|
|
height: parent.height
|
|
|
|
modal: true
|
|
interactive: true
|
|
|
|
SortFilterProxyModel {
|
|
id: proxyModel
|
|
sourceModel: UiLogic.containersModel
|
|
filters: [
|
|
ValueFilter {
|
|
roleName: "is_installed_role"
|
|
value: false },
|
|
ValueFilter {
|
|
roleName: "service_type_role"
|
|
value: ProtocolEnum.Vpn }
|
|
]
|
|
|
|
}
|
|
|
|
SortFilterProxyModel {
|
|
id: proxyModel_other
|
|
sourceModel: UiLogic.containersModel
|
|
filters: [
|
|
ValueFilter {
|
|
roleName: "is_installed_role"
|
|
value: false },
|
|
ValueFilter {
|
|
roleName: "service_type_role"
|
|
value: ProtocolEnum.Other }
|
|
]
|
|
|
|
}
|
|
|
|
Flickable {
|
|
clip: true
|
|
anchors.fill: parent
|
|
contentHeight: col.height
|
|
|
|
Column {
|
|
id: col
|
|
anchors {
|
|
left: parent.left;
|
|
right: parent.right;
|
|
}
|
|
topPadding: 20
|
|
spacing: 10
|
|
|
|
Caption {
|
|
id: cap1
|
|
text: qsTr("VPN containers")
|
|
font.pixelSize: 20
|
|
|
|
}
|
|
|
|
ListView {
|
|
id: tb
|
|
x: 10
|
|
currentIndex: -1
|
|
width: parent.width - 20
|
|
height: contentItem.height
|
|
|
|
spacing: 0
|
|
clip: true
|
|
interactive: false
|
|
model: proxyModel
|
|
|
|
delegate: Item {
|
|
implicitWidth: 170 * 2
|
|
implicitHeight: 30
|
|
Item {
|
|
width: parent.width
|
|
height: 30
|
|
anchors.left: parent.left
|
|
id: c1
|
|
Rectangle {
|
|
anchors.top: parent.top
|
|
width: parent.width
|
|
height: 1
|
|
color: "lightgray"
|
|
visible: index !== tb.currentIndex
|
|
}
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
color: "#63B4FB"
|
|
visible: index === tb.currentIndex
|
|
|
|
}
|
|
Text {
|
|
id: text_name
|
|
text: name_role
|
|
font.pixelSize: 16
|
|
anchors.fill: parent
|
|
leftPadding: 10
|
|
verticalAlignment: Text.AlignVCenter
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
tb.currentIndex = index
|
|
tb_other.currentIndex = -1
|
|
containerSelected(proxyModel.mapToSource(index))
|
|
selectedIndex = proxyModel.mapToSource(index)
|
|
root.close()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
Caption {
|
|
id: cap2
|
|
font.pixelSize: 20
|
|
text: qsTr("Other containers")
|
|
}
|
|
|
|
ListView {
|
|
id: tb_other
|
|
x: 10
|
|
currentIndex: -1
|
|
width: parent.width - 20
|
|
height: contentItem.height
|
|
|
|
spacing: 0
|
|
clip: true
|
|
interactive: false
|
|
model: proxyModel_other
|
|
|
|
delegate: Item {
|
|
implicitWidth: 170 * 2
|
|
implicitHeight: 30
|
|
Item {
|
|
width: parent.width
|
|
height: 30
|
|
anchors.left: parent.left
|
|
id: c1_other
|
|
Rectangle {
|
|
anchors.top: parent.top
|
|
width: parent.width
|
|
height: 1
|
|
color: "lightgray"
|
|
visible: index !== tb_other.currentIndex
|
|
}
|
|
Rectangle {
|
|
anchors.fill: parent
|
|
color: "#63B4FB"
|
|
visible: index === tb_other.currentIndex
|
|
|
|
}
|
|
Text {
|
|
id: text_name_other
|
|
text: name_role
|
|
font.pixelSize: 16
|
|
anchors.fill: parent
|
|
leftPadding: 10
|
|
verticalAlignment: Text.AlignVCenter
|
|
wrapMode: Text.WordWrap
|
|
}
|
|
}
|
|
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
onClicked: {
|
|
tb_other.currentIndex = index
|
|
tb.currentIndex = -1
|
|
containerSelected(proxyModel_other.mapToSource(index))
|
|
selectedIndex = proxyModel_other.mapToSource(index)
|
|
root.close()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|