/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.8
import QtQuick.Controls 2.1
import QtQuick.Controls.Material 2.1
import QtQuick.Layouts 1.3
import QtQuick.Window 2.0
import io.qt.examples.texteditor 1.0
// TODO:// - make designer-friendlyApplicationWindow {
id: windowvisible: truetitle: document.fileName+" - Text Editor Example"header: ToolBar {
leftPadding: 5RowLayout {
anchors.fill: parentspacing: 0ToolButton {
id: doneEditingButtonfont.family: "fontello"text: "\uE80A"// icon-okopacity: !textArea.readOnly ? 1 : 0onClicked: textArea.readOnly=trueMaterial.foreground: Material.accent
}
Label {
text: qsTr("Text Editor Example")
font.bold: truefont.pixelSize: 20elide: Label.ElideRightLayout.fillWidth: true
}
ToolButton {
font.family: "fontello"text: "\uF142"// icon-ellipsis-vertonClicked: menu.open()
Menu {
id: menuMenuItem {
text: qsTr("About")
onTriggered: aboutDialog.open()
}
}
}
}
}
DocumentHandler {
id: documentdocument: textArea.textDocumentcursorPosition: textArea.cursorPositionselectionStart: textArea.selectionStartselectionEnd: textArea.selectionEnd// textColor: TODOComponent.onCompleted: document.load("qrc:/texteditor.html")
onLoaded: {
textArea.text=text
}
onError: {
errorDialog.text=messageerrorDialog.visible=true
}
}
Flickable {
id: flickableflickableDirection: Flickable.VerticalFlickanchors.fill: parentTextArea.flickable: TextArea {
id: textAreatextFormat: Qt.RichTextwrapMode: TextArea.WrapreadOnly: truepersistentSelection: 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: 6rightPadding: 6topPadding: 0bottomPadding: 0background: nullonLinkActivated: Qt.openUrlExternally(link)
}
ScrollBar.vertical: ScrollBar {}
}
footer: ToolBar {
visible: !textArea.readOnly&&textArea.activeFocusMaterial.primary: "#E0E0E0"Material.elevation: 0Flickable {
anchors.fill: parentcontentWidth: toolRow.implicitWidthflickableDirection: Qt.HorizontalboundsBehavior: Flickable.StopAtBoundsRow {
id: toolRowToolButton {
id: boldButtontext: "\uE800"// icon-boldfont.family: "fontello"// Don't want to close the virtual keyboard when this is clicked.focusPolicy: Qt.NoFocuscheckable: truechecked: document.boldonClicked: document.bold= !document.bold
}
ToolButton {
id: italicButtontext: "\uE801"// icon-italicfont.family: "fontello"focusPolicy: Qt.NoFocuscheckable: truechecked: document.italiconClicked: document.italic= !document.italic
}
ToolButton {
id: underlineButtontext: "\uF0CD"// icon-underlinefont.family: "fontello"focusPolicy: Qt.NoFocuscheckable: truechecked: document.underlineonClicked: document.underline= !document.underline
}
ToolSeparator {}
ToolButton {
id: alignLeftButtontext: "\uE803"// icon-align-leftfont.family: "fontello"focusPolicy: Qt.NoFocuscheckable: truechecked: document.alignment==Qt.AlignLeftonClicked: document.alignment=Qt.AlignLeft
}
ToolButton {
id: alignCenterButtontext: "\uE804"// icon-align-centerfont.family: "fontello"focusPolicy: Qt.NoFocuscheckable: truechecked: document.alignment==Qt.AlignHCenteronClicked: document.alignment=Qt.AlignHCenter
}
ToolButton {
id: alignRightButtontext: "\uE805"// icon-align-rightfont.family: "fontello"focusPolicy: Qt.NoFocuscheckable: truechecked: document.alignment==Qt.AlignRightonClicked: document.alignment=Qt.AlignRight
}
ToolButton {
id: alignJustifyButtontext: "\uE806"// icon-align-justifyfont.family: "fontello"focusPolicy: Qt.NoFocuscheckable: truechecked: document.alignment==Qt.AlignJustifyonClicked: document.alignment=Qt.AlignJustify
}
}
}
}
RoundButton {
id: editButtonfont.family: "fontello"text: "\uE809"// icon-pencilwidth: 48height: 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-12anchors.right: parent.rightanchors.margins: 12visible: textArea.readOnlyhighlighted: trueonClicked: {
textArea.readOnly=false// Force focus on the text area so the cursor and footer show up.textArea.forceActiveFocus()
}
}
Dialog {
id: aboutDialogstandardButtons: Dialog.Okmodal: truex: parent.width/2-width/2y: parent.height/2-height/2contentItem: Label {
text: qsTr("Qt Quick Controls 2 - Text Editor Example")
}
}
}