diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 997ed7782e..5acaecbdd5 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -76,10 +76,6 @@ from cura.Settings.ContainerManager import ContainerManager from cura.Settings.GlobalStack import GlobalStack from cura.Settings.ExtruderStack import ExtruderStack -from cura.Sidebar.SidebarController import SidebarController -from cura.Sidebar.SidebarControllerProxy import SidebarControllerProxy -from cura.Sidebar.SidebarViewModel import SidebarViewModel - from PyQt5.QtCore import QUrl, pyqtSignal, pyqtProperty, QEvent, Q_ENUMS from UM.FlameProfiler import pyqtSlot from PyQt5.QtGui import QColor, QIcon @@ -200,10 +196,6 @@ class CuraApplication(QtApplication): } ) - ## As of Cura 3.2, the sidebar is controlled by a controller. - # This functionality was added to allow plugins registering custom sidebar views. - self._sidebar_controller = SidebarController(self) - self._currently_loading_files = [] self._non_sliceable_extensions = [] @@ -727,10 +719,6 @@ class CuraApplication(QtApplication): if not run_headless: self.initializeEngine() - # Now that the SidebarViewModel has been created we can set the default sidebar view - # TODO: put this in a more elegant place - self._setDefaultSidebarView() - if run_headless or self._engine.rootObjects: self.closeSplash() @@ -743,11 +731,6 @@ class CuraApplication(QtApplication): self.exec_() - ## Get the SidebarController of this application. - # \returns SidebarControllers \type{SidebarController} - def getSidebarController(self) -> SidebarController: - return self._sidebar_controller - def getMachineManager(self, *args): if self._machine_manager is None: self._machine_manager = MachineManager.createMachineManager() @@ -807,7 +790,6 @@ class CuraApplication(QtApplication): qmlRegisterUncreatableType(CuraApplication, "Cura", 1, 0, "ResourceTypes", "Just an Enum type") - qmlRegisterType(SidebarViewModel, "Cura", 1, 0, "SidebarViewModel") qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel") qmlRegisterType(ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel") qmlRegisterSingletonType(ProfilesModel, "Cura", 1, 0, "ProfilesModel", ProfilesModel.createProfilesModel) @@ -819,7 +801,6 @@ class CuraApplication(QtApplication): qmlRegisterType(MachineNameValidator, "Cura", 1, 0, "MachineNameValidator") qmlRegisterType(UserChangesModel, "Cura", 1, 1, "UserChangesModel") qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, "ContainerManager", ContainerManager.createContainerManager) - qmlRegisterSingletonType(SidebarControllerProxy, "Cura", 1, 0, "SidebarController", SidebarControllerProxy.createSidebarControllerProxy) # As of Qt5.7, it is necessary to get rid of any ".." in the path for the singleton to work. actions_url = QUrl.fromLocalFile(os.path.abspath(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml"))) @@ -1318,13 +1299,6 @@ class CuraApplication(QtApplication): def _addProfileWriter(self, profile_writer): pass - ## Set the default sidebar view to "default" - def _setDefaultSidebarView(self): - preferences = Preferences.getInstance() - preferences.addPreference("cura/active_sidebar_view", "default") - active_sidebar_view = preferences.getValue("cura/active_sidebar_view") - self._sidebar_controller.setActiveSidebarView(active_sidebar_view) - @pyqtSlot("QSize") def setMinimumWindowSize(self, size): self.getMainWindow().setMinimumSize(size) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index d5af3e939b..3bfc803a78 100644 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -90,7 +90,7 @@ Rectangle SidebarHeader { id: header width: parent.width - visible: (machineExtruderCount.properties.value > 1 || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants) && Cura.SidebarController.activeSidebarId == "default" + visible: machineExtruderCount.properties.value > 1 || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariantst onShowTooltip: base.showTooltip(item, location, text) onHideTooltip: base.hideTooltip() } @@ -98,7 +98,7 @@ Rectangle Rectangle { id: headerSeparator width: parent.width - visible: settingsModeSelection.visible && header.visible && Cura.SidebarController.activeSidebarId == "default" + visible: settingsModeSelection.visible && header.visible height: visible ? UM.Theme.getSize("sidebar_lining").height : 0 color: UM.Theme.getColor("sidebar_lining") anchors.top: header.bottom @@ -115,7 +115,7 @@ Rectangle width: Math.floor(parent.width * 0.45) font: UM.Theme.getFont("large") color: UM.Theme.getColor("text") - visible: !monitoringPrint && !hideView && Cura.SidebarController.activeSidebarId == "default" + visible: !monitoringPrint && !hideView } Rectangle { @@ -137,7 +137,7 @@ Rectangle } } anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - visible: !monitoringPrint && !hideSettings && !hideView && Cura.SidebarController.activeSidebarId == "default" + visible: !monitoringPrint && !hideSettings && !hideView Component{ id: wizardDelegate Button { @@ -218,7 +218,7 @@ Rectangle anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.left: base.left anchors.right: base.right - visible: !monitoringPrint && !hideSettings && Cura.SidebarController.activeSidebarId == "default" + visible: !monitoringPrint && !hideSettings delegate: StackViewDelegate { @@ -249,29 +249,6 @@ 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 { id: controlItem diff --git a/resources/qml/Sidebar/PrinterOutput.qml b/resources/qml/Sidebar/PrinterOutput.qml deleted file mode 100644 index 5506944154..0000000000 --- a/resources/qml/Sidebar/PrinterOutput.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Item -{ - id: printerOutputSection - - UM.I18nCatalog { - id: catalog - name: "cura" - } - - color: UM.Theme.getColor("sidebar") - - // status - property bool isMonitoring: false - - // printer data - property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0 - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null - property int backendState: UM.Backend.state - - // print job data - property variant printDuration: PrintInformation.currentPrintTime - property variant printMaterialLengths: PrintInformation.materialLengths - property variant printMaterialWeights: PrintInformation.materialWeights - property variant printMaterialCosts: PrintInformation.materialCosts - property variant printMaterialNames: PrintInformation.materialNames - - // helper function for padding pretty time - function strPadLeft(string, pad, length) { - return (new Array(length + 1).join(pad) + string).slice(-length); - } - - // convert a timestamp to a human readable pretty time - function getPrettyTime (time) { - var hours = Math.floor(time / 3600) - time -= hours * 3600 - var minutes = Math.floor(time / 60) - time -= minutes * 60 - var seconds = Math.floor(time) - var finalTime = strPadLeft(hours, "0", 2) + ":" + strPadLeft(minutes, "0", 2) + ":" + strPadLeft(seconds, "0", 2) - return finalTime - } - - // TODO: change name of this component - MonitorButton - { - id: monitorButton - implicitWidth: base.width - anchors.top: footerSeparator.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.bottom: parent.bottom - visible: monitoringPrint - } -} diff --git a/resources/qml/Sidebar/Settings.qml b/resources/qml/Sidebar/Settings.qml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/resources/qml/Topbar.qml b/resources/qml/Topbar.qml index db9abafb5c..f2d053ce70 100644 --- a/resources/qml/Topbar.qml +++ b/resources/qml/Topbar.qml @@ -67,91 +67,109 @@ Rectangle anchors.rightMargin: UM.Theme.getSize("default_margin").width spacing: UM.Theme.getSize("default_margin").width - Button + // The topbar is dynamically filled with all available stages + Repeater { - id: showSettings - height: UM.Theme.getSize("sidebar_header").height - text: catalog.i18nc("@title:tab", "Prepare") - checkable: true - checked: isChecked() - exclusiveGroup: sidebarHeaderBarGroup - style: UM.Theme.styles.topbar_header_tab + id: stagesMenu - // We use a Qt.binding to re-bind the checkbox state after manually setting it - // https://stackoverflow.com/questions/38798450/qt-5-7-qml-why-are-my-checkbox-property-bindings-disappearing - onClicked: { - base.stopMonitoringPrint() - checked = Qt.binding(isChecked) - } + model: UM.StageModel{} - function isChecked () { - return !base.monitoringPrint - } - - property color overlayColor: "transparent" - property string overlayIconSource: "" - } - - Button - { - id: showMonitor - width: UM.Theme.getSize("topbar_button").width - height: UM.Theme.getSize("sidebar_header").height - text: catalog.i18nc("@title:tab", "Monitor") - checkable: true - checked: isChecked() - exclusiveGroup: sidebarHeaderBarGroup - style: UM.Theme.styles.topbar_header_tab_no_overlay - - // We use a Qt.binding to re-bind the checkbox state after manually setting it - // https://stackoverflow.com/questions/38798450/qt-5-7-qml-why-are-my-checkbox-property-bindings-disappearing - onClicked: { - base.startMonitoringPrint() - checked = Qt.binding(isChecked) - } - - function isChecked () { - return base.monitoringPrint - } - - property string iconSource: + delegate: Button { - if (!printerConnected) - { - return UM.Theme.getIcon("tab_status_unknown"); - } - else if (!printerAcceptsCommands) - { - return UM.Theme.getIcon("tab_status_unknown"); - } - - if (Cura.MachineManager.printerOutputDevices[0].printerState == "maintenance") - { - return UM.Theme.getIcon("tab_status_busy"); - } - - switch (Cura.MachineManager.printerOutputDevices[0].jobState) - { - case "printing": - case "pre_print": - case "pausing": - case "resuming": - return UM.Theme.getIcon("tab_status_busy"); - case "wait_cleanup": - return UM.Theme.getIcon("tab_status_finished"); - case "ready": - case "": - return UM.Theme.getIcon("tab_status_connected") - case "paused": - return UM.Theme.getIcon("tab_status_paused") - case "error": - return UM.Theme.getIcon("tab_status_stopped") - default: - return UM.Theme.getIcon("tab_status_unknown") - } + text: model.name + checkable: true + checked: model.active + exclusiveGroup: sidebarHeaderBarGroup + style: UM.Theme.styles.topbar_header_tab + height: UM.Theme.getSize("sidebar_header").height } } +// Button +// { +// id: showSettings +// height: UM.Theme.getSize("sidebar_header").height +// text: catalog.i18nc("@title:tab", "Prepare") +// checkable: true +// checked: isChecked() +// exclusiveGroup: sidebarHeaderBarGroup +// style: UM.Theme.styles.topbar_header_tab +// +// // We use a Qt.binding to re-bind the checkbox state after manually setting it +// // https://stackoverflow.com/questions/38798450/qt-5-7-qml-why-are-my-checkbox-property-bindings-disappearing +// onClicked: { +// base.stopMonitoringPrint() +// checked = Qt.binding(isChecked) +// } +// +// function isChecked () { +// return !base.monitoringPrint +// } +// +// property color overlayColor: "transparent" +// property string overlayIconSource: "" +// } + +// Button +// { +// id: showMonitor +// width: UM.Theme.getSize("topbar_button").width +// height: UM.Theme.getSize("sidebar_header").height +// text: catalog.i18nc("@title:tab", "Monitor") +// checkable: true +// checked: isChecked() +// exclusiveGroup: sidebarHeaderBarGroup +// style: UM.Theme.styles.topbar_header_tab_no_overlay +// +// // We use a Qt.binding to re-bind the checkbox state after manually setting it +// // https://stackoverflow.com/questions/38798450/qt-5-7-qml-why-are-my-checkbox-property-bindings-disappearing +// onClicked: { +// base.startMonitoringPrint() +// checked = Qt.binding(isChecked) +// } +// +// function isChecked () { +// return base.monitoringPrint +// } +// +// property string iconSource: +// { +// if (!printerConnected) +// { +// return UM.Theme.getIcon("tab_status_unknown"); +// } +// else if (!printerAcceptsCommands) +// { +// return UM.Theme.getIcon("tab_status_unknown"); +// } +// +// if (Cura.MachineManager.printerOutputDevices[0].printerState == "maintenance") +// { +// return UM.Theme.getIcon("tab_status_busy"); +// } +// +// switch (Cura.MachineManager.printerOutputDevices[0].jobState) +// { +// case "printing": +// case "pre_print": +// case "pausing": +// case "resuming": +// return UM.Theme.getIcon("tab_status_busy"); +// case "wait_cleanup": +// return UM.Theme.getIcon("tab_status_finished"); +// case "ready": +// case "": +// return UM.Theme.getIcon("tab_status_connected") +// case "paused": +// return UM.Theme.getIcon("tab_status_paused") +// case "error": +// return UM.Theme.getIcon("tab_status_stopped") +// default: +// return UM.Theme.getIcon("tab_status_unknown") +// } +// } +// } + ExclusiveGroup { id: sidebarHeaderBarGroup } }