awesome-widgets/sources/qml/AWTextEditor.qml
Evgeniy Alekseev 737759d03f Bug fixing
* fix bug with invalid applet and configuration load with newest qt
* fix bug with invalid DP configuration
* fix bug with invalid HTML tags operations
2017-06-02 17:34:27 +03:00

104 lines
3.6 KiB
QML

/***************************************************************************
* This file is part of awesome-widgets *
* *
* awesome-widgets is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* awesome-widgets is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
***************************************************************************/
import QtQuick 2.0
import QtQuick.Controls 1.3 as QtControls
Item {
width: parent.width
height: parent.height * 4 / 5
property var backend
property alias text: textArea.text
QtControls.TextArea {
id: textArea
anchors.fill: parent
textFormat: TextEdit.PlainText
Column {
id: tooltip
property string substring
Repeater {
id: tags
Text {
id: text
text: modelData
MouseArea {
anchors.fill: parent
onClicked: appendTag(text.text, tooltip.substring)
}
}
}
}
onTextChanged: {
var currentTag = getLastTag()
// exit if there are spaces or empty
if ((currentTag.indexOf(" ") != -1) || (currentTag.length == 0)) {
tooltip.visible = false
return
}
// update tooltip and show it
tooltip.substring = currentTag
tags.model = backend.dictKeys(true, "^" + tooltip.substring)
changeTooltipPosition()
// show tooltip if found more than 1 or current text does not match
// tag found
tooltip.visible = ((tags.count > 1)
|| ((tags.count == 1) && (tags.model[0] != tooltip.substring)))
}
}
function appendTag(tag, substring) {
insert(tag.substring(substring.length))
}
function changeTooltipPosition() {
tooltip.x = textArea.cursorRectangle.x
tooltip.y = textArea.cursorRectangle.y + textArea.cursorRectangle.height
}
function getLastTag() {
// get substring to analyze
var substring = textArea.getText(0, textArea.cursorPosition)
// find last position of index in the given substring
var signIndex = substring.lastIndexOf('$') + 1
if ((signIndex == 0) || (signIndex == textArea.cursorPosition))
return ""
// get current tag text
return substring.substr(signIndex)
}
function insert(text) {
textArea.insert(textArea.cursorPosition, text)
}
function removeSelection() {
textArea.remove(textArea.selectionStart, textArea.selectionEnd)
}
function selectedText() {
return textArea.selectedText
}
}