LayerView.qml 4.4 KB

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