diff options
Diffstat (limited to 'examples/quickcontrols/controls/texteditor/qml/main.qml')
-rw-r--r-- | examples/quickcontrols/controls/texteditor/qml/main.qml | 357 |
1 files changed, 357 insertions, 0 deletions
diff --git a/examples/quickcontrols/controls/texteditor/qml/main.qml b/examples/quickcontrols/controls/texteditor/qml/main.qml new file mode 100644 index 00000000..42f5e7f9 --- /dev/null +++ b/examples/quickcontrols/controls/texteditor/qml/main.qml @@ -0,0 +1,357 @@ +/**************************************************************************** +** +** Copyright (C) 2015 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 QtQuick 2.2 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.0 +import QtQuick.Dialogs 1.1 +import QtQuick.Window 2.1 +import org.qtproject.example 1.0 + +ApplicationWindow { + visible: true + width: 640 + height: 480 + minimumWidth: 400 + minimumHeight: 300 + + title: document.documentTitle + " - Text Editor Example" + + MessageDialog { + id: aboutBox + title: "About Text" + text: "This is a basic text editor \nwritten with Qt Quick Controls" + icon: StandardIcon.Information + } + + Action { + id: cutAction + text: "Cut" + shortcut: "ctrl+x" + iconSource: "images/editcut.png" + iconName: "edit-cut" + onTriggered: textArea.cut() + } + + Action { + id: copyAction + text: "Copy" + shortcut: "Ctrl+C" + iconSource: "images/editcopy.png" + iconName: "edit-copy" + onTriggered: textArea.copy() + } + + Action { + id: pasteAction + text: "Paste" + shortcut: "ctrl+v" + iconSource: "qrc:images/editpaste.png" + iconName: "edit-paste" + onTriggered: textArea.paste() + } + + Action { + id: alignLeftAction + text: "&Left" + iconSource: "images/textleft.png" + iconName: "format-justify-left" + shortcut: "ctrl+l" + onTriggered: document.alignment = Qt.AlignLeft + checkable: true + checked: document.alignment == Qt.AlignLeft + } + Action { + id: alignCenterAction + text: "C&enter" + iconSource: "images/textcenter.png" + iconName: "format-justify-center" + onTriggered: document.alignment = Qt.AlignHCenter + checkable: true + checked: document.alignment == Qt.AlignHCenter + } + Action { + id: alignRightAction + text: "&Right" + iconSource: "images/textright.png" + iconName: "format-justify-right" + onTriggered: document.alignment = Qt.AlignRight + checkable: true + checked: document.alignment == Qt.AlignRight + } + Action { + id: alignJustifyAction + text: "&Justify" + iconSource: "images/textjustify.png" + iconName: "format-justify-fill" + onTriggered: document.alignment = Qt.AlignJustify + checkable: true + checked: document.alignment == Qt.AlignJustify + } + + Action { + id: boldAction + text: "&Bold" + iconSource: "images/textbold.png" + iconName: "format-text-bold" + onTriggered: document.bold = !document.bold + checkable: true + checked: document.bold + } + + Action { + id: italicAction + text: "&Italic" + iconSource: "images/textitalic.png" + iconName: "format-text-italic" + onTriggered: document.italic = !document.italic + checkable: true + checked: document.italic + } + Action { + id: underlineAction + text: "&Underline" + iconSource: "images/textunder.png" + iconName: "format-text-underline" + onTriggered: document.underline = !document.underline + checkable: true + checked: document.underline + } + + FileDialog { + id: fileDialog + nameFilters: ["Text files (*.txt)", "HTML files (*.html, *.htm)"] + onAccepted: { + if (fileDialog.selectExisting) + document.fileUrl = fileUrl + else + document.saveAs(fileUrl, selectedNameFilter) + } + } + + ColorDialog { + id: colorDialog + color: "black" + } + + Action { + id: fileOpenAction + iconSource: "images/fileopen.png" + iconName: "document-open" + text: "Open" + onTriggered: { + fileDialog.selectExisting = true + fileDialog.open() + } + } + + Action { + id: fileSaveAsAction + iconSource: "images/filesave.png" + iconName: "document-save" + text: "Save As…" + onTriggered: { + fileDialog.selectExisting = false + fileDialog.open() + } + } + + menuBar: MenuBar { + Menu { + title: "&File" + MenuItem { action: fileOpenAction } + MenuItem { action: fileSaveAsAction } + MenuItem { text: "Quit"; onTriggered: Qt.quit() } + } + Menu { + title: "&Edit" + MenuItem { action: copyAction } + MenuItem { action: cutAction } + MenuItem { action: pasteAction } + } + Menu { + title: "F&ormat" + MenuItem { action: boldAction } + MenuItem { action: italicAction } + MenuItem { action: underlineAction } + MenuSeparator {} + MenuItem { action: alignLeftAction } + MenuItem { action: alignCenterAction } + MenuItem { action: alignRightAction } + MenuItem { action: alignJustifyAction } + MenuSeparator {} + MenuItem { + text: "&Color ..." + onTriggered: { + colorDialog.color = document.textColor + colorDialog.open() + } + } + } + Menu { + title: "&Help" + MenuItem { text: "About..." ; onTriggered: aboutBox.open() } + } + } + + toolBar: ToolBar { + id: mainToolBar + width: parent.width + RowLayout { + anchors.fill: parent + spacing: 0 + ToolButton { action: fileOpenAction } + + ToolBarSeparator {} + + ToolButton { action: copyAction } + ToolButton { action: cutAction } + ToolButton { action: pasteAction } + + ToolBarSeparator {} + + ToolButton { action: boldAction } + ToolButton { action: italicAction } + ToolButton { action: underlineAction } + + ToolBarSeparator {} + + ToolButton { action: alignLeftAction } + ToolButton { action: alignCenterAction } + ToolButton { action: alignRightAction } + ToolButton { action: alignJustifyAction } + + ToolBarSeparator {} + + ToolButton { + id: colorButton + property var color : document.textColor + Rectangle { + id: colorRect + anchors.fill: parent + anchors.margins: 8 + color: Qt.darker(document.textColor, colorButton.pressed ? 1.4 : 1) + border.width: 1 + border.color: Qt.darker(colorRect.color, 2) + } + onClicked: { + colorDialog.color = document.textColor + colorDialog.open() + } + } + Item { Layout.fillWidth: true } + } + } + + ToolBar { + id: secondaryToolBar + width: parent.width + + RowLayout { + anchors.fill: parent + ComboBox { + id: fontFamilyComboBox + implicitWidth: 150 + model: Qt.fontFamilies() + property bool special : false + onActivated: { + if (special == false || index != 0) { + document.fontFamily = textAt(index) + } + } + } + SpinBox { + id: fontSizeSpinBox + activeFocusOnPress: false + implicitWidth: 50 + value: 0 + property bool valueGuard: true + onValueChanged: if (valueGuard) document.fontSize = value + } + Item { Layout.fillWidth: true } + } + } + + TextArea { + Accessible.name: "document" + id: textArea + frameVisible: false + width: parent.width + anchors.top: secondaryToolBar.bottom + anchors.bottom: parent.bottom + baseUrl: "qrc:/" + text: document.text + textFormat: Qt.RichText + Component.onCompleted: forceActiveFocus() + } + + MessageDialog { + id: errorDialog + } + + DocumentHandler { + id: document + target: textArea + cursorPosition: textArea.cursorPosition + selectionStart: textArea.selectionStart + selectionEnd: textArea.selectionEnd + textColor: colorDialog.color + Component.onCompleted: document.fileUrl = "qrc:/example.html" + onFontSizeChanged: { + fontSizeSpinBox.valueGuard = false + fontSizeSpinBox.value = document.fontSize + fontSizeSpinBox.valueGuard = true + } + onFontFamilyChanged: { + var index = Qt.fontFamilies().indexOf(document.fontFamily) + if (index == -1) { + fontFamilyComboBox.currentIndex = 0 + fontFamilyComboBox.special = true + } else { + fontFamilyComboBox.currentIndex = index + fontFamilyComboBox.special = false + } + } + onError: { + errorDialog.text = message + errorDialog.visible = true + } + } +} |