2022-05-13 13:12:05 +00:00
|
|
|
// Copyright (C) 2017 The Qt Company Ltd.
|
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
2016-07-26 12:15:31 +00:00
|
|
|
|
2020-03-26 16:01:51 +00:00
|
|
|
import QtQuick
|
|
|
|
import QtQuick.Controls
|
|
|
|
import QtQuick.Layouts
|
|
|
|
import QtQuick.Window
|
2016-07-26 12:15:31 +00:00
|
|
|
|
|
|
|
// TODO:
|
|
|
|
// - make designer-friendly
|
|
|
|
|
|
|
|
ApplicationWindow {
|
|
|
|
id: window
|
|
|
|
visible: true
|
|
|
|
title: document.fileName + " - Text Editor Example"
|
|
|
|
|
|
|
|
header: ToolBar {
|
|
|
|
leftPadding: 5
|
|
|
|
|
|
|
|
RowLayout {
|
|
|
|
anchors.fill: parent
|
|
|
|
spacing: 0
|
|
|
|
|
|
|
|
ToolButton {
|
|
|
|
id: doneEditingButton
|
|
|
|
font.family: "fontello"
|
|
|
|
text: "\uE80A" // icon-ok
|
|
|
|
opacity: !textArea.readOnly ? 1 : 0
|
|
|
|
onClicked: textArea.readOnly = true
|
|
|
|
}
|
|
|
|
|
|
|
|
Label {
|
|
|
|
text: qsTr("Text Editor Example")
|
|
|
|
font.bold: true
|
|
|
|
font.pixelSize: 20
|
2016-08-26 11:15:58 +00:00
|
|
|
elide: Label.ElideRight
|
2016-07-26 12:15:31 +00:00
|
|
|
Layout.fillWidth: true
|
|
|
|
}
|
|
|
|
|
|
|
|
ToolButton {
|
|
|
|
font.family: "fontello"
|
|
|
|
text: "\uF142" // icon-ellipsis-vert
|
|
|
|
onClicked: menu.open()
|
|
|
|
|
|
|
|
Menu {
|
|
|
|
id: menu
|
|
|
|
|
|
|
|
MenuItem {
|
|
|
|
text: qsTr("About")
|
|
|
|
onTriggered: aboutDialog.open()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Flickable {
|
|
|
|
id: flickable
|
|
|
|
flickableDirection: Flickable.VerticalFlick
|
|
|
|
anchors.fill: parent
|
|
|
|
|
|
|
|
TextArea.flickable: TextArea {
|
|
|
|
id: textArea
|
|
|
|
textFormat: Qt.RichText
|
|
|
|
wrapMode: TextArea.Wrap
|
|
|
|
readOnly: true
|
|
|
|
persistentSelection: true
|
|
|
|
// Different styles have different padding and background
|
|
|
|
// decorations, but since this editor is almost taking up the
|
|
|
|
// entire window, we don't need them.
|
|
|
|
leftPadding: 6
|
|
|
|
rightPadding: 6
|
|
|
|
topPadding: 0
|
|
|
|
bottomPadding: 0
|
|
|
|
background: null
|
|
|
|
|
|
|
|
onLinkActivated: Qt.openUrlExternally(link)
|
2023-11-22 20:45:46 +00:00
|
|
|
|
|
|
|
Component.onCompleted: textDocument.source = "qrc:/texteditor.html"
|
|
|
|
|
|
|
|
textDocument.onError: function (message) {
|
|
|
|
errorDialog.text = message
|
|
|
|
errorDialog.visible = true
|
|
|
|
}
|
2016-07-26 12:15:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ScrollBar.vertical: ScrollBar {}
|
|
|
|
}
|
|
|
|
|
|
|
|
footer: ToolBar {
|
|
|
|
visible: !textArea.readOnly && textArea.activeFocus
|
|
|
|
|
|
|
|
Flickable {
|
|
|
|
anchors.fill: parent
|
2016-08-26 11:09:44 +00:00
|
|
|
contentWidth: toolRow.implicitWidth
|
2016-07-26 12:15:31 +00:00
|
|
|
flickableDirection: Qt.Horizontal
|
|
|
|
boundsBehavior: Flickable.StopAtBounds
|
|
|
|
|
2016-08-26 11:09:44 +00:00
|
|
|
Row {
|
|
|
|
id: toolRow
|
|
|
|
|
|
|
|
ToolButton {
|
|
|
|
id: boldButton
|
|
|
|
text: "\uE800" // icon-bold
|
|
|
|
font.family: "fontello"
|
|
|
|
// Don't want to close the virtual keyboard when this is clicked.
|
|
|
|
focusPolicy: Qt.NoFocus
|
|
|
|
checkable: true
|
|
|
|
checked: document.bold
|
|
|
|
onClicked: document.bold = !document.bold
|
|
|
|
}
|
|
|
|
ToolButton {
|
|
|
|
id: italicButton
|
|
|
|
text: "\uE801" // icon-italic
|
|
|
|
font.family: "fontello"
|
|
|
|
focusPolicy: Qt.NoFocus
|
|
|
|
checkable: true
|
|
|
|
checked: document.italic
|
|
|
|
onClicked: document.italic = !document.italic
|
|
|
|
}
|
|
|
|
ToolButton {
|
|
|
|
id: underlineButton
|
|
|
|
text: "\uF0CD" // icon-underline
|
|
|
|
font.family: "fontello"
|
|
|
|
focusPolicy: Qt.NoFocus
|
|
|
|
checkable: true
|
|
|
|
checked: document.underline
|
|
|
|
onClicked: document.underline = !document.underline
|
2016-07-26 12:15:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ToolSeparator {}
|
|
|
|
|
2016-08-26 11:09:44 +00:00
|
|
|
ToolButton {
|
|
|
|
id: alignLeftButton
|
|
|
|
text: "\uE803" // icon-align-left
|
|
|
|
font.family: "fontello"
|
|
|
|
focusPolicy: Qt.NoFocus
|
|
|
|
checkable: true
|
|
|
|
checked: document.alignment == Qt.AlignLeft
|
|
|
|
onClicked: document.alignment = Qt.AlignLeft
|
|
|
|
}
|
|
|
|
ToolButton {
|
|
|
|
id: alignCenterButton
|
|
|
|
text: "\uE804" // icon-align-center
|
|
|
|
font.family: "fontello"
|
|
|
|
focusPolicy: Qt.NoFocus
|
|
|
|
checkable: true
|
|
|
|
checked: document.alignment == Qt.AlignHCenter
|
|
|
|
onClicked: document.alignment = Qt.AlignHCenter
|
|
|
|
}
|
|
|
|
ToolButton {
|
|
|
|
id: alignRightButton
|
|
|
|
text: "\uE805" // icon-align-right
|
|
|
|
font.family: "fontello"
|
|
|
|
focusPolicy: Qt.NoFocus
|
|
|
|
checkable: true
|
|
|
|
checked: document.alignment == Qt.AlignRight
|
|
|
|
onClicked: document.alignment = Qt.AlignRight
|
|
|
|
}
|
|
|
|
ToolButton {
|
|
|
|
id: alignJustifyButton
|
|
|
|
text: "\uE806" // icon-align-justify
|
|
|
|
font.family: "fontello"
|
|
|
|
focusPolicy: Qt.NoFocus
|
|
|
|
checkable: true
|
|
|
|
checked: document.alignment == Qt.AlignJustify
|
|
|
|
onClicked: document.alignment = Qt.AlignJustify
|
2016-07-26 12:15:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-09-03 10:46:10 +00:00
|
|
|
RoundButton {
|
2016-07-26 12:15:31 +00:00
|
|
|
id: editButton
|
|
|
|
font.family: "fontello"
|
|
|
|
text: "\uE809" // icon-pencil
|
|
|
|
width: 48
|
|
|
|
height: width
|
|
|
|
// Don't want to use anchors for the y position, because it will anchor
|
|
|
|
// to the footer, leaving a large vertical gap.
|
|
|
|
y: parent.height - height - 12
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.margins: 12
|
|
|
|
visible: textArea.readOnly
|
2016-08-26 15:30:27 +00:00
|
|
|
highlighted: true
|
2016-07-26 12:15:31 +00:00
|
|
|
|
|
|
|
onClicked: {
|
|
|
|
textArea.readOnly = false
|
|
|
|
// Force focus on the text area so the cursor and footer show up.
|
|
|
|
textArea.forceActiveFocus()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Dialog {
|
|
|
|
id: aboutDialog
|
|
|
|
standardButtons: Dialog.Ok
|
|
|
|
modal: true
|
|
|
|
x: parent.width / 2 - width / 2
|
|
|
|
y: parent.height / 2 - height / 2
|
|
|
|
|
|
|
|
contentItem: Label {
|
2020-11-13 12:30:10 +00:00
|
|
|
text: qsTr("Qt Quick Controls - Text Editor Example")
|
2016-07-26 12:15:31 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|