From cdec039fe30ec2bcb75a9a1596b32fa6eeed6b74 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Mon, 6 Jul 2015 20:26:14 +0200 Subject: Added `terminal` property to TerminalItem Makes it easier to access the `QMLTermWidget` instance from both outside and inside `TerminalItem` --- qml/EmbeddedTerminal.qml | 21 ++++++++++--------- qml/TerminalItem.qml | 52 +++++++++++++++++++++++++----------------------- qml/main.qml | 4 +++- 3 files changed, 40 insertions(+), 37 deletions(-) (limited to 'qml') diff --git a/qml/EmbeddedTerminal.qml b/qml/EmbeddedTerminal.qml index 6d94230..146df7f 100644 --- a/qml/EmbeddedTerminal.qml +++ b/qml/EmbeddedTerminal.qml @@ -1,16 +1,15 @@ import QtQuick 2.0 import QMLTermWidget 1.0 -import QtQuick.Controls 1.2 Item { - id: embeddedTerminal + id: item property string program property string workingDirectory - property int columns - property int lines + property int columns + property int lines - width: container.width + width: container.width height: container.height function select() { highlighter.select() } @@ -52,18 +51,18 @@ Item { font.family: "Monospace" font.pointSize: 8 - width: fontMetrics.width * embeddedTerminal.columns - height: fontMetrics.height * embeddedTerminal.lines + width: fontMetrics.width * item.columns + height: fontMetrics.height * item.lines session: QMLTermSession { - initialWorkingDirectory: embeddedTerminal.workingDirectory + initialWorkingDirectory: item.workingDirectory shellProgram: { - return (embeddedTerminal.program).split(" ")[0]; + return (item.program).split(" ")[0]; } shellProgramArgs: { - var elements = (embeddedTerminal.program).split(" "); + var elements = (item.program).split(" "); elements.shift(); return elements; @@ -80,7 +79,7 @@ Item { } Component.onCompleted: { - terminal.forceActiveFocus(); + forceActiveFocus(); session.startShellProgram(); } } diff --git a/qml/TerminalItem.qml b/qml/TerminalItem.qml index 51ef98c..13a19dd 100644 --- a/qml/TerminalItem.qml +++ b/qml/TerminalItem.qml @@ -3,34 +3,35 @@ import QtQuick.Controls 1.2 import QtQuick.Layouts 1.1 Item { - id: terminalItem + id: item - property int index : 0 + property int index : 0 + property EmbeddedTerminal terminal : null signal executed height: elementList.height function select() { - if ( command.readOnly ) { - elementList.children[1].select(); - } else { + if ( terminal == null ) { highlighter.select(); + } else { + terminal.select(); } } function deselect() { - if ( command.readOnly ) { - elementList.children[1].deselect(); - } else { + if ( terminal == null ) { highlighter.deselect(); + } else { + terminal.deselect(); } } function forceActiveFocus() { - if ( command.readOnly ) { - scope.forceActiveFocus(); - } else { + scope.forceActiveFocus(); + + if ( terminal == null ) { scope.forceActiveFocus(); highlighter.select(); highlighter.focus(); @@ -38,7 +39,7 @@ Item { } function unfocus() { - if ( !command.readOnly ) { + if ( terminal == null ) { highlighter.unfocus(); } } @@ -50,26 +51,26 @@ Item { id: elementList function createTerminal(program) { - var terminal = Qt.createComponent("qrc:/EmbeddedTerminal.qml"); + var terminalComponent = Qt.createComponent("qrc:/EmbeddedTerminal.qml"); var instantiateTerminal = function() { - terminal.createObject(elementList, { - "columns": 90, - "lines": 20, - "program": program, - "workingDirectory": "$HOME", - "focus": true + item.terminal = terminalComponent.createObject(elementList, { + "columns" : 90, + "lines" : 20, + "program" : program, + "workingDirectory" : "$HOME", + "focus" : true }); } - if ( terminal.status === Component.Ready ) { + if ( terminalComponent.status === Component.Ready ) { instantiateTerminal(); } else { - terminal.statusChanged.connect(instantiateTerminal); + terminalComponent.statusChanged.connect(instantiateTerminal); } } RowLayout { - width: terminalItem.width + width: item.width Rectangle { id: highlighter @@ -109,18 +110,19 @@ Item { Layout.fillWidth: true onAccepted: { - if ( !readOnly ) { + if ( item.terminal == null ) { readOnly = true; focus = false; + elementList.createTerminal(text); - terminalItem.executed(); + item.executed(); highlighter.deselect(); } } } Text { - text: terminalItem.index + text: item.index font { family: "Monospace" pointSize: 12 diff --git a/qml/main.qml b/qml/main.qml index 48be124..70110db 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -13,6 +13,7 @@ ApplicationWindow { Flickable { id: terminalListFlickable + anchors.fill: parent boundsBehavior: Flickable.StopAtBounds @@ -22,10 +23,11 @@ ApplicationWindow { Column { id: terminalList - spacing: 10 property int activeItem : 0 + spacing: 10 + onHeightChanged: scrollTo(activeItem) function createItem() { -- cgit v1.2.3