diff --git a/build.rs b/build.rs index e5aea9e..992b8c1 100644 --- a/build.rs +++ b/build.rs @@ -12,6 +12,7 @@ fn main() { uri: "clide.module", rust_files: &["src/colors.rs"], qml_files: &["qml/main.qml", + "qml/ClideAboutWindow.qml", "qml/ClideProjectView.qml", "qml/ClideEditor.qml", "qml/ClideMenuBar.qml"], diff --git a/icons/kilroy-256.png b/icons/kilroy-256.png new file mode 100644 index 0000000..ef5590a Binary files /dev/null and b/icons/kilroy-256.png differ diff --git a/qml/ClideAboutWindow.qml b/qml/ClideAboutWindow.qml new file mode 100644 index 0000000..2922764 --- /dev/null +++ b/qml/ClideAboutWindow.qml @@ -0,0 +1,73 @@ +// TODO: Header + +import QtQuick +import QtQuick.Controls.Basic + +import clide.module 1.0 + +ApplicationWindow { + id: root + width: 450 + height: 350 + // Create the window with no frame and keep it on top. + flags: Qt.Window | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint + color: RustColors.gutter + + // Hide the window when it loses focus. + onActiveChanged: { + if (!active) { + root.visible = false; + } + } + + // Kilroy logo. + Image { + id: logo + + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.margins: 20 + + source: "../icons/kilroy-256.png" + sourceSize.width: 80 + sourceSize.height: 80 + fillMode: Image.PreserveAspectFit + + smooth: true + antialiasing: true + asynchronous: true + } + + ScrollView { + anchors.top: logo.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.margins: 20 + + TextArea { + selectedTextColor: RustColors.editor_highlighted_text + selectionColor: RustColors.editor_highlight + horizontalAlignment: Text.AlignHCenter + textFormat: Text.RichText + + text: qsTr("

About CLIDE

" + + "

A simple text editor written in Rust and QML using CXX-Qt.

" + + "

Personal website shaunreed.com

" + + "

Project notes knoats.com

" + + "

This project is developed at git.shaunreed.com

" + + "

KDAB CXX-Qt repository

" + + "

Copyright (C) 2025 Shaun Reed, all rights reserved.

") + color: RustColors.editor_text + wrapMode: Text.WordWrap + readOnly: true + antialiasing: true + background: null + + onLinkActivated: function (link) { + Qt.openUrlExternally(link) + } + } + } +} diff --git a/qml/ClideMenuBar.qml b/qml/ClideMenuBar.qml index 6c175cb..9a9661c 100644 --- a/qml/ClideMenuBar.qml +++ b/qml/ClideMenuBar.qml @@ -156,6 +156,10 @@ MenuBar { // // Help Menu + ClideAboutWindow { + id: clideAbout + } + Action { id: actionDocumentation @@ -163,6 +167,8 @@ MenuBar { } Action { id: actionAbout + // Toggle the about window with the menu item is clicked. + onTriggered: clideAbout.visible = !clideAbout.visible text: qsTr("&About") }