From ef9e2d08263efa811ece898deff6468ad0ed745e Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sun, 13 Dec 2015 23:39:53 +0100 Subject: Implement terminal status line prototype --- src/SettingsHandler.qml | 1 + src/widget/EmbeddedTerminal.qml | 191 ++++++++++++++++++++++++++-------------- 2 files changed, 125 insertions(+), 67 deletions(-) diff --git a/src/SettingsHandler.qml b/src/SettingsHandler.qml index ca5ea6b..ca52198 100644 --- a/src/SettingsHandler.qml +++ b/src/SettingsHandler.qml @@ -68,6 +68,7 @@ QtObject { property string launcherArgument : "-c" property string overlayBackground : "black" property string overlayFontColor : "white" + property string statusFontColor : "gray" } property Settings command : Settings { diff --git a/src/widget/EmbeddedTerminal.qml b/src/widget/EmbeddedTerminal.qml index 67d9a91..5e2e2df 100644 --- a/src/widget/EmbeddedTerminal.qml +++ b/src/widget/EmbeddedTerminal.qml @@ -19,7 +19,7 @@ Item { function deselect() { highlighter.deselect() } function displayOverlay() { overlay.displayBriefly() } - height: terminal.height + height: terminal.parent.height width: parent.width - settings.terminal.frameWidth RowLayout { @@ -39,104 +39,161 @@ Item { Layout.fillHeight: true } - QMLTermWidget { - id: terminal + ColumnLayout { + Layout.fillWidth: true - font { - family: settings.terminal.fontFamily - pointSize: settings.terminal.fontSize - } + spacing: 0 + + QMLTermWidget { + id: terminal - Layout.fillWidth: true - Layout.preferredHeight: fontMetrics.height * item.lines + font { + family: settings.terminal.fontFamily + pointSize: settings.terminal.fontSize + } - colorScheme: settings.terminal.colorScheme + Layout.fillWidth: true + Layout.preferredHeight: fontMetrics.height * item.lines - session: QMLTermSession { - id: session + colorScheme: settings.terminal.colorScheme - initialWorkingDirectory: settings.terminal.initialWorkingDirectory + session: QMLTermSession { + id: session - shellProgram: settings.terminal.launcherProgram - shellProgramArgs: [ settings.terminal.launcherArgument, program ] + initialWorkingDirectory: settings.terminal.initialWorkingDirectory - onFinished: { - clearScreen(); - item.finished(); + shellProgram: settings.terminal.launcherProgram + shellProgramArgs: [ settings.terminal.launcherArgument, program ] + + onFinished: { + clearScreen(); + item.finished(); + } } - } - Component.onCompleted: { - forceActiveFocus(); - highlighter.select(); - session.startShellProgram(); - overlay.enabled = true; - } + Component.onCompleted: { + forceActiveFocus(); + highlighter.select(); + session.startShellProgram(); + statusLine.update(); + overlay.enabled = true; + } + + onTermGetFocus: { + highlighter.focus(); + statusLine.update(); + } - onTermGetFocus: highlighter.focus() - onTermLostFocus: highlighter.unfocus() - onHeightChanged: overlay.displayBriefly() - onWidthChanged: overlay.displayBriefly() + onTermLostFocus: highlighter.unfocus() + onHeightChanged: overlay.displayBriefly() + onWidthChanged: overlay.displayBriefly() - Rectangle { - id: overlay + Rectangle { + id: overlay - property bool enabled : false + property bool enabled : false - function displayBriefly() { - if ( enabled ) { animation.restart() } - } + function displayBriefly() { + if ( enabled ) { animation.restart() } + } + + anchors.fill: parent + opacity: 0 + color: settings.terminal.overlayBackground + + SequentialAnimation { + id: animation - anchors.fill: parent - opacity: 0 - color: settings.terminal.overlayBackground + ScriptAction { + script: overlay.opacity = 0.8 + } - SequentialAnimation { - id: animation + PauseAnimation { + duration: 500 + } - ScriptAction { - script: overlay.opacity = 0.8 + NumberAnimation { + target: overlay + property: "opacity" + + easing.type: Easing.InSine + duration: 300 + from: 0.8 + to: 0 + } } - PauseAnimation { - duration: 500 + 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: { } + } + } - NumberAnimation { - target: overlay - property: "opacity" + RowLayout { + id: statusLine - easing.type: Easing.InSine - duration: 300 - from: 0.8 - to: 0 - } + Layout.fillWidth: true + Layout.alignment: Qt.AlignRight + + spacing: 5 + + function update() { + var shellPID = session.getShellPID(); + + pid.text = shellPID; + workingDirectory.text = cwd.currentOfPID(shellPID); } Text { - anchors { - horizontalCenter: overlay.horizontalCenter - verticalCenter: overlay.verticalCenter - } + id: pid font { family: settings.terminal.fontFamily - pointSize: settings.terminal.fontSize * 2 + pointSize: settings.terminal.fontSize } - color: settings.terminal.overlayFontColor + color: settings.terminal.statusFontColor + } - text: { - return item.lines - + 'x' - + Math.floor(terminal.width / terminal.fontMetrics.width); + Text { + font { + family: settings.terminal.fontFamily + pointSize: settings.terminal.fontSize } + color: settings.terminal.statusFontColor + + text: "@" } - } - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.NoButton - onWheel: { } + Text { + id: workingDirectory + + font { + family: settings.terminal.fontFamily + pointSize: settings.terminal.fontSize + } + color: settings.terminal.statusFontColor + } } } } -- cgit v1.2.3