blob: 3466d05c7b2c1caa089eed26eb6e3f358464f550 [file] [log] [blame]
swissChili23958ca2022-02-21 19:23:34 -08001import QtQuick 2.0
2import QtQuick.Controls 2.15
3import QtQuick.Controls.Material 2.0
4import QtQuick.Layouts 1.0
5
swissChili25620b02022-02-23 17:15:16 -08006Item {
swissChili23958ca2022-02-21 19:23:34 -08007 id: root
8
swissChili4b3105a2022-02-22 16:34:39 -08009 required property string code
10 required property string result
11
swissChili25620b02022-02-23 17:15:16 -080012 signal insertBelowClicked()
13 signal codeEditingFinished(string code)
14 signal cellFocused()
swissChili23958ca2022-02-21 19:23:34 -080015
swissChili25620b02022-02-23 17:15:16 -080016 height: column.height
swissChili23958ca2022-02-21 19:23:34 -080017
swissChili25620b02022-02-23 17:15:16 -080018 MouseArea {
19 id: selectCell
20
21 anchors.fill: column
22
23 onClicked: root.cellFocused()
24 }
25
26 ColumnLayout {
27 id: column
28
29 width: parent.width
30
31 RowLayout {
32 id: row
swissChili23958ca2022-02-21 19:23:34 -080033 Layout.fillWidth: true
swissChili23958ca2022-02-21 19:23:34 -080034
swissChili25620b02022-02-23 17:15:16 -080035 RoundButton {
36 Layout.alignment: Qt.AlignTop
37 icon.source: "qrc:///icons/play-circle.svg"
38 icon.color: Material.color(Material.Grey, Material.Shade600)
39 flat: true
40 }
41
42 ColumnLayout {
swissChili23958ca2022-02-21 19:23:34 -080043 Layout.fillWidth: true
44 Layout.fillHeight: true
swissChili4b3105a2022-02-22 16:34:39 -080045
swissChili25620b02022-02-23 17:15:16 -080046 TextArea {
47 Layout.fillWidth: true
48 Layout.fillHeight: true
49 id: code
50 font.family: "monospace"
51 text: root.code
52 selectByMouse: true
53 wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
54
55 Keys.onTabPressed: {
56 var pos = cursorPosition + 4
57 text = text.slice(0, cursorPosition) + " " + text.slice(cursorPosition);
58 cursorPosition = pos
59 }
60
61 Keys.onEscapePressed: {
62 root.forceActiveFocus()
63 }
64
65 onEditingFinished: {
66 root.codeEditingFinished(text)
67 }
68
69 onFocusChanged: if (focus) root.cellFocused()
70 }
71
72 Label {
73 visible: root.result.length > 0
74 Layout.fillWidth: true
75 font.family: "monospace"
76 text: root.result
swissChili4b3105a2022-02-22 16:34:39 -080077 }
swissChili23958ca2022-02-21 19:23:34 -080078 }
79
swissChili25620b02022-02-23 17:15:16 -080080 RoundButton {
81 icon.source: "qrc:///icons/trash.svg"
82 icon.color: Material.color(Material.Grey, Material.theme == Material.Dark ? Material.Shade400 : Material.Shade600)
83 flat: true
swissChili23958ca2022-02-21 19:23:34 -080084 }
85 }
swissChili23958ca2022-02-21 19:23:34 -080086
swissChili25620b02022-02-23 17:15:16 -080087 InsertRow {
88 onInsertClicked: root.insertBelowClicked()
89 }
swissChili23958ca2022-02-21 19:23:34 -080090 }
91}