GeneralPage.qml 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759
  1. // Copyright (c) 2017 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. function setDefaultLanguage(languageCode)
  14. {
  15. //loops trough the languageList and sets the language using the languageCode
  16. for(var i = 0; i < languageList.count; i++)
  17. {
  18. if (languageComboBox.model.get(i).code == languageCode)
  19. {
  20. languageComboBox.currentIndex = i
  21. }
  22. }
  23. }
  24. function setDefaultTheme(defaultThemeCode)
  25. {
  26. for(var i = 0; i < themeList.count; i++)
  27. {
  28. if (themeComboBox.model.get(i).code == defaultThemeCode)
  29. {
  30. themeComboBox.currentIndex = i
  31. }
  32. }
  33. }
  34. function setDefaultDiscardOrKeepProfile(code)
  35. {
  36. for (var i = 0; i < choiceOnProfileOverrideDropDownButton.model.count; i++)
  37. {
  38. if (choiceOnProfileOverrideDropDownButton.model.get(i).code == code)
  39. {
  40. choiceOnProfileOverrideDropDownButton.currentIndex = i;
  41. break;
  42. }
  43. }
  44. }
  45. function setDefaultOpenProjectOption(code)
  46. {
  47. for (var i = 0; i < choiceOnOpenProjectDropDownButton.model.count; ++i)
  48. {
  49. if (choiceOnOpenProjectDropDownButton.model.get(i).code == code)
  50. {
  51. choiceOnOpenProjectDropDownButton.currentIndex = i
  52. break;
  53. }
  54. }
  55. }
  56. function reset()
  57. {
  58. UM.Preferences.resetPreference("general/language")
  59. var defaultLanguage = UM.Preferences.getValue("general/language")
  60. setDefaultLanguage(defaultLanguage)
  61. UM.Preferences.resetPreference("general/theme")
  62. var defaultTheme = UM.Preferences.getValue("general/theme")
  63. setDefaultTheme(defaultTheme)
  64. UM.Preferences.resetPreference("physics/automatic_push_free")
  65. pushFreeCheckbox.checked = boolCheck(UM.Preferences.getValue("physics/automatic_push_free"))
  66. UM.Preferences.resetPreference("physics/automatic_drop_down")
  67. dropDownCheckbox.checked = boolCheck(UM.Preferences.getValue("physics/automatic_drop_down"))
  68. UM.Preferences.resetPreference("mesh/scale_to_fit")
  69. scaleToFitCheckbox.checked = boolCheck(UM.Preferences.getValue("mesh/scale_to_fit"))
  70. UM.Preferences.resetPreference("mesh/scale_tiny_meshes")
  71. scaleTinyCheckbox.checked = boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes"))
  72. UM.Preferences.resetPreference("cura/select_models_on_load")
  73. selectModelsOnLoadCheckbox.checked = boolCheck(UM.Preferences.getValue("cura/select_models_on_load"))
  74. UM.Preferences.resetPreference("cura/jobname_prefix")
  75. prefixJobNameCheckbox.checked = boolCheck(UM.Preferences.getValue("cura/jobname_prefix"))
  76. UM.Preferences.resetPreference("view/show_overhang");
  77. showOverhangCheckbox.checked = boolCheck(UM.Preferences.getValue("view/show_overhang"))
  78. UM.Preferences.resetPreference("view/center_on_select");
  79. centerOnSelectCheckbox.checked = boolCheck(UM.Preferences.getValue("view/center_on_select"))
  80. UM.Preferences.resetPreference("view/invert_zoom");
  81. invertZoomCheckbox.checked = boolCheck(UM.Preferences.getValue("view/invert_zoom"))
  82. UM.Preferences.resetPreference("view/zoom_to_mouse");
  83. zoomToMouseCheckbox.checked = boolCheck(UM.Preferences.getValue("view/zoom_to_mouse"))
  84. UM.Preferences.resetPreference("view/top_layer_count");
  85. topLayerCountCheckbox.checked = boolCheck(UM.Preferences.getValue("view/top_layer_count"))
  86. UM.Preferences.resetPreference("cura/choice_on_profile_override")
  87. setDefaultDiscardOrKeepProfile(UM.Preferences.getValue("cura/choice_on_profile_override"))
  88. UM.Preferences.resetPreference("cura/choice_on_open_project")
  89. setDefaultOpenProjectOption(UM.Preferences.getValue("cura/choice_on_open_project"))
  90. if (pluginExistsAndEnabled("SliceInfoPlugin")) {
  91. UM.Preferences.resetPreference("info/send_slice_info")
  92. sendDataCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_slice_info"))
  93. }
  94. if (pluginExistsAndEnabled("UpdateChecker")) {
  95. UM.Preferences.resetPreference("info/automatic_update_check")
  96. checkUpdatesCheckbox.checked = boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
  97. }
  98. }
  99. function pluginExistsAndEnabled(pluginName)
  100. {
  101. var pluginItem = plugins.find("id", pluginName)
  102. if (pluginItem > -1)
  103. {
  104. return plugins.getItem(pluginItem).enabled
  105. }
  106. return false
  107. }
  108. ScrollView
  109. {
  110. width: parent.width
  111. height: parent.height
  112. flickableItem.flickableDirection: Flickable.VerticalFlick;
  113. Column
  114. {
  115. //: Model used to check if a plugin exists
  116. UM.PluginsModel { id: plugins }
  117. //: Language selection label
  118. UM.I18nCatalog{id: catalog; name:"cura"}
  119. Label
  120. {
  121. font.bold: true
  122. text: catalog.i18nc("@label","Interface")
  123. }
  124. GridLayout
  125. {
  126. id: interfaceGrid
  127. columns: 4
  128. Label
  129. {
  130. id: languageLabel
  131. text: catalog.i18nc("@label","Language:")
  132. anchors.verticalCenter: languageComboBox.verticalCenter
  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. 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. anchors.verticalCenter: currencyField.verticalCenter
  194. }
  195. TextField
  196. {
  197. id: currencyField
  198. text: UM.Preferences.getValue("cura/currency")
  199. onTextChanged: UM.Preferences.setValue("cura/currency", text)
  200. }
  201. Label
  202. {
  203. id: themeLabel
  204. text: catalog.i18nc("@label","Theme:")
  205. anchors.verticalCenter: themeComboBox.verticalCenter
  206. }
  207. ComboBox
  208. {
  209. id: themeComboBox
  210. model: ListModel
  211. {
  212. id: themeList
  213. Component.onCompleted: {
  214. var themes = UM.Theme.getThemes()
  215. for (var i = 0; i < themes.length; i++)
  216. {
  217. append({ text: themes[i].name.toString(), code: themes[i].id.toString() });
  218. }
  219. }
  220. }
  221. currentIndex:
  222. {
  223. var code = UM.Preferences.getValue("general/theme");
  224. for(var i = 0; i < themeList.count; ++i)
  225. {
  226. if(model.get(i).code == code)
  227. {
  228. return i
  229. }
  230. }
  231. return 0;
  232. }
  233. onActivated: UM.Preferences.setValue("general/theme", model.get(index).code)
  234. Component.onCompleted:
  235. {
  236. // Because ListModel is stupid and does not allow using qsTr() for values.
  237. for(var i = 0; i < themeList.count; ++i)
  238. {
  239. themeList.setProperty(i, "text", catalog.i18n(themeList.get(i).text));
  240. }
  241. // Glorious hack time. ComboBox does not update the text properly after changing the
  242. // model. So change the indices around to force it to update.
  243. currentIndex += 1;
  244. currentIndex -= 1;
  245. }
  246. }
  247. }
  248. Label
  249. {
  250. id: languageCaption
  251. //: Language change warning
  252. text: catalog.i18nc("@label", "You will need to restart the application for these changes to have effect.")
  253. wrapMode: Text.WordWrap
  254. font.italic: true
  255. }
  256. Item
  257. {
  258. //: Spacer
  259. height: UM.Theme.getSize("default_margin").height
  260. width: UM.Theme.getSize("default_margin").width
  261. }
  262. UM.TooltipArea
  263. {
  264. width: childrenRect.width;
  265. height: childrenRect.height;
  266. text: catalog.i18nc("@info:tooltip","Slice automatically when changing settings.")
  267. CheckBox
  268. {
  269. id: autoSliceCheckbox
  270. checked: boolCheck(UM.Preferences.getValue("general/auto_slice"))
  271. onClicked: UM.Preferences.setValue("general/auto_slice", checked)
  272. text: catalog.i18nc("@option:check","Slice automatically");
  273. }
  274. }
  275. Item
  276. {
  277. //: Spacer
  278. height: UM.Theme.getSize("default_margin").height
  279. width: UM.Theme.getSize("default_margin").width
  280. }
  281. Label
  282. {
  283. font.bold: true
  284. text: catalog.i18nc("@label","Viewport behavior")
  285. }
  286. UM.TooltipArea
  287. {
  288. width: childrenRect.width;
  289. height: childrenRect.height;
  290. text: catalog.i18nc("@info:tooltip","Highlight unsupported areas of the model in red. Without support these areas will not print properly.")
  291. CheckBox
  292. {
  293. id: showOverhangCheckbox
  294. checked: boolCheck(UM.Preferences.getValue("view/show_overhang"))
  295. onClicked: UM.Preferences.setValue("view/show_overhang", checked)
  296. text: catalog.i18nc("@option:check","Display overhang");
  297. }
  298. }
  299. UM.TooltipArea {
  300. width: childrenRect.width;
  301. height: childrenRect.height;
  302. text: catalog.i18nc("@info:tooltip","Moves the camera so the model is in the center of the view when a model is selected")
  303. CheckBox
  304. {
  305. id: centerOnSelectCheckbox
  306. text: catalog.i18nc("@action:button","Center camera when item is selected");
  307. checked: boolCheck(UM.Preferences.getValue("view/center_on_select"))
  308. onClicked: UM.Preferences.setValue("view/center_on_select", checked)
  309. }
  310. }
  311. UM.TooltipArea {
  312. width: childrenRect.width;
  313. height: childrenRect.height;
  314. text: catalog.i18nc("@info:tooltip","Should the default zoom behavior of cura be inverted?")
  315. CheckBox
  316. {
  317. id: invertZoomCheckbox
  318. text: catalog.i18nc("@action:button","Invert the direction of camera zoom.");
  319. checked: boolCheck(UM.Preferences.getValue("view/invert_zoom"))
  320. onClicked: UM.Preferences.setValue("view/invert_zoom", checked)
  321. }
  322. }
  323. UM.TooltipArea
  324. {
  325. width: childrenRect.width;
  326. height: childrenRect.height;
  327. text: catalog.i18nc("@info:tooltip", "Should zooming move in the direction of the mouse?")
  328. CheckBox
  329. {
  330. id: zoomToMouseCheckbox
  331. text: catalog.i18nc("@action:button", "Zoom toward mouse direction");
  332. checked: boolCheck(UM.Preferences.getValue("view/zoom_to_mouse"))
  333. onClicked: UM.Preferences.setValue("view/zoom_to_mouse", checked)
  334. }
  335. }
  336. UM.TooltipArea
  337. {
  338. width: childrenRect.width
  339. height: childrenRect.height
  340. text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved so that they no longer intersect?")
  341. CheckBox
  342. {
  343. id: pushFreeCheckbox
  344. text: catalog.i18nc("@option:check", "Ensure models are kept apart")
  345. checked: boolCheck(UM.Preferences.getValue("physics/automatic_push_free"))
  346. onCheckedChanged: UM.Preferences.setValue("physics/automatic_push_free", checked)
  347. }
  348. }
  349. UM.TooltipArea
  350. {
  351. width: childrenRect.width
  352. height: childrenRect.height
  353. text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved down to touch the build plate?")
  354. CheckBox
  355. {
  356. id: dropDownCheckbox
  357. text: catalog.i18nc("@option:check", "Automatically drop models to the build plate")
  358. checked: boolCheck(UM.Preferences.getValue("physics/automatic_drop_down"))
  359. onCheckedChanged: UM.Preferences.setValue("physics/automatic_drop_down", checked)
  360. }
  361. }
  362. UM.TooltipArea
  363. {
  364. width: childrenRect.width;
  365. height: childrenRect.height;
  366. text: catalog.i18nc("@info:tooltip","Show caution message in g-code reader.")
  367. CheckBox
  368. {
  369. id: gcodeShowCautionCheckbox
  370. checked: boolCheck(UM.Preferences.getValue("gcodereader/show_caution"))
  371. onClicked: UM.Preferences.setValue("gcodereader/show_caution", checked)
  372. text: catalog.i18nc("@option:check","Caution message in g-code reader");
  373. }
  374. }
  375. UM.TooltipArea
  376. {
  377. width: childrenRect.width
  378. height: childrenRect.height
  379. text: catalog.i18nc("@info:tooltip", "Should layer be forced into compatibility mode?")
  380. CheckBox
  381. {
  382. id: forceLayerViewCompatibilityModeCheckbox
  383. text: catalog.i18nc("@option:check", "Force layer view compatibility mode (restart required)")
  384. checked: boolCheck(UM.Preferences.getValue("view/force_layer_view_compatibility_mode"))
  385. onCheckedChanged: UM.Preferences.setValue("view/force_layer_view_compatibility_mode", checked)
  386. }
  387. }
  388. Item
  389. {
  390. //: Spacer
  391. height: UM.Theme.getSize("default_margin").height
  392. width: UM.Theme.getSize("default_margin").height
  393. }
  394. Label
  395. {
  396. font.bold: true
  397. text: catalog.i18nc("@label","Opening and saving files")
  398. }
  399. UM.TooltipArea
  400. {
  401. width: childrenRect.width
  402. height: childrenRect.height
  403. text: catalog.i18nc("@info:tooltip","Should models be scaled to the build volume if they are too large?")
  404. CheckBox
  405. {
  406. id: scaleToFitCheckbox
  407. text: catalog.i18nc("@option:check","Scale large models")
  408. checked: boolCheck(UM.Preferences.getValue("mesh/scale_to_fit"))
  409. onCheckedChanged: UM.Preferences.setValue("mesh/scale_to_fit", checked)
  410. }
  411. }
  412. UM.TooltipArea
  413. {
  414. width: childrenRect.width
  415. height: childrenRect.height
  416. 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?")
  417. CheckBox
  418. {
  419. id: scaleTinyCheckbox
  420. text: catalog.i18nc("@option:check","Scale extremely small models")
  421. checked: boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes"))
  422. onCheckedChanged: UM.Preferences.setValue("mesh/scale_tiny_meshes", checked)
  423. }
  424. }
  425. UM.TooltipArea
  426. {
  427. width: childrenRect.width
  428. height: childrenRect.height
  429. text: catalog.i18nc("@info:tooltip","Should models be selected after they are loaded?")
  430. CheckBox
  431. {
  432. id: selectModelsOnLoadCheckbox
  433. text: catalog.i18nc("@option:check","Select models when loaded")
  434. checked: boolCheck(UM.Preferences.getValue("cura/select_models_on_load"))
  435. onCheckedChanged: UM.Preferences.setValue("cura/select_models_on_load", checked)
  436. }
  437. }
  438. UM.TooltipArea
  439. {
  440. width: childrenRect.width
  441. height: childrenRect.height
  442. text: catalog.i18nc("@info:tooltip", "Should a prefix based on the printer name be added to the print job name automatically?")
  443. CheckBox
  444. {
  445. id: prefixJobNameCheckbox
  446. text: catalog.i18nc("@option:check", "Add machine prefix to job name")
  447. checked: boolCheck(UM.Preferences.getValue("cura/jobname_prefix"))
  448. onCheckedChanged: UM.Preferences.setValue("cura/jobname_prefix", checked)
  449. }
  450. }
  451. UM.TooltipArea
  452. {
  453. width: childrenRect.width
  454. height: childrenRect.height
  455. text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a project file?")
  456. CheckBox
  457. {
  458. text: catalog.i18nc("@option:check", "Show summary dialog when saving project")
  459. checked: boolCheck(UM.Preferences.getValue("cura/dialog_on_project_save"))
  460. onCheckedChanged: UM.Preferences.setValue("cura/dialog_on_project_save", checked)
  461. }
  462. }
  463. UM.TooltipArea
  464. {
  465. width: childrenRect.width
  466. height: childrenRect.height
  467. text: catalog.i18nc("@info:tooltip", "Default behavior when opening a project file")
  468. Column
  469. {
  470. spacing: 4 * screenScaleFactor
  471. Label
  472. {
  473. text: catalog.i18nc("@window:text", "Default behavior when opening a project file: ")
  474. }
  475. ComboBox
  476. {
  477. id: choiceOnOpenProjectDropDownButton
  478. width: 200 * screenScaleFactor
  479. model: ListModel
  480. {
  481. id: openProjectOptionModel
  482. Component.onCompleted:
  483. {
  484. append({ text: catalog.i18nc("@option:openProject", "Always ask me this"), code: "always_ask" })
  485. append({ text: catalog.i18nc("@option:openProject", "Always open as a project"), code: "open_as_project" })
  486. append({ text: catalog.i18nc("@option:openProject", "Always import models"), code: "open_as_model" })
  487. }
  488. }
  489. currentIndex:
  490. {
  491. var index = 0;
  492. var currentChoice = UM.Preferences.getValue("cura/choice_on_open_project");
  493. for (var i = 0; i < model.count; ++i)
  494. {
  495. if (model.get(i).code == currentChoice)
  496. {
  497. index = i;
  498. break;
  499. }
  500. }
  501. return index;
  502. }
  503. onActivated: UM.Preferences.setValue("cura/choice_on_open_project", model.get(index).code)
  504. }
  505. }
  506. }
  507. Item
  508. {
  509. //: Spacer
  510. height: UM.Theme.getSize("default_margin").height
  511. width: UM.Theme.getSize("default_margin").width
  512. }
  513. UM.TooltipArea
  514. {
  515. width: childrenRect.width;
  516. height: childrenRect.height;
  517. 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.")
  518. Column
  519. {
  520. spacing: 4 * screenScaleFactor
  521. Label
  522. {
  523. font.bold: true
  524. text: catalog.i18nc("@label", "Profiles")
  525. }
  526. Label
  527. {
  528. text: catalog.i18nc("@window:text", "Default behavior for changed setting values when switching to a different profile: ")
  529. }
  530. ComboBox
  531. {
  532. id: choiceOnProfileOverrideDropDownButton
  533. width: 200 * screenScaleFactor
  534. model: ListModel
  535. {
  536. id: discardOrKeepProfileListModel
  537. Component.onCompleted:
  538. {
  539. append({ text: catalog.i18nc("@option:discardOrKeep", "Always ask me this"), code: "always_ask" })
  540. append({ text: catalog.i18nc("@option:discardOrKeep", "Always discard changed settings"), code: "always_discard" })
  541. append({ text: catalog.i18nc("@option:discardOrKeep", "Always transfer changed settings to new profile"), code: "always_keep" })
  542. }
  543. }
  544. currentIndex:
  545. {
  546. var index = 0;
  547. var code = UM.Preferences.getValue("cura/choice_on_profile_override");
  548. for (var i = 0; i < model.count; ++i)
  549. {
  550. if (model.get(i).code == code)
  551. {
  552. index = i;
  553. break;
  554. }
  555. }
  556. return index;
  557. }
  558. onActivated: UM.Preferences.setValue("cura/choice_on_profile_override", model.get(index).code)
  559. }
  560. }
  561. }
  562. Item
  563. {
  564. //: Spacer
  565. height: UM.Theme.getSize("default_margin").height
  566. width: UM.Theme.getSize("default_margin").height
  567. }
  568. Label
  569. {
  570. font.bold: true
  571. visible: checkUpdatesCheckbox.visible || sendDataCheckbox.visible
  572. text: catalog.i18nc("@label","Privacy")
  573. }
  574. UM.TooltipArea
  575. {
  576. visible: pluginExistsAndEnabled("UpdateChecker")
  577. width: childrenRect.width
  578. height: visible ? childrenRect.height : 0
  579. text: catalog.i18nc("@info:tooltip","Should Cura check for updates when the program is started?")
  580. CheckBox
  581. {
  582. id: checkUpdatesCheckbox
  583. text: catalog.i18nc("@option:check","Check for updates on start")
  584. checked: boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
  585. onCheckedChanged: UM.Preferences.setValue("info/automatic_update_check", checked)
  586. }
  587. }
  588. UM.TooltipArea
  589. {
  590. visible: pluginExistsAndEnabled("SliceInfoPlugin")
  591. width: childrenRect.width
  592. height: visible ? childrenRect.height : 0
  593. 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.")
  594. CheckBox
  595. {
  596. id: sendDataCheckbox
  597. text: catalog.i18nc("@option:check","Send (anonymous) print information")
  598. checked: boolCheck(UM.Preferences.getValue("info/send_slice_info"))
  599. onCheckedChanged: UM.Preferences.setValue("info/send_slice_info", checked)
  600. }
  601. Button
  602. {
  603. id: showMoreInfo
  604. anchors.top: sendDataCheckbox.bottom
  605. text: catalog.i18nc("@action:button", "More information")
  606. onClicked:
  607. {
  608. CuraApplication.showMoreInformationDialogForAnonymousDataCollection();
  609. }
  610. }
  611. }
  612. Item
  613. {
  614. //: Spacer
  615. height: UM.Theme.getSize("default_margin").height
  616. width: UM.Theme.getSize("default_margin").height
  617. }
  618. Label
  619. {
  620. font.bold: true
  621. text: catalog.i18nc("@label","Experimental")
  622. }
  623. UM.TooltipArea
  624. {
  625. width: childrenRect.width
  626. height: childrenRect.height
  627. text: catalog.i18nc("@info:tooltip","Use multi build plate functionality")
  628. CheckBox
  629. {
  630. id: useMultiBuildPlateCheckbox
  631. text: catalog.i18nc("@option:check","Use multi build plate functionality (restart required)")
  632. checked: boolCheck(UM.Preferences.getValue("cura/use_multi_build_plate"))
  633. onCheckedChanged: UM.Preferences.setValue("cura/use_multi_build_plate", checked)
  634. }
  635. }
  636. Connections
  637. {
  638. target: UM.Preferences
  639. onPreferenceChanged:
  640. {
  641. sendDataCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_slice_info"))
  642. }
  643. }
  644. }
  645. }
  646. }