GeneralPage.qml 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  1. // Copyright (c) 2018 Ultimaker B.V.
  2. // Cura is released under the terms of the LGPLv3 or higher.
  3. import QtQuick 2.1
  4. import QtQuick.Controls 1.1
  5. import QtQuick.Layouts 1.1
  6. import QtQuick.Controls.Styles 1.1
  7. import UM 1.1 as UM
  8. import Cura 1.0 as Cura
  9. UM.PreferencesPage
  10. {
  11. //: General configuration page title
  12. title: catalog.i18nc("@title:tab","General")
  13. id: generalPreferencesPage
  14. function setDefaultLanguage(languageCode)
  15. {
  16. //loops trough the languageList and sets the language using the languageCode
  17. for(var i = 0; i < languageList.count; i++)
  18. {
  19. if (languageComboBox.model.get(i).code == languageCode)
  20. {
  21. languageComboBox.currentIndex = i
  22. }
  23. }
  24. }
  25. function setDefaultTheme(defaultThemeCode)
  26. {
  27. for(var i = 0; i < themeList.count; i++)
  28. {
  29. if (themeComboBox.model.get(i).code == defaultThemeCode)
  30. {
  31. themeComboBox.currentIndex = i
  32. }
  33. }
  34. }
  35. function setDefaultDiscardOrKeepProfile(code)
  36. {
  37. for (var i = 0; i < choiceOnProfileOverrideDropDownButton.model.count; i++)
  38. {
  39. if (choiceOnProfileOverrideDropDownButton.model.get(i).code == code)
  40. {
  41. choiceOnProfileOverrideDropDownButton.currentIndex = i;
  42. break;
  43. }
  44. }
  45. }
  46. function setDefaultOpenProjectOption(code)
  47. {
  48. for (var i = 0; i < choiceOnOpenProjectDropDownButton.model.count; ++i)
  49. {
  50. if (choiceOnOpenProjectDropDownButton.model.get(i).code == code)
  51. {
  52. choiceOnOpenProjectDropDownButton.currentIndex = i
  53. break;
  54. }
  55. }
  56. }
  57. function reset()
  58. {
  59. UM.Preferences.resetPreference("general/language")
  60. var defaultLanguage = UM.Preferences.getValue("general/language")
  61. setDefaultLanguage(defaultLanguage)
  62. UM.Preferences.resetPreference("general/theme")
  63. var defaultTheme = UM.Preferences.getValue("general/theme")
  64. setDefaultTheme(defaultTheme)
  65. UM.Preferences.resetPreference("physics/automatic_push_free")
  66. pushFreeCheckbox.checked = boolCheck(UM.Preferences.getValue("physics/automatic_push_free"))
  67. UM.Preferences.resetPreference("physics/automatic_drop_down")
  68. dropDownCheckbox.checked = boolCheck(UM.Preferences.getValue("physics/automatic_drop_down"))
  69. UM.Preferences.resetPreference("mesh/scale_to_fit")
  70. scaleToFitCheckbox.checked = boolCheck(UM.Preferences.getValue("mesh/scale_to_fit"))
  71. UM.Preferences.resetPreference("mesh/scale_tiny_meshes")
  72. scaleTinyCheckbox.checked = boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes"))
  73. UM.Preferences.resetPreference("cura/select_models_on_load")
  74. selectModelsOnLoadCheckbox.checked = boolCheck(UM.Preferences.getValue("cura/select_models_on_load"))
  75. UM.Preferences.resetPreference("cura/jobname_prefix")
  76. prefixJobNameCheckbox.checked = boolCheck(UM.Preferences.getValue("cura/jobname_prefix"))
  77. UM.Preferences.resetPreference("view/show_overhang");
  78. showOverhangCheckbox.checked = boolCheck(UM.Preferences.getValue("view/show_overhang"))
  79. UM.Preferences.resetPreference("view/center_on_select");
  80. centerOnSelectCheckbox.checked = boolCheck(UM.Preferences.getValue("view/center_on_select"))
  81. UM.Preferences.resetPreference("view/invert_zoom");
  82. invertZoomCheckbox.checked = boolCheck(UM.Preferences.getValue("view/invert_zoom"))
  83. UM.Preferences.resetPreference("view/zoom_to_mouse");
  84. zoomToMouseCheckbox.checked = boolCheck(UM.Preferences.getValue("view/zoom_to_mouse"))
  85. UM.Preferences.resetPreference("view/top_layer_count");
  86. topLayerCountCheckbox.checked = boolCheck(UM.Preferences.getValue("view/top_layer_count"))
  87. UM.Preferences.resetPreference("cura/choice_on_profile_override")
  88. setDefaultDiscardOrKeepProfile(UM.Preferences.getValue("cura/choice_on_profile_override"))
  89. UM.Preferences.resetPreference("cura/choice_on_open_project")
  90. setDefaultOpenProjectOption(UM.Preferences.getValue("cura/choice_on_open_project"))
  91. UM.Preferences.resetPreference("info/send_slice_info")
  92. sendDataCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_slice_info"))
  93. UM.Preferences.resetPreference("info/automatic_update_check")
  94. checkUpdatesCheckbox.checked = boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
  95. }
  96. ScrollView
  97. {
  98. width: parent.width
  99. height: parent.height
  100. flickableItem.flickableDirection: Flickable.VerticalFlick;
  101. Column
  102. {
  103. //: Language selection label
  104. UM.I18nCatalog{id: catalog; name: "cura"}
  105. Label
  106. {
  107. font.bold: true
  108. text: catalog.i18nc("@label","Interface")
  109. }
  110. GridLayout
  111. {
  112. id: interfaceGrid
  113. columns: 4
  114. Label
  115. {
  116. id: languageLabel
  117. text: catalog.i18nc("@label","Language:")
  118. }
  119. ComboBox
  120. {
  121. id: languageComboBox
  122. model: ListModel
  123. {
  124. id: languageList
  125. Component.onCompleted: {
  126. append({ text: "English", code: "en_US" })
  127. append({ text: "Deutsch", code: "de_DE" })
  128. append({ text: "Español", code: "es_ES" })
  129. //Finnish is disabled for being incomplete: append({ text: "Suomi", code: "fi_FI" })
  130. append({ text: "Français", code: "fr_FR" })
  131. append({ text: "Italiano", code: "it_IT" })
  132. append({ text: "日本語", code: "ja_JP" })
  133. append({ text: "한국어", code: "ko_KR" })
  134. append({ text: "Nederlands", code: "nl_NL" })
  135. //Polish is disabled for being incomplete: append({ text: "Polski", code: "pl_PL" })
  136. append({ text: "Português do Brasil", code: "pt_BR" })
  137. append({ text: "Português", code: "pt_PT" })
  138. append({ text: "Русский", code: "ru_RU" })
  139. append({ text: "Türkçe", code: "tr_TR" })
  140. append({ text: "简体中文", code: "zh_CN" })
  141. append({ text: "正體字", code: "zh_TW" })
  142. var date_object = new Date();
  143. if (date_object.getUTCMonth() == 8 && date_object.getUTCDate() == 19) //Only add Pirate on the 19th of September.
  144. {
  145. append({ text: "Pirate", code: "en_7S" })
  146. }
  147. }
  148. }
  149. currentIndex:
  150. {
  151. var code = UM.Preferences.getValue("general/language");
  152. for(var i = 0; i < languageList.count; ++i)
  153. {
  154. if(model.get(i).code == code)
  155. {
  156. return i
  157. }
  158. }
  159. }
  160. onActivated: UM.Preferences.setValue("general/language", model.get(index).code)
  161. Component.onCompleted:
  162. {
  163. // Because ListModel is stupid and does not allow using qsTr() for values.
  164. for(var i = 0; i < languageList.count; ++i)
  165. {
  166. languageList.setProperty(i, "text", catalog.i18n(languageList.get(i).text));
  167. }
  168. // Glorious hack time. ComboBox does not update the text properly after changing the
  169. // model. So change the indices around to force it to update.
  170. currentIndex += 1;
  171. currentIndex -= 1;
  172. }
  173. }
  174. Label
  175. {
  176. id: currencyLabel
  177. text: catalog.i18nc("@label","Currency:")
  178. }
  179. TextField
  180. {
  181. id: currencyField
  182. text: UM.Preferences.getValue("cura/currency")
  183. onTextChanged: UM.Preferences.setValue("cura/currency", text)
  184. }
  185. Label
  186. {
  187. id: themeLabel
  188. text: catalog.i18nc("@label","Theme:")
  189. }
  190. ComboBox
  191. {
  192. id: themeComboBox
  193. model: ListModel
  194. {
  195. id: themeList
  196. Component.onCompleted: {
  197. var themes = UM.Theme.getThemes()
  198. for (var i = 0; i < themes.length; i++)
  199. {
  200. append({ text: themes[i].name.toString(), code: themes[i].id.toString() });
  201. }
  202. }
  203. }
  204. currentIndex:
  205. {
  206. var code = UM.Preferences.getValue("general/theme");
  207. for(var i = 0; i < themeList.count; ++i)
  208. {
  209. if(model.get(i).code == code)
  210. {
  211. return i
  212. }
  213. }
  214. return 0;
  215. }
  216. onActivated: UM.Preferences.setValue("general/theme", model.get(index).code)
  217. Component.onCompleted:
  218. {
  219. // Because ListModel is stupid and does not allow using qsTr() for values.
  220. for(var i = 0; i < themeList.count; ++i)
  221. {
  222. themeList.setProperty(i, "text", catalog.i18n(themeList.get(i).text));
  223. }
  224. // Glorious hack time. ComboBox does not update the text properly after changing the
  225. // model. So change the indices around to force it to update.
  226. currentIndex += 1;
  227. currentIndex -= 1;
  228. }
  229. }
  230. }
  231. Label
  232. {
  233. id: languageCaption
  234. //: Language change warning
  235. text: catalog.i18nc("@label", "You will need to restart the application for these changes to have effect.")
  236. wrapMode: Text.WordWrap
  237. font.italic: true
  238. }
  239. Item
  240. {
  241. //: Spacer
  242. height: UM.Theme.getSize("default_margin").height
  243. width: UM.Theme.getSize("default_margin").width
  244. }
  245. UM.TooltipArea
  246. {
  247. width: childrenRect.width;
  248. height: childrenRect.height;
  249. text: catalog.i18nc("@info:tooltip", "Slice automatically when changing settings.")
  250. CheckBox
  251. {
  252. id: autoSliceCheckbox
  253. checked: boolCheck(UM.Preferences.getValue("general/auto_slice"))
  254. onClicked: UM.Preferences.setValue("general/auto_slice", checked)
  255. text: catalog.i18nc("@option:check", "Slice automatically");
  256. }
  257. }
  258. Item
  259. {
  260. //: Spacer
  261. height: UM.Theme.getSize("default_margin").height
  262. width: UM.Theme.getSize("default_margin").width
  263. }
  264. Label
  265. {
  266. font.bold: true
  267. text: catalog.i18nc("@label", "Viewport behavior")
  268. }
  269. UM.TooltipArea
  270. {
  271. width: childrenRect.width;
  272. height: childrenRect.height;
  273. text: catalog.i18nc("@info:tooltip", "Highlight unsupported areas of the model in red. Without support these areas will not print properly.")
  274. CheckBox
  275. {
  276. id: showOverhangCheckbox
  277. checked: boolCheck(UM.Preferences.getValue("view/show_overhang"))
  278. onClicked: UM.Preferences.setValue("view/show_overhang", checked)
  279. text: catalog.i18nc("@option:check", "Display overhang");
  280. }
  281. }
  282. UM.TooltipArea {
  283. width: childrenRect.width;
  284. height: childrenRect.height;
  285. text: catalog.i18nc("@info:tooltip", "Moves the camera so the model is in the center of the view when a model is selected")
  286. CheckBox
  287. {
  288. id: centerOnSelectCheckbox
  289. text: catalog.i18nc("@action:button","Center camera when item is selected");
  290. checked: boolCheck(UM.Preferences.getValue("view/center_on_select"))
  291. onClicked: UM.Preferences.setValue("view/center_on_select", checked)
  292. }
  293. }
  294. UM.TooltipArea {
  295. width: childrenRect.width;
  296. height: childrenRect.height;
  297. text: catalog.i18nc("@info:tooltip", "Should the default zoom behavior of cura be inverted?")
  298. CheckBox
  299. {
  300. id: invertZoomCheckbox
  301. text: catalog.i18nc("@action:button", "Invert the direction of camera zoom.");
  302. checked: boolCheck(UM.Preferences.getValue("view/invert_zoom"))
  303. onClicked: UM.Preferences.setValue("view/invert_zoom", checked)
  304. }
  305. }
  306. UM.TooltipArea
  307. {
  308. width: childrenRect.width;
  309. height: childrenRect.height;
  310. text: catalog.i18nc("@info:tooltip", "Should zooming move in the direction of the mouse?")
  311. CheckBox
  312. {
  313. id: zoomToMouseCheckbox
  314. text: catalog.i18nc("@action:button", "Zoom toward mouse direction");
  315. checked: boolCheck(UM.Preferences.getValue("view/zoom_to_mouse"))
  316. onClicked: UM.Preferences.setValue("view/zoom_to_mouse", checked)
  317. }
  318. }
  319. UM.TooltipArea
  320. {
  321. width: childrenRect.width
  322. height: childrenRect.height
  323. text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved so that they no longer intersect?")
  324. CheckBox
  325. {
  326. id: pushFreeCheckbox
  327. text: catalog.i18nc("@option:check", "Ensure models are kept apart")
  328. checked: boolCheck(UM.Preferences.getValue("physics/automatic_push_free"))
  329. onCheckedChanged: UM.Preferences.setValue("physics/automatic_push_free", checked)
  330. }
  331. }
  332. UM.TooltipArea
  333. {
  334. width: childrenRect.width
  335. height: childrenRect.height
  336. text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved down to touch the build plate?")
  337. CheckBox
  338. {
  339. id: dropDownCheckbox
  340. text: catalog.i18nc("@option:check", "Automatically drop models to the build plate")
  341. checked: boolCheck(UM.Preferences.getValue("physics/automatic_drop_down"))
  342. onCheckedChanged: UM.Preferences.setValue("physics/automatic_drop_down", checked)
  343. }
  344. }
  345. UM.TooltipArea
  346. {
  347. width: childrenRect.width;
  348. height: childrenRect.height;
  349. text: catalog.i18nc("@info:tooltip","Show caution message in g-code reader.")
  350. CheckBox
  351. {
  352. id: gcodeShowCautionCheckbox
  353. checked: boolCheck(UM.Preferences.getValue("gcodereader/show_caution"))
  354. onClicked: UM.Preferences.setValue("gcodereader/show_caution", checked)
  355. text: catalog.i18nc("@option:check","Caution message in g-code reader");
  356. }
  357. }
  358. UM.TooltipArea
  359. {
  360. width: childrenRect.width
  361. height: childrenRect.height
  362. text: catalog.i18nc("@info:tooltip", "Should layer be forced into compatibility mode?")
  363. CheckBox
  364. {
  365. id: forceLayerViewCompatibilityModeCheckbox
  366. text: catalog.i18nc("@option:check", "Force layer view compatibility mode (restart required)")
  367. checked: boolCheck(UM.Preferences.getValue("view/force_layer_view_compatibility_mode"))
  368. onCheckedChanged: UM.Preferences.setValue("view/force_layer_view_compatibility_mode", checked)
  369. }
  370. }
  371. Item
  372. {
  373. //: Spacer
  374. height: UM.Theme.getSize("default_margin").height
  375. width: UM.Theme.getSize("default_margin").height
  376. }
  377. Label
  378. {
  379. font.bold: true
  380. text: catalog.i18nc("@label","Opening and saving files")
  381. }
  382. UM.TooltipArea
  383. {
  384. width: childrenRect.width
  385. height: childrenRect.height
  386. text: catalog.i18nc("@info:tooltip","Should models be scaled to the build volume if they are too large?")
  387. CheckBox
  388. {
  389. id: scaleToFitCheckbox
  390. text: catalog.i18nc("@option:check","Scale large models")
  391. checked: boolCheck(UM.Preferences.getValue("mesh/scale_to_fit"))
  392. onCheckedChanged: UM.Preferences.setValue("mesh/scale_to_fit", checked)
  393. }
  394. }
  395. UM.TooltipArea
  396. {
  397. width: childrenRect.width
  398. height: childrenRect.height
  399. text: catalog.i18nc("@info:tooltip","An model may appear extremely small if its unit is for example in meters rather than millimeters. Should these models be scaled up?")
  400. CheckBox
  401. {
  402. id: scaleTinyCheckbox
  403. text: catalog.i18nc("@option:check","Scale extremely small models")
  404. checked: boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes"))
  405. onCheckedChanged: UM.Preferences.setValue("mesh/scale_tiny_meshes", checked)
  406. }
  407. }
  408. UM.TooltipArea
  409. {
  410. width: childrenRect.width
  411. height: childrenRect.height
  412. text: catalog.i18nc("@info:tooltip","Should models be selected after they are loaded?")
  413. CheckBox
  414. {
  415. id: selectModelsOnLoadCheckbox
  416. text: catalog.i18nc("@option:check","Select models when loaded")
  417. checked: boolCheck(UM.Preferences.getValue("cura/select_models_on_load"))
  418. onCheckedChanged: UM.Preferences.setValue("cura/select_models_on_load", checked)
  419. }
  420. }
  421. UM.TooltipArea
  422. {
  423. width: childrenRect.width
  424. height: childrenRect.height
  425. text: catalog.i18nc("@info:tooltip", "Should a prefix based on the printer name be added to the print job name automatically?")
  426. CheckBox
  427. {
  428. id: prefixJobNameCheckbox
  429. text: catalog.i18nc("@option:check", "Add machine prefix to job name")
  430. checked: boolCheck(UM.Preferences.getValue("cura/jobname_prefix"))
  431. onCheckedChanged: UM.Preferences.setValue("cura/jobname_prefix", checked)
  432. }
  433. }
  434. UM.TooltipArea
  435. {
  436. width: childrenRect.width
  437. height: childrenRect.height
  438. text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a project file?")
  439. CheckBox
  440. {
  441. text: catalog.i18nc("@option:check", "Show summary dialog when saving project")
  442. checked: boolCheck(UM.Preferences.getValue("cura/dialog_on_project_save"))
  443. onCheckedChanged: UM.Preferences.setValue("cura/dialog_on_project_save", checked)
  444. }
  445. }
  446. UM.TooltipArea
  447. {
  448. width: childrenRect.width
  449. height: childrenRect.height
  450. text: catalog.i18nc("@info:tooltip", "Default behavior when opening a project file")
  451. Column
  452. {
  453. spacing: 4 * screenScaleFactor
  454. Label
  455. {
  456. text: catalog.i18nc("@window:text", "Default behavior when opening a project file: ")
  457. }
  458. ComboBox
  459. {
  460. id: choiceOnOpenProjectDropDownButton
  461. width: 200 * screenScaleFactor
  462. model: ListModel
  463. {
  464. id: openProjectOptionModel
  465. Component.onCompleted:
  466. {
  467. append({ text: catalog.i18nc("@option:openProject", "Always ask me this"), code: "always_ask" })
  468. append({ text: catalog.i18nc("@option:openProject", "Always open as a project"), code: "open_as_project" })
  469. append({ text: catalog.i18nc("@option:openProject", "Always import models"), code: "open_as_model" })
  470. }
  471. }
  472. currentIndex:
  473. {
  474. var index = 0;
  475. var currentChoice = UM.Preferences.getValue("cura/choice_on_open_project");
  476. for (var i = 0; i < model.count; ++i)
  477. {
  478. if (model.get(i).code == currentChoice)
  479. {
  480. index = i;
  481. break;
  482. }
  483. }
  484. return index;
  485. }
  486. onActivated: UM.Preferences.setValue("cura/choice_on_open_project", model.get(index).code)
  487. }
  488. }
  489. }
  490. Item
  491. {
  492. //: Spacer
  493. height: UM.Theme.getSize("default_margin").height
  494. width: UM.Theme.getSize("default_margin").width
  495. }
  496. UM.TooltipArea
  497. {
  498. width: childrenRect.width;
  499. height: childrenRect.height;
  500. text: catalog.i18nc("@info:tooltip", "When you have made changes to a profile and switched to a different one, a dialog will be shown asking whether you want to keep your modifications or not, or you can choose a default behaviour and never show that dialog again.")
  501. Column
  502. {
  503. spacing: 4 * screenScaleFactor
  504. Label
  505. {
  506. font.bold: true
  507. text: catalog.i18nc("@label", "Profiles")
  508. }
  509. Label
  510. {
  511. text: catalog.i18nc("@window:text", "Default behavior for changed setting values when switching to a different profile: ")
  512. }
  513. ComboBox
  514. {
  515. id: choiceOnProfileOverrideDropDownButton
  516. width: 200 * screenScaleFactor
  517. model: ListModel
  518. {
  519. id: discardOrKeepProfileListModel
  520. Component.onCompleted:
  521. {
  522. append({ text: catalog.i18nc("@option:discardOrKeep", "Always ask me this"), code: "always_ask" })
  523. append({ text: catalog.i18nc("@option:discardOrKeep", "Always discard changed settings"), code: "always_discard" })
  524. append({ text: catalog.i18nc("@option:discardOrKeep", "Always transfer changed settings to new profile"), code: "always_keep" })
  525. }
  526. }
  527. currentIndex:
  528. {
  529. var index = 0;
  530. var code = UM.Preferences.getValue("cura/choice_on_profile_override");
  531. for (var i = 0; i < model.count; ++i)
  532. {
  533. if (model.get(i).code == code)
  534. {
  535. index = i;
  536. break;
  537. }
  538. }
  539. return index;
  540. }
  541. onActivated: UM.Preferences.setValue("cura/choice_on_profile_override", model.get(index).code)
  542. }
  543. }
  544. }
  545. Item
  546. {
  547. //: Spacer
  548. height: UM.Theme.getSize("default_margin").height
  549. width: UM.Theme.getSize("default_margin").height
  550. }
  551. Label
  552. {
  553. font.bold: true
  554. visible: checkUpdatesCheckbox.visible || sendDataCheckbox.visible
  555. text: catalog.i18nc("@label","Privacy")
  556. }
  557. UM.TooltipArea
  558. {
  559. width: childrenRect.width
  560. height: visible ? childrenRect.height : 0
  561. text: catalog.i18nc("@info:tooltip","Should Cura check for updates when the program is started?")
  562. CheckBox
  563. {
  564. id: checkUpdatesCheckbox
  565. text: catalog.i18nc("@option:check","Check for updates on start")
  566. checked: boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
  567. onCheckedChanged: UM.Preferences.setValue("info/automatic_update_check", checked)
  568. }
  569. }
  570. UM.TooltipArea
  571. {
  572. width: childrenRect.width
  573. height: visible ? childrenRect.height : 0
  574. text: catalog.i18nc("@info:tooltip","Should anonymous data about your print be sent to Ultimaker? Note, no models, IP addresses or other personally identifiable information is sent or stored.")
  575. CheckBox
  576. {
  577. id: sendDataCheckbox
  578. text: catalog.i18nc("@option:check","Send (anonymous) print information")
  579. checked: boolCheck(UM.Preferences.getValue("info/send_slice_info"))
  580. onCheckedChanged: UM.Preferences.setValue("info/send_slice_info", checked)
  581. }
  582. Button
  583. {
  584. id: showMoreInfo
  585. anchors.top: sendDataCheckbox.bottom
  586. text: catalog.i18nc("@action:button", "More information")
  587. onClicked:
  588. {
  589. CuraApplication.showMoreInformationDialogForAnonymousDataCollection();
  590. }
  591. }
  592. }
  593. Item
  594. {
  595. //: Spacer
  596. height: UM.Theme.getSize("default_margin").height
  597. width: UM.Theme.getSize("default_margin").height
  598. }
  599. Label
  600. {
  601. font.bold: true
  602. text: catalog.i18nc("@label","Experimental")
  603. }
  604. UM.TooltipArea
  605. {
  606. width: childrenRect.width
  607. height: childrenRect.height
  608. text: catalog.i18nc("@info:tooltip","Use multi build plate functionality")
  609. CheckBox
  610. {
  611. id: useMultiBuildPlateCheckbox
  612. text: catalog.i18nc("@option:check","Use multi build plate functionality (restart required)")
  613. checked: boolCheck(UM.Preferences.getValue("cura/use_multi_build_plate"))
  614. onCheckedChanged: UM.Preferences.setValue("cura/use_multi_build_plate", checked)
  615. }
  616. }
  617. Connections
  618. {
  619. target: UM.Preferences
  620. onPreferenceChanged:
  621. {
  622. if (preference !== "info/send_slice_info")
  623. {
  624. return;
  625. }
  626. sendDataCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_slice_info"))
  627. }
  628. }
  629. }
  630. }
  631. }