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._cura_scene_controller = None
self._machine_error_checker = 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._material_management_model = MaterialManagementModel()
self._quality_management_model = None
self._discovered_printer_model = DiscoveredPrintersModel(self, parent = self) self._discovered_printer_model = DiscoveredPrintersModel(self, parent = self)
self._first_start_machine_actions_model = FirstStartMachineActionsModel(self, parent = self) self._first_start_machine_actions_model = FirstStartMachineActionsModel(self, parent = self)
@ -981,6 +982,12 @@ class CuraApplication(QtApplication):
def getMaterialManagementModel(self): def getMaterialManagementModel(self):
return self._material_management_model 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): def getSimpleModeSettingsManager(self, *args):
if self._simple_mode_settings_manager is None: if self._simple_mode_settings_manager is None:
self._simple_mode_settings_manager = SimpleModeSettingsManager() self._simple_mode_settings_manager = SimpleModeSettingsManager()
@ -1059,7 +1066,7 @@ class CuraApplication(QtApplication):
qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel") qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel")
qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel") qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel")
qmlRegisterType(MaterialBrandsModel, "Cura", 1, 0, "MaterialBrandsModel") 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) qmlRegisterSingletonType(MaterialManagementModel, "Cura", 1, 5, "MaterialManagementModel", self.getMaterialManagementModel)
qmlRegisterType(DiscoveredPrintersModel, "Cura", 1, 0, "DiscoveredPrintersModel") qmlRegisterType(DiscoveredPrintersModel, "Cura", 1, 0, "DiscoveredPrintersModel")

View File

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