mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-19 04:18:08 +00:00
82 lines
1.9 KiB
QML
82 lines
1.9 KiB
QML
import QtQuick 2.7
|
|
|
|
import Common.Styles 1.0
|
|
import Utils 1.0
|
|
|
|
// =============================================================================
|
|
|
|
Item {
|
|
id: wrapper
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
property alias readOnly: textField.readOnly
|
|
property bool supportsRange: false
|
|
|
|
property string text
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
signal editingFinished (int portA, int portB)
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function _extractPorts (text) {
|
|
var portA = +text.split(':')[0]
|
|
var portB = (function () {
|
|
var port = text.split(':')[1]
|
|
return port && port.length > 0 ? +port : -1
|
|
})()
|
|
|
|
if (portB < 0 || portA === portB) {
|
|
return [ portA, -1 ]
|
|
}
|
|
|
|
if (portA < portB) {
|
|
return [ portA, portB ]
|
|
}
|
|
|
|
return [ portB, portA ]
|
|
}
|
|
|
|
function _computeText (range) {
|
|
return range[1] < 0
|
|
? range[0]
|
|
: range[0] + ':' + range[1]
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
implicitHeight: textField.height
|
|
width: TextFieldStyle.background.width
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
Binding {
|
|
property: 'text'
|
|
target: textField
|
|
value: _computeText(_extractPorts(wrapper.text))
|
|
}
|
|
|
|
TextField {
|
|
id: textField
|
|
|
|
validator: RegExpValidator {
|
|
regExp: wrapper.supportsRange
|
|
? Utils.PORT_RANGE_REGEX
|
|
: Utils.PORT_REGEX
|
|
}
|
|
|
|
width: parent.width
|
|
|
|
// Workaround to supports empty string.
|
|
Keys.onReturnPressed: editingFinished()
|
|
onActiveFocusChanged: !activeFocus && editingFinished()
|
|
|
|
onEditingFinished: {
|
|
var range = _extractPorts(text)
|
|
textField.text = _computeText(range)
|
|
wrapper.editingFinished(range[0], range[1])
|
|
}
|
|
}
|
|
}
|