Move sidebar target for plugins to only middle section

This commit is contained in:
ChrisTerBeke 2017-12-05 10:56:59 +01:00
parent 5673a834bc
commit e33288b7c8
7 changed files with 67 additions and 92 deletions

View file

@ -79,7 +79,6 @@ from cura.Settings.ExtruderStack import ExtruderStack
from cura.Sidebar.SidebarController import SidebarController from cura.Sidebar.SidebarController import SidebarController
from cura.Sidebar.SidebarControllerProxy import SidebarControllerProxy from cura.Sidebar.SidebarControllerProxy import SidebarControllerProxy
from cura.Sidebar.SidebarViewModel import SidebarViewModel from cura.Sidebar.SidebarViewModel import SidebarViewModel
from cura.Settings.SettingsSidebarView import SettingsSidebarView
from PyQt5.QtCore import QUrl, pyqtSignal, pyqtProperty, QEvent, Q_ENUMS from PyQt5.QtCore import QUrl, pyqtSignal, pyqtProperty, QEvent, Q_ENUMS
from UM.FlameProfiler import pyqtSlot from UM.FlameProfiler import pyqtSlot
@ -1319,16 +1318,10 @@ class CuraApplication(QtApplication):
def _addProfileWriter(self, profile_writer): def _addProfileWriter(self, profile_writer):
pass pass
## Create and register the default sidebar component (settings) ## Set the default sidebar view to "default"
def _setDefaultSidebarView(self): def _setDefaultSidebarView(self):
# Register the default settings sidebar manually
settings_sidebar_view = SettingsSidebarView()
self._sidebar_controller.addSidebarView(settings_sidebar_view)
# Set the default sidebar view depending on user preferences.
preferences = Preferences.getInstance() preferences = Preferences.getInstance()
preferences.addPreference("cura/active_sidebar_view", settings_sidebar_view.getPluginId()) preferences.addPreference("cura/active_sidebar_view", "default")
active_sidebar_view = preferences.getValue("cura/active_sidebar_view") active_sidebar_view = preferences.getValue("cura/active_sidebar_view")
self._sidebar_controller.setActiveSidebarView(active_sidebar_view) self._sidebar_controller.setActiveSidebarView(active_sidebar_view)

View file

@ -1,28 +0,0 @@
# Copyright (c) 2017 Ultimaker B.V.
from PyQt5.QtCore import QObject
from UM.i18n import i18nCatalog
from cura.Sidebar.SidebarView import SidebarView
i18n_catalog = i18nCatalog("cura")
class SettingsSidebarView(QObject, SidebarView):
def __init__(self, parent = None):
super().__init__(parent)
## As the default sidebar is not a plugin, we have a get plugin ID method to allow the sidebar view model to get the needed data.
def getPluginId(self):
return "default"
## As the default sidebar is not a plugin, we have a add meta data method here to allow the sidebar view model to get the needed data.
def getMetaData(self):
return {
"sidebar_view": {
"name": i18n_catalog.i18nc("@item:inmenu", "Print settings"),
"weight": 0
}
}
def getComponent(self):
return None

View file

@ -10,7 +10,7 @@ class SidebarController:
def __init__(self, application): def __init__(self, application):
self._application = application self._application = application
self._sidebar_views = {} self._sidebar_views = {"default": {}} # default is needed for the default settings sidebar
self._active_sidebar_view = None self._active_sidebar_view = None
# Register the sidebar_view plugin type so plugins can expose custom sidebar views. # Register the sidebar_view plugin type so plugins can expose custom sidebar views.
@ -51,6 +51,13 @@ class SidebarController:
def getActiveSidebarView(self): def getActiveSidebarView(self):
return self._active_sidebar_view return self._active_sidebar_view
## Get the ID of the active sidebar view.
def getActiveSidebarViewId(self):
if self._active_sidebar_view:
if hasattr(self._active_sidebar_view, "getPluginId"):
return self._active_sidebar_view.getPluginId()
return "default"
## Change the active sidebar view to one of the registered views. ## Change the active sidebar view to one of the registered views.
def setActiveSidebarView(self, sidebar_view_id: str): def setActiveSidebarView(self, sidebar_view_id: str):
if sidebar_view_id in self._sidebar_views: if sidebar_view_id in self._sidebar_views:

View file

@ -22,10 +22,7 @@ class SidebarControllerProxy(QObject):
@pyqtProperty(str, notify = activeSidebarViewChanged) @pyqtProperty(str, notify = activeSidebarViewChanged)
def activeSidebarId(self): def activeSidebarId(self):
if self._controller.getActiveSidebarView() is not None: return self._controller.getActiveSidebarViewId()
return self._controller.getActiveSidebarView().getPluginId()
else:
return "default"
@pyqtSlot(str) @pyqtSlot(str)
def setActiveSidebarView(self, sidebar_view_id): def setActiveSidebarView(self, sidebar_view_id):

View file

