PerObjectSettingsTool.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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.Preferences import Preferences
  7. from . import PerObjectSettingsModel
  8. class PerObjectSettingsTool(Tool):
  9. def __init__(self):
  10. super().__init__()
  11. self._model = None
  12. self.setExposedProperties("Model", "SelectedIndex")
  13. Preferences.getInstance().preferenceChanged.connect(self._onPreferenceChanged)
  14. self._onPreferenceChanged("cura/active_mode")
  15. def event(self, event):
  16. return False
  17. def getModel(self):
  18. if not self._model:
  19. self._model = PerObjectSettingsModel.PerObjectSettingsModel()
  20. #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.
  21. #Yeah, we have no idea either...
  22. return PerObjectSettingsModel.PerObjectSettingsModel(self._model)
  23. def getSelectedIndex(self):
  24. try:
  25. selected_object = Selection.getSelectedObject(0)
  26. if selected_object.getParent().callDecoration("isGroup"):
  27. selected_object = selected_object.getParent()
  28. except:
  29. selected_object = None
  30. selected_object_id = id(selected_object)
  31. index = self.getModel().find("id", selected_object_id)
  32. return index
  33. def _onPreferenceChanged(self, preference):
  34. if preference == "cura/active_mode":
  35. enabled = Preferences.getInstance().getValue(preference)==1
  36. Application.getInstance().getController().toolEnabledChanged.emit(self._plugin_id, enabled)