GeneralPage.qml 30 KB

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