@ -34,10 +34,18 @@ class SidebarViewModel(ListModel):
current_view_id = current_view.getPluginId() current_view_id = current_view.getPluginId()
for sidebar_view_id, sidebar_view in sidebar_views.items(): for sidebar_view_id, sidebar_view in sidebar_views.items():
if sidebar_view_id != "default":
sidebar_view_metadata = PluginRegistry.getInstance().getMetaData(sidebar_view_id).get("sidebar_view", {}) # Override fields for default settings sidebar
else: if sidebar_view_id == "default":
sidebar_view_metadata = sidebar_view.getMetaData().get("sidebar_view", {}) items.append({
"id": "default",
"name": "Print settings",
"weight": 0,
"active": current_view_id == "default"
})
continue
sidebar_view_metadata = PluginRegistry.getInstance().getMetaData(sidebar_view_id).get("sidebar_view", {})
# Skip view modes that are marked as not visible # Skip view modes that are marked as not visible
if "visible" in sidebar_view_metadata and not sidebar_view_metadata["visible"]: if "visible" in sidebar_view_metadata and not sidebar_view_metadata["visible"]:

View file

@ -395,30 +395,6 @@ UM.MainWindow
width: parent.width width: parent.width
z: 1 z: 1
monitoringPrint: base.showPrintMonitor monitoringPrint: base.showPrintMonitor
visible: Cura.SidebarController.activeSidebarId == "default"
}
// The sidebarRepeater exposes sidebar views provided by plugins.
// Whenever a plugin sidebar view is active (e.g. not "default"), that sidebar view is shown.
Repeater
{
id: sidebarRepeater
model: Cura.SidebarViewModel { }
delegate: Loader
{
id: delegate
asynchronous: true
visible: model.active
// dynamically get the component from the sidebar controller or set the default sidebar
sourceComponent: {
if (model.id !== "default") {
return Cura.SidebarController.getSidebarComponent(model.id)
}
}
}
} }
} }

View file

@ -87,25 +87,6 @@ Rectangle
} }
} }
SidebarHeader {
id: header
width: parent.width
visible: machineExtruderCount.properties.value > 1 || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants
onShowTooltip: base.showTooltip(item, location, text)
onHideTooltip: base.hideTooltip()
}
Rectangle {
id: headerSeparator
width: parent.width
visible: settingsModeSelection.visible && header.visible
height: visible ? UM.Theme.getSize("sidebar_lining").height : 0
color: UM.Theme.getColor("sidebar_lining")
anchors.top: header.bottom
anchors.topMargin: visible ? UM.Theme.getSize("sidebar_margin").height : 0
}
onCurrentModeIndexChanged: onCurrentModeIndexChanged:
{ {
UM.Preferences.setValue("cura/active_mode", currentModeIndex); UM.Preferences.setValue("cura/active_mode", currentModeIndex);
@ -115,6 +96,24 @@ Rectangle
} }
} }
SidebarHeader {
id: header
width: parent.width
visible: (machineExtruderCount.properties.value > 1 || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants) && Cura.SidebarController.activeSidebarId == "default"
onShowTooltip: base.showTooltip(item, location, text)
onHideTooltip: base.hideTooltip()
}
Rectangle {
id: headerSeparator
width: parent.width
visible: settingsModeSelection.visible && header.visible && Cura.SidebarController.activeSidebarId == "default"
height: visible ? UM.Theme.getSize("sidebar_lining").height : 0
color: UM.Theme.getColor("sidebar_lining")
anchors.top: header.bottom
anchors.topMargin: visible ? UM.Theme.getSize("sidebar_margin").height : 0
}
Label { Label {
id: settingsModeLabel id: settingsModeLabel
text: !hideSettings ? catalog.i18nc("@label:listbox", "Print Setup") : catalog.i18nc("@label:listbox","Print Setup disabled\nG-code files cannot be modified"); text: !hideSettings ? catalog.i18nc("@label:listbox", "Print Setup") : catalog.i18nc("@label:listbox","Print Setup disabled\nG-code files cannot be modified");
@ -125,7 +124,7 @@ Rectangle
width: Math.floor(parent.width * 0.45) width: Math.floor(parent.width * 0.45)
font: UM.Theme.getFont("large") font: UM.Theme.getFont("large")
color: UM.Theme.getColor("text") color: UM.Theme.getColor("text")
visible: !monitoringPrint && !hideView visible: !monitoringPrint && !hideView && Cura.SidebarController.activeSidebarId == "default"
} }
Rectangle { Rectangle {
@ -147,7 +146,7 @@ Rectangle
} }
} }
anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.topMargin: UM.Theme.getSize("sidebar_margin").height
visible: !monitoringPrint && !hideSettings && !hideView visible: !monitoringPrint && !hideSettings && !hideView && Cura.SidebarController.activeSidebarId == "default"
Component{ Component{
id: wizardDelegate id: wizardDelegate
Button { Button {
@ -228,7 +227,7 @@ Rectangle
anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.topMargin: UM.Theme.getSize("sidebar_margin").height
anchors.left: base.left anchors.left: base.left
anchors.right: base.right anchors.right: base.right
visible: !monitoringPrint && !hideSettings visible: !monitoringPrint && !hideSettings && Cura.SidebarController.activeSidebarId == "default"
delegate: StackViewDelegate delegate: StackViewDelegate
{ {
@ -259,6 +258,29 @@ Rectangle
} }
} }
// The sidebarRepeater exposes sidebar views provided by plugins.
// Whenever a plugin sidebar view is active (e.g. not "default"), that sidebar view is shown.
Repeater
{
id: sidebarRepeater
model: Cura.SidebarViewModel { }
delegate: Loader
{
id: delegate
asynchronous: true
visible: model.active
// dynamically get the component from the sidebar controller or set the default sidebar
sourceComponent: {
if (model.id !== "default") {
return Cura.SidebarController.getSidebarComponent(model.id)
}
}
}
}
Loader Loader
{ {
id: controlItem id: controlItem