Files
sloposk/qml/Main.qml
T
ericek111andClaude Opus 5.5 ac5f43ca5f Add quick toggles to the grab bar
Beside the gear: full keyboard, hold keys, and the numeric keypad,
navigation and function key sections, each behind a drawn icon and lit
while on. Section toggles hide when the layout lacks the section. The
grab pill narrows when a small window leaves it less room.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 00:29:48 +01:00

93 lines
3.3 KiB
QML

import QtQuick
import Sloposk
Window {
id: root
required property LayoutModel layoutModel
required property KeyboardController controller
required property Settings settings
required property Diagnostics diagnostics
property var placement: null // FloatingWindow, set from C++
property bool settingsOpen: false
// Height of the key area, for C++ keeping key sizes when rows change.
readonly property real keysHeight: keyboard.height
// Transparent room above the keyboard for long-press popups on the top row.
readonly property real popupMargin: 90
// Outside this, input passes through to whatever is below the window.
readonly property rect inputRegion: keyboard.alternates.open
? Qt.rect(0, 0, width, height)
: Qt.rect(panel.x, panel.y, panel.width, panel.height)
// Empty when nothing shows through, so the compositor skips the blur.
readonly property rect blurRegion: settings.blurBackground && settings.backgroundOpacity < 1
? Qt.rect(panel.x, panel.y, panel.width, panel.height)
: Qt.rect(0, 0, 0, 0)
width: 1000
height: 340 + popupMargin
minimumWidth: 480
minimumHeight: 180 + popupMargin
visible: false
color: "transparent"
onInputRegionChanged: placement?.setInputRegion(inputRegion)
onBlurRegionChanged: placement?.setBlurRegion(blurRegion, Theme.windowRadius)
onPlacementChanged: {
placement?.setInputRegion(inputRegion);
placement?.setBlurRegion(blurRegion, Theme.windowRadius);
}
Rectangle {
id: panel
anchors { fill: parent; topMargin: root.popupMargin }
radius: Theme.windowRadius
color: Qt.rgba(Theme.background.r, Theme.background.g, Theme.background.b, root.settings.backgroundOpacity)
Keyboard {
id: keyboard
anchors { left: parent.left; right: parent.right; top: parent.top; bottom: handle.top }
anchors.margins: 2
visible: !root.settingsOpen
model: root.layoutModel
controller: root.controller
popupHeadroom: root.popupMargin + anchors.margins
}
SettingsPanel {
anchors.fill: keyboard
visible: root.settingsOpen
settings: root.settings
layoutModel: root.layoutModel
diagnostics: root.diagnostics
}
DragHandle {
id: handle
anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
pillWidth: Math.min(120, width - 2 * (quickToggles.x + quickToggles.width + 12))
onDragStarted: root.startSystemMove()
}
SettingsButton {
id: settingsButton
anchors { left: parent.left; leftMargin: 8; bottom: parent.bottom }
checked: root.settingsOpen
alert: root.diagnostics.problems.length > 0
onClicked: root.settingsOpen = !root.settingsOpen
}
QuickToggles {
id: quickToggles
anchors { left: settingsButton.right; bottom: parent.bottom }
settings: root.settings
layoutModel: root.layoutModel
}
ResizeHandle {
anchors { right: parent.right; bottom: parent.bottom }
onDragStarted: root.startSystemResize(Qt.RightEdge | Qt.BottomEdge)
}
}
}