Make General preference pane scrollable

On some OSes/configurations/screens, the options on the General pane don't fit until the window is resized. Adding a scrollview helps in these cases.
This commit is contained in:
fieldOfView 2017-02-17 13:39:46 +01:00
parent bb030c724b
commit 97d20b4242

View File

@ -58,337 +58,343 @@ UM.PreferencesPage
} }
} }
Column ScrollView
{ {
//: Model used to check if a plugin exists width: parent.width
UM.PluginsModel { id: plugins } height: parent.height
//: Language selection label Column
UM.I18nCatalog{id: catalog; name:"cura"}
Label
{ {
font.bold: true //: Model used to check if a plugin exists
text: catalog.i18nc("@label","Interface") UM.PluginsModel { id: plugins }
}
//: Language selection label
UM.I18nCatalog{id: catalog; name:"cura"}
Row
{
spacing: UM.Theme.getSize("default_margin").width
Label Label
{ {
id: languageLabel font.bold: true
text: catalog.i18nc("@label","Language:") text: catalog.i18nc("@label","Interface")
anchors.verticalCenter: languageComboBox.verticalCenter
} }
ComboBox Row
{ {
id: languageComboBox spacing: UM.Theme.getSize("default_margin").width
model: ListModel Label
{ {
id: languageList id: languageLabel
text: catalog.i18nc("@label","Language:")
anchors.verticalCenter: languageComboBox.verticalCenter
}
Component.onCompleted: { ComboBox
append({ text: "English", code: "en" }) {
append({ text: "Deutsch", code: "de" }) id: languageComboBox
append({ text: "Español", code: "es" }) model: ListModel
append({ text: "Suomi", code: "fi" }) {
append({ text: "Français", code: "fr" }) id: languageList
append({ text: "Italiano", code: "it" })
append({ text: "Nederlands", code: "nl" }) Component.onCompleted: {
append({ text: "Português do Brasil", code: "ptbr" }) append({ text: "English", code: "en" })
append({ text: "Русский", code: "ru" }) append({ text: "Deutsch", code: "de" })
append({ text: "Türkçe", code: "tr" }) append({ text: "Español", code: "es" })
append({ text: "Suomi", code: "fi" })
append({ text: "Français", code: "fr" })
append({ text: "Italiano", code: "it" })
append({ text: "Nederlands", code: "nl" })
append({ text: "Português do Brasil", code: "ptbr" })
append({ text: "Русский", code: "ru" })
append({ text: "Türkçe", code: "tr" })
}
}
currentIndex:
{
var code = UM.Preferences.getValue("general/language");
for(var i = 0; i < languageList.count; ++i)
{
if(model.get(i).code == code)
{
return i
}
}
}
onActivated: UM.Preferences.setValue("general/language", model.get(index).code)
Component.onCompleted:
{
// Because ListModel is stupid and does not allow using qsTr() for values.
for(var i = 0; i < languageList.count; ++i)
{
languageList.setProperty(i, "text", catalog.i18n(languageList.get(i).text));
}
// Glorious hack time. ComboBox does not update the text properly after changing the
// model. So change the indices around to force it to update.
currentIndex += 1;
currentIndex -= 1;
} }
} }
currentIndex: Label
{ {
var code = UM.Preferences.getValue("general/language"); id: currencyLabel
for(var i = 0; i < languageList.count; ++i) text: catalog.i18nc("@label","Currency:")
anchors.verticalCenter: languageComboBox.verticalCenter
}
TextField
{
id: currencyField
text: UM.Preferences.getValue("cura/currency")
onTextChanged: UM.Preferences.setValue("cura/currency", text)
}
}
Label
{
id: languageCaption
//: Language change warning
text: catalog.i18nc("@label", "You will need to restart the application for language changes to have effect.")
wrapMode: Text.WordWrap
font.italic: true
}
Item
{
//: Spacer
height: UM.Theme.getSize("default_margin").height
width: UM.Theme.getSize("default_margin").width
}
Label
{
font.bold: true
text: catalog.i18nc("@label","Viewport behavior")
}
UM.TooltipArea
{
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Highlight unsupported areas of the model in red. Without support these areas will not print properly.")
CheckBox
{
id: showOverhangCheckbox
checked: boolCheck(UM.Preferences.getValue("view/show_overhang"))
onClicked: UM.Preferences.setValue("view/show_overhang", checked)
text: catalog.i18nc("@option:check","Display overhang");
}
}
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Moves the camera so the model is in the center of the view when an model is selected")
CheckBox
{
id: centerOnSelectCheckbox
text: catalog.i18nc("@action:button","Center camera when item is selected");
checked: boolCheck(UM.Preferences.getValue("view/center_on_select"))
onClicked: UM.Preferences.setValue("view/center_on_select", checked)
}
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved so that they no longer intersect?")
CheckBox
{
id: pushFreeCheckbox
text: catalog.i18nc("@option:check", "Ensure models are kept apart")
checked: boolCheck(UM.Preferences.getValue("physics/automatic_push_free"))
onCheckedChanged: UM.Preferences.setValue("physics/automatic_push_free", checked)
}
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved down to touch the build plate?")
CheckBox
{
id: dropDownCheckbox
text: catalog.i18nc("@option:check", "Automatically drop models to the build plate")
checked: boolCheck(UM.Preferences.getValue("physics/automatic_drop_down"))
onCheckedChanged: UM.Preferences.setValue("physics/automatic_drop_down", checked)
}
}
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Display 5 top layers in layer view or only the top-most layer. Rendering 5 layers takes longer, but may show more information.")
CheckBox
{
id: topLayerCountCheckbox
text: catalog.i18nc("@action:button","Display five top layers in layer view compatibility mode");
checked: UM.Preferences.getValue("view/top_layer_count") == 5
onClicked:
{ {
if(model.get(i).code == code) if(UM.Preferences.getValue("view/top_layer_count") == 5)
{ {
return i UM.Preferences.setValue("view/top_layer_count", 1)
}
else
{
UM.Preferences.setValue("view/top_layer_count", 5)
} }
} }
} }
onActivated: UM.Preferences.setValue("general/language", model.get(index).code) }
Component.onCompleted: UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should only the top layers be displayed in layerview?")
CheckBox
{ {
// Because ListModel is stupid and does not allow using qsTr() for values. id: topLayersOnlyCheckbox
for(var i = 0; i < languageList.count; ++i) text: catalog.i18nc("@option:check", "Only display top layer(s) in layer view compatibility mode")
{ checked: boolCheck(UM.Preferences.getValue("view/only_show_top_layers"))
languageList.setProperty(i, "text", catalog.i18n(languageList.get(i).text)); onCheckedChanged: UM.Preferences.setValue("view/only_show_top_layers", checked)
}
// Glorious hack time. ComboBox does not update the text properly after changing the
// model. So change the indices around to force it to update.
currentIndex += 1;
currentIndex -= 1;
} }
} }
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should layer be forced into compatibility mode?")
CheckBox
{
id: forceLayerViewCompatibilityModeCheckbox
text: catalog.i18nc("@option:check", "Force layer view compatibility mode (restart required)")
checked: boolCheck(UM.Preferences.getValue("view/force_layer_view_compatibility_mode"))
onCheckedChanged: UM.Preferences.setValue("view/force_layer_view_compatibility_mode", checked)
}
}
Item
{
//: Spacer
height: UM.Theme.getSize("default_margin").height
width: UM.Theme.getSize("default_margin").height
}
Label Label
{ {
id: currencyLabel font.bold: true
text: catalog.i18nc("@label","Currency:") text: catalog.i18nc("@label","Opening files")
anchors.verticalCenter: languageComboBox.verticalCenter
} }
TextField
{
id: currencyField
text: UM.Preferences.getValue("cura/currency")
onTextChanged: UM.Preferences.setValue("cura/currency", text)
}
}
Label UM.TooltipArea {
{ width: childrenRect.width
id: languageCaption height: childrenRect.height
text: catalog.i18nc("@info:tooltip","Should models be scaled to the build volume if they are too large?")
//: Language change warning CheckBox
text: catalog.i18nc("@label", "You will need to restart the application for language changes to have effect.")
wrapMode: Text.WordWrap
font.italic: true
}
Item
{
//: Spacer
height: UM.Theme.getSize("default_margin").height
width: UM.Theme.getSize("default_margin").width
}
Label
{
font.bold: true
text: catalog.i18nc("@label","Viewport behavior")
}
UM.TooltipArea
{
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Highlight unsupported areas of the model in red. Without support these areas will not print properly.")
CheckBox
{
id: showOverhangCheckbox
checked: boolCheck(UM.Preferences.getValue("view/show_overhang"))
onClicked: UM.Preferences.setValue("view/show_overhang", checked)
text: catalog.i18nc("@option:check","Display overhang");
}
}
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Moves the camera so the model is in the center of the view when an model is selected")
CheckBox
{
id: centerOnSelectCheckbox
text: catalog.i18nc("@action:button","Center camera when item is selected");
checked: boolCheck(UM.Preferences.getValue("view/center_on_select"))
onClicked: UM.Preferences.setValue("view/center_on_select", checked)
}
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved so that they no longer intersect?")
CheckBox
{
id: pushFreeCheckbox
text: catalog.i18nc("@option:check", "Ensure models are kept apart")
checked: boolCheck(UM.Preferences.getValue("physics/automatic_push_free"))
onCheckedChanged: UM.Preferences.setValue("physics/automatic_push_free", checked)
}
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should models on the platform be moved down to touch the build plate?")
CheckBox
{
id: dropDownCheckbox
text: catalog.i18nc("@option:check", "Automatically drop models to the build plate")
checked: boolCheck(UM.Preferences.getValue("physics/automatic_drop_down"))
onCheckedChanged: UM.Preferences.setValue("physics/automatic_drop_down", checked)
}
}
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
text: catalog.i18nc("@info:tooltip","Display 5 top layers in layer view or only the top-most layer. Rendering 5 layers takes longer, but may show more information.")
CheckBox
{
id: topLayerCountCheckbox
text: catalog.i18nc("@action:button","Display five top layers in layer view compatibility mode");
checked: UM.Preferences.getValue("view/top_layer_count") == 5
onClicked:
{ {
if(UM.Preferences.getValue("view/top_layer_count") == 5) id: scaleToFitCheckbox
{ text: catalog.i18nc("@option:check","Scale large models")
UM.Preferences.setValue("view/top_layer_count", 1) checked: boolCheck(UM.Preferences.getValue("mesh/scale_to_fit"))
} onCheckedChanged: UM.Preferences.setValue("mesh/scale_to_fit", checked)
else
{
UM.Preferences.setValue("view/top_layer_count", 5)
}
} }
} }
}
UM.TooltipArea { UM.TooltipArea {
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should only the top layers be displayed in layerview?") 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?")
CheckBox CheckBox
{ {
id: topLayersOnlyCheckbox id: scaleTinyCheckbox
text: catalog.i18nc("@option:check", "Only display top layer(s) in layer view compatibility mode") text: catalog.i18nc("@option:check","Scale extremely small models")
checked: boolCheck(UM.Preferences.getValue("view/only_show_top_layers")) checked: boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes"))
onCheckedChanged: UM.Preferences.setValue("view/only_show_top_layers", checked) onCheckedChanged: UM.Preferences.setValue("mesh/scale_tiny_meshes", checked)
}
} }
}
UM.TooltipArea { UM.TooltipArea {
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should layer be forced into compatibility mode?") text: catalog.i18nc("@info:tooltip", "Should a prefix based on the printer name be added to the print job name automatically?")
CheckBox CheckBox
{ {
id: forceLayerViewCompatibilityModeCheckbox id: prefixJobNameCheckbox
text: catalog.i18nc("@option:check", "Force layer view compatibility mode (restart required)") text: catalog.i18nc("@option:check", "Add machine prefix to job name")
checked: boolCheck(UM.Preferences.getValue("view/force_layer_view_compatibility_mode")) checked: boolCheck(UM.Preferences.getValue("cura/jobname_prefix"))
onCheckedChanged: UM.Preferences.setValue("view/force_layer_view_compatibility_mode", checked) onCheckedChanged: UM.Preferences.setValue("cura/jobname_prefix", checked)
}
} }
}
Item UM.TooltipArea {
{ width: childrenRect.width
//: Spacer height: childrenRect.height
height: UM.Theme.getSize("default_margin").height text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a project file?")
width: UM.Theme.getSize("default_margin").height
}
Label CheckBox
{ {
font.bold: true text: catalog.i18nc("@option:check", "Show summary dialog when saving project")
text: catalog.i18nc("@label","Opening files") checked: boolCheck(UM.Preferences.getValue("cura/dialog_on_project_save"))
} onCheckedChanged: UM.Preferences.setValue("cura/dialog_on_project_save", checked)
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip","Should models be scaled to the build volume if they are too large?")
CheckBox
{
id: scaleToFitCheckbox
text: catalog.i18nc("@option:check","Scale large models")
checked: boolCheck(UM.Preferences.getValue("mesh/scale_to_fit"))
onCheckedChanged: UM.Preferences.setValue("mesh/scale_to_fit", checked)
} }
}
UM.TooltipArea {
width: childrenRect.width
height: childrenRect.height
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?")
CheckBox Item
{ {
id: scaleTinyCheckbox //: Spacer
text: catalog.i18nc("@option:check","Scale extremely small models") height: UM.Theme.getSize("default_margin").height
checked: boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes")) width: UM.Theme.getSize("default_margin").height
onCheckedChanged: UM.Preferences.setValue("mesh/scale_tiny_meshes", checked)
} }
}
UM.TooltipArea { Label
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should a prefix based on the printer name be added to the print job name automatically?")
CheckBox
{ {
id: prefixJobNameCheckbox font.bold: true
text: catalog.i18nc("@option:check", "Add machine prefix to job name") visible: checkUpdatesCheckbox.visible || sendDataCheckbox.visible
checked: boolCheck(UM.Preferences.getValue("cura/jobname_prefix")) text: catalog.i18nc("@label","Privacy")
onCheckedChanged: UM.Preferences.setValue("cura/jobname_prefix", checked)
} }
}
UM.TooltipArea { UM.TooltipArea {
width: childrenRect.width visible: plugins.find("id", "UpdateChecker") > -1
height: childrenRect.height width: childrenRect.width
text: catalog.i18nc("@info:tooltip", "Should a summary be shown when saving a project file?") height: visible ? childrenRect.height : 0
text: catalog.i18nc("@info:tooltip","Should Cura check for updates when the program is started?")
CheckBox CheckBox
{ {
text: catalog.i18nc("@option:check", "Show summary dialog when saving project") id: checkUpdatesCheckbox
checked: boolCheck(UM.Preferences.getValue("cura/dialog_on_project_save")) text: catalog.i18nc("@option:check","Check for updates on start")
onCheckedChanged: UM.Preferences.setValue("cura/dialog_on_project_save", checked) checked: boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
onCheckedChanged: UM.Preferences.setValue("info/automatic_update_check", checked)
}
} }
}
UM.TooltipArea {
visible: plugins.find("id", "SliceInfoPlugin") > -1
width: childrenRect.width
height: visible ? childrenRect.height : 0
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.")
Item CheckBox
{ {
//: Spacer id: sendDataCheckbox
height: UM.Theme.getSize("default_margin").height text: catalog.i18nc("@option:check","Send (anonymous) print information")
width: UM.Theme.getSize("default_margin").height checked: boolCheck(UM.Preferences.getValue("info/send_slice_info"))
} onCheckedChanged: UM.Preferences.setValue("info/send_slice_info", checked)
}
Label
{
font.bold: true
visible: checkUpdatesCheckbox.visible || sendDataCheckbox.visible
text: catalog.i18nc("@label","Privacy")
}
UM.TooltipArea {
visible: plugins.find("id", "UpdateChecker") > -1
width: childrenRect.width
height: visible ? childrenRect.height : 0
text: catalog.i18nc("@info:tooltip","Should Cura check for updates when the program is started?")
CheckBox
{
id: checkUpdatesCheckbox
text: catalog.i18nc("@option:check","Check for updates on start")
checked: boolCheck(UM.Preferences.getValue("info/automatic_update_check"))
onCheckedChanged: UM.Preferences.setValue("info/automatic_update_check", checked)
}
}
UM.TooltipArea {
visible: plugins.find("id", "SliceInfoPlugin") > -1
width: childrenRect.width
height: visible ? childrenRect.height : 0
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.")
CheckBox
{
id: sendDataCheckbox
text: catalog.i18nc("@option:check","Send (anonymous) print information")
checked: boolCheck(UM.Preferences.getValue("info/send_slice_info"))
onCheckedChanged: UM.Preferences.setValue("info/send_slice_info", checked)
} }
} }
} }