SpinBox.qml 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. // Copyright (C) 2020 The Qt Company Ltd.
  2. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
  3. // Qt-Security score:significant reason:default
  4. import QtQuick
  5. import QtQuick.Templates as T
  6. import QtQuick.NativeStyle as NativeStyle
  7. import QtQuick.Controls.Windows.impl as WindowsImpl
  8. T.SpinBox {
  9. id: control
  10. property bool nativeIndicators: up.indicator.hasOwnProperty("_qt_default")
  11. && down.indicator.hasOwnProperty("_qt_default")
  12. readonly property bool __notCustomizable: true
  13. // Note: the indicators are inside the contentItem
  14. implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
  15. contentItem.implicitWidth + leftPadding + rightPadding)
  16. implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
  17. implicitContentHeight + topPadding + bottomPadding,
  18. up.implicitIndicatorHeight + down.implicitIndicatorHeight)
  19. spacing: 2
  20. validator: IntValidator {
  21. locale: control.locale.name
  22. bottom: Math.min(control.from, control.to)
  23. top: Math.max(control.from, control.to)
  24. }
  25. contentItem: TextField {
  26. text: control.displayText
  27. font: control.font
  28. color: control.palette.text
  29. selectionColor: control.palette.highlight
  30. selectedTextColor: control.palette.highlightedText
  31. horizontalAlignment: Qt.AlignLeft
  32. verticalAlignment: Qt.AlignVCenter
  33. implicitWidth: Math.max(90 /* minimum */, contentWidth + leftPadding + rightPadding)
  34. topPadding: 0
  35. bottomPadding: 0
  36. leftPadding: 10
  37. rightPadding: up.indicator.width + 10
  38. readOnly: !control.editable
  39. validator: control.validator
  40. inputMethodHints: control.inputMethodHints
  41. clip: width < implicitWidth
  42. readonly property bool __ignoreNotCustomizable: true
  43. ContextMenu.menu: WindowsImpl.TextEditingContextMenu {
  44. editor: parent
  45. }
  46. // Since the indicators are embedded inside the TextField we need to avoid that
  47. // the TextField consumes mouse events for that area.
  48. // We achieve that by setting a containmentMask
  49. containmentMask: Item { height: contentItem.height; width: contentItem.width - upAndDown.width }
  50. }
  51. NativeStyle.SpinBox {
  52. id: upAndDown
  53. control: control
  54. subControl: NativeStyle.SpinBox.Up
  55. visible: nativeIndicators
  56. x: up.indicator.x
  57. y: up.indicator.y
  58. //implicitHeight: contentItem.implicitHeight-2
  59. height: parent.height-2
  60. useNinePatchImage: false
  61. z:99
  62. }
  63. up.indicator: Item {
  64. x: control.width - width - 2
  65. y: 1
  66. height: upAndDown.height >> 1
  67. implicitWidth: upAndDown.implicitWidth
  68. implicitHeight: (upAndDown.implicitHeight >> 1)
  69. property bool _qt_default
  70. readonly property bool __ignoreNotCustomizable: true
  71. }
  72. down.indicator: Item {
  73. x: control.width - width - 2
  74. y: up.indicator.y + (upAndDown.height >> 1)
  75. height: upAndDown.height - up.indicator.height
  76. implicitWidth: upAndDown.implicitWidth
  77. implicitHeight: upAndDown.implicitHeight >> 1
  78. property bool _qt_default
  79. readonly property bool __ignoreNotCustomizable: true
  80. }
  81. // No background, the TextField will cover the whole control
  82. background: Item {
  83. readonly property bool __ignoreNotCustomizable: true
  84. }
  85. }