StyledButton.qml 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import QtQuick 2.15
  2. import QtQuick.Controls 2.15
  3. import StandardOfIron 1.0
  4. Button {
  5. id: control
  6. property string buttonStyle: "primary"
  7. property var styleConfig: {
  8. if (buttonStyle === "primary")
  9. return StyleGuide.button.primary;
  10. if (buttonStyle === "secondary")
  11. return StyleGuide.button.secondary;
  12. if (buttonStyle === "small")
  13. return StyleGuide.button.small;
  14. if (buttonStyle === "danger")
  15. return StyleGuide.button.danger;
  16. return StyleGuide.button.primary;
  17. }
  18. implicitHeight: styleConfig.height
  19. implicitWidth: styleConfig.minWidth
  20. hoverEnabled: true
  21. ToolTip.visible: control.ToolTip.text !== "" && hoverArea.containsMouse
  22. ToolTip.delay: 500
  23. MouseArea {
  24. id: hoverArea
  25. anchors.fill: parent
  26. hoverEnabled: true
  27. acceptedButtons: Qt.NoButton
  28. cursorShape: control.enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
  29. }
  30. contentItem: Text {
  31. text: control.text
  32. font.pointSize: control.enabled ? (hoverArea.containsMouse ? styleConfig.hoverFontSize : styleConfig.fontSize) : styleConfig.fontSize
  33. font.bold: true
  34. color: {
  35. if (!control.enabled)
  36. return styleConfig.disabledTextColor;
  37. if (buttonStyle === "danger" && hoverArea.containsMouse)
  38. return styleConfig.hoverTextColor || styleConfig.textColor;
  39. return styleConfig.textColor;
  40. }
  41. horizontalAlignment: Text.AlignHCenter
  42. verticalAlignment: Text.AlignVCenter
  43. elide: Text.ElideRight
  44. Behavior on font.pointSize {
  45. NumberAnimation {
  46. duration: StyleGuide.animation.fast
  47. }
  48. }
  49. Behavior on color {
  50. ColorAnimation {
  51. duration: StyleGuide.animation.normal
  52. }
  53. }
  54. }
  55. background: Rectangle {
  56. implicitWidth: styleConfig.minWidth
  57. implicitHeight: styleConfig.height
  58. radius: styleConfig.radius
  59. color: {
  60. if (!control.enabled)
  61. return styleConfig.disabledBg;
  62. if (control.down)
  63. return styleConfig.pressBg;
  64. if (hoverArea.containsMouse)
  65. return styleConfig.hoverBg;
  66. return styleConfig.normalBg;
  67. }
  68. border.width: 1
  69. border.color: {
  70. if (!control.enabled)
  71. return styleConfig.disabledBorder;
  72. if (hoverArea.containsMouse)
  73. return styleConfig.hoverBorder;
  74. return styleConfig.normalBorder;
  75. }
  76. Behavior on color {
  77. ColorAnimation {
  78. duration: StyleGuide.animation.normal
  79. }
  80. }
  81. Behavior on border.color {
  82. ColorAnimation {
  83. duration: StyleGuide.animation.normal
  84. }
  85. }
  86. }
  87. }