blob: f0e2c90866afe3d8bd5915daf22da459768cb716 (
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
// Copyright (C) 2021 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
import QtQuick 2.15
import QtQuick.Templates 2.15 as T
import StudioTheme 1.0 as StudioTheme
TextField {
id: myTextField
property real relativePopupX: 0 // TODO Maybe call it leftPadding
property real popupWidth: myTextField.width
property string txtStorage
property int temp: 0
T.Popup {
id: popup
x: myTextField.relativePopupX
y: myTextField.height - StudioTheme.Values.border
width: myTextField.popupWidth
height: scrollView.height
background: Rectangle {
color: StudioTheme.Values.themePopupBackground
border.color: StudioTheme.Values.themeInteraction
border.width: StudioTheme.Values.border
}
contentItem: ScrollView {
id: scrollView
padding: 0
height: Math.min(textAreaPopup.contentHeight + scrollView.topPadding
+ scrollView.bottomPadding,
StudioTheme.Values.maxTextAreaPopupHeight)
ScrollBar.horizontal.policy: ScrollBar.AlwaysOn
ScrollBar.vertical.policy: ScrollBar.AlwaysOn
T.TextArea {
id: textAreaPopup
padding: 10
width: textAreaPopup.contentWidth + textAreaPopup.leftPadding
+ textAreaPopup.rightPadding
anchors.fill: parent
font.pixelSize: StudioTheme.Values.myFontSize
color: StudioTheme.Values.themeTextColor
selectionColor: StudioTheme.Values.themeTextSelectionColor
selectedTextColor: StudioTheme.Values.themeTextSelectedTextColor
selectByMouse: true
persistentSelection: textAreaPopup.focus
MouseArea {
id: mouseArea
anchors.fill: parent
enabled: true
cursorShape: Qt.IBeamCursor
acceptedButtons: Qt.RightButton
onPressed: contextMenu.popup(textAreaPopup)
}
}
}
ContextMenu {
id: contextMenu
myTextEdit: textAreaPopup
}
AbstractButton {
id: acceptButton
x: popup.width - acceptButton.width
y: popup.height - StudioTheme.Values.border
width: Math.round(StudioTheme.Values.smallRectWidth)
height: Math.round(StudioTheme.Values.smallRectWidth)
buttonIcon: StudioTheme.Constants.tickIcon
}
AbstractButton {
id: discardButton
x: popup.width - acceptButton.width - discardButton.width + StudioTheme.Values.border
y: popup.height - StudioTheme.Values.border
width: Math.round(StudioTheme.Values.smallRectWidth)
height: Math.round(StudioTheme.Values.smallRectWidth)
buttonIcon: StudioTheme.Constants.closeCross
}
Component.onCompleted: {
storeAndFormatTextInput(myTextField.text)
}
onOpened: {
textAreaPopup.text = txtStorage
myTextField.clear()
}
onClosed: {
storeAndFormatTextInput(textAreaPopup.text)
myTextField.forceActiveFocus()
textAreaPopup.deselect()
}
}
function storeAndFormatTextInput(inputText) {
txtStorage = inputText
var pos = txtStorage.search(/\n/g)
var sliceAt = Math.min(pos, 15)
myTextField.text = txtStorage.slice(0, sliceAt).padEnd(sliceAt + 3, '.')
}
Keys.onPressed: function(event) {
if (event.key === Qt.Key_Escape)
popup.opened ? popup.close() : myTextField.focus = false
if ((event.key === Qt.Key_Return || event.key === Qt.Key_Enter)
&& !popup.opened) {
popup.open()
textAreaPopup.forceActiveFocus()
}
}
}
|