Change SettingVisibilityPresetsModel to non-singleton

CURA-5088
This commit is contained in:
Lipu Fei 2018-03-15 10:59:23 +01:00
parent 1f2602a2f4
commit 83175b00c2
5 changed files with 34 additions and 40 deletions

View file

@ -65,6 +65,8 @@ from cura.Machines.Models.QualityManagementModel import QualityManagementModel
from cura.Machines.Models.QualitySettingsModel import QualitySettingsModel from cura.Machines.Models.QualitySettingsModel import QualitySettingsModel
from cura.Machines.Models.MachineManagementModel import MachineManagementModel from cura.Machines.Models.MachineManagementModel import MachineManagementModel
from cura.Machines.Models.SettingVisibilityPresetsModel import SettingVisibilityPresetsModel
from cura.Machines.MachineErrorChecker import MachineErrorChecker from cura.Machines.MachineErrorChecker import MachineErrorChecker
from cura.Settings.SettingInheritanceManager import SettingInheritanceManager from cura.Settings.SettingInheritanceManager import SettingInheritanceManager
@ -88,7 +90,6 @@ from cura.Settings.UserChangesModel import UserChangesModel
from cura.Settings.ExtrudersModel import ExtrudersModel from cura.Settings.ExtrudersModel import ExtrudersModel
from cura.Settings.MaterialSettingsVisibilityHandler import MaterialSettingsVisibilityHandler from cura.Settings.MaterialSettingsVisibilityHandler import MaterialSettingsVisibilityHandler
from cura.Settings.ContainerManager import ContainerManager from cura.Settings.ContainerManager import ContainerManager
from cura.Machines.Models.SettingVisibilityPresetsModel import SettingVisibilityPresetsModel
from cura.ObjectsModel import ObjectsModel from cura.ObjectsModel import ObjectsModel
@ -222,6 +223,7 @@ class CuraApplication(QtApplication):
self._object_manager = None self._object_manager = None
self._build_plate_model = None self._build_plate_model = None
self._multi_build_plate_model = None self._multi_build_plate_model = None
self._setting_visibility_presets_model = None
self._setting_inheritance_manager = None self._setting_inheritance_manager = None
self._simple_mode_settings_manager = None self._simple_mode_settings_manager = None
self._cura_scene_controller = None self._cura_scene_controller = None
@ -377,10 +379,6 @@ class CuraApplication(QtApplication):
preferences.setDefault("local_file/last_used_type", "text/x-gcode") preferences.setDefault("local_file/last_used_type", "text/x-gcode")
default_visibility_profile = SettingVisibilityPresetsModel.getInstance().getItem(0)
preferences.setDefault("general/visible_settings", ";".join(default_visibility_profile["settings"]))
self.applicationShuttingDown.connect(self.saveSettings) self.applicationShuttingDown.connect(self.saveSettings)
self.engineCreatedSignal.connect(self._onEngineCreated) self.engineCreatedSignal.connect(self._onEngineCreated)
@ -683,6 +681,11 @@ class CuraApplication(QtApplication):
self._print_information = PrintInformation.PrintInformation() self._print_information = PrintInformation.PrintInformation()
self._cura_actions = CuraActions.CuraActions(self) self._cura_actions = CuraActions.CuraActions(self)
# Initialize setting visibility presets model
self._setting_visibility_presets_model = SettingVisibilityPresetsModel(self)
default_visibility_profile = self._setting_visibility_presets_model.getItem(0)
Preferences.getInstance().setDefault("general/visible_settings", ";".join(default_visibility_profile["settings"]))
# Detect in which mode to run and execute that mode # Detect in which mode to run and execute that mode
if self.getCommandLineOption("headless", False): if self.getCommandLineOption("headless", False):
self.runWithoutGUI() self.runWithoutGUI()
@ -765,6 +768,10 @@ class CuraApplication(QtApplication):
def hasGui(self): def hasGui(self):
return self._use_gui return self._use_gui
@pyqtSlot(result = QObject)
def getSettingVisibilityPresetsModel(self, *args) -> SettingVisibilityPresetsModel:
return self._setting_visibility_presets_model
def getMachineErrorChecker(self, *args) -> MachineErrorChecker: def getMachineErrorChecker(self, *args) -> MachineErrorChecker:
return self._machine_error_checker return self._machine_error_checker
@ -891,11 +898,11 @@ class CuraApplication(QtApplication):
qmlRegisterType(NozzleModel, "Cura", 1, 0, "NozzleModel") qmlRegisterType(NozzleModel, "Cura", 1, 0, "NozzleModel")
qmlRegisterType(MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler") qmlRegisterType(MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler")
qmlRegisterType(SettingVisibilityPresetsModel, "Cura", 1, 0, "SettingVisibilityPresetsModel")
qmlRegisterType(QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel") qmlRegisterType(QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel")
qmlRegisterType(MachineNameValidator, "Cura", 1, 0, "MachineNameValidator") qmlRegisterType(MachineNameValidator, "Cura", 1, 0, "MachineNameValidator")
qmlRegisterType(UserChangesModel, "Cura", 1, 0, "UserChangesModel") qmlRegisterType(UserChangesModel, "Cura", 1, 0, "UserChangesModel")
qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, "ContainerManager", ContainerManager.createContainerManager) qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, "ContainerManager", ContainerManager.createContainerManager)
qmlRegisterSingletonType(SettingVisibilityPresetsModel, "Cura", 1, 0, "SettingVisibilityPresetsModel", SettingVisibilityPresetsModel.createSettingVisibilityPresetsModel)
# As of Qt5.7, it is necessary to get rid of any ".." in the path for the singleton to work. # As of Qt5.7, it is necessary to get rid of any ".." in the path for the singleton to work.
actions_url = QUrl.fromLocalFile(os.path.abspath(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml"))) actions_url = QUrl.fromLocalFile(os.path.abspath(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml")))

