WorkspaceDialog.qml 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918
  1. // Copyright (c) 2022 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 QtQuick.Layouts 1.3
  6. import QtQuick.Window 2.2
  7. import UM 1.5 as UM
  8. import Cura 1.1 as Cura
  9. UM.Dialog
  10. {
  11. id: workspaceDialog
  12. title: catalog.i18nc("@title:window", "Open Project")
  13. margin: UM.Theme.getSize("default_margin").width
  14. minimumWidth: UM.Theme.getSize("modal_window_minimum").width
  15. minimumHeight: UM.Theme.getSize("modal_window_minimum").height
  16. backgroundColor: UM.Theme.getColor("detail_background")
  17. headerComponent: Rectangle
  18. {
  19. height: childrenRect.height + 2 * UM.Theme.getSize("default_margin").height
  20. color: UM.Theme.getColor("main_background")
  21. UM.Label
  22. {
  23. id: titleLabel
  24. text: catalog.i18nc("@action:title", "Summary - Cura Project")
  25. font: UM.Theme.getFont("large")
  26. anchors.top: parent.top
  27. anchors.left: parent.left
  28. anchors.topMargin: UM.Theme.getSize("default_margin").height
  29. anchors.leftMargin: UM.Theme.getSize("default_margin").height
  30. }
  31. }
  32. Grid
  33. {
  34. columns: 20
  35. Repeater
  36. {
  37. model: {
  38. const icons = new Set();
  39. icons.add("Adhesion");
  40. icons.add("Anneal");
  41. icons.add("ArrowDoubleCircleRight");
  42. icons.add("ArrowDown");
  43. icons.add("ArrowFourWay");
  44. icons.add("ArrowLeft");
  45. icons.add("ArrowReset");
  46. icons.add("Bandage");
  47. icons.add("BlackMagic");
  48. icons.add("BlockGrid");
  49. icons.add("BlockSupportOverlaps");
  50. icons.add("Browser");
  51. icons.add("Bug");
  52. icons.add("Buildplate");
  53. icons.add("Cancel");
  54. icons.add("CancelBlock");
  55. icons.add("CancelCircle");
  56. icons.add("Certified");
  57. icons.add("Check");
  58. icons.add("CheckCircle");
  59. icons.add("ChevronSingleDown");
  60. icons.add("ChevronSingleLeft");
  61. icons.add("ChevronSingleRight");
  62. icons.add("ChevronSingleUp");
  63. icons.add("CircleMask");
  64. icons.add("CircleOutline");
  65. icons.add("Clock");
  66. icons.add("Cloud");
  67. icons.add("DocumentFilled");
  68. icons.add("Download");
  69. icons.add("DualExtrusion");
  70. icons.add("EmptyInfo");
  71. icons.add("Experiment");
  72. icons.add("Extruder");
  73. icons.add("ExtruderColor");
  74. icons.add("Eye");
  75. icons.add("Fan");
  76. icons.add("Folder");
  77. icons.add("FoodBeverages");
  78. icons.add("Formula");
  79. icons.add("Function");
  80. icons.add("GearCheck");
  81. icons.add("Globe");
  82. icons.add("Guide");
  83. icons.add("Hamburger");
  84. icons.add("Hammer");
  85. icons.add("Help");
  86. icons.add("House");
  87. icons.add("Infill0");
  88. icons.add("Infill1");
  89. icons.add("Infill2");
  90. icons.add("Infill3");
  91. icons.add("Infill100");
  92. icons.add("InfillGradual");
  93. icons.add("Information");
  94. icons.add("Knowledge");
  95. icons.add("Layers");
  96. icons.add("LayFlat");
  97. icons.add("LayFlatOnFace");
  98. icons.add("Library");
  99. icons.add("Lightning");
  100. icons.add("Link");
  101. icons.add("LinkExternal");
  102. icons.add("Magnifier");
  103. icons.add("MeshType");
  104. icons.add("MeshTypeIntersect");
  105. icons.add("MeshTypeNormal");
  106. icons.add("MeshTypeSupport");
  107. icons.add("Minus");
  108. icons.add("Mirror");
  109. icons.add("Nut");
  110. icons.add("Pen");
  111. icons.add("People");
  112. icons.add("Play");
  113. icons.add("Plugin");
  114. icons.add("Plus");
  115. icons.add("Printer");
  116. icons.add("PrinterTriple");
  117. icons.add("PrintQuality");
  118. icons.add("PrintShell");
  119. icons.add("PrintTopBottom");
  120. icons.add("PrintTravel");
  121. icons.add("PrintWalls");
  122. icons.add("Quick");
  123. icons.add("Rotate");
  124. icons.add("Save");
  125. icons.add("Scale");
  126. icons.add("ScaleMax");
  127. icons.add("Settings");
  128. icons.add("Shield");
  129. icons.add("Shop");
  130. icons.add("ShoppingCart");
  131. icons.add("Sliders");
  132. icons.add("Solid");
  133. icons.add("Speak");
  134. icons.add("SpeedOMeter");
  135. icons.add("Spinner");
  136. icons.add("Spool");
  137. icons.add("Sputnik");
  138. icons.add("Star");
  139. icons.add("StarFilled");
  140. icons.add("Support");
  141. icons.add("SupportBlocker");
  142. icons.add("ThreeDots");
  143. icons.add("UltimakerCura");
  144. icons.add("View3D");
  145. icons.add("ViewFront");
  146. icons.add("ViewLeft");
  147. icons.add("ViewRight");
  148. icons.add("ViewTop");
  149. icons.add("Visual");
  150. icons.add("Warning");
  151. icons.add("Adhesion copy");
  152. icons.add("Anneal copy");
  153. icons.add("ArrowDoubleCircleRight copy");
  154. icons.add("ArrowDown copy");
  155. icons.add("ArrowFourWay copy");
  156. icons.add("ArrowLeft copy");
  157. icons.add("ArrowReset copy");
  158. icons.add("Bandage copy");
  159. icons.add("BlackMagic copy");
  160. icons.add("BlockGrid copy");
  161. icons.add("BlockSupportOverlaps copy");
  162. icons.add("Browser copy");
  163. icons.add("Bug copy");
  164. icons.add("Buildplate copy");
  165. icons.add("Cancel copy");
  166. icons.add("CancelBlock copy");
  167. icons.add("CancelCircle copy");
  168. icons.add("Certified copy");
  169. icons.add("Check copy");
  170. icons.add("CheckCircle copy");
  171. icons.add("ChevronSingleDown copy");
  172. icons.add("ChevronSingleLeft copy");
  173. icons.add("ChevronSingleRight copy");
  174. icons.add("ChevronSingleUp copy");
  175. icons.add("CircleMask copy");
  176. icons.add("CircleOutline copy");
  177. icons.add("Clock copy");
  178. icons.add("Cloud copy");
  179. icons.add("DocumentFilled copy");
  180. icons.add("Download copy");
  181. icons.add("DualExtrusion copy");
  182. icons.add("EmptyInfo copy");
  183. icons.add("Experiment copy");
  184. icons.add("Extruder copy");
  185. icons.add("ExtruderColor copy");
  186. icons.add("Eye copy");
  187. icons.add("Fan copy");
  188. icons.add("Folder copy");
  189. icons.add("FoodBeverages copy");
  190. icons.add("Formula copy");
  191. icons.add("Function copy");
  192. icons.add("GearCheck copy");
  193. icons.add("Globe copy");
  194. icons.add("Guide copy");
  195. icons.add("Hamburger copy");
  196. icons.add("Hammer copy");
  197. icons.add("Help copy");
  198. icons.add("House copy");
  199. icons.add("Infill0 copy");
  200. icons.add("Infill1 copy");
  201. icons.add("Infill2 copy");
  202. icons.add("Infill3 copy");
  203. icons.add("Infill100 copy");
  204. icons.add("InfillGradual copy");
  205. icons.add("Information copy");
  206. icons.add("Knowledge copy");
  207. icons.add("Layers copy");
  208. icons.add("LayFlat copy");
  209. icons.add("LayFlatOnFace copy");
  210. icons.add("Library copy");
  211. icons.add("Lightning copy");
  212. icons.add("Link copy");
  213. icons.add("LinkExternal copy");
  214. icons.add("Magnifier copy");
  215. icons.add("MeshType copy");
  216. icons.add("MeshTypeIntersect copy");
  217. icons.add("MeshTypeNormal copy");
  218. icons.add("MeshTypeSupport copy");
  219. icons.add("Minus copy");
  220. icons.add("Mirror copy");
  221. icons.add("Nut copy");
  222. icons.add("Pen copy");
  223. icons.add("People copy");
  224. icons.add("Play copy");
  225. icons.add("Plugin copy");
  226. icons.add("Plus copy");
  227. icons.add("Printer copy");
  228. icons.add("PrinterTriple copy");
  229. icons.add("PrintQuality copy");
  230. icons.add("PrintShell copy");
  231. icons.add("PrintTopBottom copy");
  232. icons.add("PrintTravel copy");
  233. icons.add("PrintWalls copy");
  234. icons.add("Quick copy");
  235. icons.add("Rotate copy");
  236. icons.add("Save copy");
  237. icons.add("Scale copy");
  238. icons.add("ScaleMax copy");
  239. icons.add("Settings copy");
  240. icons.add("Shield copy");
  241. icons.add("Shop copy");
  242. icons.add("ShoppingCart copy");
  243. icons.add("Sliders copy");
  244. icons.add("Solid copy");
  245. icons.add("Speak copy");
  246. icons.add("SpeedOMeter copy");
  247. icons.add("Spinner copy");
  248. icons.add("Spool copy");
  249. icons.add("Sputnik copy");
  250. icons.add("Star copy");
  251. icons.add("StarFilled copy");
  252. icons.add("Support copy");
  253. icons.add("SupportBlocker copy");
  254. icons.add("ThreeDots copy");
  255. icons.add("UltimakerCura copy");
  256. icons.add("View3D copy");
  257. icons.add("ViewFront copy");
  258. icons.add("ViewLeft copy");
  259. icons.add("ViewRight copy");
  260. icons.add("ViewTop copy");
  261. icons.add("Visual copy");
  262. icons.add("Warning copy");
  263. icons.add("Adhesion copy 2");
  264. icons.add("Anneal copy 2");
  265. icons.add("ArrowDoubleCircleRight copy 2");
  266. icons.add("ArrowDown copy 2");
  267. icons.add("ArrowFourWay copy 2");
  268. icons.add("ArrowLeft copy 2");
  269. icons.add("ArrowReset copy 2");
  270. icons.add("Bandage copy 2");
  271. icons.add("BlackMagic copy 2");
  272. icons.add("BlockGrid copy 2");
  273. icons.add("BlockSupportOverlaps copy 2");
  274. icons.add("Browser copy 2");
  275. icons.add("Bug copy 2");
  276. icons.add("Buildplate copy 2");
  277. icons.add("Cancel copy 2");
  278. icons.add("CancelBlock copy 2");
  279. icons.add("CancelCircle copy 2");
  280. icons.add("Certified copy 2");
  281. icons.add("Check copy 2");
  282. icons.add("CheckCircle copy 2");
  283. icons.add("ChevronSingleDown copy 2");
  284. icons.add("ChevronSingleLeft copy 2");
  285. icons.add("ChevronSingleRight copy 2");
  286. icons.add("ChevronSingleUp copy 2");
  287. icons.add("CircleMask copy 2");
  288. icons.add("CircleOutline copy 2");
  289. icons.add("Clock copy 2");
  290. icons.add("Cloud copy 2");
  291. icons.add("DocumentFilled copy 2");
  292. icons.add("Download copy 2");
  293. icons.add("DualExtrusion copy 2");
  294. icons.add("EmptyInfo copy 2");
  295. icons.add("Experiment copy 2");
  296. icons.add("Extruder copy 2");
  297. icons.add("ExtruderColor copy 2");
  298. icons.add("Eye copy 2");
  299. icons.add("Fan copy 2");
  300. icons.add("Folder copy 2");
  301. icons.add("FoodBeverages copy 2");
  302. icons.add("Formula copy 2");
  303. icons.add("Function copy 2");
  304. icons.add("GearCheck copy 2");
  305. icons.add("Globe copy 2");
  306. icons.add("Guide copy 2");
  307. icons.add("Hamburger copy 2");
  308. icons.add("Hammer copy 2");
  309. icons.add("Help copy 2");
  310. icons.add("House copy 2");
  311. icons.add("Infill0 copy 2");
  312. icons.add("Infill1 copy 2");
  313. icons.add("Infill2 copy 2");
  314. icons.add("Infill3 copy 2");
  315. icons.add("Infill100 copy 2");
  316. icons.add("InfillGradual copy 2");
  317. icons.add("Information copy 2");
  318. icons.add("Knowledge copy 2");
  319. icons.add("Layers copy 2");
  320. icons.add("LayFlat copy 2");
  321. icons.add("LayFlatOnFace copy 2");
  322. icons.add("Library copy 2");
  323. icons.add("Lightning copy 2");
  324. icons.add("Link copy 2");
  325. icons.add("LinkExternal copy 2");
  326. icons.add("Magnifier copy 2");
  327. icons.add("MeshType copy 2");
  328. icons.add("MeshTypeIntersect copy 2");
  329. icons.add("MeshTypeNormal copy 2");
  330. icons.add("MeshTypeSupport copy 2");
  331. icons.add("Minus copy 2");
  332. icons.add("Mirror copy 2");
  333. icons.add("Nut copy 2");
  334. icons.add("Pen copy 2");
  335. icons.add("People copy 2");
  336. icons.add("Play copy 2");
  337. icons.add("Plugin copy 2");
  338. icons.add("Plus copy 2");
  339. icons.add("Printer copy 2");
  340. icons.add("PrinterTriple copy 2");
  341. icons.add("PrintQuality copy 2");
  342. icons.add("PrintShell copy 2");
  343. icons.add("PrintTopBottom copy 2");
  344. icons.add("PrintTravel copy 2");
  345. icons.add("PrintWalls copy 2");
  346. icons.add("Quick copy 2");
  347. icons.add("Rotate copy 2");
  348. icons.add("Save copy 2");
  349. icons.add("Scale copy 2");
  350. icons.add("ScaleMax copy 2");
  351. icons.add("Settings copy 2");
  352. icons.add("Shield copy 2");
  353. icons.add("Shop copy 2");
  354. icons.add("ShoppingCart copy 2");
  355. icons.add("Sliders copy 2");
  356. icons.add("Solid copy 2");
  357. icons.add("Speak copy 2");
  358. icons.add("SpeedOMeter copy 2");
  359. icons.add("Spinner copy 2");
  360. icons.add("Spool copy 2");
  361. icons.add("Sputnik copy 2");
  362. icons.add("Star copy 2");
  363. icons.add("StarFilled copy 2");
  364. icons.add("Support copy 2");
  365. icons.add("SupportBlocker copy 2");
  366. icons.add("ThreeDots copy 2");
  367. icons.add("UltimakerCura copy 2");
  368. icons.add("View3D copy 2");
  369. icons.add("ViewFront copy 2");
  370. icons.add("ViewLeft copy 2");
  371. icons.add("ViewRight copy 2");
  372. icons.add("ViewTop copy 2");
  373. icons.add("Visual copy 2");
  374. icons.add("Warning copy 2");
  375. icons.add("Warning");
  376. icons.add("Information");
  377. icons.add("Plus");
  378. icons.add("Minus");
  379. icons.add("Printer");
  380. icons.add("Certificate");
  381. icons.add("Cancel");
  382. icons.add("Spool");
  383. icons.add("UltimakerCura");
  384. icons.add("Information");
  385. icons.add("Information");
  386. icons.add("Plus");
  387. icons.add("Cancel");
  388. icons.add("UltimakerCura");
  389. icons.add("Printer");
  390. icons.add("Spool");
  391. icons.add("Sliders");
  392. icons.add("Plugin");
  393. icons.add("LinkExternal");
  394. icons.add("ChevronSingleUp");
  395. icons.add("ChevronSingleDown");
  396. icons.add("ChevronSingleRight");
  397. icons.add("Infill0");
  398. icons.add("MeshTypeSupport");
  399. icons.add("MeshTypeIntersect");
  400. icons.add("BlockSupportOverlaps");
  401. icons.add("Minus");
  402. icons.add("Folder");
  403. icons.add("Extruder");
  404. icons.add("Adhesion");
  405. icons.add("Printer");
  406. icons.add("PrintQuality");
  407. icons.add("PrintShell");
  408. icons.add("PrintTopBottom");
  409. icons.add("Infill1");
  410. icons.add("SpeedOMeter");
  411. icons.add("PrintTravel");
  412. icons.add("Fan");
  413. icons.add("Support");
  414. icons.add("DualExtrusion");
  415. icons.add("Bandage");
  416. icons.add("BlackMagic");
  417. icons.add("Experiment");
  418. icons.add("CircleOutline");
  419. icons.add("ArrowDoubleCircleRight");
  420. icons.add("CheckCircle");
  421. icons.add("Warning");
  422. icons.add("Clock");
  423. icons.add("Spool");
  424. icons.add("Warning");
  425. icons.add("Check");
  426. icons.add("StarFilled");
  427. icons.add("Pen");
  428. icons.add("Guide");
  429. icons.add("StarFilled");
  430. icons.add("Star");
  431. icons.add("ThreeDots");
  432. icons.add("InfillGradual");
  433. icons.add("Infill0");
  434. icons.add("Infill3");
  435. icons.add("Infill2");
  436. icons.add("Solid");
  437. icons.add("ArrowReset");
  438. icons.add("ChevronSingleLeft");
  439. icons.add("House");
  440. icons.add("PrinterTriple");
  441. icons.add("Function");
  442. icons.add("Magnifier");
  443. icons.add("Hamburger");
  444. icons.add("View3D");
  445. icons.add("Layers");
  446. icons.add("ViewFront");
  447. icons.add("ViewTop");
  448. icons.add("ViewLeft");
  449. icons.add("ViewRight");
  450. icons.add("Plugin");
  451. icons.add("Spool");
  452. icons.add("Dot");
  453. icons.add("Mirror");
  454. icons.add("ArrowReset");
  455. icons.add("LayFlat");
  456. icons.add("LayFlatOnFace");
  457. icons.add("Rotate");
  458. icons.add("ArrowReset");
  459. icons.add("Scale");
  460. icons.add("ArrowFourWay");
  461. icons.add("Buildplate");
  462. icons.add("PrintQuality");
  463. icons.add("Shield");
  464. icons.add("Sputnik");
  465. icons.add("CancelBlock");
  466. icons.add("ChevronSingleDown");
  467. icons.add("People");
  468. icons.add("Link");
  469. icons.add("Play");
  470. icons.add("Clock");
  471. icons.add("CloudBadge");
  472. icons.add("CloudBadge");
  473. icons.add("CheckBlueBG");
  474. icons.add("Sliders");
  475. icons.add("Quick");
  476. icons.add("ScaleMax");
  477. icons.add("MeshType");
  478. icons.add("Star");
  479. icons.add("StarFilled");
  480. icons.add("PrintQuality");
  481. icons.add("CancelBlock");
  482. icons.add("Infill0");
  483. icons.add("Eye");
  484. const images = new Set();
  485. images.add("3d_printer_faded");
  486. images.add("add_printer");
  487. images.add("cura_connected_printers");
  488. images.add("first_run_machine_types");
  489. images.add("first_run_material_usage");
  490. images.add("first_run_number_slices");
  491. images.add("first_run_print_settings");
  492. images.add("first_run_ultimaker_cloud");
  493. images.add("header_pattern");
  494. images.add("insert_usb");
  495. images.add("logo");
  496. images.add("material_ecosystem");
  497. images.add("third_party_printer");
  498. images.add("ultimaker_printer");
  499. images.add("welcome_cura");
  500. const icon_srcs = Array.from(icons).map((icon_src) => UM.Theme.getIcon(icon_src));
  501. const image_srcs = Array.from(images).map((image_src) => UM.Theme.getImage(image_src));
  502. console.log("icon_srcs.length", icon_srcs.length);
  503. console.log("image_srcs.length", image_srcs.length);
  504. return icon_srcs.concat(image_srcs);
  505. }
  506. delegate: UM.ColorImage
  507. {
  508. source: modelData
  509. width: 30
  510. height: 30
  511. }
  512. }
  513. }
  514. Rectangle
  515. {
  516. visible: false
  517. anchors.fill: parent
  518. UM.I18nCatalog { id: catalog; name: "cura" }
  519. color: UM.Theme.getColor("main_background")
  520. Flickable
  521. {
  522. id: dialogSummaryItem
  523. width: parent.width
  524. height: parent.height
  525. clip: true
  526. contentHeight: contentColumn.height
  527. ScrollBar.vertical: UM.ScrollBar { id: scrollbar }
  528. ListModel
  529. {
  530. id: resolveStrategiesModel
  531. // Instead of directly adding the list elements, we add them afterwards.
  532. // This is because it's impossible to use setting function results to be bound to listElement properties directly.
  533. // See http://stackoverflow.com/questions/7659442/listelement-fields-as-properties
  534. Component.onCompleted:
  535. {
  536. append({"key": "override", "label": catalog.i18nc("@action:ComboBox Update/override existing profile", "Update existing")});
  537. append({"key": "new", "label": catalog.i18nc("@action:ComboBox Save settings in a new profile", "Create new")});
  538. }
  539. }
  540. Column
  541. {
  542. id: contentColumn
  543. width: parent.width - scrollbar.width - UM.Theme.getSize("default_margin").width
  544. height: childrenRect.height
  545. spacing: UM.Theme.getSize("default_margin").height
  546. leftPadding: UM.Theme.getSize("default_margin").width
  547. rightPadding: UM.Theme.getSize("default_margin").width
  548. WorkspaceSection
  549. {
  550. id: printerSection
  551. title: catalog.i18nc("@action:label", "Printer settings")
  552. iconSource: UM.Theme.getIcon("Printer")
  553. content: Column
  554. {
  555. spacing: UM.Theme.getSize("default_margin").height
  556. leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
  557. WorkspaceRow
  558. {
  559. leftLabelText: catalog.i18nc("@action:label", "Type")
  560. rightLabelText: manager.machineType
  561. }
  562. WorkspaceRow
  563. {
  564. leftLabelText: catalog.i18nc("@action:label", manager.isPrinterGroup ? "Printer Group" : "Printer Name")
  565. rightLabelText: manager.machineName == catalog.i18nc("@button", "Create new") ? "" : manager.machineName
  566. }
  567. }
  568. comboboxTitle: catalog.i18nc("@action:label", "Open With")
  569. comboboxTooltipText: catalog.i18nc("@info:tooltip", "Printer settings will be updated to match the settings saved with the project.")
  570. comboboxVisible: workspaceDialog.visible && manager.updatableMachinesModel.count > 1
  571. combobox: Cura.MachineSelector
  572. {
  573. id: machineSelector
  574. headerCornerSide: Cura.RoundedRectangle.Direction.All
  575. width: parent.width
  576. height: parent.height
  577. machineListModel: manager.updatableMachinesModel
  578. machineName: manager.machineName
  579. isConnectedCloudPrinter: false
  580. isCloudRegistered: false
  581. isNetworkPrinter: manager.isNetworked
  582. isGroup: manager.isAbstractMachine
  583. connectionStatus: ""
  584. minDropDownWidth: machineSelector.width
  585. buttons: [
  586. Cura.SecondaryButton
  587. {
  588. id: createNewPrinter
  589. text: catalog.i18nc("@button", "Create new")
  590. fixedWidthMode: true
  591. width: parent.width - leftPadding * 1.5
  592. onClicked:
  593. {
  594. toggleContent()
  595. manager.setResolveStrategy("machine", "new")
  596. machineSelector.machineName = catalog.i18nc("@button", "Create new")
  597. manager.setIsAbstractMachine(false)
  598. manager.setIsNetworkedMachine(false)
  599. }
  600. }
  601. ]
  602. onSelectPrinter: function(machine)
  603. {
  604. toggleContent();
  605. machineSelector.machineName = machine.name
  606. manager.setResolveStrategy("machine", "override")
  607. manager.setMachineToOverride(machine.id)
  608. manager.setIsAbstractMachine(machine.isAbstractMachine)
  609. manager.setIsNetworkedMachine(machine.isNetworked)
  610. }
  611. }
  612. }
  613. WorkspaceSection
  614. {
  615. id: profileSection
  616. title: catalog.i18nc("@action:label", "Profile settings")
  617. iconSource: UM.Theme.getIcon("Sliders")
  618. content: Column
  619. {
  620. id: profileSettingsValuesTable
  621. spacing: UM.Theme.getSize("default_margin").height
  622. leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
  623. WorkspaceRow
  624. {
  625. leftLabelText: catalog.i18nc("@action:label", "Name")
  626. rightLabelText: manager.qualityName
  627. }
  628. WorkspaceRow
  629. {
  630. leftLabelText: catalog.i18nc("@action:label", "Intent")
  631. rightLabelText: manager.intentName
  632. }
  633. WorkspaceRow
  634. {
  635. leftLabelText: catalog.i18nc("@action:label", "Not in profile")
  636. rightLabelText: catalog.i18ncp("@action:label", "%1 override", "%1 overrides", manager.numUserSettings).arg(manager.numUserSettings)
  637. visible: manager.numUserSettings != 0
  638. }
  639. WorkspaceRow
  640. {
  641. leftLabelText: catalog.i18nc("@action:label", "Derivative from")
  642. rightLabelText: catalog.i18ncp("@action:label", "%1, %2 override", "%1, %2 overrides", manager.numSettingsOverridenByQualityChanges).arg(manager.qualityType).arg(manager.numSettingsOverridenByQualityChanges)
  643. visible: manager.numSettingsOverridenByQualityChanges != 0
  644. }
  645. }
  646. comboboxVisible: manager.qualityChangesConflict
  647. combobox: Cura.ComboBox
  648. {
  649. id: qualityChangesResolveComboBox
  650. model: resolveStrategiesModel
  651. textRole: "label"
  652. visible: manager.qualityChangesConflict
  653. contentLeftPadding: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width
  654. textFont: UM.Theme.getFont("medium")
  655. background: Cura.RoundedRectangle
  656. {
  657. border.width: UM.Theme.getSize("default_lining").width
  658. border.color: UM.Theme.getColor("lining")
  659. color: qualityChangesResolveComboBox.hovered ? UM.Theme.getColor("expandable_hover") : UM.Theme.getColor("action_button")
  660. cornerSide: Cura.RoundedRectangle.Direction.All
  661. radius: UM.Theme.getSize("default_radius").width
  662. }
  663. // This is a hack. This will trigger onCurrentIndexChanged and set the index when this component in loaded
  664. currentIndex:
  665. {
  666. currentIndex = 0
  667. }
  668. onCurrentIndexChanged:
  669. {
  670. manager.setResolveStrategy("quality_changes", resolveStrategiesModel.get(currentIndex).key)
  671. }
  672. }
  673. }
  674. WorkspaceSection
  675. {
  676. id: materialSection
  677. title: catalog.i18nc("@action:label", "Material settings")
  678. iconSource: UM.Theme.getIcon("Spool")
  679. content: Column
  680. {
  681. spacing: UM.Theme.getSize("default_margin").height
  682. leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
  683. Repeater
  684. {
  685. model: manager.materialLabels
  686. delegate: WorkspaceRow
  687. {
  688. leftLabelText: catalog.i18nc("@action:label", "Name")
  689. rightLabelText: modelData
  690. }
  691. }
  692. }
  693. comboboxVisible: manager.materialConflict
  694. combobox: Cura.ComboBox
  695. {
  696. id: materialResolveComboBox
  697. model: resolveStrategiesModel
  698. textRole: "label"
  699. visible: manager.materialConflict
  700. contentLeftPadding: UM.Theme.getSize("default_margin").width + UM.Theme.getSize("narrow_margin").width
  701. textFont: UM.Theme.getFont("medium")
  702. background: Cura.RoundedRectangle
  703. {
  704. border.width: UM.Theme.getSize("default_lining").width
  705. border.color: UM.Theme.getColor("lining")
  706. color: materialResolveComboBox.hovered ? UM.Theme.getColor("expandable_hover") : UM.Theme.getColor("action_button")
  707. cornerSide: Cura.RoundedRectangle.Direction.All
  708. radius: UM.Theme.getSize("default_radius").width
  709. }
  710. // This is a hack. This will trigger onCurrentIndexChanged and set the index when this component in loaded
  711. currentIndex:
  712. {
  713. currentIndex = 0
  714. }
  715. onCurrentIndexChanged:
  716. {
  717. manager.setResolveStrategy("material", resolveStrategiesModel.get(currentIndex).key)
  718. }
  719. }
  720. }
  721. WorkspaceSection
  722. {
  723. id: visibilitySection
  724. title: catalog.i18nc("@action:label", "Setting visibility")
  725. iconSource: UM.Theme.getIcon("Eye")
  726. content: Column
  727. {
  728. spacing: UM.Theme.getSize("default_margin").height
  729. leftPadding: UM.Theme.getSize("medium_button_icon").width + UM.Theme.getSize("default_margin").width
  730. bottomPadding: UM.Theme.getSize("narrow_margin").height
  731. WorkspaceRow
  732. {
  733. leftLabelText: catalog.i18nc("@action:label", "Mode")
  734. rightLabelText: manager.activeMode
  735. }
  736. WorkspaceRow
  737. {
  738. leftLabelText: catalog.i18nc("@action:label", "%1 out of %2" ).arg(manager.numVisibleSettings).arg(manager.totalNumberOfSettings)
  739. rightLabelText: manager.activeMode
  740. visible: manager.hasVisibleSettingsField
  741. }
  742. }
  743. }
  744. Row
  745. {
  746. id: clearBuildPlateWarning
  747. width: parent.width
  748. height: childrenRect.height
  749. spacing: UM.Theme.getSize("default_margin").width
  750. visible: manager.hasObjectsOnPlate
  751. UM.ColorImage
  752. {
  753. width: warningLabel.height
  754. height: width
  755. source: UM.Theme.getIcon("Information")
  756. color: UM.Theme.getColor("text")
  757. }
  758. UM.Label
  759. {
  760. id: warningLabel
  761. text: catalog.i18nc("@action:warning", "Loading a project will clear all models on the build plate.")
  762. }
  763. }
  764. }
  765. }
  766. }
  767. property bool warning: manager.missingPackages.length > 0
  768. footerComponent: Rectangle
  769. {
  770. color: warning ? UM.Theme.getColor("warning") : "transparent"
  771. anchors.bottom: parent.bottom
  772. width: parent.width
  773. height: childrenRect.height + (warning ? 2 * workspaceDialog.margin : workspaceDialog.margin)
  774. Column
  775. {
  776. height: childrenRect.height
  777. spacing: workspaceDialog.margin
  778. anchors.leftMargin: workspaceDialog.margin
  779. anchors.rightMargin: workspaceDialog.margin
  780. anchors.bottomMargin: workspaceDialog.margin
  781. anchors.topMargin: warning ? workspaceDialog.margin : 0
  782. anchors.left: parent.left
  783. anchors.right: parent.right
  784. anchors.top: parent.top
  785. RowLayout
  786. {
  787. id: warningRow
  788. height: childrenRect.height
  789. visible: warning
  790. spacing: workspaceDialog.margin
  791. UM.ColorImage
  792. {
  793. width: UM.Theme.getSize("extruder_icon").width
  794. height: UM.Theme.getSize("extruder_icon").height
  795. source: UM.Theme.getIcon("Warning")
  796. }
  797. UM.Label
  798. {
  799. id: warningText
  800. text: catalog.i18nc("@label", "The material used in this project is currently not installed in Cura.<br/>Install the material profile and reopen the project.")
  801. }
  802. }
  803. Loader
  804. {
  805. width: parent.width
  806. height: childrenRect.height
  807. sourceComponent: buttonRow
  808. }
  809. }
  810. }
  811. buttonSpacing: UM.Theme.getSize("wide_margin").width
  812. rightButtons: [
  813. Cura.TertiaryButton
  814. {
  815. visible: !warning
  816. text: catalog.i18nc("@action:button", "Cancel")
  817. onClicked: reject()
  818. },
  819. Cura.PrimaryButton
  820. {
  821. visible: !warning
  822. text: catalog.i18nc("@action:button", "Open")
  823. onClicked: accept()
  824. },
  825. Cura.TertiaryButton
  826. {
  827. visible: warning
  828. text: catalog.i18nc("@action:button", "Open project anyway")
  829. onClicked: {
  830. manager.showMissingMaterialsWarning();
  831. accept();
  832. }
  833. },
  834. Cura.PrimaryButton
  835. {
  836. visible: warning
  837. text: catalog.i18nc("@action:button", "Install missing material")
  838. onClicked: manager.installMissingPackages()
  839. }
  840. ]
  841. onClosing: manager.notifyClosed()
  842. onRejected: manager.onCancelButtonClicked()
  843. onAccepted: manager.onOkButtonClicked()
  844. onVisibleChanged:
  845. {
  846. if (visible)
  847. {
  848. // Force relead the comboboxes
  849. // Since this dialog is only created once the first time you open it, these comboxes need to be reloaded
  850. // each time it is shown after the first time so that the indexes will update correctly.
  851. materialSection.reloadValues()
  852. profileSection.reloadValues()
  853. printerSection.reloadValues()
  854. }
  855. }
  856. }