ViewsSelector.qml 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. // Copyright (c) 2018 Ultimaker B.V.
  2. // Cura is released under the terms of the LGPLv3 or higher.
  3. import QtQuick 2.7
  4. import QtQuick.Controls 2.3
  5. import UM 1.2 as UM
  6. import Cura 1.0 as Cura
  7. Cura.ExpandablePopup
  8. {
  9. id: viewSelector
  10. contentPadding: UM.Theme.getSize("default_lining").width
  11. contentAlignment: Cura.ExpandablePopup.ContentAlignment.AlignLeft
  12. property var viewModel: UM.ViewModel
  13. {
  14. onDataChanged: updateActiveView()
  15. }
  16. property var activeView: null
  17. function updateActiveView()
  18. {
  19. for (var index in viewModel.items)
  20. {
  21. if (viewModel.items[index].active)
  22. {
  23. activeView = viewModel.items[index]
  24. return
  25. }
  26. }
  27. activeView = null
  28. }
  29. Component.onCompleted:
  30. {
  31. if (activeView == null)
  32. {
  33. UM.Controller.setActiveView(viewModel.getItem(0).id)
  34. }
  35. }
  36. headerItem: Item
  37. {
  38. Label
  39. {
  40. id: title
  41. text: catalog.i18nc("@label", "View types")
  42. verticalAlignment: Text.AlignVCenter
  43. height: parent.height
  44. elide: Text.ElideRight
  45. font: UM.Theme.getFont("default")
  46. color: UM.Theme.getColor("text_medium")
  47. renderType: Text.NativeRendering
  48. }
  49. Label
  50. {
  51. text: viewSelector.activeView ? viewSelector.activeView.name : ""
  52. verticalAlignment: Text.AlignVCenter
  53. anchors
  54. {
  55. left: title.right
  56. leftMargin: UM.Theme.getSize("default_margin").width
  57. right: parent.right
  58. }
  59. height: parent.height
  60. elide: Text.ElideRight
  61. font: UM.Theme.getFont("default")
  62. color: UM.Theme.getColor("text")
  63. renderType: Text.NativeRendering
  64. }
  65. }
  66. contentItem: Column
  67. {
  68. id: viewSelectorPopup
  69. width: viewSelector.width - 2 * viewSelector.contentPadding
  70. leftPadding: UM.Theme.getSize("default_lining").width
  71. rightPadding: UM.Theme.getSize("default_lining").width
  72. // For some reason the height/width of the column gets set to 0 if this is not set...
  73. Component.onCompleted:
  74. {
  75. height = implicitHeight
  76. width = viewSelector.width - 2 * viewSelector.contentPadding
  77. }
  78. Repeater
  79. {
  80. id: viewsList
  81. model: viewSelector.viewModel
  82. delegate: Button
  83. {
  84. id: viewsSelectorButton
  85. text: model.name
  86. width: parent.width - viewSelectorPopup.leftPadding - viewSelectorPopup.rightPadding
  87. height: UM.Theme.getSize("action_button").height
  88. leftPadding: UM.Theme.getSize("default_margin").width
  89. rightPadding: UM.Theme.getSize("default_margin").width
  90. checkable: true
  91. checked: viewSelector.activeView != null ? viewSelector.activeView.id == id : false
  92. contentItem: Label
  93. {
  94. id: buttonText
  95. text: viewsSelectorButton.text
  96. color: UM.Theme.getColor("text")
  97. font: UM.Theme.getFont("action_button")
  98. renderType: Text.NativeRendering
  99. verticalAlignment: Text.AlignVCenter
  100. elide: Text.ElideRight
  101. }
  102. background: Rectangle
  103. {
  104. id: backgroundRect
  105. color: viewsSelectorButton.hovered ? UM.Theme.getColor("action_button_hovered") : "transparent"
  106. radius: UM.Theme.getSize("action_button_radius").width
  107. border.width: UM.Theme.getSize("default_lining").width
  108. border.color: viewsSelectorButton.checked ? UM.Theme.getColor("primary") : "transparent"
  109. }
  110. onClicked:
  111. {
  112. toggleContent()
  113. UM.Controller.setActiveView(id)
  114. }
  115. }
  116. }
  117. }
  118. }