blob: b560340a2d511264795bd0a97ec2a8b79ec60ec9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
import QtQuick
import QtQuick.Controls.impl
import Qt.labs.qmlmodels as QtLabsQmlModels
import QtQuick.Templates as T
T.TableViewDelegate {
id: control
// same as AbstractButton.qml
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
implicitContentWidth + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding)
highlighted: control.selected
required property int column
required property int row
required property var model
background: Rectangle {
border.width: control.current ? 2 : 0
border.color: control.palette.highlight
color: control.highlighted
? control.palette.highlight
: (control.tableView.alternatingRows && control.row % 2 !== 0
? control.palette.alternateBase : control.palette.base)
}
contentItem: Label {
clip: false
text: control.model.display ?? ""
elide: Text.ElideRight
color: control.highlighted ? control.palette.highlightedText : control.palette.buttonText
visible: !control.editing
}
// The edit delegate is a separate component, and doesn't need
// to follow the same strict rules that are applied to a control.
// qmllint disable attached-property-reuse
// qmllint disable controls-attached-property-reuse
// qmllint disable controls-sanity
TableView.editDelegate: FocusScope {
width: parent.width
height: parent.height
TableView.onCommit: {
let model = control.tableView.model
if (!model)
return
// The setData() APIs are different in QAbstractItemModel and QQmlTableModel.
// This is an issue and will be fixed later, probably by deprecating the wrong
// API in QQmlTableModel. There is a ticket reported this issue and a workaround
// is provided in the description: https://bugreports.qt.io/browse/QTBUG-104733
// But temporarily we need to manage this by checking the model's type.
let succeed = false
const index = model.index(control.row, control.column)
if (model instanceof QtLabsQmlModels.TableModel)
succeed = model.setData(index, "edit", textField.text)
else
succeed = model.setData(index, textField.text, Qt.EditRole)
if (!succeed)
console.warn("The model does not allow setting the EditRole data.")
}
Component.onCompleted: textField.selectAll()
TextField {
id: textField
anchors.fill: parent
text: control.model.edit ?? control.model.display ?? ""
focus: true
}
}
// qmllint enable attached-property-reuse
// qmllint enable controls-attached-property-reuse
// qmllint enable controls-sanity
}
|