Warning, /frameworks/qqc2-desktop-style/org.kde.desktop/TextArea.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org>
0003 SPDX-FileCopyrightText: 2017 The Qt Company Ltd.
0004 SPDX-FileCopyrightText: 2021 Carl Schwan <carlschwan@kde.org>
0005 SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk>
0006
0007 SPDX-License-Identifier: LGPL-3.0-only OR GPL-2.0-or-later
0008 */
0009
0010
0011 import QtQml.Models
0012 import QtQuick
0013 import QtQuick.Window
0014 import QtQuick.Templates as T
0015 import org.kde.kirigami as Kirigami
0016 import org.kde.sonnet as Sonnet
0017 import org.kde.desktop.private as Private
0018 import org.kde.qqc2desktopstyle.private as StylePrivate
0019
0020 T.TextArea {
0021 id: controlRoot
0022 Kirigami.Theme.colorSet: Kirigami.Theme.View
0023 Kirigami.Theme.inherit: false
0024
0025 implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
0026 implicitBackgroundWidth + leftInset + rightInset,
0027 placeholder.implicitWidth + leftPadding + rightPadding)
0028 implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
0029 implicitBackgroundHeight + topInset + bottomInset,
0030 placeholder.implicitHeight + topPadding + bottomPadding)
0031
0032 padding: 6
0033
0034 color: Kirigami.Theme.textColor
0035 selectionColor: Kirigami.Theme.highlightColor
0036 selectedTextColor: Kirigami.Theme.highlightedTextColor
0037 hoverEnabled: !Kirigami.Settings.tabletMode || !Kirigami.Settings.hasTransientTouchInput
0038 verticalAlignment: TextEdit.AlignTop
0039
0040 selectByMouse: hoverEnabled
0041
0042 cursorDelegate: !hoverEnabled ? mobileCursor : null
0043 Component {
0044 id: mobileCursor
0045 Private.MobileCursor {
0046 target: controlRoot
0047 }
0048 }
0049
0050 onTextChanged: Private.MobileTextActionsToolBar.shouldBeVisible = false;
0051 onPressed: event => {
0052 Private.MobileTextActionsToolBar.shouldBeVisible = true;
0053 }
0054
0055 TapHandler {
0056 enabled: controlRoot.selectByMouse
0057
0058 acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad | PointerDevice.Stylus
0059 acceptedButtons: Qt.LeftButton | Qt.RightButton
0060
0061 // unfortunately, taphandler's pressed event only triggers when the press is lifted
0062 // we need to use the longpress signal since it triggers when the button is first pressed
0063 longPressThreshold: 0
0064
0065 onLongPressed: {
0066 Private.TextFieldContextMenu.targetClick(
0067 point,
0068 controlRoot,
0069 spellcheckHighlighterInstantiator,
0070 controlRoot.positionAt(point.position.x, point.position.y),
0071 );
0072 }
0073 }
0074
0075 Kirigami.SpellCheck.enabled: !controlRoot.readOnly
0076 && Private.GlobalSonnetSettings.checkerEnabledByDefault
0077
0078 Instantiator {
0079 id: spellcheckHighlighterInstantiator
0080
0081 active: controlRoot.Kirigami.SpellCheck.enabled
0082 asynchronous: true
0083
0084 Sonnet.SpellcheckHighlighter {
0085 active: true
0086 document: controlRoot.textDocument
0087 cursorPosition: controlRoot.cursorPosition
0088 selectionStart: controlRoot.selectionStart
0089 selectionEnd: controlRoot.selectionEnd
0090 misspelledColor: Kirigami.Theme.negativeTextColor
0091
0092 onChangeCursorPosition: (start, end) => {
0093 controlRoot.cursorPosition = start;
0094 controlRoot.moveCursorSelection(end, TextEdit.SelectCharacters);
0095 }
0096 }
0097 }
0098
0099 Keys.onPressed: event => {
0100 // trigger if context menu button is pressed
0101 if (controlRoot.selectByMouse) {
0102 Private.TextFieldContextMenu.targetKeyPressed(event, controlRoot)
0103 }
0104 }
0105
0106 onPressAndHold: event => {
0107 if (hoverEnabled) {
0108 return;
0109 }
0110 forceActiveFocus();
0111 cursorPosition = positionAt(event.x, event.y);
0112 selectWord();
0113 }
0114
0115 Private.MobileCursor {
0116 target: controlRoot
0117 selectionStartHandle: true
0118 readonly property rect rect: target.positionToRectangle(target.selectionStart)
0119 x: rect.x
0120 y: rect.y
0121 }
0122
0123 onFocusChanged: {
0124 if (focus) {
0125 Private.MobileTextActionsToolBar.controlRoot = controlRoot;
0126 }
0127 }
0128
0129 Label {
0130 id: placeholder
0131 x: controlRoot.leftPadding
0132 y: controlRoot.topPadding
0133 width: controlRoot.width - (controlRoot.leftPadding + controlRoot.rightPadding)
0134 height: controlRoot.height - (controlRoot.topPadding + controlRoot.bottomPadding)
0135
0136 text: controlRoot.placeholderText
0137 font: controlRoot.font
0138 color: Kirigami.Theme.disabledTextColor
0139 horizontalAlignment: controlRoot.horizontalAlignment
0140 verticalAlignment: controlRoot.verticalAlignment
0141 visible: !controlRoot.length && !controlRoot.preeditText && (!controlRoot.activeFocus || controlRoot.horizontalAlignment !== Qt.AlignHCenter)
0142 elide: Text.ElideRight
0143 }
0144
0145 background: StylePrivate.StyleItem {
0146 control: controlRoot
0147 elementType: "edit"
0148 implicitWidth: 200
0149 implicitHeight: 22
0150
0151 sunken: true
0152 hasFocus: controlRoot.activeFocus
0153 hover: controlRoot.hovered
0154 }
0155 }