View file

@ -118,19 +118,3 @@ class SettingVisibilityPresetsModel(ListModel):
# Copy current visibility set to custom visibility set preference so it can be restored later # Copy current visibility set to custom visibility set preference so it can be restored later
visibility_string = self._preferences.getValue("general/visible_settings") visibility_string = self._preferences.getValue("general/visible_settings")
self._preferences.setValue("cura/custom_visible_settings", visibility_string) self._preferences.setValue("cura/custom_visible_settings", visibility_string)
# Factory function, used by QML
@staticmethod
def createSettingVisibilityPresetsModel(engine, js_engine):
return SettingVisibilityPresetsModel.getInstance()
## Get the singleton instance for this class.
@classmethod
def getInstance(cls) -> "SettingVisibilityPresetsModel":
# Note: Explicit use of class name to prevent issues with inheritance.
if not SettingVisibilityPresetsModel.__instance:
SettingVisibilityPresetsModel.__instance = cls()
return SettingVisibilityPresetsModel.__instance
__instance = None # type: "SettingVisibilityPresetsModel"

View file

@ -12,6 +12,7 @@ Menu
id: menu id: menu
title: catalog.i18nc("@action:inmenu", "Visible Settings") title: catalog.i18nc("@action:inmenu", "Visible Settings")
property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel()
property bool showingSearchResults property bool showingSearchResults
property bool showingAllSettings property bool showingAllSettings
@ -22,11 +23,11 @@ Menu
{ {
text: catalog.i18nc("@action:inmenu", "Custom selection") text: catalog.i18nc("@action:inmenu", "Custom selection")
checkable: true checkable: true
checked: !showingSearchResults && !showingAllSettings && Cura.SettingVisibilityPresetsModel.activePreset == "custom" checked: !showingSearchResults && !showingAllSettings && settingVisibilityPresetsModel.activePreset == "custom"
exclusiveGroup: group exclusiveGroup: group
onTriggered: onTriggered:
{ {
Cura.SettingVisibilityPresetsModel.setActivePreset("custom"); settingVisibilityPresetsModel.setActivePreset("custom");
// Restore custom set from preference // Restore custom set from preference
UM.Preferences.setValue("general/visible_settings", UM.Preferences.getValue("cura/custom_visible_settings")); UM.Preferences.setValue("general/visible_settings", UM.Preferences.getValue("cura/custom_visible_settings"));
showSettingVisibilityProfile(); showSettingVisibilityProfile();
@ -36,17 +37,17 @@ Menu
Instantiator Instantiator
{ {
model: Cura.SettingVisibilityPresetsModel model: settingVisibilityPresetsModel
MenuItem MenuItem
{ {
text: model.name text: model.name
checkable: true checkable: true
checked: model.id == Cura.SettingVisibilityPresetsModel.activePreset checked: model.id == settingVisibilityPresetsModel.activePreset
exclusiveGroup: group exclusiveGroup: group
onTriggered: onTriggered:
{ {
Cura.SettingVisibilityPresetsModel.setActivePreset(model.id); settingVisibilityPresetsModel.setActivePreset(model.id);
UM.Preferences.setValue("general/visible_settings", model.settings.join(";")); UM.Preferences.setValue("general/visible_settings", model.settings.join(";"));

View file

@ -13,6 +13,8 @@ UM.PreferencesPage
{ {
title: catalog.i18nc("@title:tab", "Setting Visibility"); title: catalog.i18nc("@title:tab", "Setting Visibility");
property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel()
property int scrollToIndex: 0 property int scrollToIndex: 0
signal scrollToSection( string key ) signal scrollToSection( string key )
@ -132,10 +134,9 @@ UM.PreferencesPage
{ {
visibilityPresetsModel.append({text: catalog.i18nc("@action:inmenu", "Custom selection"), id: "custom"}); visibilityPresetsModel.append({text: catalog.i18nc("@action:inmenu", "Custom selection"), id: "custom"});
var presets = Cura.SettingVisibilityPresetsModel; for(var i = 0; i < settingVisibilityPresetsModel.rowCount(); i++)
for(var i = 0; i < presets.rowCount(); i++)
{ {
visibilityPresetsModel.append({text: presets.getItem(i)["name"], id: presets.getItem(i)["id"]}); visibilityPresetsModel.append({text: settingVisibilityPresetsModel.getItem(i)["name"], id: settingVisibilityPresetsModel.getItem(i)["id"]});
} }
} }
} }
@ -143,7 +144,7 @@ UM.PreferencesPage
currentIndex: currentIndex:
{ {
// Load previously selected preset. // Load previously selected preset.
var index = Cura.SettingVisibilityPresetsModel.find("id", Cura.SettingVisibilityPresetsModel.activePreset); var index = settingVisibilityPresetsModel.find("id", settingVisibilityPresetsModel.activePreset);
if(index == -1) if(index == -1)
{ {
return 0; return 0;
@ -156,12 +157,12 @@ UM.PreferencesPage
{ {
base.inhibitSwitchToCustom = true; base.inhibitSwitchToCustom = true;
var preset_id = visibilityPresetsModel.get(index).id; var preset_id = visibilityPresetsModel.get(index).id;
Cura.SettingVisibilityPresetsModel.setActivePreset(preset_id); settingVisibilityPresetsModel.setActivePreset(preset_id);
UM.Preferences.setValue("cura/active_setting_visibility_preset", preset_id); UM.Preferences.setValue("cura/active_setting_visibility_preset", preset_id);
if (preset_id != "custom") if (preset_id != "custom")
{ {
UM.Preferences.setValue("general/visible_settings", Cura.SettingVisibilityPresetsModel.getItem(index - 1).settings.join(";")); UM.Preferences.setValue("general/visible_settings", settingVisibilityPresetsModel.getItem(index - 1).settings.join(";"));
// "Custom selection" entry is added in front, so index is off by 1 // "Custom selection" entry is added in front, so index is off by 1
} }
else else
@ -203,9 +204,9 @@ UM.PreferencesPage
{ {
onVisibilityChanged: onVisibilityChanged:
{ {
if(Cura.SettingVisibilityPresetsModel.activePreset != "" && !base.inhibitSwitchToCustom) if(settingVisibilityPresetsModel.activePreset != "" && !base.inhibitSwitchToCustom)
{ {
Cura.SettingVisibilityPresetsModel.setActivePreset("custom"); settingVisibilityPresetsModel.setActivePreset("custom");
} }
} }
} }

View file

@ -15,6 +15,7 @@ Item
{ {
id: base; id: base;
property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel()
property Action configureSettings property Action configureSettings
property bool findingSettings property bool findingSettings
property bool showingAllSettings property bool showingAllSettings
@ -562,9 +563,9 @@ Item
{ {
definitionsModel.hide(contextMenu.key); definitionsModel.hide(contextMenu.key);
// visible settings have changed, so we're no longer showing a preset // visible settings have changed, so we're no longer showing a preset
if (Cura.SettingVisibilityPresetsModel.activePreset != "" && !showingAllSettings) if (settingVisibilityPresetsModel.activePreset != "" && !showingAllSettings)
{ {
Cura.SettingVisibilityPresetsModel.setActivePreset("custom"); settingVisibilityPresetsModel.setActivePreset("custom");
} }
} }
} }
@ -594,16 +595,16 @@ Item
definitionsModel.show(contextMenu.key); definitionsModel.show(contextMenu.key);
} }
// visible settings have changed, so we're no longer showing a preset // visible settings have changed, so we're no longer showing a preset
if (Cura.SettingVisibilityPresetsModel.activePreset != "" && !showingAllSettings) if (settingVisibilityPresetsModel.activePreset != "" && !showingAllSettings)
{ {
Cura.SettingVisibilityPresetsModel.setActivePreset("custom"); settingVisibilityPresetsModel.setActivePreset("custom");
} }
} }
} }
MenuItem MenuItem
{ {
//: Settings context menu action //: Settings context menu action
text: catalog.i18nc("@action:menu", "Configure setting visiblity..."); text: catalog.i18nc("@action:menu", "Configure setting visibility...");
onTriggered: Cura.Actions.configureSettingVisibility.trigger(contextMenu); onTriggered: Cura.Actions.configureSettingVisibility.trigger(contextMenu);
} }