ThemedTextField.qml 1.79 KB
import QtQuick
import QtQuick.Controls.Basic
import "../" as App

TextField {
    id: control
    implicitHeight: App.Theme.controlHLg
    leftPadding: 14
    rightPadding: 14
    font.family: App.Theme.fontFamily
    font.pointSize: App.Theme.fontBase
    color: App.Theme.textPrimary
    placeholderTextColor: App.Theme.textTertiary
    selectionColor: App.Theme.accent
    selectedTextColor: App.Theme.textOnAccent

    background: Rectangle {
        radius: App.Theme.radiusMd
        color: App.Theme.bgSurface
        border.width: control.activeFocus ? 2 : 1
        border.color: control.activeFocus
            ? App.Theme.accent
            : App.Theme.borderDefault

        Behavior on border.color {
            ColorAnimation { duration: 100 }
        }
    }

    // 右键弹编辑菜单(剪切 / 复制 / 粘贴 / 全选)
    // 密码框 (echoMode === TextInput.Password) 时禁用 复制 / 剪切 防泄漏
    Menu {
        id: editMenu

        MenuItem {
            text: "剪切"
            enabled: control.selectedText.length > 0
                && control.echoMode !== TextInput.Password
            onTriggered: control.cut()
        }
        MenuItem {
            text: "复制"
            enabled: control.selectedText.length > 0
                && control.echoMode !== TextInput.Password
            onTriggered: control.copy()
        }
        MenuItem {
            text: "粘贴"
            enabled: control.canPaste
            onTriggered: control.paste()
        }
        MenuSeparator {}
        MenuItem {
            text: "全选"
            enabled: control.length > 0
            onTriggered: control.selectAll()
        }
    }

    TapHandler {
        acceptedButtons: Qt.RightButton
        gesturePolicy: TapHandler.WithinBounds
        onTapped: editMenu.popup()
    }
}