GeneralPage.qml 35 KB

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