add settings dialog (color scheme, font family/style/size)
This commit is contained in:
parent
da1f7f02dd
commit
e03488e6bb
129
gui/main.qml
129
gui/main.qml
|
|
@ -8,9 +8,10 @@ ApplicationWindow {
|
|||
width: 1000
|
||||
height: 600
|
||||
title: "Ollie"
|
||||
font.family: theme.fontFamily || Qt.application.font.family
|
||||
font.pointSize: theme.fontSize > 0 ? theme.fontSize : Qt.application.font.pointSize
|
||||
|
||||
Component.onCompleted: {
|
||||
// Load initial log content
|
||||
var log = ollie.readLog()
|
||||
if (log) chatModel.appendData(log)
|
||||
}
|
||||
|
|
@ -27,6 +28,124 @@ ApplicationWindow {
|
|||
}
|
||||
}
|
||||
|
||||
// --- Settings Dialog ---
|
||||
Dialog {
|
||||
id: settingsDialog
|
||||
title: "Settings"
|
||||
anchors.centerIn: parent
|
||||
width: 380
|
||||
modal: true
|
||||
standardButtons: Dialog.Close
|
||||
|
||||
contentItem: ColumnLayout {
|
||||
spacing: 16
|
||||
Layout.margins: 16
|
||||
|
||||
Label {
|
||||
text: "Color Scheme"
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
Label {
|
||||
text: "Uses KDE Breeze color schemes from /usr/share/color-schemes/"
|
||||
opacity: 0.6
|
||||
wrapMode: Text.Wrap
|
||||
Layout.fillWidth: true
|
||||
font.pixelSize: Qt.application.font.pixelSize * 0.9
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
spacing: 8
|
||||
|
||||
RadioButton {
|
||||
id: systemRadio
|
||||
text: "Use system theme"
|
||||
checked: theme.mode === "system"
|
||||
onClicked: theme.mode = "system"
|
||||
}
|
||||
RadioButton {
|
||||
id: lightRadio
|
||||
text: "Breeze Light"
|
||||
checked: theme.mode === "light"
|
||||
onClicked: theme.mode = "light"
|
||||
}
|
||||
RadioButton {
|
||||
id: darkRadio
|
||||
text: "Breeze Dark"
|
||||
checked: theme.mode === "dark"
|
||||
onClicked: theme.mode = "dark"
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: theme.isDark ? "Current: dark" : "Current: light"
|
||||
opacity: 0.5
|
||||
font.pixelSize: Qt.application.font.pixelSize * 0.85
|
||||
}
|
||||
|
||||
Rectangle {
|
||||
Layout.fillWidth: true
|
||||
height: 1
|
||||
color: palette.mid
|
||||
Layout.topMargin: 8
|
||||
}
|
||||
|
||||
Label {
|
||||
text: "Font"
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
GridLayout {
|
||||
columns: 2
|
||||
columnSpacing: 12
|
||||
rowSpacing: 8
|
||||
Layout.fillWidth: true
|
||||
|
||||
Label { text: "Family:" }
|
||||
ComboBox {
|
||||
id: fontFamilyCombo
|
||||
Layout.fillWidth: true
|
||||
model: theme.availableFamilies
|
||||
editable: true
|
||||
currentIndex: {
|
||||
let fam = theme.fontFamily || Qt.application.font.family
|
||||
let idx = model.indexOf(fam)
|
||||
return idx >= 0 ? idx : 0
|
||||
}
|
||||
onActivated: theme.fontFamily = currentText
|
||||
onAccepted: theme.fontFamily = editText
|
||||
}
|
||||
|
||||
Label { text: "Style:" }
|
||||
ComboBox {
|
||||
id: fontStyleCombo
|
||||
Layout.fillWidth: true
|
||||
model: theme.availableStyles
|
||||
currentIndex: {
|
||||
let st = theme.fontStyle
|
||||
let idx = model.indexOf(st)
|
||||
return idx >= 0 ? idx : 0
|
||||
}
|
||||
onActivated: theme.fontStyle = currentText
|
||||
}
|
||||
|
||||
Label { text: "Size:" }
|
||||
SpinBox {
|
||||
id: fontSizeSpin
|
||||
from: 6
|
||||
to: 72
|
||||
value: theme.fontSize > 0 ? theme.fontSize : Qt.application.font.pointSize
|
||||
onValueModified: theme.fontSize = value
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
text: "Reset to system font"
|
||||
onClicked: theme.resetFont()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SplitView {
|
||||
anchors.fill: parent
|
||||
|
||||
|
|
@ -45,6 +164,12 @@ ApplicationWindow {
|
|||
text: "\u21BB"
|
||||
onClicked: ollie.refreshSessions()
|
||||
}
|
||||
ToolButton {
|
||||
text: "\u2699"
|
||||
onClicked: settingsDialog.open()
|
||||
ToolTip.text: "Settings"
|
||||
ToolTip.visible: hovered
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -127,7 +252,6 @@ ApplicationWindow {
|
|||
boundsBehavior: Flickable.StopAtBounds
|
||||
|
||||
onCountChanged: {
|
||||
// Auto-scroll to bottom on new blocks
|
||||
if (count > 0) {
|
||||
positionViewAtEnd()
|
||||
}
|
||||
|
|
@ -136,7 +260,6 @@ ApplicationWindow {
|
|||
Connections {
|
||||
target: chatModel
|
||||
function onDataChanged() {
|
||||
// Keep scrolled to bottom when content streams in
|
||||
if (chatView.atYEnd)
|
||||
chatView.positionViewAtEnd()
|
||||
}
|
||||
|
|
|
|||
Reference in New Issue