AddNetworkOrLocalPrinterContent.qml 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. // Copyright (c) 2019 Ultimaker B.V.
  2. // Cura is released under the terms of the LGPLv3 or higher.
  3. import QtQuick 2.10
  4. import QtQuick.Controls 2.3
  5. import UM 1.3 as UM
  6. import Cura 1.1 as Cura
  7. //
  8. // This component contains the content for the "Add a printer" (network) page of the welcome on-boarding process.
  9. //
  10. Item
  11. {
  12. UM.I18nCatalog { id: catalog; name: "cura" }
  13. Label
  14. {
  15. id: titleLabel
  16. anchors.top: parent.top
  17. anchors.horizontalCenter: parent.horizontalCenter
  18. horizontalAlignment: Text.AlignHCenter
  19. text: catalog.i18nc("@label", "Add a printer")
  20. color: UM.Theme.getColor("primary_button")
  21. font: UM.Theme.getFont("huge")
  22. renderType: Text.NativeRendering
  23. }
  24. DropDownWidget
  25. {
  26. id: addNetworkPrinterDropDown
  27. anchors.top: titleLabel.bottom
  28. anchors.left: parent.left
  29. anchors.right: parent.right
  30. anchors.topMargin: UM.Theme.getSize("wide_margin").height
  31. title: catalog.i18nc("@label", "Add a networked printer")
  32. contentShown: true // by default expand the network printer list
  33. onClicked:
  34. {
  35. addLocalPrinterDropDown.contentShown = !contentShown
  36. }
  37. contentComponent: networkPrinterListComponent
  38. Component
  39. {
  40. id: networkPrinterListComponent
  41. AddNetworkPrinterScrollView
  42. {
  43. id: networkPrinterScrollView
  44. maxItemCountAtOnce: 10 // show at max 10 items at once, otherwise you need to scroll.
  45. onRefreshButtonClicked:
  46. {
  47. UM.OutputDeviceManager.startDiscovery()
  48. }
  49. onAddByIpButtonClicked:
  50. {
  51. base.goToPage("add_printer_by_ip")
  52. }
  53. onAddCloudPrinterButtonClicked:
  54. {
  55. base.goToPage("add_cloud_printers")
  56. if (!Cura.API.account.isLoggedIn)
  57. {
  58. Cura.API.account.login()
  59. }
  60. }
  61. }
  62. }
  63. }
  64. DropDownWidget
  65. {
  66. id: addLocalPrinterDropDown
  67. anchors.top: addNetworkPrinterDropDown.bottom
  68. anchors.left: parent.left
  69. anchors.right: parent.right
  70. anchors.topMargin: UM.Theme.getSize("default_margin").height
  71. title: catalog.i18nc("@label", "Add a non-networked printer")
  72. onClicked:
  73. {
  74. addNetworkPrinterDropDown.contentShown = !contentShown
  75. }
  76. contentComponent: localPrinterListComponent
  77. Component
  78. {
  79. id: localPrinterListComponent
  80. AddLocalPrinterScrollView
  81. {
  82. id: localPrinterView
  83. property int childrenHeight: backButton.y - addLocalPrinterDropDown.y - UM.Theme.getSize("expandable_component_content_header").height - UM.Theme.getSize("default_margin").height
  84. onChildrenHeightChanged:
  85. {
  86. addLocalPrinterDropDown.children[1].height = childrenHeight
  87. }
  88. }
  89. }
  90. }
  91. // This "Back" button only shows in the "Add Machine" dialog, which has "previous_page_button_text" set to "Cancel"
  92. Cura.SecondaryButton
  93. {
  94. id: backButton
  95. anchors.left: parent.left
  96. anchors.bottom: parent.bottom
  97. visible: base.currentItem.previous_page_button_text ? true : false
  98. text: base.currentItem.previous_page_button_text ? base.currentItem.previous_page_button_text : ""
  99. onClicked:
  100. {
  101. base.endWizard()
  102. }
  103. }
  104. Cura.PrimaryButton
  105. {
  106. id: nextButton
  107. anchors.right: parent.right
  108. anchors.bottom: parent.bottom
  109. enabled:
  110. {
  111. // If the network printer dropdown is expanded, make sure that there is a selected item
  112. if (addNetworkPrinterDropDown.contentShown)
  113. {
  114. return addNetworkPrinterDropDown.contentItem.currentItem != null
  115. }
  116. else
  117. {
  118. // Printer name cannot be empty
  119. const localPrinterItem = addLocalPrinterDropDown.contentItem.currentItem
  120. const isPrinterNameValid = addLocalPrinterDropDown.contentItem.isPrinterNameValid
  121. return localPrinterItem != null && isPrinterNameValid
  122. }
  123. }
  124. text: base.currentItem.next_page_button_text
  125. onClicked:
  126. {
  127. // Create a network printer or a local printer according to the selection
  128. if (addNetworkPrinterDropDown.contentShown)
  129. {
  130. // Create a network printer
  131. const networkPrinterItem = addNetworkPrinterDropDown.contentItem.currentItem
  132. CuraApplication.getDiscoveredPrintersModel().createMachineFromDiscoveredPrinter(networkPrinterItem)
  133. // If we have created a machine, end the wizard (since this is the last page)
  134. base.endWizard()
  135. }
  136. else
  137. {
  138. // Create a local printer
  139. const localPrinterItem = addLocalPrinterDropDown.contentItem.currentItem
  140. const printerName = addLocalPrinterDropDown.contentItem.printerName
  141. if(Cura.MachineManager.addMachine(localPrinterItem.id, printerName))
  142. {
  143. base.showNextPage()
  144. }
  145. }
  146. }
  147. }
  148. }