PerObjectSettingsTool.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # Copyright (c) 2015 Ultimaker B.V.
  2. # Uranium is released under the terms of the AGPLv3 or higher.
  3. from UM.Tool import Tool
  4. from UM.Scene.Selection import Selection
  5. from UM.Application import Application
  6. from UM.Qt.ListModel import ListModel
  7. from UM.Preferences import Preferences
  8. from . import PerObjectSettingsModel
  9. class PerObjectSettingsTool(Tool):
  10. def __init__(self):
  11. super().__init__()
  12. self._model = None
  13. self.setExposedProperties("Model", "SelectedIndex")
  14. Preferences.getInstance().preferenceChanged.connect(self._onPreferenceChanged)
  15. self._onPreferenceChanged("cura/active_mode")
  16. def event(self, event):
  17. return False
  18. def getModel(self):
  19. if not self._model:
  20. self._model = PerObjectSettingsModel.PerObjectSettingsModel()
  21. #For some reason, casting this model to itself causes the model to properly be cast to a QVariant, even though it ultimately inherits from QVariant.
  22. #Yeah, we have no idea either...
  23. return PerObjectSettingsModel.PerObjectSettingsModel(self._model)
  24. def getSelectedIndex(self):
  25. try:
  26. selected_object = Selection.getSelectedObject(0)
  27. if selected_object.getParent().callDecoration("isGroup"):
  28. selected_object = selected_object.getParent()
  29. except:
  30. selected_object = None
  31. selected_object_id = id(selected_object)
  32. index = self.getModel().find("id", selected_object_id)
  33. return index
  34. def _onPreferenceChanged(self, preference):
  35. if preference == "cura/active_mode":
  36. enabled = Preferences.getInstance().getValue(preference)==1
  37. Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, enabled)