[keyboardq] Move to using a Drawer

no longer use a ComboBox or stack view
if accepted, other QML models using a ComboBox will move to Drawer too
This commit is contained in:
demmm 2022-08-23 18:56:49 +02:00
parent 065647154e
commit 7876cdc71a
3 changed files with 219 additions and 157 deletions

View File

@ -0,0 +1,15 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<svg height="16" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" version="1.1" width="16" xmlns="http://www.w3.org/2000/svg" enable-background="new">
<metadata id="metadata90"/>
<defs id="defs7386">
<linearGradient id="linearGradient5606" osb:paint="solid">
<stop id="stop5608"/>
</linearGradient>
<filter inkscape:collect="always" color-interpolation-filters="sRGB" id="filter7554">
<feBlend inkscape:collect="always" id="feBlend7556" in2="BackgroundImage" mode="darken"/>
</filter>
</defs>
<g inkscape:groupmode="layer" id="layer12" inkscape:label="actions" transform="translate(-445.0002,-129)">
<path inkscape:connector-curvature="0" d="m 451.0002,142 5,-5 -5,-5 z" id="path6412" sodipodi:nodetypes="cccc" fill="#555555"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 896 B

View File

@ -12,7 +12,7 @@ import io.calamares.ui 1.0
import QtQuick 2.15 import QtQuick 2.15
import QtQuick.Controls 2.15 import QtQuick.Controls 2.15
import QtQuick.Window 2.14 import QtQuick.Window 2.15
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import org.kde.kirigami 2.7 as Kirigami import org.kde.kirigami 2.7 as Kirigami
@ -52,6 +52,7 @@ Item {
Rectangle { Rectangle {
id: backgroundItem id: backgroundItem
anchors.fill: parent anchors.fill: parent
width: 800
color: backgroundColor color: backgroundColor
Label { Label {
@ -62,199 +63,244 @@ Item {
font.bold: true font.bold: true
} }
Label { Drawer {
id: intro id: drawer
anchors.horizontalCenter: parent.horizontalCenter width: 0.4 * backgroundItem.width
anchors.top: header.bottom height: backgroundItem.height
color: textColor edge: Qt.RightEdge
horizontalAlignment: Text.AlignHCenter
width: parent.width / 1.2
wrapMode: Text.WordWrap
text: ( config.prettyStatus)
}
RowLayout { ScrollView {
id: models id: scroll1
anchors.top: intro.bottom anchors.fill: parent
anchors.topMargin: 10 ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width /1.5
spacing: 10
Label {
Layout.alignment: Qt.AlignCenter
text: qsTr("Keyboard Model:")
color: textColor
font.bold: true
}
ComboBox {
Layout.fillWidth: true
textRole: "label"
model: config.keyboardModelsModel
currentIndex: model.currentIndex
onCurrentIndexChanged: config.keyboardModels = currentIndex
}
}
StackView {
id: stack
anchors.top: models.bottom
anchors.topMargin: 10
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
clip: true
initialItem: Item {
ListView { ListView {
id: layouts id: models
ScrollBar.vertical: ScrollBar {
active: true
}
width: parent.width / 2
height: 200
anchors.horizontalCenter: parent.horizontalCenter
focus: true focus: true
clip: true clip: true
boundsBehavior: Flickable.StopAtBounds boundsBehavior: Flickable.StopAtBounds
spacing: 2 width: parent.width
Rectangle { model: config.keyboardModelsModel
z: parent.z - 1
anchors.fill: parent
color: listBackgroundColor
opacity: 0.7
}
model: config.keyboardLayoutsModel
currentIndex: model.currentIndex
Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center) Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center)
currentIndex: model.currentIndex
delegate: ItemDelegate { delegate: ItemDelegate {
property variant currentModel: model
hoverEnabled: true hoverEnabled: true
width: parent.width width: 0.4 * backgroundItem.width
height: 18 implicitHeight: 24
highlighted: ListView.isCurrentItem highlighted: ListView.isCurrentItem
Label {
Layout.fillHeight: true
Layout.fillWidth: true
horizontalAlignment: Text.AlignHCenter
width: parent.width
height: 24
color: highlighted ? "#eff0f1" : "#1F1F1F"
text: model.label
background: Rectangle {
RowLayout { color: highlighted || hovered ? "#3498DB" : "#ffffff"
anchors.fill: parent opacity: highlighted || hovered ? 0.5 : 0.9
}
Label { MouseArea {
id: label1 hoverEnabled: true
text: model.label anchors.fill: parent
Layout.fillHeight: true cursorShape: Qt.PointingHandCursor
Layout.fillWidth: true onClicked: {
padding: 10 models.currentIndex = index
width: parent.width drawer.close()
height: 32
color: highlighted ? highlightedTextColor : textColor
background: Rectangle {
color: highlighted || hovered ? highlightColor : listBackgroundColor
opacity: highlighted || hovered ? 0.5 : 0.3
} }
} }
} }
}
onCurrentItemChanged: { config.keyboardModels = model[currentIndex] } /* This works because model is a stringlist */
}
}
}
onClicked: { Rectangle {
id: modelLabel
anchors.top: header.bottom
anchors.topMargin: 10
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width / 1.5
height: 36
color: mouseBar.containsMouse ? "#eff0f1" : "transparent";
layouts.model.currentIndex = index MouseArea {
keyIndex = label1.text.substring(0,6) id: mouseBar
stack.push(variantsList) anchors.fill: parent;
layouts.positionViewAtIndex(index, ListView.Center) cursorShape: Qt.PointingHandCursor
} hoverEnabled: true
onClicked: {
drawer.open()
}
Text {
anchors.centerIn: parent
text: qsTr("<b>Keyboard Model:&nbsp;&nbsp;</b>") + models.currentItem.currentModel.label
color: textColor
}
Image {
source: "data/pan-end-symbolic.svg"
anchors.centerIn: parent
anchors.horizontalCenterOffset : parent.width / 2.5
fillMode: Image.PreserveAspectFit
height: 22
}
}
}
RowLayout {
id: stack
anchors.top: modelLabel.bottom
anchors.topMargin: 10
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width / 1.1
spacing: 10
ListView {
id: layouts
ScrollBar.vertical: ScrollBar {
active: true
}
Layout.preferredWidth: parent.width / 2
height: 220
focus: true
clip: true
boundsBehavior: Flickable.StopAtBounds
spacing: 2
headerPositioning: ListView.OverlayHeader
header: Rectangle{
height: 24
width: parent.width
z: 2
color:backgroundColor
Text {
text: qsTr("Layout")
anchors.centerIn: parent
color: textColor
font.bold: true
} }
} }
Button {
Layout.fillWidth: true Rectangle {
anchors.verticalCenter: parent.verticalCenter z: parent.z - 1
anchors.verticalCenterOffset: -parent.height / 3.5 anchors.fill: parent
anchors.left: parent.left color: listBackgroundColor
anchors.leftMargin: parent.width / 15 opacity: 0.7
icon.name: "go-next" }
text: qsTr("Variants")
onClicked: stack.push(variantsList) model: config.keyboardLayoutsModel
currentIndex: model.currentIndex
Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center)
delegate: ItemDelegate {
hoverEnabled: true
width: parent.width
implicitHeight: 24
highlighted: ListView.isCurrentItem
RowLayout {
anchors.fill: parent
Label {
id: label1
text: model.label
horizontalAlignment: Text.AlignHCenter
Layout.fillHeight: true
Layout.fillWidth: true
width: parent.width
height: 24
color: highlighted ? highlightedTextColor : textColor
background: Rectangle {
color: highlighted || hovered ? highlightColor : listBackgroundColor
opacity: highlighted || hovered ? 0.5 : 0.3
}
}
}
onClicked: {
layouts.model.currentIndex = index
keyIndex = label1.text.substring(0,6)
layouts.positionViewAtIndex(index, ListView.Center)
}
} }
} }
Component { ListView {
id: variantsList id: variants
Item { ScrollBar.vertical: ScrollBar {
active: true
}
ListView { Layout.preferredWidth: parent.width / 2
id: variants height: 220
focus: true
clip: true
boundsBehavior: Flickable.StopAtBounds
spacing: 2
headerPositioning: ListView.OverlayHeader
header: Rectangle{
height: 24
width: parent.width
z: 2
color:backgroundColor
Text {
text: qsTr("Variant")
anchors.centerIn: parent
color: textColor
font.bold: true
}
}
ScrollBar.vertical: ScrollBar { Rectangle {
active: true z: parent.z - 1
} anchors.fill: parent
color: listBackgroundColor
opacity: 0.7
}
width: parent.width / 2 model: config.keyboardVariantsModel
height: 200 currentIndex: model.currentIndex
anchors.horizontalCenter: parent.horizontalCenter Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center)
anchors.topMargin: 10
focus: true
clip: true
boundsBehavior: Flickable.StopAtBounds
spacing: 2
Rectangle { delegate: ItemDelegate {
z: parent.z - 1 hoverEnabled: true
anchors.fill: parent width: parent.width
color: listBackgroundColor implicitHeight: 24
opacity: 0.7 highlighted: ListView.isCurrentItem
}
model: config.keyboardVariantsModel RowLayout {
currentIndex: model.currentIndex anchors.fill: parent
Component.onCompleted: positionViewAtIndex(model.currentIndex, ListView.Center)
delegate: ItemDelegate { Label {
hoverEnabled: true text: model.label
horizontalAlignment: Text.AlignHCenter
Layout.fillHeight: true
Layout.fillWidth: true
width: parent.width width: parent.width
height: 18 height: 24
highlighted: ListView.isCurrentItem color: highlighted ? highlightedTextColor : textColor
RowLayout { background: Rectangle {
anchors.fill: parent color: highlighted || hovered ? highlightColor : listBackgroundColor
opacity: highlighted || hovered ? 0.5 : 0.3
Label {
text: model.label
Layout.fillHeight: true
Layout.fillWidth: true
padding: 10
width: parent.width
height: 30
color: highlighted ? highlightedTextColor : textColor
background: Rectangle {
color: highlighted || hovered ? highlightColor : listBackgroundColor
opacity: highlighted || hovered ? 0.5 : 0.3
}
}
}
onClicked: {
variants.model.currentIndex = index
variants.positionViewAtIndex(index, ListView.Center)
} }
} }
} }
Button { onClicked: {
Layout.fillWidth: true variants.model.currentIndex = index
anchors.verticalCenter: parent.verticalCenter variants.positionViewAtIndex(index, ListView.Center)
anchors.verticalCenterOffset: -parent.height / 3.5
anchors.left: parent.left
anchors.leftMargin: parent.width / 15
icon.name: "go-previous"
text: qsTr("Layouts")
onClicked: stack.pop()
} }
} }
} }
@ -264,7 +310,7 @@ Item {
id: textInput id: textInput
placeholderText: qsTr("Type here to test your keyboard") placeholderText: qsTr("Type here to test your keyboard")
height: 36 height: 36
width: parent.width / 1.5 width: parent.width / 1.6
horizontalAlignment: TextInput.AlignHCenter horizontalAlignment: TextInput.AlignHCenter
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: keyboard.top anchors.bottom: keyboard.top

View File

@ -24,5 +24,6 @@
<file>data/button_bkg_center.png</file> <file>data/button_bkg_center.png</file>
<file>data/button_bkg_left.png</file> <file>data/button_bkg_left.png</file>
<file>data/button_bkg_right.png</file> <file>data/button_bkg_right.png</file>
<file>data/pan-end-symbolic.svg</file>
</qresource> </qresource>
</RCC> </RCC>