diff --git a/cura/Machines/Models/DiscoveredPrintersModel.py b/cura/Machines/Models/DiscoveredPrintersModel.py index d7e852629a..7746972e2f 100644 --- a/cura/Machines/Models/DiscoveredPrintersModel.py +++ b/cura/Machines/Models/DiscoveredPrintersModel.py @@ -1,4 +1,4 @@ -from typing import Callable, Optional, TYPE_CHECKING +from typing import Callable, List, Optional, TYPE_CHECKING from PyQt5.QtCore import pyqtSlot, pyqtProperty, pyqtSignal, QObject @@ -62,7 +62,7 @@ class DiscoveredPrinterModel(QObject): discoveredPrintersChanged = pyqtSignal() @pyqtProperty(list, notify = discoveredPrintersChanged) - def discovered_printers(self) -> "list": + def discovered_printers(self) -> "List[DiscoveredPrinter]": item_list = list(x for x in self._discovered_printer_dict.values()) item_list.sort(key = lambda x: x.name) return item_list @@ -70,7 +70,7 @@ class DiscoveredPrinterModel(QObject): def addDiscoveredPrinter(self, ip_address: str, key: str, name: str, create_callback: Callable[[str], None], machine_type: str, device) -> None: if ip_address in self._discovered_printer_dict: - Logger.log("e", "+++++++++++++ printer with ip [%s] has already been added", ip_address) + Logger.log("e", "Printer with ip [%s] has already been added", ip_address) return discovered_printer = DiscoveredPrinter(ip_address, key, name, create_callback, machine_type, device, parent = self) @@ -81,7 +81,7 @@ class DiscoveredPrinterModel(QObject): name: Optional[str] = None, machine_type: Optional[str] = None) -> None: if ip_address not in self._discovered_printer_dict: - Logger.log("e", "+++++++++++++ printer with ip [%s] is not known", ip_address) + Logger.log("e", "Printer with ip [%s] is not known", ip_address) return item = self._discovered_printer_dict[ip_address] diff --git a/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml new file mode 100644 index 0000000000..acedeafdf9 --- /dev/null +++ b/resources/qml/WelcomePages/AddNetworkPrinterScrollView.qml @@ -0,0 +1,153 @@ +// Copyright (c) 2019 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.3 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import "../PrinterSelector" + + +Item +{ + id: base + height: networkPrinterScrollView.height + controlsRectangle.height + + property alias maxItemCountAtOnce: networkPrinterScrollView.maxItemCountAtOnce + property var selectedItem: networkPrinterListView.model[networkPrinterListView.currentIndex] + + ScrollView + { + id: networkPrinterScrollView + anchors.fill: parent + + ScrollBar.horizontal.policy: ScrollBar.AsNeeded + ScrollBar.vertical.policy: ScrollBar.AlwaysOn + + property int maxItemCountAtOnce: 8 // show at max 8 items at once, otherwise you need to scroll. + height: maxItemCountAtOnce * UM.Theme.getSize("action_button").height + + clip: true + + ListView + { + id: networkPrinterListView + anchors.fill: parent + model: CuraApplication.getDiscoveredPrinterModel().discovered_printers + visible: model.length > 0 + + delegate: MachineSelectorButton + { + text: modelData.device.name + + anchors.left: parent.left + anchors.right: parent.right + anchors.rightMargin: 10 + outputDevice: modelData.device + + checked: ListView.view.currentIndex == index + onClicked: + { + ListView.view.currentIndex = index + } + } + } + } + + Cura.RoundedRectangle + { + id: controlsRectangle + anchors.left: parent.left + anchors.right: parent.right + anchors.top: networkPrinterScrollView.bottom + // Make sure that the left, right, and bottom borders do not show up, otherwise you see double + // borders. + anchors.bottomMargin: -border.width + anchors.leftMargin: -border.width + anchors.rightMargin: -border.width + + height: UM.Theme.getSize("message_action_button").height + UM.Theme.getSize("default_margin").height + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + color: "white" + cornerSide: Cura.RoundedRectangle.Direction.Down + + Cura.SecondaryButton + { + id: refreshButton + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.verticalCenter: parent.verticalCenter + text: catalog.i18nc("@label", "Refresh") + height: UM.Theme.getSize("message_action_button").height + } + + Cura.SecondaryButton + { + id: addPrinterByIpButton + anchors.left: refreshButton.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.verticalCenter: parent.verticalCenter + text: catalog.i18nc("@label", "Add printer by IP") + height: UM.Theme.getSize("message_action_button").height + } + + Item + { + id: troubleshootingButton + + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.verticalCenter: parent.verticalCenter + height: troubleshoortingLinkIcon.height + width: troubleshoortingLinkIcon.width + troubleshoortingLabel.width + UM.Theme.getSize("default_margin").width + + UM.RecolorImage + { + id: troubleshoortingLinkIcon + anchors.right: troubleshoortingLabel.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.verticalCenter: parent.verticalCenter + height: troubleshoortingLabel.height + width: height + sourceSize.height: width + color: UM.Theme.getColor("text_link") + source: UM.Theme.getIcon("external_link") + } + + Label + { + id: troubleshoortingLabel + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + text: catalog.i18nc("@label", "Troubleshooting") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text_link") + linkColor: UM.Theme.getColor("text_link") + renderType: Text.NativeRendering + } + + MouseArea + { + anchors.fill: parent + hoverEnabled: true + onClicked: + { + // open the material URL with web browser + var url = "https://ultimaker.com/incoming-links/cura/material-compatibilty" // TODO + Qt.openUrlExternally(url) + } + onEntered: + { + troubleshoortingLabel.font.underline = true + } + onExited: + { + troubleshoortingLabel.font.underline = false + } + } + } + } +} diff --git a/resources/qml/WelcomePages/AddPrinterBySelectionContent.qml b/resources/qml/WelcomePages/AddPrinterBySelectionContent.qml index 77b3fe8122..a2d5312dde 100644 --- a/resources/qml/WelcomePages/AddPrinterBySelectionContent.qml +++ b/resources/qml/WelcomePages/AddPrinterBySelectionContent.qml @@ -7,8 +7,6 @@ import QtQuick.Controls 2.3 import UM 1.3 as UM import Cura 1.1 as Cura -import "../PrinterSelector" - // // This component contains the content for the "Add a printer" (network) page of the welcome on-boarding process. @@ -55,148 +53,11 @@ Item { id: networkPrinterListComponent - Item + AddNetworkPrinterScrollView { - height: networkPrinterScrollView.height + controlsRectangle.height + id: networkPrinterScrollView - ScrollView - { - id: networkPrinterScrollView - ScrollBar.horizontal.policy: ScrollBar.AsNeeded - ScrollBar.vertical.policy: ScrollBar.AlwaysOn - - property int maxItemCountAtOnce: 8 // show at max 8 items at once, otherwise you need to scroll. - height: maxItemCountAtOnce * (UM.Theme.getSize("action_button").height) - - clip: true - - ListView - { - id: networkPrinterListView - anchors.fill: parent - model: CuraApplication.getDiscoveredPrinterModel().discovered_printers - visible: model.count > 0 - - delegate: MachineSelectorButton - { - text: modelData.device.name - - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: 10 - outputDevice: modelData.device - - checked: ListView.view.currentIndex == index - onClicked: - { - ListView.view.currentIndex = index - } - } - } - - Label - { - id: noNetworkPrinterLabel - text: catalog.i18nc("@label", "There is no printer found over your network.") - renderType: Text.NativeRendering - visible: !networkPrinterListView.visible - } - } - - Cura.RoundedRectangle - { - id: controlsRectangle - anchors.left: parent.left - anchors.right: parent.right - anchors.top: networkPrinterScrollView.bottom - // Make sure that the left, right, and bottom borders do not show up, otherwise you see double - // borders. - anchors.bottomMargin: -border.width - anchors.leftMargin: -border.width - anchors.rightMargin: -border.width - - height: UM.Theme.getSize("message_action_button").height + UM.Theme.getSize("default_margin").height - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - color: "white" - cornerSide: Cura.RoundedRectangle.Direction.Down - - Cura.SecondaryButton - { - id: refreshButton - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter - text: catalog.i18nc("@label", "Refresh") - height: UM.Theme.getSize("message_action_button").height - } - - Cura.SecondaryButton - { - id: addPrinterByIpButton - anchors.left: refreshButton.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter - text: catalog.i18nc("@label", "Add printer by IP") - height: UM.Theme.getSize("message_action_button").height - } - - Item - { - id: troubleshootingButton - - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter - height: troubleshoortingLinkIcon.height - width: troubleshoortingLinkIcon.width + troubleshoortingLabel.width + UM.Theme.getSize("default_margin").width - - UM.RecolorImage - { - id: troubleshoortingLinkIcon - anchors.right: troubleshoortingLabel.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter - height: troubleshoortingLabel.height - width: height - sourceSize.height: width - color: UM.Theme.getColor("text_link") - source: UM.Theme.getIcon("external_link") - } - - Label - { - id: troubleshoortingLabel - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - text: catalog.i18nc("@label", "Troubleshooting") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text_link") - linkColor: UM.Theme.getColor("text_link") - renderType: Text.NativeRendering - } - - MouseArea - { - anchors.fill: parent - hoverEnabled: true - onClicked: - { - // open the material URL with web browser - var url = "https://ultimaker.com/incoming-links/cura/material-compatibilty" // TODO - Qt.openUrlExternally(url) - } - onEntered: - { - troubleshoortingLabel.font.underline = true - } - onExited: - { - troubleshoortingLabel.font.underline = false - } - } - } - } + maxItemCountAtOnce: 6 // show at max 6 items at once, otherwise you need to scroll. } } } @@ -230,13 +91,7 @@ Item { id: localPrinterView - ScrollBar.horizontal.policy: ScrollBar.AlwaysOff - ScrollBar.vertical.policy: ScrollBar.AlwaysOn - - property int maxItemCountAtOnce: 10 // show at max 10 items at once, otherwise you need to scroll. - height: maxItemCountAtOnce * (UM.Theme.getSize("action_button").height) - - clip: true + maxItemCountAtOnce: 10 // show at max 10 items at once, otherwise you need to scroll. } } } diff --git a/resources/qml/WelcomePages/AddPrinterScrollView.qml b/resources/qml/WelcomePages/AddPrinterScrollView.qml index 2c2a5a50fa..22dddb016e 100644 --- a/resources/qml/WelcomePages/AddPrinterScrollView.qml +++ b/resources/qml/WelcomePages/AddPrinterScrollView.qml @@ -16,6 +16,34 @@ ScrollView property string currentSection: preferredCategory property string preferredCategory: "Ultimaker" + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + ScrollBar.vertical.policy: ScrollBar.AlwaysOn + + property int maxItemCountAtOnce: 10 // show at max 10 items at once, otherwise you need to scroll. + height: maxItemCountAtOnce * UM.Theme.getSize("action_button").height + + clip: true + + function updateCurrentItemUponSectionChange() + { + // Find the first machine from this section + for (var i = 0; i < machineList.count; i++) + { + var item = machineList.model.getItem(i) + if (item.section == base.currentSection) + { + base.currentItem = item + machineList.currentIndex = i + break + } + } + } + + Component.onCompleted: + { + updateCurrentItemUponSectionChange() + } + background: Rectangle { anchors.fill: parent @@ -90,21 +118,8 @@ ScrollView onClicked: { - if (base.currentSection != section) - { - // Find the first machine from this section - for (var i = 0; i < ListView.view.count; i++) - { - var item = ListView.view.model.getItem(i) - if (item.section == section) - { - base.currentItem = item - base.currentSection = item.section - ListView.view.currentIndex = i - break - } - } - } + base.currentSection = section + base.updateCurrentItemUponSectionChange() } } } diff --git a/resources/qml/WelcomePages/DropDownWidget.qml b/resources/qml/WelcomePages/DropDownWidget.qml index 16e0f6d282..cef6ed0de1 100644 --- a/resources/qml/WelcomePages/DropDownWidget.qml +++ b/resources/qml/WelcomePages/DropDownWidget.qml @@ -15,7 +15,7 @@ Item id: base implicitWidth: 200 - height: header.contentShown ? (header.height + contentRectangle.height) : header.height + height: header.contentShown ? (header.height + contentRectangle.height + 30) : header.height property var contentComponent: null