Fix occasional crash when entering profiles section.

Make QualityManagementModel into a singleton.
part of CURA-6600
This commit is contained in:
Remco Burema 2019-08-27 16:21:30 +02:00
parent c333e980dc
commit c71660cc11
2 changed files with 19 additions and 15 deletions

View File

@ -221,8 +221,9 @@ class CuraApplication(QtApplication):
self._cura_scene_controller = None
self._machine_error_checker = None
self._machine_settings_manager = MachineSettingsManager(self, parent = self)
self._machine_settings_manager = MachineSettingsManager(self, parent=self)
self._material_management_model = MaterialManagementModel()
self._quality_management_model = None
self._discovered_printer_model = DiscoveredPrintersModel(self, parent = self)
self._first_start_machine_actions_model = FirstStartMachineActionsModel(self, parent = self)
@ -981,6 +982,12 @@ class CuraApplication(QtApplication):
def getMaterialManagementModel(self):
return self._material_management_model
@pyqtSlot(result=QObject)
def getQualityManagementModel(self):
if not self._quality_management_model:
self._quality_management_model = QualityManagementModel()
return self._quality_management_model
def getSimpleModeSettingsManager(self, *args):
if self._simple_mode_settings_manager is None:
self._simple_mode_settings_manager = SimpleModeSettingsManager()
@ -1059,7 +1066,7 @@ class CuraApplication(QtApplication):
qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel")
qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel")
qmlRegisterType(MaterialBrandsModel, "Cura", 1, 0, "MaterialBrandsModel")
qmlRegisterType(QualityManagementModel, "Cura", 1, 0, "QualityManagementModel")
qmlRegisterSingletonType(QualityManagementModel, "Cura", 1, 0, "QualityManagementModel", self.getQualityManagementModel)
qmlRegisterSingletonType(MaterialManagementModel, "Cura", 1, 5, "MaterialManagementModel", self.getMaterialManagementModel)
qmlRegisterType(DiscoveredPrintersModel, "Cura", 1, 0, "DiscoveredPrintersModel")

View File

@ -17,13 +17,10 @@ Item
property QtObject qualityManager: CuraApplication.getQualityManager()
property var resetEnabled: false // Keep PreferencesDialog happy
property var extrudersModel: CuraApplication.getExtrudersModel()
property var qualityManagementModel: CuraApplication.getQualityManagementModel()
UM.I18nCatalog { id: catalog; name: "cura"; }
Cura.QualityManagementModel {
id: qualitiesModel
}
Label {
id: titleLabel
anchors {
@ -40,7 +37,7 @@ Item
property var currentItem: {
var current_index = qualityListView.currentIndex;
return (current_index == -1) ? null : qualitiesModel.getItem(current_index);
return (current_index == -1) ? null : base.qualityManagementModel.getItem(current_index);
}
property var currentItemName: hasCurrentItem ? base.currentItem.name : ""
@ -195,7 +192,7 @@ Item
// This connection makes sure that we will switch to the correct quality after the model gets updated
Connections
{
target: qualitiesModel
target: base.qualityManagementModel
onItemsChanged:
{
var toSelectItemName = base.currentItem == null ? "" : base.currentItem.name;
@ -208,9 +205,9 @@ Item
if (toSelectItemName != "")
{
// Select the required quality name if given
for (var idx = 0; idx < qualitiesModel.count; ++idx)
for (var idx = 0; idx < base.qualityManagementModel.count; ++idx)
{
var item = qualitiesModel.getItem(idx);
var item = base.qualityManagementModel.getItem(idx);
if (item.name == toSelectItemName)
{
// Switch to the newly created profile if needed
@ -282,7 +279,7 @@ Item
id: importDialog
title: catalog.i18nc("@title:window", "Import Profile")
selectExisting: true
nameFilters: qualitiesModel.getFileNameFilters("profile_reader")
nameFilters: base.qualityManagementModel.getFileNameFilters("profile_reader")
folder: CuraApplication.getDefaultPath("dialog_profile_path")
onAccepted:
{
@ -308,7 +305,7 @@ Item
id: exportDialog
title: catalog.i18nc("@title:window", "Export Profile")
selectExisting: false
nameFilters: qualitiesModel.getFileNameFilters("profile_writer")
nameFilters: base.qualityManagementModel.getFileNameFilters("profile_writer")
folder: CuraApplication.getDefaultPath("dialog_profile_path")
onAccepted:
{
@ -390,16 +387,16 @@ Item
{
id: qualityListView
model: qualitiesModel
model: base.qualityManagementModel
Component.onCompleted:
{
var selectedItemName = Cura.MachineManager.activeQualityOrQualityChangesName;
// Select the required quality name if given
for (var idx = 0; idx < qualitiesModel.count; idx++)
for (var idx = 0; idx < base.qualityManagementModel.count; idx++)
{
var item = qualitiesModel.getItem(idx);
var item = base.qualityManagementModel.getItem(idx);
if (item.name == selectedItemName)
{
currentIndex = idx;