130 lines
5.5 KiB
QML
130 lines
5.5 KiB
QML
import QtQuick 2.4
|
|
import QtQuick.Layouts 1.2
|
|
import QtQml.Models 2.2
|
|
import QtQuick.Controls 2.4 as Controls
|
|
import org.kde.kirigami 2.5 as Kirigami
|
|
|
|
Item {
|
|
id: delegate
|
|
|
|
property ListView view
|
|
implicitHeight : listItem.implicitHeight
|
|
|
|
signal moveRequested(int oldIndex, int newIndex)
|
|
|
|
Kirigami.SwipeListItem {
|
|
id: listItem
|
|
alwaysVisibleActions: true // default is broken in mobile/tablet mode
|
|
visible: !model.isLastRow
|
|
contentItem: RowLayout {
|
|
id: fieldRow
|
|
Kirigami.ListItemDragHandle {
|
|
listItem: listItem
|
|
listView: view
|
|
onMoveRequested: (oldIndex, newIndex) => delegate.moveRequested(oldIndex, newIndex)
|
|
}
|
|
Item {
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
RowLayout {
|
|
anchors.fill: parent
|
|
Controls.Label {
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.maximumWidth: availableWidth - listItem.overlayWidth
|
|
elide: Text.ElideRight
|
|
text: {
|
|
let pieces = []
|
|
if (model.key) {
|
|
pieces.push(model.key)
|
|
}
|
|
if (model.value) {
|
|
pieces.push(model.value)
|
|
}
|
|
return pieces.join(": ")
|
|
}
|
|
verticalAlignment: Text.AlignVCenter
|
|
}
|
|
}
|
|
MouseArea {
|
|
anchors.fill: parent
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
onClicked: (mouse) => {
|
|
if (mouse.button === Qt.RightButton) {
|
|
return fieldContextMenu.popup()
|
|
}
|
|
fieldDialog.init(model, index)
|
|
fieldDialog.open()
|
|
}
|
|
onPressAndHold: fieldContextMenu.popup()
|
|
}
|
|
Controls.Menu {
|
|
id: fieldContextMenu
|
|
Controls.MenuItem {
|
|
icon.name: !model.isPassword ? "password-show-off" : "password-show-on"
|
|
text: model.isPassword ? qsTr("Mark as normal field") : qsTr(
|
|
"Mark as password field")
|
|
onClicked: view.model.setData(
|
|
view.model.index(index,
|
|
0),
|
|
model.isPassword ? 0 : 1, 0x0100 + 1)
|
|
}
|
|
Controls.MenuItem {
|
|
icon.name: "edit-copy"
|
|
text: model.isPassword ? qsTr("Copy password") : qsTr(
|
|
"Copy value")
|
|
onClicked: showPassiveNotification(
|
|
nativeInterface.copyToClipboard(
|
|
model.actualValue) ? qsTr("Copied") : qsTr(
|
|
"Unable to access clipboard"))
|
|
}
|
|
Controls.MenuItem {
|
|
icon.name: "edit-delete"
|
|
text: qsTr("Delete field")
|
|
onClicked: view.model.removeRows(index, 1)
|
|
}
|
|
Controls.MenuItem {
|
|
icon.name: "list-add"
|
|
text: qsTr("Insert empty field after this")
|
|
onClicked: view.model.insertRows(
|
|
index + 1, 1)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
actions: [
|
|
Kirigami.Action {
|
|
icon.name: !model.isPassword ? "password-show-off" : "password-show-on"
|
|
text: model.isPassword ? qsTr(
|
|
"Mark as normal field") : qsTr(
|
|
"Mark as password field")
|
|
onTriggered: view.model.setData(
|
|
view.model.index(index, 0),
|
|
model.isPassword ? 0 : 1, 0x0100 + 1)
|
|
},
|
|
Kirigami.Action {
|
|
icon.name: "edit-copy"
|
|
text: model.isPassword ? qsTr("Copy password") : qsTr(
|
|
"Copy value")
|
|
onTriggered: showPassiveNotification(
|
|
nativeInterface.copyToClipboard(
|
|
model.actualValue) ? qsTr("Copied") : qsTr(
|
|
"Unable to access clipboard"))
|
|
shortcut: StandardKey.Cut
|
|
},
|
|
Kirigami.Action {
|
|
icon.name: "edit-delete"
|
|
text: qsTr("Delete field")
|
|
onTriggered: view.model.removeRows(index, 1)
|
|
shortcut: StandardKey.Delete
|
|
},
|
|
Kirigami.Action {
|
|
icon.name: "list-add"
|
|
text: qsTr("Insert empty field after this")
|
|
enabled: !nativeInterface.hasEntryFilter
|
|
onTriggered: view.model.insertRows(index + 1, 1)
|
|
}
|
|
]
|
|
}
|
|
}
|