OpenProjectFilesPage.qml 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. //Copyright (C) 2022 Ultimaker B.V.
  2. //Cura is released under the terms of the LGPLv3 or higher.
  3. import Qt.labs.qmlmodels 1.0
  4. import QtQuick 2.15
  5. import QtQuick.Window 2.2
  6. import QtQuick.Controls 2.3
  7. import UM 1.2 as UM
  8. import Cura 1.6 as Cura
  9. import DigitalFactory 1.0 as DF
  10. Item
  11. {
  12. id: base
  13. width: parent.width
  14. height: parent.height
  15. property var fileModel: manager.digitalFactoryFileModel
  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. //We can't use Cura's TableView here, since in Cura >= 5.0 this uses QtQuick.TableView, while in Cura < 5.0 this uses QtControls1.TableView.
  46. //So we have to define our own. Once support for 4.13 and earlier is dropped, we can switch to Cura.TableView.
  47. Table
  48. {
  49. id: filesTableView
  50. anchors.fill: parent
  51. anchors.margins: parent.border.width
  52. columnHeaders: ["Name", "Uploaded by", "Uploaded at"]
  53. model: TableModel
  54. {
  55. TableModelColumn { display: "fileName" }
  56. TableModelColumn { display: "username" }
  57. TableModelColumn { display: "uploadedAt" }
  58. rows: manager.digitalFactoryFileModel.items
  59. }
  60. onCurrentRowChanged:
  61. {
  62. manager.setSelectedFileIndices([currentRow]);
  63. }
  64. onDoubleClicked: function(row)
  65. {
  66. manager.setSelectedFileIndices([row]);
  67. openFilesButton.clicked();
  68. }
  69. }
  70. Label
  71. {
  72. id: emptyProjectLabel
  73. anchors.horizontalCenter: parent.horizontalCenter
  74. anchors.verticalCenter: parent.verticalCenter
  75. text: "Select a project to view its files."
  76. font: UM.Theme.getFont("default")
  77. color: UM.Theme.getColor("setting_category_text")
  78. Connections
  79. {
  80. target: manager
  81. function onSelectedProjectIndexChanged(newProjectIndex)
  82. {
  83. emptyProjectLabel.visible = (newProjectIndex == -1)
  84. }
  85. }
  86. }
  87. Label
  88. {
  89. id: noFilesInProjectLabel
  90. anchors.horizontalCenter: parent.horizontalCenter
  91. anchors.verticalCenter: parent.verticalCenter
  92. visible: (manager.digitalFactoryFileModel.count == 0 && !emptyProjectLabel.visible && !retrievingFilesBusyIndicator.visible)
  93. text: "No supported files in this project."
  94. font: UM.Theme.getFont("default")
  95. color: UM.Theme.getColor("setting_category_text")
  96. }
  97. BusyIndicator
  98. {
  99. // Shows up while Cura is waiting to receive the files of a project from the digital factory library
  100. id: retrievingFilesBusyIndicator
  101. anchors
  102. {
  103. verticalCenter: parent.verticalCenter
  104. horizontalCenter: parent.horizontalCenter
  105. }
  106. width: parent.width / 4
  107. height: width
  108. visible: manager.retrievingFilesStatus == DF.RetrievalStatus.InProgress
  109. running: visible
  110. palette.dark: UM.Theme.getColor("text")
  111. }
  112. Connections
  113. {
  114. target: manager.digitalFactoryFileModel
  115. function onItemsChanged()
  116. {
  117. // Make sure no files are selected when the file model changes
  118. filesTableView.currentRow = -1
  119. }
  120. }
  121. }
  122. Cura.SecondaryButton
  123. {
  124. id: selectDifferentProjectButton
  125. anchors.bottom: parent.bottom
  126. anchors.left: parent.left
  127. text: "Change Library project"
  128. onClicked:
  129. {
  130. manager.clearProjectSelection()
  131. }
  132. busy: false
  133. }
  134. Cura.PrimaryButton
  135. {
  136. id: openFilesButton
  137. anchors.bottom: parent.bottom
  138. anchors.right: parent.right
  139. text: "Open"
  140. enabled: filesTableView.currentRow >= 0
  141. onClicked:
  142. {
  143. manager.openSelectedFiles()
  144. }
  145. busy: false
  146. }
  147. Component.onCompleted:
  148. {
  149. openFilesButton.clicked.connect(base.openFilePressed)
  150. selectDifferentProjectButton.clicked.connect(base.selectDifferentProjectPressed)
  151. }
  152. }