OpenProjectFilesPage.qml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. //Copyright (C) 2022 Ultimaker B.V.
  2. //Cura is released under the terms of the LGPLv3 or higher.
  3. import QtQuick 2.15
  4. import QtQuick.Window 2.2
  5. import QtQuick.Controls 2.3
  6. import UM 1.6 as UM
  7. import Cura 1.6 as Cura
  8. import DigitalFactory 1.0 as DF
  9. Item
  10. {
  11. id: base
  12. width: parent.width
  13. height: parent.height
  14. property var fileModel: manager.digitalFactoryFileModel
  15. property var modelRows: manager.digitalFactoryFileModel.items
  16. signal openFilePressed()
  17. signal selectDifferentProjectPressed()
  18. anchors
  19. {
  20. fill: parent
  21. margins: UM.Theme.getSize("default_margin").width
  22. }
  23. ProjectSummaryCard
  24. {
  25. id: projectSummaryCard
  26. anchors.top: parent.top
  27. property var selectedItem: manager.digitalFactoryProjectModel.getItem(manager.selectedProjectIndex)
  28. imageSource: selectedItem.thumbnailUrl || "../images/placeholder.svg"
  29. projectNameText: selectedItem.displayName || ""
  30. projectUsernameText: selectedItem.username || ""
  31. projectLastUpdatedText: "Last updated: " + selectedItem.lastUpdated
  32. cardMouseAreaEnabled: false
  33. }
  34. Rectangle
  35. {
  36. id: projectFilesContent
  37. width: parent.width
  38. anchors.top: projectSummaryCard.bottom
  39. anchors.topMargin: UM.Theme.getSize("default_margin").width
  40. anchors.bottom: selectDifferentProjectButton.top
  41. anchors.bottomMargin: UM.Theme.getSize("default_margin").width
  42. color: UM.Theme.getColor("main_background")
  43. border.width: UM.Theme.getSize("default_lining").width
  44. border.color: UM.Theme.getColor("lining")
  45. // This is not backwards compatible with Cura < 5.0 due to QT.labs being removed in PyQt6
  46. Cura.TableView
  47. {
  48. id: filesTableView
  49. anchors.fill: parent
  50. anchors.margins: parent.border.width
  51. columnHeaders: ["Name", "Uploaded by", "Uploaded at"]
  52. model: UM.TableModel
  53. {
  54. id: tableModel
  55. headers: ["fileName", "username", "uploadedAt"]
  56. rows: modelRows
  57. }
  58. onCurrentRowChanged:
  59. {
  60. manager.setSelectedFileIndices([currentRow]);
  61. }
  62. onDoubleClicked: function(row)
  63. {
  64. manager.setSelectedFileIndices([row]);
  65. openFilesButton.clicked();
  66. }
  67. }
  68. Label
  69. {
  70. id: emptyProjectLabel
  71. anchors.horizontalCenter: parent.horizontalCenter
  72. anchors.verticalCenter: parent.verticalCenter
  73. text: "Select a project to view its files."
  74. font: UM.Theme.getFont("default")
  75. color: UM.Theme.getColor("setting_category_text")
  76. Connections
  77. {
  78. target: manager
  79. function onSelectedProjectIndexChanged(newProjectIndex)
  80. {
  81. emptyProjectLabel.visible = (newProjectIndex == -1)
  82. }
  83. }
  84. }
  85. Label
  86. {
  87. id: noFilesInProjectLabel
  88. anchors.horizontalCenter: parent.horizontalCenter
  89. anchors.verticalCenter: parent.verticalCenter
  90. visible: (manager.digitalFactoryFileModel.count == 0 && !emptyProjectLabel.visible && !retrievingFilesBusyIndicator.visible)
  91. text: "No supported files in this project."
  92. font: UM.Theme.getFont("default")
  93. color: UM.Theme.getColor("setting_category_text")
  94. }
  95. BusyIndicator
  96. {
  97. // Shows up while Cura is waiting to receive the files of a project from the digital factory library
  98. id: retrievingFilesBusyIndicator
  99. anchors
  100. {
  101. verticalCenter: parent.verticalCenter
  102. horizontalCenter: parent.horizontalCenter
  103. }
  104. width: parent.width / 4
  105. height: width
  106. visible: manager.retrievingFilesStatus == DF.RetrievalStatus.InProgress
  107. running: visible
  108. palette.dark: UM.Theme.getColor("text")
  109. }
  110. Connections
  111. {
  112. target: manager.digitalFactoryFileModel
  113. function onItemsChanged()
  114. {
  115. // Make sure no files are selected when the file model changes
  116. filesTableView.currentRow = -1
  117. }
  118. }
  119. }
  120. Cura.SecondaryButton
  121. {
  122. id: selectDifferentProjectButton
  123. anchors.bottom: parent.bottom
  124. anchors.left: parent.left
  125. text: "Change Library project"
  126. onClicked:
  127. {
  128. manager.clearProjectSelection()
  129. }
  130. busy: false
  131. }
  132. Cura.PrimaryButton
  133. {
  134. id: openFilesButton
  135. anchors.bottom: parent.bottom
  136. anchors.right: parent.right
  137. text: "Open"
  138. enabled: filesTableView.currentRow >= 0
  139. onClicked:
  140. {
  141. manager.openSelectedFiles()
  142. }
  143. busy: false
  144. }
  145. Component.onCompleted:
  146. {
  147. openFilesButton.clicked.connect(base.openFilePressed)
  148. selectDifferentProjectButton.clicked.connect(base.selectDifferentProjectPressed)
  149. }
  150. onModelRowsChanged:
  151. {
  152. tableModel.clear()
  153. tableModel.rows = modelRows
  154. }
  155. }