This repository has been archived on 2021-06-24. You can view files and clone it, but cannot push or open issues or pull requests.
ui/qml/widgets/ServerList.qml

132 lines
4.1 KiB
QML

import QtGraphicalEffects 1.0
import QtQuick 2.7
import QtQuick.Controls 2.4
import QtQuick.Controls.Material 2.0
import QtQuick.Layouts 1.3
import "../opaque" as Opaque
import "../opaque/theme"
ColumnLayout {
id: root
MouseArea {
anchors.fill: parent
onClicked: {
forceActiveFocus()
}
}
Opaque.Flickable { // Profile List
id: sv
Layout.minimumHeight: 100
Layout.fillHeight: true
Layout.minimumWidth: parent.width
Layout.maximumWidth: parent.width
contentWidth: colContacts.width
contentHeight: colContacts.height
ColumnLayout {
id: colContacts
width: sv.width
spacing: 0
Connections { // ADD/REMOVE CONTACT ENTRIES
target: gcd
onLoaded: function() {
gcd.requestServers();
}
onAddServer: function(handle, displayName, image, status, autostart, bundle, messages, key_types, keys) {
// don't add duplicates
for (var i = 0; i < serversModel.count; i++) {
if (serversModel.get(i)["_handle"] == handle) {
serversModel.get(i)["_status"] = status
serversModel.get(i)["_messages"] = messages
return
}
}
// find index for insert (sort by onion)
var index = serversModel.count
for (var i = 0; i < serversModel.count; i++) {
if (serversModel.get(i)["_handle"] > handle) {
index = i
break
}
}
serversModel.insert(index,
{
_handle: handle,
_displayName: displayName,
_image: image,
_status: status,
_bundle: bundle,
_autostart: autostart,
_messages: messages
})
}
onResetServerList: function() {
serversModel.clear()
}
}
ListModel { // Profile OBJECTS ARE STORED HERE ...
id: serversModel
}
Repeater {
id: serverList
model: serversModel // ... AND DISPLAYED HERE
delegate: ServerRow {
handle: _handle
displayName: _displayName
image: _image
status: _status
bundle: _bundle
autostart: _autostart
messages: _messages
Layout.fillWidth: true
rowClicked: function(handle) {
}
editClicked: function(handle, displayName, tag, image) {
gcd.checkServer(handle)
serverAddEditPane.load(handle, displayName, status, _autostart, _messages, _bundle)
parentStack.pane = parentStack.addEditServerPane
}
}
}
Opaque.PortraitRow {
Layout.fillWidth: true
handle: ""
displayName: qsTr("add-new-profile-btn")
nameColor: Theme.mainTextColor
image: "core/fontawesome/regular/user.webp"
tag: ""
portraitBorderColor: Theme.portraitOnlineBorderColor
portraitColor: Theme.portraitOnlineBackgroundColor
badgeVisible: true
badgeContent: Image {
source: gcd.assetPath + "core/fontawesome/solid/plus.webp"
height: Theme.badgeTextSize * gcd.themeScale
width: height
}
badgeColor: Theme.defaultButtonColor
onClicked: function(handle) { gcd.newServer() }
}
}
}
}