aboutsummaryrefslogtreecommitdiff
path: root/src/widget
diff options
context:
space:
mode:
Diffstat (limited to 'src/widget')
-rw-r--r--src/widget/EmbeddedTerminal.qml153
-rw-r--r--src/widget/Highlighter.qml33
2 files changed, 186 insertions, 0 deletions
diff --git a/src/widget/EmbeddedTerminal.qml b/src/widget/EmbeddedTerminal.qml
new file mode 100644
index 0000000..6d0dc6e
--- /dev/null
+++ b/src/widget/EmbeddedTerminal.qml
@@ -0,0 +1,153 @@
+import QtQuick 2.0
+import QMLTermWidget 1.0
+import QtQuick.Layouts 1.1
+import Qt.labs.settings 1.0
+
+Item {
+ id: item
+
+ property string program
+ property string workingDirectory
+
+ Settings {
+ id: settings
+ category: "terminal"
+
+ property int initialLines : 20
+ property int frameWidth : 10
+ property int fontSize : 8
+ property string fontFamily : "Monospace"
+ property string colorScheme : "cool-retro-term"
+ property string overlayBackground : "black"
+ property string overlayFontColor : "white"
+ }
+
+ property int lines : settings.initialLines
+
+ height: terminal.height
+ width: parent.width - settings.frameWidth
+
+ function select() { highlighter.select() }
+ function deselect() { highlighter.deselect() }
+ function displayOverlay() { overlay.displayBriefly() }
+
+ RowLayout {
+ id: container
+
+ anchors {
+ left: parent.left
+ right: parent.right
+ }
+
+ spacing: 0
+
+ Highlighter {
+ id: highlighter
+
+ width: settings.frameWidth
+ Layout.fillHeight: true
+ }
+
+ QMLTermWidget {
+ id: terminal
+
+ font {
+ family: settings.fontFamily
+ pointSize: settings.fontSize
+ }
+
+ Layout.fillWidth: true
+ Layout.preferredHeight: fontMetrics.height * item.lines
+
+ colorScheme: settings.colorScheme
+
+ session: QMLTermSession {
+ initialWorkingDirectory: item.workingDirectory
+
+ shellProgram: {
+ return (item.program).split(" ")[0];
+ }
+
+ shellProgramArgs: {
+ const elements = (item.program).split(" ");
+ elements.shift();
+
+ return elements;
+ }
+ }
+
+ 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.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.fontFamily
+ pointSize: settings.fontSize * 2
+ }
+ color: settings.overlayFontColor
+
+ text: {
+ return item.lines
+ + 'x'
+ + Math.floor(terminal.width / terminal.fontMetrics.width);
+ }
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ acceptedButtons: Qt.NoButton
+ onWheel: { }
+ }
+ }
+ }
+}
diff --git a/src/widget/Highlighter.qml b/src/widget/Highlighter.qml
new file mode 100644
index 0000000..e42aeb1
--- /dev/null
+++ b/src/widget/Highlighter.qml
@@ -0,0 +1,33 @@
+import QtQuick 2.0
+import Qt.labs.settings 1.0
+
+Item {
+ Settings {
+ id: settings
+ category: "highlighter"
+
+ property string defaultColor : "#909636"
+ property string focusColor : "#352F6A"
+ }
+
+ function select() { bar.opacity = 1 }
+ function deselect() { bar.opacity = 0 }
+ function focus() { bar.color = settings.focusColor }
+ function unfocus() { bar.color = settings.defaultColor }
+
+ Rectangle {
+ id: bar
+
+ anchors.fill: parent
+
+ opacity: 0
+ color: settings.defaultColor
+
+ Behavior on opacity {
+ NumberAnimation {
+ duration: 300
+ easing.type: Easing.OutCubic
+ }
+ }
+ }
+}