LayerView.qml 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. // Copyright (c) 2015 Ultimaker B.V.
  2. // Cura is released under the terms of the AGPLv3 or higher.
  3. import QtQuick 2.2
  4. import QtQuick.Controls 1.2
  5. import QtQuick.Layouts 1.1
  6. import QtQuick.Controls.Styles 1.1
  7. import UM 1.0 as UM
  8. Item
  9. {
  10. width: UM.Theme.getSize("button").width
  11. height: UM.Theme.getSize("slider_layerview_size").height
  12. Slider
  13. {
  14. id: slider2
  15. width: UM.Theme.getSize("slider_layerview_size").width
  16. height: UM.Theme.getSize("slider_layerview_size").height
  17. anchors.left: parent.left
  18. anchors.leftMargin: UM.Theme.getSize("slider_layerview_margin").width * 0.2
  19. orientation: Qt.Vertical
  20. minimumValue: 0;
  21. maximumValue: UM.LayerView.numLayers-1;
  22. stepSize: 1
  23. property real pixelsPerStep: ((height - UM.Theme.getSize("slider_handle").height) / (maximumValue - minimumValue)) * stepSize;
  24. value: UM.LayerView.minimumLayer
  25. onValueChanged: {
  26. UM.LayerView.setMinimumLayer(value)
  27. if (value > UM.LayerView.currentLayer) {
  28. UM.LayerView.setCurrentLayer(value);
  29. }
  30. }
  31. style: UM.Theme.styles.slider;
  32. }
  33. Slider
  34. {
  35. id: slider
  36. width: UM.Theme.getSize("slider_layerview_size").width
  37. height: UM.Theme.getSize("slider_layerview_size").height
  38. anchors.left: parent.left
  39. anchors.leftMargin: UM.Theme.getSize("slider_layerview_margin").width * 0.8
  40. orientation: Qt.Vertical
  41. minimumValue: 0;
  42. maximumValue: UM.LayerView.numLayers;
  43. stepSize: 1
  44. property real pixelsPerStep: ((height - UM.Theme.getSize("slider_handle").height) / (maximumValue - minimumValue)) * stepSize;
  45. value: UM.LayerView.currentLayer
  46. onValueChanged: {
  47. UM.LayerView.setCurrentLayer(value);
  48. if (value < UM.LayerView.minimumLayer) {
  49. UM.LayerView.setMinimumLayer(value);
  50. }
  51. }
  52. style: UM.Theme.styles.slider;
  53. Rectangle
  54. {
  55. x: parent.width + UM.Theme.getSize("slider_layerview_background").width / 2;
  56. y: parent.height - (parent.value * parent.pixelsPerStep) - UM.Theme.getSize("slider_handle").height * 1.25;
  57. height: UM.Theme.getSize("slider_handle").height + UM.Theme.getSize("default_margin").height
  58. width: valueLabel.width + UM.Theme.getSize("default_margin").width
  59. Behavior on height { NumberAnimation { duration: 50; } }
  60. border.width: UM.Theme.getSize("default_lining").width
  61. border.color: UM.Theme.getColor("slider_groove_border")
  62. color: UM.Theme.getColor("tool_panel_background")
  63. visible: UM.LayerView.getLayerActivity && Printer.getPlatformActivity ? true : false
  64. TextField
  65. {
  66. id: valueLabel
  67. property string maxValue: slider.maximumValue + 1
  68. text: slider.value + 1
  69. horizontalAlignment: TextInput.AlignRight;
  70. onEditingFinished:
  71. {
  72. // Ensure that the cursor is at the first position. On some systems the text isn't fully visible
  73. // Seems to have to do something with different dpi densities that QML doesn't quite handle.
  74. // Another option would be to increase the size even further, but that gives pretty ugly results.
  75. cursorPosition = 0;
  76. if(valueLabel.text != '')
  77. {
  78. slider.value = valueLabel.text - 1;
  79. }
  80. }
  81. validator: IntValidator { bottom: 1; top: slider.maximumValue + 1; }
  82. anchors.left: parent.left;
  83. anchors.leftMargin: UM.Theme.getSize("default_margin").width / 2;
  84. anchors.verticalCenter: parent.verticalCenter;
  85. width: Math.max(UM.Theme.getSize("line").width * maxValue.length + 2, 20);
  86. style: TextFieldStyle
  87. {
  88. textColor: UM.Theme.getColor("setting_control_text");
  89. font: UM.Theme.getFont("default");
  90. background: Item { }
  91. }
  92. }
  93. BusyIndicator
  94. {
  95. id: busyIndicator;
  96. anchors.left: parent.right;
  97. anchors.leftMargin: UM.Theme.getSize("default_margin").width / 2;
  98. anchors.verticalCenter: parent.verticalCenter;
  99. width: UM.Theme.getSize("slider_handle").height;
  100. height: width;
  101. running: UM.LayerView.busy;
  102. visible: UM.LayerView.busy;
  103. }
  104. }
  105. }
  106. Rectangle {
  107. id: slider_background
  108. anchors.left: parent.left
  109. anchors.verticalCenter: parent.verticalCenter
  110. z: slider.z - 1
  111. width: UM.Theme.getSize("slider_layerview_background").width
  112. height: slider.height + UM.Theme.getSize("default_margin").height * 2
  113. color: UM.Theme.getColor("tool_panel_background");
  114. border.width: UM.Theme.getSize("default_lining").width
  115. border.color: UM.Theme.getColor("lining")
  116. MouseArea {
  117. id: sliderMouseArea
  118. property double manualStepSize: slider.maximumValue / 11
  119. anchors.fill: parent
  120. onWheel: {
  121. slider.value = wheel.angleDelta.y < 0 ? slider.value - sliderMouseArea.manualStepSize : slider.value + sliderMouseArea.manualStepSize
  122. }
  123. }
  124. }
  125. Rectangle {
  126. anchors.left: parent.left
  127. anchors.verticalCenter: parent.verticalCenter
  128. anchors.top: slider_background.bottom
  129. anchors.topMargin: UM.Theme.getSize("default_margin").height
  130. //anchors.leftMargin: UM.Theme.getSize("default_margin").width
  131. width: UM.Theme.getSize("slider_layerview_background").width * 3
  132. height: slider.height + UM.Theme.getSize("default_margin").height * 2
  133. color: UM.Theme.getColor("tool_panel_background");
  134. border.width: UM.Theme.getSize("default_lining").width
  135. border.color: UM.Theme.getColor("lining")
  136. ListModel
  137. {
  138. id: layerViewTypes
  139. ListElement {
  140. text: "Material color"
  141. type_id: 0
  142. }
  143. ListElement {
  144. text: "Line type"
  145. type_id: 1 // these ids match the switching in the shader
  146. }
  147. }
  148. ComboBox
  149. {
  150. id: layerTypeCombobox
  151. anchors.top: slider_background.bottom
  152. anchors.left: parent.left
  153. model: layerViewTypes
  154. visible: !UM.LayerView.compatibilityMode
  155. onActivated: {
  156. UM.LayerView.setLayerViewType(layerViewTypes.get(index).type_id);
  157. }
  158. }
  159. Label
  160. {
  161. id: compatibilityModeLabel
  162. anchors.top: slider_background.bottom
  163. anchors.left: parent.left
  164. text: catalog.i18nc("@label","Compatibility mode")
  165. visible: UM.LayerView.compatibilityMode
  166. }
  167. ColumnLayout {
  168. id: view_settings
  169. anchors.top: UM.LayerView.compatibilityMode ? compatibilityModeLabel.bottom : layerTypeCombobox.bottom
  170. anchors.topMargin: UM.Theme.getSize("default_margin").height
  171. x: UM.Theme.getSize("default_margin").width
  172. CheckBox {
  173. checked: true
  174. onClicked: {
  175. UM.LayerView.setExtruderOpacity(0, checked ? 1.0 : 0.0);
  176. }
  177. text: "Extruder 1"
  178. visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 1)
  179. }
  180. CheckBox {
  181. checked: true
  182. onClicked: {
  183. UM.LayerView.setExtruderOpacity(1, checked ? 1.0 : 0.0);
  184. }
  185. text: "Extruder 2"
  186. visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 2)
  187. }
  188. CheckBox {
  189. checked: true
  190. onClicked: {
  191. UM.LayerView.setExtruderOpacity(2, checked ? 1.0 : 0.0);
  192. }
  193. text: "Extruder 3"
  194. visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 3)
  195. }
  196. CheckBox {
  197. checked: true
  198. onClicked: {
  199. UM.LayerView.setExtruderOpacity(3, checked ? 1.0 : 0.0);
  200. }
  201. text: "Extruder 4"
  202. visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 4)
  203. }
  204. Label {
  205. text: "Other extruders always visible"
  206. visible: !UM.LayerView.compatibilityMode && (UM.LayerView.getExtruderCount >= 5)
  207. }
  208. CheckBox {
  209. onClicked: {
  210. UM.LayerView.setShowTravelMoves(checked ? 1 : 0);
  211. }
  212. text: "Show travel moves"
  213. }
  214. CheckBox {
  215. checked: true
  216. onClicked: {
  217. UM.LayerView.setShowSupport(checked ? 1 : 0);
  218. }
  219. text: "Show support"
  220. }
  221. CheckBox {
  222. checked: true
  223. onClicked: {
  224. UM.LayerView.setShowAdhesion(checked ? 1 : 0);
  225. }
  226. text: "Show adhesion"
  227. }
  228. CheckBox {
  229. checked: true
  230. onClicked: {
  231. UM.LayerView.setShowSkin(checked ? 1 : 0);
  232. }
  233. text: "Show skin"
  234. }
  235. CheckBox {
  236. checked: true
  237. onClicked: {
  238. UM.LayerView.setShowInfill(checked ? 1 : 0);
  239. }
  240. text: "Show infill"
  241. }
  242. }
  243. }
  244. }