Change Preferences dialog creation and destruction

CURA-11810
This commit is contained in:
Erwan MATHIEU 2025-07-25 13:21:06 +02:00
parent 890543b7de
commit 376d18c7ee
3 changed files with 161 additions and 34 deletions

View file

@ -456,45 +456,32 @@ UM.MainWindow
}
}
UM.PreferencesDialog
Component
{
id: preferences
Component.onCompleted:
id: preferencesDialogComponent
Cura.PreferencesDialog
{
//; Remove & re-add the general page as we want to use our own instead of uranium standard.
removePage(0);
insertPage(0, catalog.i18nc("@title:tab","General"), Qt.resolvedUrl("Preferences/GeneralPage.qml"));
removePage(1);
insertPage(1, catalog.i18nc("@title:tab","Settings"), Qt.resolvedUrl("Preferences/SettingVisibilityPage.qml"));
insertPage(2, catalog.i18nc("@title:tab", "Printers"), Qt.resolvedUrl("Preferences/MachinesPage.qml"));
insertPage(3, catalog.i18nc("@title:tab", "Materials"), Qt.resolvedUrl("Preferences/Materials/MaterialsPage.qml"));
insertPage(4, catalog.i18nc("@title:tab", "Profiles"), Qt.resolvedUrl("Preferences/ProfilesPage.qml"));
currentPage = 0;
selfDestroy: true
}
}
onVisibleChanged:
{
// When the dialog closes, switch to the General page.
// This prevents us from having a heavy page like Setting Visibility active in the background.
setPage(0);
}
function showPreferencesDialog()
{
var dialog = preferencesDialogComponent.createObject(base)
dialog.show()
return dialog
}
Connections
{
target: Cura.Actions.preferences
function onTriggered() { preferences.visible = true }
function onTriggered() { showPreferencesDialog() }
}
Connections
{
target: CuraApplication
function onShowPreferencesWindow() { preferences.visible = true }
function onShowPreferencesWindow() { showPreferencesDialog() }
}
Connections
@ -511,8 +498,8 @@ UM.MainWindow
target: Cura.Actions.configureMachines
function onTriggered()
{
preferences.visible = true;
preferences.setPage(2);
var dialog = showPreferencesDialog()
dialog.currentPage = 2;
}
}
@ -521,8 +508,8 @@ UM.MainWindow
target: Cura.Actions.manageProfiles
function onTriggered()
{
preferences.visible = true;
preferences.setPage(4);
var dialog = showPreferencesDialog()
dialog.currentPage = 4;
}
}
@ -531,8 +518,8 @@ UM.MainWindow
target: Cura.Actions.manageMaterials
function onTriggered()
{
preferences.visible = true;
preferences.setPage(3)
var dialog = showPreferencesDialog()
dialog.currentPage = 3;
}
}
@ -541,11 +528,11 @@ UM.MainWindow
target: Cura.Actions.configureSettingVisibility
function onTriggered(source)
{
preferences.visible = true;
preferences.setPage(1);
var dialog = showPreferencesDialog()
dialog.currentPage = 1;
if(source && source.key)
{
preferences.getCurrentItem().scrollToSection(source.key);
dialog.currentItem.scrollToSection(source.key);
}
}
}

View file

@ -0,0 +1,136 @@
// Copyright (c) 2022 Ultimaker B.V.
// Uranium is released under the terms of the LGPLv3 or higher.
import QtQuick 2.1
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.1
import QtQuick.Window 2.1
import ".."
import UM 1.6 as UM
UM.Dialog
{
id: base
title: catalog.i18nc("@title:window", "Preferences")
minimumWidth: UM.Theme.getSize("modal_window_minimum").width
minimumHeight: UM.Theme.getSize("modal_window_minimum").height
width: minimumWidth
height: minimumHeight
property alias currentPage: pagesList.currentIndex
property alias currentItem: pagesList.currentItem
Rectangle
{
anchors.fill: parent
color: UM.Theme.getColor("background_2")
}
Item
{
id: test
anchors.fill: parent
anchors.margins: UM.Theme.getSize("default_margin").width
ListView
{
id: pagesList
width: UM.Theme.getSize("preferences_page_list_item").width
anchors.top: parent.top
anchors.bottom: parent.bottom
ScrollBar.vertical: UM.ScrollBar {}
clip: true
model: [
{
name: catalog.i18nc("@title:tab","General"),
item: Qt.resolvedUrl("GeneralPage.qml")
},
{
name: catalog.i18nc("@title:tab","Settings"),
item: Qt.resolvedUrl("SettingVisibilityPage.qml")
},
{
name: catalog.i18nc("@title:tab","Printers"),
item: Qt.resolvedUrl("MachinesPage.qml")
},
{
name: catalog.i18nc("@title:tab","Materials"),
item: Qt.resolvedUrl("Materials/MaterialsPage.qml")
},
{
name: catalog.i18nc("@title:tab","Profiles"),
item: Qt.resolvedUrl("ProfilesPage.qml")
}
]
delegate: Rectangle
{
width: parent ? parent.width : 0
height: pageLabel.height
color: ListView.isCurrentItem ? UM.Theme.getColor("background_3") : UM.Theme.getColor("main_background")
UM.Label
{
id: pageLabel
anchors.centerIn: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
width: parent.width
height: UM.Theme.getSize("preferences_page_list_item").height
color: UM.Theme.getColor("text_default")
text: modelData.name
}
MouseArea
{
anchors.fill: parent
onClicked: pagesList.currentIndex = index
}
}
onCurrentIndexChanged: stackView.replace(model[currentIndex].item)
}
StackView
{
id: stackView
anchors
{
left: pagesList.right
leftMargin: UM.Theme.getSize("narrow_margin").width
top: parent.top
bottom: parent.bottom
right: parent.right
}
initialItem: Item { property bool resetEnabled: false }
replaceEnter: Transition
{
NumberAnimation
{
properties: "opacity"
from: 0
to: 1
duration: 100
}
}
replaceExit: Transition
{
NumberAnimation
{
properties: "opacity"
from: 1
to: 0
duration: 100
}
}
}
UM.I18nCatalog { id: catalog; name: "uranium"; }
}
}

View file

@ -52,3 +52,7 @@ NumericTextFieldWithUnit 1.0 NumericTextFieldWithUnit.qml
PrintHeadMinMaxTextField 1.0 PrintHeadMinMaxTextField.qml
SimpleCheckBox 1.0 SimpleCheckBox.qml
RenameDialog 1.0 RenameDialog.qml
# Cura/Preferences
PreferencesDialog 1.0 PreferencesDialog.qml