LayerView.qml 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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: slider
  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/2
  19. orientation: Qt.Vertical
  20. minimumValue: 0;
  21. maximumValue: UM.LayerView.numLayers;
  22. stepSize: 1
  23. property real pixelsPerStep: ((height - UM.Theme.getSize("slider_handle").height) / (maximumValue - minimumValue)) * stepSize;
  24. value: UM.LayerView.currentLayer
  25. onValueChanged: UM.LayerView.setCurrentLayer(value)
  26. style: UM.Theme.styles.slider;
  27. Rectangle
  28. {
  29. x: parent.width + UM.Theme.getSize("slider_layerview_background").width / 2;
  30. y: parent.height - (parent.value * parent.pixelsPerStep) - UM.Theme.getSize("slider_handle").height * 1.25;
  31. height: UM.Theme.getSize("slider_handle").height + UM.Theme.getSize("default_margin").height
  32. width: valueLabel.width + UM.Theme.getSize("default_margin").width
  33. Behavior on height { NumberAnimation { duration: 50; } }
  34. border.width: UM.Theme.getSize("default_lining").width
  35. border.color: UM.Theme.getColor("slider_groove_border")
  36. color: UM.Theme.getColor("tool_panel_background")
  37. visible: UM.LayerView.getLayerActivity && Printer.getPlatformActivity ? true : false
  38. TextField
  39. {
  40. id: valueLabel
  41. property string maxValue: slider.maximumValue + 1
  42. text: slider.value + 1
  43. horizontalAlignment: TextInput.AlignRight;
  44. onEditingFinished:
  45. {
  46. // Ensure that the cursor is at the first position. On some systems the text isn't fully visible
  47. // Seems to have to do something with different dpi densities that QML doesn't quite handle.
  48. // Another option would be to increase the size even further, but that gives pretty ugly results.
  49. cursorPosition = 0;
  50. if(valueLabel.text != '')
  51. {
  52. slider.value = valueLabel.text - 1;
  53. }
  54. }
  55. validator: IntValidator { bottom: 1; top: slider.maximumValue + 1; }
  56. anchors.left: parent.left;
  57. anchors.leftMargin: UM.Theme.getSize("default_margin").width / 2;
  58. anchors.verticalCenter: parent.verticalCenter;
  59. width: Math.max(UM.Theme.getSize("line").width * maxValue.length + 2, 20);
  60. style: TextFieldStyle
  61. {
  62. textColor: UM.Theme.getColor("setting_control_text");
  63. font: UM.Theme.getFont("default");
  64. background: Item { }
  65. }
  66. }
  67. BusyIndicator
  68. {
  69. id: busyIndicator;
  70. anchors.left: parent.right;
  71. anchors.leftMargin: UM.Theme.getSize("default_margin").width / 2;
  72. anchors.verticalCenter: parent.verticalCenter;
  73. width: UM.Theme.getSize("slider_handle").height;
  74. height: width;
  75. running: UM.LayerView.busy;
  76. visible: UM.LayerView.busy;
  77. }
  78. }
  79. }
  80. Rectangle {
  81. anchors.left: parent.left
  82. anchors.verticalCenter: parent.verticalCenter
  83. z: slider.z - 1
  84. width: UM.Theme.getSize("slider_layerview_background").width
  85. height: slider.height + UM.Theme.getSize("default_margin").height * 2
  86. color: UM.Theme.getColor("tool_panel_background");
  87. border.width: UM.Theme.getSize("default_lining").width
  88. border.color: UM.Theme.getColor("lining")
  89. MouseArea {
  90. id: sliderMouseArea
  91. property double manualStepSize: slider.maximumValue / 11
  92. anchors.fill: parent
  93. onWheel: {
  94. slider.value = wheel.angleDelta.y < 0 ? slider.value - sliderMouseArea.manualStepSize : slider.value + sliderMouseArea.manualStepSize
  95. }
  96. }
  97. }
  98. }