Cura/plugins/LocalFileProvider/LocalFileProvider.py
Ghostkeeper 00de7497a4
Move open dialogue to separate file provider plug-in
We can now define plug-ins that specify where to open files from. This is one of the places where you can open files.
This breaks the main button to open files in the interface. It needs to be redirected to trigger the plug-in to show the open file dialogue.

Contributest o issue CURA-7868.
2021-01-04 18:11:00 +01:00

47 lines
1.7 KiB
Python

# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import os.path
from UM.FileProvider import FileProvider # The plug-in type we're going to implement.
from UM.i18n import i18nCatalog
from UM.Logger import Logger
from UM.PluginRegistry import PluginRegistry # To get resources from the plug-in folder.
from cura.CuraApplication import CuraApplication # To create QML elements.
i18n_catalog = i18nCatalog("cura")
class LocalFileProvider(FileProvider):
"""
Allows the user to open files from their local file system.
These files will then be interpreted through the file handlers.
"""
def __init__(self):
super().__init__()
self.menu_item_display_text = i18n_catalog.i18nc("@menu Open files from local disk", "Local disk")
self.shortcut = "Ctrl+O"
self._dialog = None # Lazy-load this QML element.
def _load_file_dialog(self):
"""
Loads the file dialog QML element into the QML context so that it can be shown.
:return:
"""
plugin_path = PluginRegistry.getInstance().getPluginPath(self.getPluginId())
if plugin_path is None:
plugin_path = os.path.dirname(__file__)
path = os.path.join(plugin_path, "OpenLocalFile.qml")
self._dialog = CuraApplication.getInstance().createQmlComponent(path)
if self._dialog is None:
Logger.log("e", "Unable to create open file dialogue.")
def run(self):
if self._dialog is None:
self._load_file_dialog()
if self._dialog is None:
return # Will already have logged an error in _load_file_dialog.
self._dialog.show()