GeneralPage.qml 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  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. //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. 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"), 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", "Override Profile")
  525. }
  526. ComboBox
  527. {
  528. id: choiceOnProfileOverrideDropDownButton
  529. width: 200 * screenScaleFactor
  530. model: ListModel
  531. {
  532. id: discardOrKeepProfileListModel
  533. Component.onCompleted:
  534. {
  535. append({ text: catalog.i18nc("@option:discardOrKeep", "Always ask me this"), code: "always_ask" })
  536. append({ text: catalog.i18nc("@option:discardOrKeep", "Discard and never ask again"), code: "always_discard" })
  537. append({ text: catalog.i18nc("@option:discardOrKeep", "Keep and never ask again"), code: "always_keep" })
  538. }
  539. }
  540. currentIndex:
  541. {
  542. var index = 0;
  543. var code = UM.Preferences.getValue("cura/choice_on_profile_override");
  544. for (var i = 0; i < model.count; ++i)
  545. {
  546. if (model.get(i).code == code)
  547. {
  548. index = i;
  549. break;
  550. }
  551. }
  552. return index;
  553. }
  554. onActivated: UM.Preferences.setValue("cura/choice_on_profile_override", model.get(index).code)
  555. }
  556. }
  557. }
  558. Item
  559. {
  560. //: Spacer
  561. height: UM.Theme.getSize("default_margin").height
  562. width: UM.Theme.getSize("default_margin").height
  563. }
  564. Label
  565. {
  566. font.bold: true
  567. visible: checkUpdatesCheckbox.visible || sendDataCheckbox.visible
  568. text: catalog.i18nc("@label","Privacy")
  569. }
  570. UM.TooltipArea
  571. {
  572. visible: pluginExistsAndEnabled("UpdateChecker")
  573. width: childrenRect.width
  574. height: visible ? childrenRect.height : 0
  575. text: catalog.i18nc("@info:tooltip","Should Cura check for updates when the program is started?")
  576. CheckBox
  577. {
  578. id: checkUpdatesCheckbox
  579. text: catalog.i18nc("@option:check","Check for updates on start")
  580. checked: boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
  581. onCheckedChanged: UM.Preferences.setValue("info/automatic_update_check", checked)
  582. }
  583. }
  584. UM.TooltipArea
  585. {
  586. visible: pluginExistsAndEnabled("SliceInfoPlugin")
  587. width: childrenRect.width
  588. height: visible ? childrenRect.height : 0
  589. 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.")
  590. CheckBox
  591. {
  592. id: sendDataCheckbox
  593. text: catalog.i18nc("@option:check","Send (anonymous) print information")
  594. checked: boolCheck(UM.Preferences.getValue("info/send_slice_info"))
  595. onCheckedChanged: UM.Preferences.setValue("info/send_slice_info", checked)
  596. }
  597. Button
  598. {
  599. id: showMoreInfo
  600. anchors.top: sendDataCheckbox.bottom
  601. text: catalog.i18nc("@action:button", "More information")
  602. onClicked:
  603. {
  604. CuraApplication.showMoreInformationDialogForAnonymousDataCollection();
  605. }
  606. }
  607. }
  608. Item
  609. {
  610. //: Spacer
  611. height: UM.Theme.getSize("default_margin").height
  612. width: UM.Theme.getSize("default_margin").height
  613. }
  614. Label
  615. {
  616. font.bold: true
  617. text: catalog.i18nc("@label","Experimental")
  618. }
  619. UM.TooltipArea
  620. {
  621. width: childrenRect.width
  622. height: childrenRect.height
  623. text: catalog.i18nc("@info:tooltip","Use multi build plate functionality")
  624. CheckBox
  625. {
  626. id: useMultiBuildPlateCheckbox
  627. text: catalog.i18nc("@option:check","Use multi build plate functionality (restart required)")
  628. checked: boolCheck(UM.Preferences.getValue("cura/use_multi_build_plate"))
  629. onCheckedChanged: UM.Preferences.setValue("cura/use_multi_build_plate", checked)
  630. }
  631. }
  632. Connections
  633. {
  634. target: UM.Preferences
  635. onPreferenceChanged:
  636. {
  637. sendDataCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_slice_info"))
  638. }
  639. }
  640. }
  641. }
  642. }