aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quickcontrols2/texteditor/qml
diff options
context:
space:
mode:
Diffstat (limited to 'examples/quickcontrols2/texteditor/qml')
-rw-r--r--examples/quickcontrols2/texteditor/qml/+touch/texteditor.qml275
-rw-r--r--examples/quickcontrols2/texteditor/qml/texteditor.qml32
2 files changed, 291 insertions, 16 deletions
diff --git a/examples/quickcontrols2/texteditor/qml/+touch/texteditor.qml b/examples/quickcontrols2/texteditor/qml/+touch/texteditor.qml
new file mode 100644
index 00000000..a7f176a9
--- /dev/null
+++ b/examples/quickcontrols2/texteditor/qml/+touch/texteditor.qml
@@ -0,0 +1,275 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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 QtGraphicalEffects 1.0
+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-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
+
+ Material.foreground: Material.accent
+ }
+
+ Label {
+ text: qsTr("Text Editor Example")
+ font.bold: true
+ font.pixelSize: 20
+ elide: Label.ElideRight
+ 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()
+ }
+ }
+ }
+ }
+ }
+
+ DocumentHandler {
+ id: document
+ document: textArea.textDocument
+ cursorPosition: textArea.cursorPosition
+ selectionStart: textArea.selectionStart
+ selectionEnd: textArea.selectionEnd
+ // textColor: TODO
+ Component.onCompleted: document.load("qrc:/texteditor.html")
+ onLoaded: {
+ textArea.text = text
+ }
+ onError: {
+ errorDialog.text = message
+ errorDialog.visible = true
+ }
+ }
+
+ 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)
+ }
+
+ ScrollBar.vertical: ScrollBar {}
+ }
+
+ footer: ToolBar {
+ visible: !textArea.readOnly && textArea.activeFocus
+
+ Material.primary: "#E0E0E0"
+ Material.elevation: 0
+
+ Flickable {
+ anchors.fill: parent
+ contentWidth: toolRow.implicitWidth
+ flickableDirection: Qt.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+
+ 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
+ }
+
+ ToolSeparator {}
+
+ 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
+ }
+ }
+ }
+ }
+
+ Button {
+ 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
+ highlighted: true
+
+ onClicked: {
+ textArea.readOnly = false
+ // Force focus on the text area so the cursor and footer show up.
+ textArea.forceActiveFocus()
+ }
+
+ background: Rectangle {
+ implicitWidth: parent.width
+ implicitHeight: parent.height
+ radius: width / 2
+ color: parent.down ? Qt.darker(Material.accent) : Material.accent
+
+ layer.enabled: editButton.enabled
+ layer.effect: DropShadow {
+ color: "#44000000"
+ verticalOffset: 2
+ samples: 16
+ }
+ }
+ }
+
+ Dialog {
+ id: aboutDialog
+ standardButtons: Dialog.Ok
+ modal: true
+ x: parent.width / 2 - width / 2
+ y: parent.height / 2 - height / 2
+
+ contentItem: Label {
+ text: qsTr("Qt Quick Controls 2 - Text Editor Example")
+ }
+ }
+}
diff --git a/examples/quickcontrols2/texteditor/qml/texteditor.qml b/examples/quickcontrols2/texteditor/qml/texteditor.qml
index 66bea215..c84d30d5 100644
--- a/examples/quickcontrols2/texteditor/qml/texteditor.qml
+++ b/examples/quickcontrols2/texteditor/qml/texteditor.qml
@@ -41,11 +41,13 @@
import QtQuick 2.8
import QtQuick.Controls 2.1
import QtQuick.Window 2.0
-import QtQuick.Controls.Material 2.1
import Qt.labs.platform 1.0
import io.qt.examples.texteditor 1.0
+// TODO:
+// - make designer-friendly
+
ApplicationWindow {
id: window
width: 1024
@@ -202,7 +204,7 @@ ApplicationWindow {
id: fileRow
ToolButton {
id: openButton
- text: "\uF115"
+ text: "\uF115" // icon-folder-open-empty
font.family: "fontello"
onClicked: openDialog.open()
}
@@ -215,7 +217,7 @@ ApplicationWindow {
id: editRow
ToolButton {
id: copyButton
- text: "\uF0C5"
+ text: "\uF0C5" // icon-docs
font.family: "fontello"
focusPolicy: Qt.TabFocus
enabled: textArea.selectedText
@@ -223,7 +225,7 @@ ApplicationWindow {
}
ToolButton {
id: cutButton
- text: "\uE802"
+ text: "\uE802" // icon-scissors
font.family: "fontello"
focusPolicy: Qt.TabFocus
enabled: textArea.selectedText
@@ -231,7 +233,7 @@ ApplicationWindow {
}
ToolButton {
id: pasteButton
- text: "\uF0EA"
+ text: "\uF0EA" // icon-paste
font.family: "fontello"
focusPolicy: Qt.TabFocus
enabled: textArea.canPaste
@@ -246,7 +248,7 @@ ApplicationWindow {
id: formatRow
ToolButton {
id: boldButton
- text: "\uE800"
+ text: "\uE800" // icon-bold
font.family: "fontello"
focusPolicy: Qt.TabFocus
checkable: true
@@ -255,7 +257,7 @@ ApplicationWindow {
}
ToolButton {
id: italicButton
- text: "\uE801"
+ text: "\uE801" // icon-italic
font.family: "fontello"
focusPolicy: Qt.TabFocus
checkable: true
@@ -264,7 +266,7 @@ ApplicationWindow {
}
ToolButton {
id: underlineButton
- text: "\uF0CD"
+ text: "\uF0CD" // icon-underline
font.family: "fontello"
focusPolicy: Qt.TabFocus
checkable: true
@@ -273,7 +275,7 @@ ApplicationWindow {
}
ToolButton {
id: fontFamilyToolButton
- text: qsTr("\uE808")
+ text: qsTr("\uE808") // icon-font
font.family: "fontello"
font.bold: document.bold
font.italic: document.italic
@@ -286,7 +288,7 @@ ApplicationWindow {
}
ToolButton {
id: textColorButton
- text: "\uF1FC"
+ text: "\uF1FC" // icon-brush
font.family: "fontello"
focusPolicy: Qt.TabFocus
onClicked: colorDialog.open()
@@ -316,7 +318,7 @@ ApplicationWindow {
id: alignRow
ToolButton {
id: alignLeftButton
- text: "\uE803"
+ text: "\uE803" // icon-align-left
font.family: "fontello"
focusPolicy: Qt.TabFocus
checkable: true
@@ -325,7 +327,7 @@ ApplicationWindow {
}
ToolButton {
id: alignCenterButton
- text: "\uE804"
+ text: "\uE804" // icon-align-center
font.family: "fontello"
focusPolicy: Qt.TabFocus
checkable: true
@@ -334,7 +336,7 @@ ApplicationWindow {
}
ToolButton {
id: alignRightButton
- text: "\uE805"
+ text: "\uE805" // icon-align-right
font.family: "fontello"
focusPolicy: Qt.TabFocus
checkable: true
@@ -343,7 +345,7 @@ ApplicationWindow {
}
ToolButton {
id: alignJustifyButton
- text: "\uE806"
+ text: "\uE806" // icon-align-justify
font.family: "fontello"
focusPolicy: Qt.TabFocus
checkable: true
@@ -361,8 +363,6 @@ ApplicationWindow {
selectionStart: textArea.selectionStart
selectionEnd: textArea.selectionEnd
textColor: colorDialog.color
- // TODO: if we don't do this, e.g. the bold button won't be checked
- // when it should be (the title is bold)
Component.onCompleted: document.load("qrc:/texteditor.html")
onLoaded: {
textArea.text = text