blob: 192fcef82fae970b6dc833e5f07fb19f0c0d71ff (
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
 | import QtQuick 2.0
import QMLTermWidget 1.0
import QtQuick.Layouts 1.1
Item {
	id: item
	signal finished
	property string program
	property string workingDirectory
	property int lines : settings.terminal.initialLines
	property alias history : session.history
	function select()         { highlighter.select()     }
	function deselect()       { highlighter.deselect()   }
	function displayOverlay() { overlay.displayBriefly() }
	height: terminal.height
	width:  parent.width - settings.terminal.frameWidth
	RowLayout {
		id: container
		anchors {
			left:  parent.left
			right: parent.right
		}
		spacing: 0
		Highlighter {
			id: highlighter
			width: settings.terminal.frameWidth
			Layout.fillHeight: true
		}
		QMLTermWidget {
			id: terminal
			font {
				family:    settings.terminal.fontFamily
				pointSize: settings.terminal.fontSize
			}
			Layout.fillWidth:       true
			Layout.preferredHeight: fontMetrics.height * item.lines
			colorScheme: settings.terminal.colorScheme
			session: QMLTermSession {
				id: session
				initialWorkingDirectory: item.workingDirectory
				shellProgram: settings.terminal.launcherProgram
				shellProgramArgs: [ settings.terminal.launcherArgument, program ]
				onFinished: {
					clearScreen();
					item.finished();
				}
			}
			Component.onCompleted: {
				forceActiveFocus();
				highlighter.select();
				session.startShellProgram();
				overlay.enabled = true;
			}
			onTermGetFocus:  highlighter.focus()
			onTermLostFocus: highlighter.unfocus()
			onHeightChanged: overlay.displayBriefly();
			onWidthChanged:  overlay.displayBriefly();
			Rectangle {
				id: overlay
				property bool enabled : false
				function displayBriefly() {
					if ( enabled ) { animation.restart() }
				}
				anchors.fill: parent
				opacity: 0
				color: settings.terminal.overlayBackground
				SequentialAnimation {
					id: animation
					ScriptAction {
						script: overlay.opacity = 0.8
					}
					PauseAnimation {
						duration: 500
					}
					NumberAnimation {
						target:   overlay
						property: "opacity"
						easing.type: Easing.InSine
						duration: 300
						from:     0.8
						to:       0
					}
				}
				Text {
					anchors {
						horizontalCenter: overlay.horizontalCenter
						verticalCenter:   overlay.verticalCenter
					}
					font {
						family:    settings.terminal.fontFamily
						pointSize: settings.terminal.fontSize * 2
					}
					color: settings.terminal.overlayFontColor
					text: {
						return item.lines
						       + 'x'
						       + Math.floor(terminal.width / terminal.fontMetrics.width);
					}
				}
			}
			MouseArea {
				anchors.fill: parent
				acceptedButtons: Qt.NoButton
				onWheel: { }
			}
		}
	}
}
 |