From d8431223d34476a17835a05d9508e92447f22479 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sat, 15 Aug 2015 16:06:00 +0200 Subject: Restructure QML and JS sources `list` holds the components of the central list UI element. `command` holds the UI and implementation parts of the command mode. `widget` holds more or less general purpose elements that may also be of use in other circumstances. --- src/widget/EmbeddedTerminal.qml | 153 ++++++++++++++++++++++++++++++++++++++++ src/widget/Highlighter.qml | 33 +++++++++ 2 files changed, 186 insertions(+) create mode 100644 src/widget/EmbeddedTerminal.qml create mode 100644 src/widget/Highlighter.qml (limited to 'src/widget') 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 + } + } + } +} -- cgit v1.2.3