Change the Open File(s) option according to the file providers count

When there is only one file provider (i.e. the local file provider), the Open File(s) will be a
simple item in the File menu.
When there are more than one file providers, the Open File(s) will become a submenu in the File
menu, which will contain all the file providers as submenu items.

CURA-7868
This commit is contained in:
Kostas Karmas 2020-12-23 17:13:14 +01:00
parent 43615a57b6
commit 71994eaaf9
3 changed files with 31 additions and 9 deletions

View file

@ -30,6 +30,7 @@ from UM.Operations.SetTransformOperation import SetTransformOperation
from UM.Platform import Platform from UM.Platform import Platform
from UM.PluginError import PluginNotFoundError from UM.PluginError import PluginNotFoundError
from UM.Preferences import Preferences from UM.Preferences import Preferences
from UM.Qt.Bindings.FileProviderModel import FileProviderModel
from UM.Qt.QtApplication import QtApplication # The class we're inheriting from. from UM.Qt.QtApplication import QtApplication # The class we're inheriting from.
from UM.Resources import Resources from UM.Resources import Resources
from UM.Scene.Camera import Camera from UM.Scene.Camera import Camera
@ -822,6 +823,9 @@ class CuraApplication(QtApplication):
self._add_printer_pages_model_without_cancel.initialize(cancellable = False) self._add_printer_pages_model_without_cancel.initialize(cancellable = False)
self._whats_new_pages_model.initialize() self._whats_new_pages_model.initialize()
# Initialize the FileProviderModel
self._file_provider_model.initialize(self._onFileProviderEnabledChanged)
# Detect in which mode to run and execute that mode # Detect in which mode to run and execute that mode
if self._is_headless: if self._is_headless:
self.runWithoutGUI() self.runWithoutGUI()
@ -1051,6 +1055,13 @@ class CuraApplication(QtApplication):
self._simple_mode_settings_manager = SimpleModeSettingsManager() self._simple_mode_settings_manager = SimpleModeSettingsManager()
return self._simple_mode_settings_manager return self._simple_mode_settings_manager
@pyqtSlot(result = QObject)
def getFileProviderModel(self) -> FileProviderModel:
return self._file_provider_model
def _onFileProviderEnabledChanged(self):
self._file_provider_model.update()
def event(self, event): def event(self, event):
"""Handle Qt events""" """Handle Qt events"""

View file

@ -22,11 +22,23 @@ Menu
{ {
id: openMenu id: openMenu
action: Cura.Actions.open action: Cura.Actions.open
visible: CuraApplication.fileProviders.length > 0 // DEBUG: It's > 0 so that both options are visible for debugging purposes visible: (CuraApplication.getFileProviderModel().count == 1)
} }
OpenFilesMenu { OpenFilesMenu
visible: CuraApplication.fileProviders.length > 0 // DEBUG: It's > 0 so that both options are visible for debugging purposes {
id: openFilesMenu
visible: (CuraApplication.getFileProviderModel().count > 1)
}
Connections
{
target: CuraApplication.getFileProviderModel()
onItemsChanged:
{
openMenu.visible = (CuraApplication.getFileProviderModel().count == 1) // 1 because the open local files menu should always exist in the model
openFilesMenu.visible = (CuraApplication.getFileProviderModel().count > 1)
}
} }
RecentFilesMenu { } RecentFilesMenu { }

View file

@ -11,15 +11,14 @@ import "../Dialogs"
Menu Menu
{ {
id: menu id: openFilesMenu
title: catalog.i18nc("@title:menu menubar:file", "Open File(s)...") title: catalog.i18nc("@title:menu menubar:file", "Open File(s)...")
iconName: "document-open-recent"; iconName: "document-open-recent";
Instantiator Instantiator
{ {
id: fileProviders id: fileProviders
model: UM.FileProviderModel { } model: CuraApplication.getFileProviderModel()
MenuItem MenuItem
{ {
text: text:
@ -34,12 +33,12 @@ Menu
} }
else else
{ {
fileProviders.model.trigger(model.name); CuraApplication.getFileProviderModel().trigger(model.name);
} }
} }
shortcut: model.shortcut shortcut: model.shortcut
} }
onObjectAdded: menu.insertItem(index, object) onObjectAdded: openFilesMenu.insertItem(index, object)
onObjectRemoved: menu.removeItem(object) onObjectRemoved: openFilesMenu.removeItem(object)
} }
} }