def test_getStage(application): controller = Controller(application) stage_1 = Stage() stage_1.setPluginId("test_1") stage_2 = Stage() stage_2.setPluginId("test_2") controller.addStage(stage_1) controller.addStage(stage_2) assert controller.getStage("test_1") == stage_1 assert controller.getStage("test_2") == stage_2 assert controller.getStage("NOPE") is None
def test_getView(application): controller = Controller(application) view_1 = View() view_1.setPluginId("test_1") view_2 = View() view_2.setPluginId("test_2") controller.addView(view_1) controller.addView(view_2) assert controller.getView("test_1") == view_1 assert controller.getView("test_2") == view_2 assert controller.getView("NOPE") is None
def test_getSetToolsEnabled(application): controller = Controller(application) controller.setToolsEnabled(True) assert controller.getToolsEnabled() controller.setToolsEnabled(False) assert not controller.getToolsEnabled()
def test_addRemoveInputDevice(application): controller = Controller(application) input_device = InputDevice() input_device.setPluginId("input_device") controller.addInputDevice(input_device) controller.addInputDevice(input_device) # Doing it twice shouldn't cause issues. assert controller.getInputDevice("input_device") == input_device assert controller.getInputDevice("OMGZOMG") is None # This device isn't added controller.removeInputDevice("input_device") assert controller.getInputDevice("input_device") is None controller.removeInputDevice("input_device") #Removing it again shouldn't cause issues.
def test_toolOperations(application): controller = Controller(application) controller.toolOperationStarted.emit = MagicMock() controller.toolOperationStopped.emit = MagicMock() test_tool_1 = Tool() test_tool_1.setPluginId("test_tool_1") controller.addTool(test_tool_1) # The tool starts an operation test_tool_1.operationStarted.emit(test_tool_1) controller.toolOperationStarted.emit.assert_called_with(test_tool_1) assert controller.isToolOperationActive() # The tool stops doing something test_tool_1.operationStopped.emit(test_tool_1) controller.toolOperationStopped.emit.assert_called_with(test_tool_1) assert not controller.isToolOperationActive()
def test_addView(application): controller = Controller(application) view_1 = View() view_1.setPluginId("test_1") view_2 = View() view_2.setPluginId("test_1") controller.viewsChanged.emit = MagicMock() controller.addView(view_1) assert controller.getAllViews() == {"test_1": view_1} assert controller.viewsChanged.emit.call_count == 1 # Attempting to add the same view twice should not have any effect. controller.addView(view_1) assert controller.getAllViews() == {"test_1": view_1} assert controller.viewsChanged.emit.call_count == 1 # It has the same ID (although the view is different). In that case it still shouldn't be added. controller.addView(view_2) assert controller.getAllViews() == {"test_1": view_1} assert controller.viewsChanged.emit.call_count == 1
def test_addStage(application): controller = Controller(application) stage_1 = Stage() stage_1.setPluginId("test_1") stage_2 = Stage() stage_2.setPluginId("test_1") controller.stagesChanged.emit = MagicMock() controller.addStage(stage_1) assert controller.stagesChanged.emit.call_count == 1 assert controller.getAllStages() == {"test_1": stage_1} # Adding it again shouldn't influence anything controller.addStage(stage_1) assert controller.stagesChanged.emit.call_count == 1 assert controller.getAllStages() == {"test_1": stage_1} # Adding a different stage (but with the same ID) should also not do anything! controller.addStage(stage_2) assert controller.stagesChanged.emit.call_count == 1 assert controller.getAllStages() == {"test_1": stage_1}
def test_addTools(application): controller = Controller(application) # Switch out the emits with a mock. controller.toolsChanged.emit = MagicMock() controller.activeToolChanged.emit = MagicMock() test_tool_1 = Tool() test_tool_1.setPluginId("test_tool_1") test_tool_1.event = MagicMock() test_tool_2 = Tool() test_tool_2.setPluginId("test_tool_2") controller.addTool(test_tool_1) assert controller.toolsChanged.emit.call_count == 1 controller.addTool(test_tool_2) assert controller.toolsChanged.emit.call_count == 2 controller.addTool(test_tool_1) assert controller.toolsChanged.emit.call_count == 2 assert len(controller.getAllTools()) == 2 # Set active tool with an unknown name. controller.setActiveTool("nope nope!") assert controller.getActiveTool() is None assert controller.activeToolChanged.emit.call_count == 0 # Set active tool by reference controller.setActiveTool(test_tool_1) assert controller.getActiveTool() == test_tool_1 assert controller.activeToolChanged.emit.call_count == 1 # Check if the tool got notified that it's not active. assert test_tool_1.event.call_args_list[0][0][0].type == Event.ToolActivateEvent # Set active tool by ID, but the same as is already active. controller.setActiveTool("test_tool_1") assert controller.getActiveTool() == test_tool_1 assert controller.activeToolChanged.emit.call_count == 1 # Set active tool by ID controller.setActiveTool("test_tool_2") assert controller.getActiveTool() == test_tool_2 assert controller.activeToolChanged.emit.call_count == 2 # Check if the tool got notified that it's no longer active. assert test_tool_1.event.call_args_list[1][0][0].type == Event.ToolDeactivateEvent assert controller.getTool("ZOMG") is None assert controller.getTool("test_tool_1") == test_tool_1 assert controller.getTool("test_tool_2") == test_tool_2
def test_setActiveStage(application): controller = Controller(application) controller.activeStageChanged.emit = MagicMock() stage_1 = Stage() stage_1.setPluginId("test_1") stage_1.onStageSelected = MagicMock() stage_1.onStageDeselected = MagicMock() stage_2 = Stage() stage_2.setPluginId("test_2") controller.addStage(stage_1) controller.addStage(stage_2) # Attempting to set the stage to a non existing one shouldn't do anything controller.setActiveStage("blorp") assert controller.activeStageChanged.emit.call_count == 0 # Changing it from no state to an added state should work. controller.setActiveStage("test_1") assert controller.getActiveStage() == stage_1 stage_1.onStageSelected.assert_called_once_with() # Attempting to change to a stage that doesn't exist shouldn't do anything. controller.setActiveStage("blorp") assert controller.getActiveStage() == stage_1 stage_1.onStageSelected.assert_called_once_with() stage_1.onStageDeselected.assert_not_called() # Changing to the already active stage should also not do anything. controller.setActiveStage("test_1") assert controller.getActiveStage() == stage_1 stage_1.onStageSelected.assert_called_once_with() stage_1.onStageDeselected.assert_not_called() # Actually changing it to a stage that is added and not active should have an effect controller.setActiveStage("test_2") stage_1.onStageDeselected.assert_called_with() assert controller.getActiveStage() == stage_2
def initialize(self) -> None: # For Ubuntu Unity this makes Qt use its own menu bar rather than pass it on to Unity. os.putenv("UBUNTU_MENUPROXY", "0") # Custom signal handling Signal._app = self Signal._signalQueue = self # Initialize Resources. Set the application name and version here because we can only know the actual info # after the __init__() has been called. Resources.ApplicationIdentifier = self._app_name Resources.ApplicationVersion = self._version Resources.addSearchPath( os.path.join(os.path.dirname(sys.executable), "resources")) Resources.addSearchPath( os.path.join(self._app_install_dir, "share", "uranium", "resources")) Resources.addSearchPath( os.path.join(self._app_install_dir, "Resources", "uranium", "resources")) Resources.addSearchPath( os.path.join(self._app_install_dir, "Resources", self._app_name, "resources")) if not hasattr(sys, "frozen"): Resources.addSearchPath( os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "resources")) i18nCatalog.setApplication(self) PluginRegistry.addType("backend", self.setBackend) PluginRegistry.addType("logger", Logger.addLogger) PluginRegistry.addType("extension", self.addExtension) self._preferences = Preferences() self._preferences.addPreference("general/language", self._default_language) self._preferences.addPreference("general/visible_settings", "") self._preferences.addPreference("general/plugins_to_remove", "") self._preferences.addPreference("general/disabled_plugins", "") self._controller = Controller(self) self._output_device_manager = OutputDeviceManager() self._operation_stack = OperationStack( self._controller) # type: OperationStack self._plugin_registry = PluginRegistry(self) #type: PluginRegistry self._plugin_registry.addPluginLocation( os.path.join(self._app_install_dir, "lib", "uranium")) self._plugin_registry.addPluginLocation( os.path.join(self._app_install_dir, "lib64", "uranium")) self._plugin_registry.addPluginLocation( os.path.join(self._app_install_dir, "lib32", "uranium")) self._plugin_registry.addPluginLocation( os.path.join(os.path.dirname(sys.executable), "plugins")) self._plugin_registry.addPluginLocation( os.path.join(self._app_install_dir, "Resources", "uranium", "plugins")) self._plugin_registry.addPluginLocation( os.path.join(self._app_install_dir, "Resources", self._app_name, "plugins")) # Locally installed plugins local_path = os.path.join( Resources.getStoragePath(Resources.Resources), "plugins") # Ensure the local plugins directory exists try: os.makedirs(local_path) except OSError: pass self._plugin_registry.addPluginLocation(local_path) if not hasattr(sys, "frozen"): self._plugin_registry.addPluginLocation( os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "plugins")) self._container_registry = self._container_registry_class(self) UM.Settings.InstanceContainer.setContainerRegistry( self._container_registry) UM.Settings.ContainerStack.setContainerRegistry( self._container_registry) # Initialize the package manager to remove and install scheduled packages. self._package_manager = self._package_manager_class(self) self.showMessageSignal.connect(self.showMessage) self.hideMessageSignal.connect(self.hideMessage)
def __init__(self, name, version, **kwargs): if (Application._instance != None): raise ValueError("Duplicate singleton creation") # If the constructor is called and there is no instance, set the instance to self. # This is done because we can't make constructor private Application._instance = self self._application_name = name self._version = version os.putenv( "UBUNTU_MENUPROXY", "0" ) #For Ubuntu Unity this makes Qt use its own menu bar rather than pass it on to Unity. Signal._app = self Resources.ApplicationIdentifier = name i18nCatalog.setApplication(self) Resources.addSearchPath(os.path.dirname(sys.executable)) Resources.addSearchPath( os.path.join(Application.getInstallPrefix(), "share", "uranium")) Resources.addSearchPath( os.path.join(Application.getInstallPrefix(), "Resources", "uranium")) Resources.addSearchPath( os.path.join(Application.getInstallPrefix(), "Resources", self.getApplicationName())) if not hasattr(sys, "frozen"): Resources.addSearchPath( os.path.join(os.path.abspath(os.path.dirname(__file__)), "..")) self._main_thread = threading.current_thread() super().__init__( **kwargs) # Call super to make multiple inheritence work. self._renderer = None PluginRegistry.addType("backend", self.setBackend) PluginRegistry.addType("logger", Logger.addLogger) PluginRegistry.addType("extension", self.addExtension) preferences = Preferences.getInstance() preferences.addPreference("general/language", "en") try: preferences.readFromFile( Resources.getPath(Resources.Preferences, self._application_name + ".cfg")) except FileNotFoundError: pass self._controller = Controller(self) self._mesh_file_handler = MeshFileHandler() self._extensions = [] self._backend = None self._output_device_manager = OutputDeviceManager() self._machine_manager = MachineManager(self._application_name) self._required_plugins = [] self._operation_stack = OperationStack() self._plugin_registry = PluginRegistry.getInstance() self._plugin_registry.addPluginLocation( os.path.join(Application.getInstallPrefix(), "lib", "uranium")) self._plugin_registry.addPluginLocation( os.path.join(os.path.dirname(sys.executable), "plugins")) self._plugin_registry.addPluginLocation( os.path.join(Application.getInstallPrefix(), "Resources", "uranium", "plugins")) self._plugin_registry.addPluginLocation( os.path.join(Application.getInstallPrefix(), "Resources", self.getApplicationName(), "plugins")) # Locally installed plugins self._plugin_registry.addPluginLocation( os.path.join(Resources.getStoragePath(Resources.Resources), "plugins")) if not hasattr(sys, "frozen"): self._plugin_registry.addPluginLocation( os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "plugins")) self._plugin_registry.setApplication(self) self._parsed_command_line = None self.parseCommandLine() self._visible_messages = [] self._message_lock = threading.Lock() self.showMessageSignal.connect(self.showMessage) self.hideMessageSignal.connect(self.hideMessage)
def test_tools(): mock_application = MagicMock() Application.getInstance = MagicMock(return_type=mock_application) controller = Controller(mock_application) # Switch out the emits with a mock. controller.toolsChanged.emit = MagicMock() controller.activeToolChanged.emit = MagicMock() controller.toolOperationStarted.emit = MagicMock() controller.toolOperationStopped.emit = MagicMock() test_tool_1 = Tool() test_tool_1.setPluginId("test_tool_1") test_tool_2 = Tool() test_tool_2.setPluginId("test_tool_2") controller.addTool(test_tool_1) assert controller.toolsChanged.emit.call_count == 1 controller.addTool(test_tool_2) assert controller.toolsChanged.emit.call_count == 2 controller.addTool(test_tool_1) assert controller.toolsChanged.emit.call_count == 2 assert len(controller.getAllTools()) == 2 # Set if with an unknown name. controller.setActiveTool("nope nope!") assert controller.getActiveTool() is None assert controller.activeToolChanged.emit.call_count == 0 # Set active tool by reference controller.setActiveTool(test_tool_1) assert controller.getActiveTool() == test_tool_1 assert controller.activeToolChanged.emit.call_count == 1 # Set active tool by ID, but the same as is already active. controller.setActiveTool("test_tool_1") assert controller.getActiveTool() == test_tool_1 assert controller.activeToolChanged.emit.call_count == 1 # Set active tool by ID controller.setActiveTool("test_tool_2") assert controller.getActiveTool() == test_tool_2 assert controller.activeToolChanged.emit.call_count == 2 assert controller.getTool("ZOMG") is None assert controller.getTool("test_tool_1") == test_tool_1 assert controller.getTool("test_tool_2") == test_tool_2
def __init__(self, name: str, version: str, build_type: str = "", is_debug_mode: bool = False, parser: argparse.ArgumentParser = None, parsed_command_line: Dict[str, Any] = None, **kwargs) -> None: if Application._instance is not None: raise ValueError("Duplicate singleton creation") if parsed_command_line is None: parsed_command_line = {} # If the constructor is called and there is no instance, set the instance to self. # This is done because we can't make constructor private Application._instance = self self._application_name = name #type: str self._version = version #type: str self._build_type = build_type #type: str if "debug" in parsed_command_line.keys(): if not parsed_command_line["debug"] and is_debug_mode: parsed_command_line["debug"] = is_debug_mode os.putenv("UBUNTU_MENUPROXY", "0") # For Ubuntu Unity this makes Qt use its own menu bar rather than pass it on to Unity. Signal._app = self Signal._signalQueue = self Resources.ApplicationIdentifier = name Resources.ApplicationVersion = version Resources.addSearchPath(os.path.join(os.path.dirname(sys.executable), "resources")) Resources.addSearchPath(os.path.join(Application.getInstallPrefix(), "share", "uranium", "resources")) Resources.addSearchPath(os.path.join(Application.getInstallPrefix(), "Resources", "uranium", "resources")) Resources.addSearchPath(os.path.join(Application.getInstallPrefix(), "Resources", self.getApplicationName(), "resources")) if not hasattr(sys, "frozen"): Resources.addSearchPath(os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "resources")) self._main_thread = threading.current_thread() #type: threading.Thread super().__init__() # Call super to make multiple inheritance work. i18nCatalog.setApplication(self) self._renderer = None #type: Renderer PluginRegistry.addType("backend", self.setBackend) PluginRegistry.addType("logger", Logger.addLogger) PluginRegistry.addType("extension", self.addExtension) self.default_theme = self.getApplicationName() #type: str preferences = Preferences.getInstance() preferences.addPreference("general/language", "en_US") preferences.addPreference("general/visible_settings", "") preferences.addPreference("general/plugins_to_remove", "") preferences.addPreference("general/disabled_plugins", "") try: preferences.readFromFile(Resources.getPath(Resources.Preferences, self._application_name + ".cfg")) except FileNotFoundError: pass self._controller = Controller(self) #type: Controller self._extensions = [] #type: List[Extension] self._backend = None #type: Backend self._output_device_manager = OutputDeviceManager() #type: OutputDeviceManager self._required_plugins = [] #type: List[str] self._operation_stack = OperationStack(self.getController()) #type: OperationStack self._plugin_registry = PluginRegistry.getInstance() #type: PluginRegistry self._plugin_registry.addPluginLocation(os.path.join(Application.getInstallPrefix(), UraniumLibraryDir, "uranium")) self._plugin_registry.addPluginLocation(os.path.join(os.path.dirname(sys.executable), "plugins")) self._plugin_registry.addPluginLocation(os.path.join(Application.getInstallPrefix(), "Resources", "uranium", "plugins")) self._plugin_registry.addPluginLocation(os.path.join(Application.getInstallPrefix(), "Resources", self.getApplicationName(), "plugins")) # Locally installed plugins local_path = os.path.join(Resources.getStoragePath(Resources.Resources), "plugins") # Ensure the local plugins directory exists try: os.makedirs(local_path) except OSError: pass self._plugin_registry.addPluginLocation(local_path) if not hasattr(sys, "frozen"): self._plugin_registry.addPluginLocation(os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "plugins")) self._plugin_registry.setApplication(self) ContainerRegistry.setApplication(self) UM.Settings.InstanceContainer.setContainerRegistry(self.getContainerRegistry()) UM.Settings.ContainerStack.setContainerRegistry(self.getContainerRegistry()) self._command_line_parser = parser #type: argparse.ArgumentParser self._parsed_command_line = parsed_command_line #type: Dict[str, Any] self.parseCommandLine() self._visible_messages = [] #type: List[Message] self._message_lock = threading.Lock() #type: threading.Lock self.showMessageSignal.connect(self.showMessage) self.hideMessageSignal.connect(self.hideMessage) self._global_container_stack = None #type: ContainerStack
def test_setCameraTool(application): controller = Controller(application) camera_tool = Tool() camera_tool.setPluginId("camera_tool") controller.addTool(camera_tool) controller.setCameraTool(camera_tool) assert controller.getCameraTool() == camera_tool controller.setCameraTool("") assert controller.getCameraTool() is None controller.setCameraTool("camera_tool") assert controller.getCameraTool() == camera_tool
def test_eventHandling(application): controller = Controller(application) selection_tool = Tool() selection_tool.setPluginId("selection_tool") selection_tool.event = MagicMock(return_value = True) camera_tool = Tool() camera_tool.setPluginId("camera_tool") camera_tool.event = MagicMock(return_value=True) random_tool = Tool() random_tool.setPluginId("random_tool") random_tool.event = MagicMock(return_value=True) event = Event(1) controller.setCameraTool(camera_tool) controller.event(event) # Only the camera tool should be called now. camera_tool.event.assert_called_once_with(event) controller.setActiveTool(random_tool) random_tool.event.reset_mock() # We don't care about activation events. controller.event(event) # The camera tool should not get an extra call camera_tool.event.assert_called_once_with(event) # But the active tool should have gotten one random_tool.event.assert_called_once_with(event) controller.setSelectionTool(selection_tool) controller.event(event) # The camera tool should not get an extra call camera_tool.event.assert_called_once_with(event) # The active tool should not get an extra call random_tool.event.assert_called_once_with(event) # But the selection tool should have gotten one selection_tool.event.assert_called_once_with(event)
def test_tools(): mock_application = MagicMock() Application.getInstance = MagicMock(return_type = mock_application) controller = Controller(mock_application) # Switch out the emits with a mock. controller.toolsChanged.emit = MagicMock() controller.activeToolChanged.emit = MagicMock() controller.toolOperationStarted.emit = MagicMock() controller.toolOperationStopped.emit = MagicMock() test_tool_1 = Tool() test_tool_1.setPluginId("test_tool_1") test_tool_2 = Tool() test_tool_2.setPluginId("test_tool_2") controller.addTool(test_tool_1) assert controller.toolsChanged.emit.call_count == 1 controller.addTool(test_tool_2) assert controller.toolsChanged.emit.call_count == 2 controller.addTool(test_tool_1) assert controller.toolsChanged.emit.call_count == 2 assert len(controller.getAllTools()) == 2 # Set if with an unknown name. controller.setActiveTool("nope nope!") assert controller.getActiveTool() is None assert controller.activeToolChanged.emit.call_count == 0 # Set active tool by reference controller.setActiveTool(test_tool_1) assert controller.getActiveTool() == test_tool_1 assert controller.activeToolChanged.emit.call_count == 1 # Set active tool by ID, but the same as is already active. controller.setActiveTool("test_tool_1") assert controller.getActiveTool() == test_tool_1 assert controller.activeToolChanged.emit.call_count == 1 # Set active tool by ID controller.setActiveTool("test_tool_2") assert controller.getActiveTool() == test_tool_2 assert controller.activeToolChanged.emit.call_count == 2 assert controller.getTool("ZOMG") is None assert controller.getTool("test_tool_1") == test_tool_1 assert controller.getTool("test_tool_2") == test_tool_2
def test_setActiveView(application): controller = Controller(application) view_1 = View() view_1.setPluginId("test_1") view_2 = View() view_2.setPluginId("test_2") controller.addView(view_1) controller.addView(view_2) controller.activeViewChanged.emit = MagicMock() # Attempting to set the view to a non existing one shouldn't do anything controller.setActiveView("blorp") assert controller.activeViewChanged.emit.call_count == 0 view_1.event = MagicMock() controller.setActiveView("test_1") assert controller.activeViewChanged.emit.call_count == 1 assert controller.getActiveView() == view_1 # Ensure that the view gets notified that it was activated. assert view_1.event.call_args_list[0][0][0].type == Event.ViewActivateEvent controller.setActiveView("test_2") assert controller.getActiveView() == view_2 assert controller.activeViewChanged.emit.call_count == 2 # Ensure that the view was notified that it got deactivated again assert view_1.event.call_args_list[1][0][0].type == Event.ViewDeactivateEvent
def __init__(self, name: str, version: str, build_type: str = "", **kwargs): if Application._instance != None: raise ValueError("Duplicate singleton creation") # If the constructor is called and there is no instance, set the instance to self. # This is done because we can't make constructor private Application._instance = self self._application_name = name self._version = version self._build_type = build_type os.putenv("UBUNTU_MENUPROXY", "0") # For Ubuntu Unity this makes Qt use its own menu bar rather than pass it on to Unity. Signal._app = self Signal._signalQueue = self Resources.ApplicationIdentifier = name Resources.ApplicationVersion = version Resources.addSearchPath(os.path.join(os.path.dirname(sys.executable), "resources")) Resources.addSearchPath(os.path.join(Application.getInstallPrefix(), "share", "uranium", "resources")) Resources.addSearchPath(os.path.join(Application.getInstallPrefix(), "Resources", "uranium", "resources")) Resources.addSearchPath(os.path.join(Application.getInstallPrefix(), "Resources", self.getApplicationName(), "resources")) #Fixme:CuraApplication will add the path again, so comment this # if not hasattr(sys, "frozen"): # Resources.addSearchPath(os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "resources")) self._main_thread = threading.current_thread() super().__init__() # Call super to make multiple inheritance work. i18nCatalog.setApplication(self) self._renderer = None PluginRegistry.addType("backend", self.setBackend) PluginRegistry.addType("logger", Logger.addLogger) PluginRegistry.addType("extension", self.addExtension) preferences = Preferences.getInstance() preferences.addPreference("general/language", "en") preferences.addPreference("general/visible_settings", "") try: preferences.readFromFile(Resources.getPath(Resources.Preferences, self._application_name + ".cfg")) except FileNotFoundError: pass self._controller = Controller(self) self._mesh_file_handler = MeshFileHandler.getInstance() self._mesh_file_handler.setApplication(self) self._workspace_file_handler = WorkspaceFileHandler.getInstance() self._workspace_file_handler.setApplication(self) self._extensions = [] self._backend = None self._output_device_manager = OutputDeviceManager() self._required_plugins = [] self._operation_stack = OperationStack(self.getController()) self._plugin_registry = PluginRegistry.getInstance() self._plugin_registry.addPluginLocation(os.path.join(Application.getInstallPrefix(), "lib", "uranium")) self._plugin_registry.addPluginLocation(os.path.join(os.path.dirname(sys.executable), "plugins")) self._plugin_registry.addPluginLocation(os.path.join(Application.getInstallPrefix(), "Resources", "uranium", "plugins")) self._plugin_registry.addPluginLocation(os.path.join(Application.getInstallPrefix(), "Resources", self.getApplicationName(), "plugins")) # Locally installed plugins local_path = os.path.join(Resources.getStoragePath(Resources.Resources), "plugins") # Ensure the local plugins directory exists try: os.makedirs(local_path) except OSError: pass self._plugin_registry.addPluginLocation(local_path) # Fixme:CuraApplication will add the path again, so comment this # if not hasattr(sys, "frozen"): # self._plugin_registry.addPluginLocation(os.path.join(os.path.abspath(os.path.dirname(__file__)), "..", "plugins")) self._plugin_registry.setApplication(self) ContainerRegistry.setApplication(self) UM.Settings.InstanceContainer.setContainerRegistry(self.getContainerRegistry()) UM.Settings.ContainerStack.setContainerRegistry(self.getContainerRegistry()) self._parsed_command_line = None self.parseCommandLine() self._visible_messages = [] self._message_lock = threading.Lock() self.showMessageSignal.connect(self.showMessage) self.hideMessageSignal.connect(self.hideMessage) self._global_container_stack = None