diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 3c1497f214..ee1c1aeec6 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -205,6 +205,8 @@ class CuraApplication(QtApplication): super().__init__(name = "cura", version = CuraVersion, buildtype = CuraBuildType, tray_icon_name = "cura-icon-32.png") + self.default_theme = "cura-light" + self.setWindowIcon(QIcon(Resources.getPath(Resources.Images, "cura-icon.png"))) self.setRequiredPlugins([ @@ -486,7 +488,7 @@ class CuraApplication(QtApplication): f.write(data) - @pyqtSlot(str, result = QUrl) + @pyqtSlot(str, result=QUrl) def getDefaultPath(self, key): default_path = Preferences.getInstance().getValue("local_file/%s" % key) return QUrl.fromLocalFile(default_path) @@ -1126,7 +1128,7 @@ class CuraApplication(QtApplication): expandedCategoriesChanged = pyqtSignal() - @pyqtProperty("QStringList", notify = expandedCategoriesChanged) + @pyqtProperty("QStringList", notify=expandedCategoriesChanged) def expandedCategories(self): return Preferences.getInstance().getValue("cura/categories_expanded").split(";") diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index a798895fc0..7f7593a9d5 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -649,6 +649,23 @@ class MachineManager(QObject): return Util.parseBool(quality.getMetaDataEntry("supported", True)) return False + ## Returns whether there is anything unsupported in the current set-up. + # + # The current set-up signifies the global stack and all extruder stacks, + # so this indicates whether there is any container in any of the container + # stacks that is not marked as supported. + @pyqtProperty(bool, notify = activeQualityChanged) + def isCurrentSetupSupported(self) -> bool: + if not self._global_container_stack: + return False + for stack in [self._global_container_stack] + list(self._global_container_stack.extruders.values()): + for container in stack.getContainers(): + if not container: + return False + if not Util.parseBool(container.getMetaDataEntry("supported", True)): + return False + return True + ## Get the Quality ID associated with the currently active extruder # Note that this only returns the "quality", not the "quality_changes" # \returns QualityID (string) if found, empty string otherwise diff --git a/cura_app.py b/cura_app.py index 1d8867f1f4..2e406f99d3 100755 --- a/cura_app.py +++ b/cura_app.py @@ -54,8 +54,17 @@ import Arcus #@UnusedImport import cura.CuraApplication import cura.Settings.CuraContainerRegistry +def get_cura_dir_path(): + if Platform.isWindows(): + return os.path.expanduser("~/AppData/Local/cura/") + elif Platform.isLinux(): + return os.path.expanduser("~/.local/share/cura") + elif Platform.isOSX(): + return os.path.expanduser("~/Library/Application Support/cura") + + if hasattr(sys, "frozen"): - dirpath = os.path.expanduser("~/AppData/Local/cura/") + dirpath = get_cura_dir_path() os.makedirs(dirpath, exist_ok = True) sys.stdout = open(os.path.join(dirpath, "stdout.log"), "w") sys.stderr = open(os.path.join(dirpath, "stderr.log"), "w") diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index b6da2104a6..13aee06289 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -224,7 +224,18 @@ class StartSliceJob(Job): material_instance_container = stack.findContainer({"type": "material"}) + settings = {} for key in stack.getAllKeys(): + settings[key] = stack.getProperty(key, "value") + Job.yieldThread() + + settings["print_bed_temperature"] = settings["material_bed_temperature"] #Renamed settings. + settings["print_temperature"] = settings["material_print_temperature"] + settings["time"] = time.strftime("%H:%M:%S") #Some extra settings. + settings["date"] = time.strftime("%d-%m-%Y") + settings["day"] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][int(time.strftime("%w"))] + + for key, value in settings.items(): # Do not send settings that are not settable_per_extruder. if not stack.getProperty(key, "settable_per_extruder"): continue @@ -233,6 +244,8 @@ class StartSliceJob(Job): if key == "material_guid" and material_instance_container: # Also send the material GUID. This is a setting in fdmprinter, but we have no interface for it. setting.value = str(material_instance_container.getMetaDataEntry("GUID", "")).encode("utf-8") + elif key == "machine_extruder_start_code" or key == "machine_extruder_end_code": + setting.value = self._expandGcodeTokens(key, value, settings) else: setting.value = str(stack.getProperty(key, "value")).encode("utf-8") Job.yieldThread() @@ -278,7 +291,7 @@ class StartSliceJob(Job): for key, value in settings.items(): #Add all submessages for each individual setting. setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings") setting_message.name = key - if key == "machine_start_gcode" or key == "machine_end_gcode" or key == "machine_extruder_start_code" or key == "machine_extruder_end_code": #If it's a g-code message, use special formatting. + if key == "machine_start_gcode" or key == "machine_end_gcode": #If it's a g-code message, use special formatting. setting_message.value = self._expandGcodeTokens(key, value, settings) else: setting_message.value = str(value).encode("utf-8") diff --git a/plugins/LayerView/LayerView.qml b/plugins/LayerView/LayerView.qml index 3b02aa1ecd..53f44f3f03 100755 --- a/plugins/LayerView/LayerView.qml +++ b/plugins/LayerView/LayerView.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2015 Ultimaker B.V. +// Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.2 @@ -492,6 +492,8 @@ Item anchors.horizontalCenter: parent.horizontalCenter radius: parent.handleRadius color: parent.upperHandleColor + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("slider_handle_border") visible: slider.layersVisible @@ -531,6 +533,8 @@ Item anchors.horizontalCenter: parent.horizontalCenter radius: parent.handleRadius color: parent.lowerHandleColor + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("slider_handle_border") visible: slider.layersVisible diff --git a/plugins/PluginBrowser/PluginBrowser.py b/plugins/PluginBrowser/PluginBrowser.py index 7df020f078..b8db123a91 100644 --- a/plugins/PluginBrowser/PluginBrowser.py +++ b/plugins/PluginBrowser/PluginBrowser.py @@ -47,7 +47,7 @@ class PluginBrowser(QObject, Extension): self._is_downloading = False self._request_header = [b"User-Agent", - str.encode("%s\%s (%s %s)" % (Application.getInstance().getApplicationName(), + str.encode("%s/%s (%s %s)" % (Application.getInstance().getApplicationName(), Application.getInstance().getVersion(), platform.system(), platform.machine(), diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 8c13c344aa..96c511bccb 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -756,6 +756,8 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._createNetworkManager() + self._last_response_time = time() # Ensure we reset the time when trying to connect (again) + self.setConnectionState(ConnectionState.connecting) self._update() # Manually trigger the first update, as we don't want to wait a few secs before it starts. if not self._use_stream: diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py new file mode 100644 index 0000000000..a6e541be6d --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py @@ -0,0 +1,56 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +import configparser #To parse preference files. +import io #To serialise the preference files afterwards. + +from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. + +_renamed_themes = { + "cura": "cura-light" +} + +class VersionUpgrade27to30(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 2.7 format. + # + # Since the format may change, this is implemented for the 2.7 format only + # and needs to be included in the version upgrade system rather than + # globally in Uranium. + # + # \param serialised The serialised form of a CFG file. + # \return The version number stored in the CFG file. + # \raises ValueError The format of the version number in the file is + # incorrect. + # \raises KeyError The format of the file is incorrect. + def getCfgVersion(self, serialised): + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialised) + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + return format_version * 1000000 + setting_version + + ## Upgrades a preferences file from version 2.7 to 3.0. + # + # \param serialised The serialised form of a preferences file. + # \param filename The name of the file to upgrade. + def upgradePreferences(self, serialised, filename): + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialised) + + # Update version numbers + if "general" not in parser: + parser["general"] = {} + parser["general"]["version"] = "5" + if "metadata" not in parser: + parser["metadata"] = {} + parser["metadata"]["setting_version"] = "2" + + #Renamed themes. + if "theme" in parser["general"]: + if parser["general"]["theme"] in _renamed_themes: + parser["general"]["theme"] = _renamed_themes[parser["general"]["theme"]] + + # Re-serialise the file. + output = io.StringIO() + parser.write(output) + return [filename], [output.getvalue()] \ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py b/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py new file mode 100644 index 0000000000..73e1246360 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py @@ -0,0 +1,23 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +from . import VersionUpgrade27to30 + +upgrade = VersionUpgrade27to30.VersionUpgrade27to30() + +def getMetaData(): + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 4000002): ("preferences", 5000002, upgrade.upgradePreferences), + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + } + } + +def register(app): + return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json new file mode 100644 index 0000000000..3df84ff7e6 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json @@ -0,0 +1,8 @@ + { + "name": "Version Upgrade 2.7 to 3.0", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 2.7 to Cura 3.0.", + "api": 4, + "i18n-catalog": "cura" +} diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/tests/TestVersionUpgrade27to30.py b/plugins/VersionUpgrade/VersionUpgrade27to30/tests/TestVersionUpgrade27to30.py new file mode 100644 index 0000000000..86127df24f --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/tests/TestVersionUpgrade27to30.py @@ -0,0 +1,171 @@ +# Copyright (c) 2017 Ultimaker B.V. +# Cura is released under the terms of the AGPLv3 or higher. + +import configparser #To parse the resulting config files. +import pytest #To register tests with. + +import VersionUpgrade27to30 #The module we're testing. + +## Creates an instance of the upgrader to test with. +@pytest.fixture +def upgrader(): + return VersionUpgrade27to30.VersionUpgrade27to30() + +test_cfg_version_good_data = [ + { + "test_name": "Simple", + "file_data": """[general] +version = 1 +""", + "version": 1000000 + }, + { + "test_name": "Other Data Around", + "file_data": """[nonsense] +life = good + +[general] +version = 3 + +[values] +layer_height = 0.12 +infill_sparse_density = 42 +""", + "version": 3000000 + }, + { + "test_name": "Negative Version", #Why not? + "file_data": """[general] +version = -20 +""", + "version": -20000000 + }, + { + "test_name": "Setting Version", + "file_data": """[general] +version = 1 +[metadata] +setting_version = 1 +""", + "version": 1000001 + }, + { + "test_name": "Negative Setting Version", + "file_data": """[general] +version = 1 +[metadata] +setting_version = -3 +""", + "version": 999997 + } +] + +## Tests the technique that gets the version number from CFG files. +# +# \param data The parametrised data to test with. It contains a test name +# to debug with, the serialised contents of a CFG file and the correct +# version number in that CFG file. +# \param upgrader The instance of the upgrade class to test. +@pytest.mark.parametrize("data", test_cfg_version_good_data) +def test_cfgVersionGood(data, upgrader): + version = upgrader.getCfgVersion(data["file_data"]) + assert version == data["version"] + +test_cfg_version_bad_data = [ + { + "test_name": "Empty", + "file_data": "", + "exception": configparser.Error #Explicitly not specified further which specific error we're getting, because that depends on the implementation of configparser. + }, + { + "test_name": "No General", + "file_data": """[values] +layer_height = 0.1337 +""", + "exception": configparser.Error + }, + { + "test_name": "No Version", + "file_data": """[general] +true = false +""", + "exception": configparser.Error + }, + { + "test_name": "Not a Number", + "file_data": """[general] +version = not-a-text-version-number +""", + "exception": ValueError + }, + { + "test_name": "Setting Value NaN", + "file_data": """[general] +version = 4 +[metadata] +setting_version = latest_or_something +""", + "exception": ValueError + }, + { + "test_name": "Major-Minor", + "file_data": """[general] +version = 1.2 +""", + "exception": ValueError + } +] + +## Tests whether getting a version number from bad CFG files gives an +# exception. +# +# \param data The parametrised data to test with. It contains a test name +# to debug with, the serialised contents of a CFG file and the class of +# exception it needs to throw. +# \param upgrader The instance of the upgrader to test. +@pytest.mark.parametrize("data", test_cfg_version_bad_data) +def test_cfgVersionBad(data, upgrader): + with pytest.raises(data["exception"]): + upgrader.getCfgVersion(data["file_data"]) + +test_translate_theme_data = [ + ( + "Original Cura theme", + """[general] +version = 4 +theme = cura +[metadata] +setting_version = 2 +""", + "cura-light" + ), + ( + "No theme", + """[general] +version = 4 +[metadata] +setting_version = 2 +""", + None #Indicates that the theme should be absent in the new file. + ) +] + +## Tests whether the theme is properly translated. +@pytest.mark.parametrize("test_name, file_data, new_theme", test_translate_theme_data) +def test_translateTheme(test_name, file_data, new_theme, upgrader): + #Read old file. + original_parser = configparser.ConfigParser(interpolation = None) + original_parser.read_string(file_data) + + #Perform the upgrade. + _, upgraded_stacks = upgrader.upgradePreferences(file_data, "") + upgraded_stack = upgraded_stacks[0] + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(upgraded_stack) + + #Check whether the theme was properly translated. + if not new_theme: + assert "theme" not in parser["general"] + else: + assert "theme" in parser["general"] + assert parser["general"]["theme"] == new_theme \ No newline at end of file diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 85b17e28a2..35048925eb 100755 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -447,7 +447,7 @@ UM.MainWindow right: sidebar.left } visible: opacity > 0 - opacity: base.showPrintMonitor ? 0.75 : 0 + opacity: base.showPrintMonitor ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 100; } } diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 99bbdc73e6..b2f63dc708 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -86,7 +86,7 @@ Item { height: UM.Theme.getSize("save_button_specs_icons").height; sourceSize.width: width; sourceSize.height: width; - color: control.hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("text"); + color: control.hovered ? UM.Theme.getColor("text_scene_hover") : UM.Theme.getColor("text_scene"); source: UM.Theme.getIcon("pencil"); } } @@ -116,7 +116,7 @@ Item { regExp: /^[^\\ \/ \*\?\|\[\]]*$/ } style: TextFieldStyle{ - textColor: UM.Theme.getColor("setting_control_text"); + textColor: UM.Theme.getColor("text_scene"); font: UM.Theme.getFont("default_bold"); background: Rectangle { opacity: 0 @@ -135,7 +135,7 @@ Item { height: UM.Theme.getSize("jobspecs_line").height verticalAlignment: Text.AlignVCenter font: UM.Theme.getFont("small") - color: UM.Theme.getColor("text_subtext") + color: UM.Theme.getColor("text_scene") text: CuraApplication.getSceneBoundingBoxString } } diff --git a/resources/qml/MonitorButton.qml b/resources/qml/MonitorButton.qml index cfb09d9c9f..5741749d4e 100644 --- a/resources/qml/MonitorButton.qml +++ b/resources/qml/MonitorButton.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Ultimaker B.V. +// Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.2 @@ -119,10 +119,10 @@ Item Label { id: statusLabel - width: parent.width - 2 * UM.Theme.getSize("default_margin").width + width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width anchors.top: parent.top anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width color: base.statusColor font: UM.Theme.getFont("large") @@ -177,21 +177,21 @@ Item property string backgroundColor: UM.Theme.getColor("progressbar_background"); property string controlColor: base.statusColor; - width: parent.width - 2 * UM.Theme.getSize("default_margin").width; + width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width; height: UM.Theme.getSize("progressbar").height; anchors.top: statusLabel.bottom; - anchors.topMargin: UM.Theme.getSize("default_margin").height / 4; + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height / 4; anchors.left: parent.left; - anchors.leftMargin: UM.Theme.getSize("default_margin").width; + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width; } Row { id: buttonsRow height: abortButton.height anchors.top: progressBar.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width spacing: UM.Theme.getSize("default_margin").width Row { diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index 04933129e9..ac17681b33 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -353,7 +353,7 @@ Column Rectangle //Input field for pre-heat temperature. { id: preheatTemperatureControl - color: !enabled ? UM.Theme.getColor("setting_control_disabled") : showError ? UM.Theme.getColor("setting_validation_error") : UM.Theme.getColor("setting_validation_ok") + color: !enabled ? UM.Theme.getColor("setting_control_disabled") : showError ? UM.Theme.getColor("setting_validation_error_background") : UM.Theme.getColor("setting_validation_ok") property var showError: { if(bedTemperature.properties.maximum_value != "None" && bedTemperature.properties.maximum_value < parseInt(preheatTemperatureInput.text)) diff --git a/resources/qml/SaveButton.qml b/resources/qml/SaveButton.qml index 3f25283596..616017ebf6 100644 --- a/resources/qml/SaveButton.qml +++ b/resources/qml/SaveButton.qml @@ -45,10 +45,10 @@ Item { Text { id: statusLabel - width: parent.width - 2 * UM.Theme.getSize("default_margin").width + width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width anchors.top: parent.top anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width color: UM.Theme.getColor("text") font: UM.Theme.getFont("default_bold") @@ -57,12 +57,12 @@ Item { Rectangle { id: progressBar - width: parent.width - 2 * UM.Theme.getSize("default_margin").width + width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width height: UM.Theme.getSize("progressbar").height anchors.top: statusLabel.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height/4 + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height/4 anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width radius: UM.Theme.getSize("progressbar_radius").width color: UM.Theme.getColor("progressbar_background") @@ -92,14 +92,14 @@ Item { width: base.width height: saveToButton.height anchors.top: progressBar.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.left: parent.left Row { id: additionalComponentsRow anchors.top: parent.top anchors.right: saveToButton.visible ? saveToButton.left : parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width spacing: UM.Theme.getSize("default_margin").width } @@ -141,7 +141,7 @@ Item { anchors.top: parent.top anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width // 1 = not started, 5 = disabled text: [1, 5].indexOf(UM.Backend.state) != -1 ? catalog.i18nc("@label:Printjob", "Prepare") : catalog.i18nc("@label:Printjob", "Cancel") @@ -183,7 +183,7 @@ Item { Behavior on color { ColorAnimation { duration: 50; } } - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("default_margin").width * 2) + implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) Label { id: actualLabel @@ -221,7 +221,7 @@ Item { anchors.top: parent.top anchors.right: deviceSelectionMenu.visible ? deviceSelectionMenu.left : parent.right - anchors.rightMargin: deviceSelectionMenu.visible ? -3 * UM.Theme.getSize("default_lining").width : UM.Theme.getSize("default_margin").width + anchors.rightMargin: deviceSelectionMenu.visible ? -3 * UM.Theme.getSize("default_lining").width : UM.Theme.getSize("sidebar_margin").width text: UM.OutputDeviceManager.activeDeviceShortDescription onClicked: @@ -258,7 +258,7 @@ Item { Behavior on color { ColorAnimation { duration: 50; } } - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("default_margin").width * 2) + implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) Label { id: actualLabel @@ -288,7 +288,7 @@ Item { anchors.top: parent.top anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width width: UM.Theme.getSize("save_button_save_to_button").height height: UM.Theme.getSize("save_button_save_to_button").height // 3 = Done, 5 = Disabled diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 829a0b5c12..e520e69040 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -130,11 +130,11 @@ Item { id: settingControls height: parent.height / 2 - spacing: UM.Theme.getSize("default_margin").width / 2 + spacing: UM.Theme.getSize("sidebar_margin").height / 2 anchors { right: controlContainer.left - rightMargin: UM.Theme.getSize("default_margin").width / 2 + rightMargin: UM.Theme.getSize("sidebar_margin").width / 2 verticalCenter: parent.verticalCenter } @@ -293,7 +293,7 @@ Item { enabled: propertyProvider.isValueUsed anchors.right: parent.right; - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width anchors.verticalCenter: parent.verticalCenter; width: UM.Theme.getSize("setting_control").width; height: UM.Theme.getSize("setting_control").height diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml index 2991c24d57..752e846f1a 100644 --- a/resources/qml/Settings/SettingTextField.qml +++ b/resources/qml/Settings/SettingTextField.qml @@ -24,6 +24,17 @@ SettingItem { return UM.Theme.getColor("setting_control_disabled_border") } + switch(propertyProvider.properties.validationState) + { + case "ValidatorState.Exception": + case "ValidatorState.MinimumError": + case "ValidatorState.MaximumError": + return UM.Theme.getColor("setting_validation_error"); + case "ValidatorState.MinimumWarning": + case "ValidatorState.MaximumWarning": + return UM.Theme.getColor("setting_validation_warning"); + } + //Validation is OK. if(hovered || input.activeFocus) { return UM.Theme.getColor("setting_control_border_highlight") @@ -39,15 +50,12 @@ SettingItem switch(propertyProvider.properties.validationState) { case "ValidatorState.Exception": - return UM.Theme.getColor("setting_validation_error") case "ValidatorState.MinimumError": - return UM.Theme.getColor("setting_validation_error") case "ValidatorState.MaximumError": - return UM.Theme.getColor("setting_validation_error") + return UM.Theme.getColor("setting_validation_error_background") case "ValidatorState.MinimumWarning": - return UM.Theme.getColor("setting_validation_warning") case "ValidatorState.MaximumWarning": - return UM.Theme.getColor("setting_validation_warning") + return UM.Theme.getColor("setting_validation_warning_background") case "ValidatorState.Valid": return UM.Theme.getColor("setting_validation_ok") diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 485d364b2d..b6b79ed3d4 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2015 Ultimaker B.V. +// Copyright (c) 2017 Ultimaker B.V. // Uranium is released under the terms of the AGPLv3 or higher. import QtQuick 2.2 @@ -42,9 +42,9 @@ Item { top: parent.top left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width + leftMargin: UM.Theme.getSize("sidebar_margin").width right: parent.right - rightMargin: UM.Theme.getSize("default_margin").width + rightMargin: UM.Theme.getSize("sidebar_margin").width } height: visible ? UM.Theme.getSize("setting_control").height : 0 Behavior on height { NumberAnimation { duration: 100 } } @@ -55,13 +55,14 @@ Item anchors.left: parent.left anchors.right: clearFilterButton.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width placeholderText: catalog.i18nc("@label:textbox", "Search...") style: TextFieldStyle { textColor: UM.Theme.getColor("setting_control_text"); + placeholderTextColor: UM.Theme.getColor("setting_control_text") font: UM.Theme.getFont("default"); background: Item {} } @@ -118,7 +119,7 @@ Item anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width color: UM.Theme.getColor("setting_control_button") hoverColor: UM.Theme.getColor("setting_control_button_hover") @@ -137,7 +138,7 @@ Item anchors.bottom: parent.bottom; anchors.right: parent.right; anchors.left: parent.left; - anchors.topMargin: filterContainer.visible ? UM.Theme.getSize("default_margin").width : 0 + anchors.topMargin: filterContainer.visible ? UM.Theme.getSize("sidebar_margin").height : 0 Behavior on anchors.topMargin { NumberAnimation { duration: 100 } } style: UM.Theme.styles.scrollview; @@ -296,7 +297,7 @@ Item contextMenu.provider = provider contextMenu.popup(); } - onShowTooltip: base.showTooltip(delegate, { x: 0, y: delegate.height / 2 }, text) + onShowTooltip: base.showTooltip(delegate, { x: -UM.Theme.getSize("default_arrow").width, y: delegate.height / 2 }, text) onHideTooltip: base.hideTooltip() onShowAllHiddenInheritedSettings: { diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index 18f47cf411..be0b12af19 100755 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -43,14 +43,14 @@ Rectangle onTriggered: { - base.showTooltip(base, {x:1, y:item.y}, text); + base.showTooltip(base, {x: 0, y: item.y}, text); } } function showTooltip(item, position, text) { tooltip.text = text; - position = item.mapToItem(base, position.x, position.y); + position = item.mapToItem(base, position.x - UM.Theme.getSize("default_arrow").width, position.y); tooltip.show(position); } @@ -102,7 +102,7 @@ Rectangle 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("default_margin").height : 0 + anchors.topMargin: visible ? UM.Theme.getSize("sidebar_margin").height : 0 } onCurrentModeIndexChanged: @@ -118,10 +118,10 @@ Rectangle id: settingsModeLabel text: !hideSettings ? catalog.i18nc("@label:listbox", "Print Setup") : catalog.i18nc("@label:listbox","Print Setup disabled\nG-code files cannot be modified"); anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width; + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width anchors.top: headerSeparator.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - width: parent.width * 0.45 - 2 * UM.Theme.getSize("default_margin").width + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + width: parent.width * 0.45 - 2 * UM.Theme.getSize("sidebar_margin").width font: UM.Theme.getFont("large") color: UM.Theme.getColor("text") visible: !monitoringPrint @@ -134,9 +134,9 @@ Rectangle width: parent.width * 0.55 height: UM.Theme.getSize("sidebar_header_mode_toggle").height anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width anchors.top: headerSeparator.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height visible: !monitoringPrint && !hideSettings Component{ id: wizardDelegate @@ -169,18 +169,18 @@ Rectangle style: ButtonStyle { background: Rectangle { border.width: UM.Theme.getSize("default_lining").width - border.color: control.checked ? UM.Theme.getColor("toggle_checked_border") : - control.pressed ? UM.Theme.getColor("toggle_active_border") : - control.hovered ? UM.Theme.getColor("toggle_hovered_border") : UM.Theme.getColor("toggle_unchecked_border") - color: control.checked ? UM.Theme.getColor("toggle_checked") : - control.pressed ? UM.Theme.getColor("toggle_active") : - control.hovered ? UM.Theme.getColor("toggle_hovered") : UM.Theme.getColor("toggle_unchecked") + border.color: (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active_border") : + control.hovered ? UM.Theme.getColor("action_button_hovered_border") : + UM.Theme.getColor("action_button_border") + color: (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active") : + control.hovered ? UM.Theme.getColor("action_button_hovered") : + UM.Theme.getColor("action_button") Behavior on color { ColorAnimation { duration: 50; } } Label { anchors.centerIn: parent - color: control.checked ? UM.Theme.getColor("toggle_checked_text") : - control.pressed ? UM.Theme.getColor("toggle_active_text") : - control.hovered ? UM.Theme.getColor("toggle_hovered_text") : UM.Theme.getColor("toggle_unchecked_text") + color: (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active_text") : + control.hovered ? UM.Theme.getColor("action_button_hovered_text") : + UM.Theme.getColor("action_button_text") font: UM.Theme.getFont("default") text: control.text; } @@ -212,18 +212,18 @@ Rectangle anchors { top: settingsModeSelection.bottom - topMargin: UM.Theme.getSize("default_margin").width + topMargin: UM.Theme.getSize("sidebar_margin").height left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width + leftMargin: UM.Theme.getSize("sidebar_margin").width right: parent.right - rightMargin: UM.Theme.getSize("default_margin").width + rightMargin: UM.Theme.getSize("sidebar_margin").width } Text { id: globalProfileLabel text: catalog.i18nc("@label","Profile:"); - width: parent.width * 0.45 - UM.Theme.getSize("default_margin").width + width: parent.width * 0.45 - UM.Theme.getSize("sidebar_margin").width font: UM.Theme.getFont("default"); color: UM.Theme.getColor("text"); verticalAlignment: Text.AlignVCenter @@ -247,14 +247,13 @@ Rectangle } enabled: !header.currentExtruderVisible || header.currentExtruderIndex > -1 - width: parent.width * 0.7 + UM.Theme.getSize("default_margin").width + width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width height: UM.Theme.getSize("setting_control").height anchors.left: globalProfileLabel.right anchors.right: parent.right tooltip: Cura.MachineManager.activeQualityName style: UM.Theme.styles.sidebar_header_button activeFocusOnPress: true; - property var valueWarning: !Cura.MachineManager.isActiveQualitySupported menu: ProfileMenu { } UM.SimpleButton @@ -267,7 +266,7 @@ Rectangle anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("setting_preferences_button_margin").width - UM.Theme.getSize("default_margin").width + anchors.rightMargin: UM.Theme.getSize("setting_preferences_button_margin").width - UM.Theme.getSize("sidebar_margin").width color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); iconSource: UM.Theme.getIcon("star"); @@ -280,7 +279,7 @@ Rectangle onEntered: { var content = catalog.i18nc("@tooltip","Some setting/override values are different from the values stored in the profile.\n\nClick to open the profile manager.") - base.showTooltip(globalProfileRow, Qt.point(-UM.Theme.getSize("default_margin").width, 0), content) + base.showTooltip(globalProfileRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), content) } onExited: base.hideTooltip() } @@ -293,7 +292,7 @@ Rectangle anchors.bottom: footerSeparator.top anchors.top: globalProfileRow.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.left: base.left anchors.right: base.right visible: !monitoringPrint && !hideSettings @@ -379,7 +378,7 @@ Rectangle height: UM.Theme.getSize("sidebar_lining").height color: UM.Theme.getColor("sidebar_lining") anchors.bottom: printSpecs.top - anchors.bottomMargin: UM.Theme.getSize("default_margin").height * 2 + UM.Theme.getSize("progressbar").height + UM.Theme.getFont("default_bold").pixelSize + anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height * 2 + UM.Theme.getSize("progressbar").height + UM.Theme.getFont("default_bold").pixelSize } Rectangle @@ -387,8 +386,8 @@ Rectangle id: printSpecs anchors.left: parent.left anchors.bottom: parent.bottom - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.bottomMargin: UM.Theme.getSize("default_margin").height + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height height: childrenRect.height visible: !monitoringPrint @@ -501,7 +500,7 @@ Rectangle id: saveButton implicitWidth: base.width anchors.top: footerSeparator.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.bottom: parent.bottom visible: !monitoringPrint } @@ -511,7 +510,7 @@ Rectangle id: monitorButton implicitWidth: base.width anchors.top: footerSeparator.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height anchors.bottom: parent.bottom visible: monitoringPrint } diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index 840a7067ce..606e629b45 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -17,7 +17,7 @@ Column property int currentExtruderIndex: ExtruderManager.activeExtruderIndex; property bool currentExtruderVisible: extrudersList.visible; - spacing: UM.Theme.getSize("default_margin").height + spacing: UM.Theme.getSize("sidebar_margin").height signal showTooltip(Item item, point location, string text) signal hideTooltip() @@ -133,9 +133,9 @@ Column { anchors.verticalCenter: parent.verticalCenter anchors.left: swatch.visible ? swatch.right : parent.left - anchors.leftMargin: swatch.visible ? UM.Theme.getSize("default_margin").width / 2 : UM.Theme.getSize("default_margin").width + anchors.leftMargin: swatch.visible ? UM.Theme.getSize("sidebar_margin").width / 2 : UM.Theme.getSize("sidebar_margin").width anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width / 2 + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width / 2 color: control.checked ? UM.Theme.getColor("tab_checked_text") : control.pressed ? UM.Theme.getColor("tab_active_text") : @@ -155,7 +155,7 @@ Column Item { id: variantRowSpacer - height: UM.Theme.getSize("default_margin").height / 4 + height: UM.Theme.getSize("sidebar_margin").height / 4 width: height visible: !extruderSelectionRow.visible } @@ -170,9 +170,9 @@ Column anchors { left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width + leftMargin: UM.Theme.getSize("sidebar_margin").width right: parent.right - rightMargin: UM.Theme.getSize("default_margin").width + rightMargin: UM.Theme.getSize("sidebar_margin").width } Text @@ -207,7 +207,7 @@ Column enabled: !extrudersList.visible || base.currentExtruderIndex > -1 height: UM.Theme.getSize("setting_control").height - width: parent.width * 0.7 + UM.Theme.getSize("default_margin").width + width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width anchors.right: parent.right style: UM.Theme.styles.sidebar_header_button activeFocusOnPress: true; @@ -226,9 +226,9 @@ Column anchors { left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width + leftMargin: UM.Theme.getSize("sidebar_margin").width right: parent.right - rightMargin: UM.Theme.getSize("default_margin").width + rightMargin: UM.Theme.getSize("sidebar_margin").width } Text @@ -247,7 +247,7 @@ Column visible: Cura.MachineManager.hasVariants height: UM.Theme.getSize("setting_control").height - width: parent.width * 0.7 + UM.Theme.getSize("default_margin").width + width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width anchors.right: parent.right style: UM.Theme.styles.sidebar_header_button activeFocusOnPress: true; @@ -266,37 +266,27 @@ Column anchors { left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width + leftMargin: UM.Theme.getSize("sidebar_margin").width right: parent.right - rightMargin: UM.Theme.getSize("default_margin").width + rightMargin: UM.Theme.getSize("sidebar_margin").width } Item { height: UM.Theme.getSize("sidebar_setup").height anchors.right: parent.right - width: parent.width * 0.7 + UM.Theme.getSize("default_margin").width + width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width Text { id: materialInfoLabel wrapMode: Text.WordWrap - text: catalog.i18nc("@label","Check material compability"); + text: catalog.i18nc("@label", "Check material compability"); font: UM.Theme.getFont("default"); verticalAlignment: Text.AlignVCenter anchors.top: parent.top anchors.bottom: parent.bottom - color: - { - if (!Cura.MachineManager.isActiveQualitySupported) - { - UM.Theme.getColor("setting_validation_error"); - } - else - { - UM.Theme.getColor("text"); - } - } + color: UM.Theme.getColor("text") MouseArea { @@ -317,7 +307,7 @@ Column var content = catalog.i18nc("@tooltip", "Click to check the material compatibility on Ultimaker.com."); base.showTooltip( materialInfoRow, - Qt.point(-UM.Theme.getSize("default_margin").width, 0), + Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), catalog.i18nc("@tooltip", content) ); } @@ -336,8 +326,8 @@ Column //sourceSize.width: width + 5 //sourceSize.height: width + 5 - color: UM.Theme.getColor("setting_control_text") - visible: !Cura.MachineManager.isActiveQualitySupported + color: UM.Theme.getColor("setting_validation_warning") + visible: !Cura.MachineManager.isCurrentSetupSupported } } } diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml index f988ae0e8b..25564f1172 100644 --- a/resources/qml/SidebarSimple.qml +++ b/resources/qml/SidebarSimple.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Ultimaker B.V. +// Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.2 @@ -23,463 +23,582 @@ Item Component.onCompleted: PrintInformation.enabled = true Component.onDestruction: PrintInformation.enabled = false - UM.I18nCatalog { id: catalog; name:"cura"} + UM.I18nCatalog { id: catalog; name: "cura" } - Item + ScrollView { - id: infillCellLeft - anchors.top: parent.top - anchors.left: parent.left - anchors.topMargin: UM.Theme.getSize("default_margin").height - width: base.width * .45 - UM.Theme.getSize("default_margin").width - height: childrenRect.height + anchors.fill: parent + style: UM.Theme.styles.scrollview + flickableItem.flickableDirection: Flickable.VerticalFlick - Text + Rectangle { - id: infillLabel - //: Infill selection label - text: catalog.i18nc("@label", "Infill"); - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - } - } - - Row - { - id: infillCellRight - - height: childrenRect.height; - width: base.width * .55 - - spacing: UM.Theme.getSize("default_margin").width - - anchors.left: infillCellLeft.right - anchors.top: infillCellLeft.top - - Repeater - { - id: infillListView - property int activeIndex: - { - for(var i = 0; i < infillModel.count; ++i) - { - var density = parseInt(infillDensity.properties.value); - var steps = parseInt(infillSteps.properties.value); - if(density > infillModel.get(i).percentageMin && density <= infillModel.get(i).percentageMax && steps > infillModel.get(i).stepsMin && steps <= infillModel.get(i).stepsMax) - { - return i; - } - } - - return -1; - } - model: infillModel; - + width: childrenRect.width + height: childrenRect.height Item { - width: childrenRect.width; - height: childrenRect.height; + id: infillCellLeft + anchors.top: parent.top + anchors.left: parent.left + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + width: UM.Theme.getSize("sidebar").width * .45 - UM.Theme.getSize("sidebar_margin").width + height: childrenRect.height - Rectangle - { - id: infillIconLining - - width: (infillCellRight.width - ((infillModel.count - 1) * UM.Theme.getSize("default_margin").width)) / (infillModel.count); - height: width - - border.color: - { - if(!base.settingsEnabled) - { - return UM.Theme.getColor("setting_control_disabled_border") - } - else if(infillListView.activeIndex == index) - { - return UM.Theme.getColor("setting_control_selected") - } - else if(infillMouseArea.containsMouse) - { - return UM.Theme.getColor("setting_control_border_highlight") - } - return UM.Theme.getColor("setting_control_border") - } - border.width: UM.Theme.getSize("default_lining").width - color: - { - if(infillListView.activeIndex == index) - { - if(!base.settingsEnabled) - { - return UM.Theme.getColor("setting_control_disabled_text") - } - return UM.Theme.getColor("setting_control_selected") - } - return "transparent" - } - - UM.RecolorImage - { - id: infillIcon - anchors.fill: parent; - anchors.margins: 2 - - sourceSize.width: width - sourceSize.height: width - source: UM.Theme.getIcon(model.icon); - color: { - if(infillListView.activeIndex == index) - { - return UM.Theme.getColor("text_reversed") - } - if(!base.settingsEnabled) - { - return UM.Theme.getColor("setting_control_disabled_text") - } - return UM.Theme.getColor("setting_control_disabled_text") - } - } - - MouseArea - { - id: infillMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: base.settingsEnabled - onClicked: { - if (infillListView.activeIndex != index) - { - infillDensity.setPropertyValue("value", model.percentage) - infillSteps.setPropertyValue("value", model.steps) - } - } - onEntered: - { - base.showTooltip(infillCellRight, Qt.point(-infillCellRight.x, 0), model.text); - } - onExited: - { - base.hideTooltip(); - } - } - } Text { id: infillLabel - width: (infillCellRight.width - ((infillModel.count - 1) * UM.Theme.getSize("default_margin").width)) / (infillModel.count); - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - wrapMode: Text.WordWrap - font: UM.Theme.getFont("default") - anchors.top: infillIconLining.bottom - anchors.horizontalCenter: infillIconLining.horizontalCenter - color: infillListView.activeIndex == index ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_border") - text: name - } - } - } - - ListModel - { - id: infillModel - - Component.onCompleted: - { - infillModel.append({ - name: catalog.i18nc("@label", "0%"), - percentage: 0, - steps: 0, - percentageMin: -1, - percentageMax: 0, - stepsMin: -1, - stepsMax: 0, - text: catalog.i18nc("@label", "Empty infill will leave your model hollow with low strength."), - icon: "hollow" - }) - infillModel.append({ - name: catalog.i18nc("@label", "20%"), - percentage: 20, - steps: 0, - percentageMin: 0, - percentageMax: 30, - stepsMin: -1, - stepsMax: 0, - text: catalog.i18nc("@label", "Light (20%) infill will give your model an average strength."), - icon: "sparse" - }) - infillModel.append({ - name: catalog.i18nc("@label", "50%"), - percentage: 50, - steps: 0, - percentageMin: 30, - percentageMax: 70, - stepsMin: -1, - stepsMax: 0, - text: catalog.i18nc("@label", "Dense (50%) infill will give your model an above average strength."), - icon: "dense" - }) - infillModel.append({ - name: catalog.i18nc("@label", "100%"), - percentage: 100, - steps: 0, - percentageMin: 70, - percentageMax: 9999999999, - stepsMin: -1, - stepsMax: 0, - text: catalog.i18nc("@label", "Solid (100%) infill will make your model completely solid."), - icon: "solid" - }) - infillModel.append({ - name: catalog.i18nc("@label", "Gradual"), - percentage: 90, - steps: 5, - percentageMin: 0, - percentageMax: 9999999999, - stepsMin: 0, - stepsMax: 9999999999, - infill_layer_height: 1.5, - text: catalog.i18nc("@label", "Gradual infill will gradually increase the amount of infill towards the top."), - icon: "gradual" - }) - } - } - } - - Item - { - id: helpersCell - anchors.top: infillCellRight.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height * 2 - anchors.left: parent.left - anchors.right: parent.right - height: childrenRect.height - - Text - { - id: enableSupportLabel - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: enableSupportCheckBox.verticalCenter - width: parent.width * .45 - 3 * UM.Theme.getSize("default_margin").width - text: catalog.i18nc("@label", "Generate Support"); - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - CheckBox - { - id: enableSupportCheckBox - property alias _hovered: enableSupportMouseArea.containsMouse - - anchors.top: parent.top - anchors.left: enableSupportLabel.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - - style: UM.Theme.styles.checkbox; - enabled: base.settingsEnabled - - checked: supportEnabled.properties.value == "True"; - - MouseArea - { - id: enableSupportMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: true - onClicked: - { - // The value is a string "True" or "False" - supportEnabled.setPropertyValue("value", supportEnabled.properties.value != "True"); - } - onEntered: - { - base.showTooltip(enableSupportCheckBox, Qt.point(-enableSupportCheckBox.x, 0), - catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.")); - } - onExited: - { - base.hideTooltip(); - } - } - } - - Text - { - id: supportExtruderLabel - visible: (supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1) - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: supportExtruderCombobox.verticalCenter - width: parent.width * .45 - 3 * UM.Theme.getSize("default_margin").width - text: catalog.i18nc("@label", "Support Extruder"); - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - ComboBox - { - id: supportExtruderCombobox - visible: (supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1) - model: extruderModel - - property string color_override: "" // for manually setting values - property string color: // is evaluated automatically, but the first time is before extruderModel being filled - { - var current_extruder = extruderModel.get(currentIndex); - color_override = ""; - if (current_extruder === undefined) { - return ""; - } - var model_color = current_extruder.color; - return (model_color) ? model_color : ""; - } - - textRole: 'text' // this solves that the combobox isn't populated in the first time Cura is started - - anchors.top: enableSupportCheckBox.bottom - anchors.topMargin: - { - if ((supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1)) - { - return UM.Theme.getSize("default_margin").height; - } - else - { - return 0; - } - } - anchors.left: supportExtruderLabel.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - width: parent.width * .55 - height: - { - if ((supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1)) - { - // default height when control is enabled - return UM.Theme.getSize("setting_control").height; - } - else - { - return 0; - } - } - Behavior on height { NumberAnimation { duration: 100 } } - - style: UM.Theme.styles.combobox_color - enabled: base.settingsEnabled - property alias _hovered: supportExtruderMouseArea.containsMouse - - currentIndex: supportExtruderNr.properties !== null ? parseFloat(supportExtruderNr.properties.value) : 0 - onActivated: - { - // Send the extruder nr as a string. - supportExtruderNr.setPropertyValue("value", String(index)); - } - MouseArea - { - id: supportExtruderMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: base.settingsEnabled - acceptedButtons: Qt.NoButton - onEntered: - { - base.showTooltip(supportExtruderCombobox, Qt.point(-supportExtruderCombobox.x, 0), - catalog.i18nc("@label", "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air.")); - } - onExited: - { - base.hideTooltip(); + //: Infill selection label + text: catalog.i18nc("@label", "Infill"); + font: UM.Theme.getFont("default"); + color: UM.Theme.getColor("text"); + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width } } - function updateCurrentColor() + Row { - var current_extruder = extruderModel.get(currentIndex); - if (current_extruder !== undefined) { - supportExtruderCombobox.color_override = current_extruder.color; - } - } + id: infillCellRight - } + height: childrenRect.height; + width: UM.Theme.getSize("sidebar").width * .55 - Text - { - id: adhesionHelperLabel - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: adhesionCheckBox.verticalCenter - width: parent.width * .45 - 3 * UM.Theme.getSize("default_margin").width - text: catalog.i18nc("@label", "Build Plate Adhesion"); - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - elide: Text.ElideRight - } + spacing: UM.Theme.getSize("sidebar_margin").width - CheckBox - { - id: adhesionCheckBox - property alias _hovered: adhesionMouseArea.containsMouse + anchors.left: infillCellLeft.right + anchors.top: infillCellLeft.top - anchors.top: supportExtruderCombobox.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height * 2 - anchors.left: adhesionHelperLabel.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - - //: Setting enable printing build-plate adhesion helper checkbox - style: UM.Theme.styles.checkbox; - enabled: base.settingsEnabled - - checked: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" - - MouseArea - { - id: adhesionMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: base.settingsEnabled - onClicked: + Repeater { - var adhesionType = "skirt"; - if(!parent.checked) + id: infillListView + property int activeIndex: { - // Remove the "user" setting to see if the rest of the stack prescribes a brim or a raft - platformAdhesionType.removeFromContainer(0); - adhesionType = platformAdhesionType.properties.value; - if(adhesionType == "skirt") + for(var i = 0; i < infillModel.count; ++i) { - // If the rest of the stack doesn't prescribe an adhesion-type, default to a brim - adhesionType = "brim"; + var density = parseInt(infillDensity.properties.value); + var steps = parseInt(infillSteps.properties.value); + if(density > infillModel.get(i).percentageMin && density <= infillModel.get(i).percentageMax && steps > infillModel.get(i).stepsMin && steps <= infillModel.get(i).stepsMax) + { + return i; + } + } + + return -1; + } + model: infillModel; + + Item + { + width: childrenRect.width; + height: childrenRect.height; + + Rectangle + { + id: infillIconLining + + width: (infillCellRight.width - ((infillModel.count - 1) * UM.Theme.getSize("sidebar_margin").width)) / (infillModel.count); + height: width + + border.color: + { + if(!base.settingsEnabled) + { + return UM.Theme.getColor("setting_control_disabled_border") + } + else if(infillListView.activeIndex == index) + { + return UM.Theme.getColor("setting_control_selected") + } + else if(infillMouseArea.containsMouse) + { + return UM.Theme.getColor("setting_control_border_highlight") + } + return UM.Theme.getColor("setting_control_border") + } + border.width: UM.Theme.getSize("default_lining").width + color: + { + if(infillListView.activeIndex == index) + { + if(!base.settingsEnabled) + { + return UM.Theme.getColor("setting_control_disabled_text") + } + return UM.Theme.getColor("setting_control_selected") + } + return "transparent" + } + + UM.RecolorImage + { + id: infillIcon + anchors.fill: parent; + anchors.margins: 2 + + sourceSize.width: width + sourceSize.height: width + source: UM.Theme.getIcon(model.icon); + color: { + if(infillListView.activeIndex == index) + { + return UM.Theme.getColor("text_emphasis") + } + if(!base.settingsEnabled) + { + return UM.Theme.getColor("setting_control_disabled_text") + } + return UM.Theme.getColor("setting_control_disabled_text") + } + } + + MouseArea + { + id: infillMouseArea + anchors.fill: parent + hoverEnabled: true + enabled: base.settingsEnabled + onClicked: { + if (infillListView.activeIndex != index) + { + infillDensity.setPropertyValue("value", model.percentage) + infillSteps.setPropertyValue("value", model.steps) + } + } + onEntered: + { + base.showTooltip(infillCellRight, Qt.point(-infillCellRight.x, 0), model.text); + } + onExited: + { + base.hideTooltip(); + } + } + } + Text + { + id: infillLabel + width: (infillCellRight.width - ((infillModel.count - 1) * UM.Theme.getSize("sidebar_margin").width)) / (infillModel.count); + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + wrapMode: Text.WordWrap + font: UM.Theme.getFont("default") + anchors.top: infillIconLining.bottom + anchors.horizontalCenter: infillIconLining.horizontalCenter + color: infillListView.activeIndex == index ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_border") + text: name } } - platformAdhesionType.setPropertyValue("value", adhesionType); } - onEntered: + + ListModel { - base.showTooltip(adhesionCheckBox, Qt.point(-adhesionCheckBox.x, 0), - catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards.")); - } - onExited: - { - base.hideTooltip(); + id: infillModel + + Component.onCompleted: + { + infillModel.append({ + name: catalog.i18nc("@label", "0%"), + percentage: 0, + steps: 0, + percentageMin: -1, + percentageMax: 0, + stepsMin: -1, + stepsMax: 0, + text: catalog.i18nc("@label", "Empty infill will leave your model hollow with low strength."), + icon: "hollow" + }) + infillModel.append({ + name: catalog.i18nc("@label", "20%"), + percentage: 20, + steps: 0, + percentageMin: 0, + percentageMax: 30, + stepsMin: -1, + stepsMax: 0, + text: catalog.i18nc("@label", "Light (20%) infill will give your model an average strength."), + icon: "sparse" + }) + infillModel.append({ + name: catalog.i18nc("@label", "50%"), + percentage: 50, + steps: 0, + percentageMin: 30, + percentageMax: 70, + stepsMin: -1, + stepsMax: 0, + text: catalog.i18nc("@label", "Dense (50%) infill will give your model an above average strength."), + icon: "dense" + }) + infillModel.append({ + name: catalog.i18nc("@label", "100%"), + percentage: 100, + steps: 0, + percentageMin: 70, + percentageMax: 9999999999, + stepsMin: -1, + stepsMax: 0, + text: catalog.i18nc("@label", "Solid (100%) infill will make your model completely solid."), + icon: "solid" + }) + infillModel.append({ + name: catalog.i18nc("@label", "Gradual"), + percentage: 90, + steps: 5, + percentageMin: 0, + percentageMax: 9999999999, + stepsMin: 0, + stepsMax: 9999999999, + infill_layer_height: 1.5, + text: catalog.i18nc("@label", "Gradual infill will gradually increase the amount of infill towards the top."), + icon: "gradual" + }) + } } } - } - ListModel - { - id: extruderModel - Component.onCompleted: populateExtruderModel() - } + Text + { + id: enableSupportLabel + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.verticalCenter: enableSupportCheckBox.verticalCenter + text: catalog.i18nc("@label", "Generate Support"); + font: UM.Theme.getFont("default"); + color: UM.Theme.getColor("text"); + } - //: Model used to populate the extrudelModel - Cura.ExtrudersModel - { - id: extruders - onModelChanged: populateExtruderModel() + CheckBox + { + id: enableSupportCheckBox + property alias _hovered: enableSupportMouseArea.containsMouse + + anchors.top: infillCellRight.bottom + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 2 + anchors.left: infillCellRight.left + + style: UM.Theme.styles.checkbox; + enabled: base.settingsEnabled + + checked: supportEnabled.properties.value == "True"; + + MouseArea + { + id: enableSupportMouseArea + anchors.fill: parent + hoverEnabled: true + enabled: true + onClicked: + { + // The value is a string "True" or "False" + supportEnabled.setPropertyValue("value", supportEnabled.properties.value != "True"); + } + onEntered: + { + base.showTooltip(enableSupportCheckBox, Qt.point(-enableSupportCheckBox.x, 0), + catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.")); + } + onExited: + { + base.hideTooltip(); + } + } + } + + Text + { + id: supportExtruderLabel + visible: (supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1) + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.verticalCenter: supportExtruderCombobox.verticalCenter + text: catalog.i18nc("@label", "Support Extruder"); + font: UM.Theme.getFont("default"); + color: UM.Theme.getColor("text"); + } + + ComboBox + { + id: supportExtruderCombobox + visible: (supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1) + model: extruderModel + + property string color_override: "" // for manually setting values + property string color: // is evaluated automatically, but the first time is before extruderModel being filled + { + var current_extruder = extruderModel.get(currentIndex); + color_override = ""; + if (current_extruder === undefined) { + return ""; + } + var model_color = current_extruder.color; + return (model_color) ? model_color : ""; + } + + textRole: 'text' // this solves that the combobox isn't populated in the first time Cura is started + + anchors.top: enableSupportCheckBox.bottom + anchors.topMargin: + { + if ((supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1)) + { + return UM.Theme.getSize("sidebar_margin").height; + } + else + { + return 0; + } + } + anchors.left: infillCellRight.left + width: UM.Theme.getSize("sidebar").width * .55 + height: + { + if ((supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1)) + { + // default height when control is enabled + return UM.Theme.getSize("setting_control").height; + } + else + { + return 0; + } + } + Behavior on height { NumberAnimation { duration: 100 } } + + style: UM.Theme.styles.combobox_color + enabled: base.settingsEnabled + property alias _hovered: supportExtruderMouseArea.containsMouse + + currentIndex: supportExtruderNr.properties !== null ? parseFloat(supportExtruderNr.properties.value) : 0 + onActivated: + { + // Send the extruder nr as a string. + supportExtruderNr.setPropertyValue("value", String(index)); + } + MouseArea + { + id: supportExtruderMouseArea + anchors.fill: parent + hoverEnabled: true + enabled: base.settingsEnabled + acceptedButtons: Qt.NoButton + onEntered: + { + base.showTooltip(supportExtruderCombobox, Qt.point(-supportExtruderCombobox.x, 0), + catalog.i18nc("@label", "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air.")); + } + onExited: + { + base.hideTooltip(); + } + } + + function updateCurrentColor() + { + var current_extruder = extruderModel.get(currentIndex); + if (current_extruder !== undefined) { + supportExtruderCombobox.color_override = current_extruder.color; + } + } + + } + + Text + { + id: adhesionHelperLabel + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.verticalCenter: adhesionCheckBox.verticalCenter + text: catalog.i18nc("@label", "Build Plate Adhesion"); + font: UM.Theme.getFont("default"); + color: UM.Theme.getColor("text"); + elide: Text.ElideRight + } + + CheckBox + { + id: adhesionCheckBox + property alias _hovered: adhesionMouseArea.containsMouse + + anchors.top: supportExtruderCombobox.bottom + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 2 + anchors.left: infillCellRight.left + + //: Setting enable printing build-plate adhesion helper checkbox + style: UM.Theme.styles.checkbox; + enabled: base.settingsEnabled + + checked: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" + + MouseArea + { + id: adhesionMouseArea + anchors.fill: parent + hoverEnabled: true + enabled: base.settingsEnabled + onClicked: + { + var adhesionType = "skirt"; + if(!parent.checked) + { + // Remove the "user" setting to see if the rest of the stack prescribes a brim or a raft + platformAdhesionType.removeFromContainer(0); + adhesionType = platformAdhesionType.properties.value; + if(adhesionType == "skirt") + { + // If the rest of the stack doesn't prescribe an adhesion-type, default to a brim + adhesionType = "brim"; + } + } + platformAdhesionType.setPropertyValue("value", adhesionType); + } + onEntered: + { + base.showTooltip(adhesionCheckBox, Qt.point(-adhesionCheckBox.x, 0), + catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards.")); + } + onExited: + { + base.hideTooltip(); + } + } + } + + ListModel + { + id: extruderModel + Component.onCompleted: populateExtruderModel() + } + + //: Model used to populate the extrudelModel + Cura.ExtrudersModel + { + id: extruders + onModelChanged: populateExtruderModel() + } + + Item + { + id: tipsCell + anchors.top: adhesionCheckBox.bottom + anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 2 + anchors.left: parent.left + width: parent.width + height: tipsText.contentHeight * tipsText.lineCount + + Text + { + id: tipsText + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width + anchors.top: parent.top + wrapMode: Text.WordWrap + //: Tips label + text: catalog.i18nc("@label", "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides").arg("https://ultimaker.com/en/troubleshooting") + "".arg(UM.Theme.getIcon("play")) + font: UM.Theme.getFont("default"); + color: UM.Theme.getColor("text"); + linkColor: UM.Theme.getColor("text_link") + onLinkActivated: Qt.openUrlExternally(link) + } + } + + UM.SettingPropertyProvider + { + id: infillExtruderNumber + + containerStackId: Cura.MachineManager.activeStackId + key: "infill_extruder_nr" + watchedProperties: [ "value" ] + storeIndex: 0 + } + + Binding + { + target: infillDensity + property: "containerStackId" + value: + { + var activeMachineId = Cura.MachineManager.activeMachineId; + if (machineExtruderCount.properties.value > 1) + { + var infillExtruderNr = parseInt(infillExtruderNumber.properties.value); + if (infillExtruderNr >= 0) + { + activeMachineId = ExtruderManager.extruderIds[infillExtruderNumber.properties.value]; + } + else if (ExtruderManager.activeExtruderStackId) + { + activeMachineId = ExtruderManager.activeExtruderStackId; + } + } + + infillSteps.containerStackId = activeMachineId; + return activeMachineId; + } + } + + UM.SettingPropertyProvider + { + id: infillDensity + + containerStackId: Cura.MachineManager.activeStackId + key: "infill_sparse_density" + watchedProperties: [ "value" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: infillSteps + + containerStackId: Cura.MachineManager.activeStackId + key: "gradual_infill_steps" + watchedProperties: [ "value" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: platformAdhesionType + + containerStackId: Cura.MachineManager.activeMachineId + key: "adhesion_type" + watchedProperties: [ "value" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: supportEnabled + + containerStackId: Cura.MachineManager.activeMachineId + key: "support_enable" + watchedProperties: [ "value", "description" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: machineExtruderCount + + containerStackId: Cura.MachineManager.activeMachineId + key: "machine_extruder_count" + watchedProperties: [ "value" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: supportExtruderNr + + containerStackId: Cura.MachineManager.activeMachineId + key: "support_extruder_nr" + watchedProperties: [ "value" ] + storeIndex: 0 + } } } @@ -495,124 +614,4 @@ Item } supportExtruderCombobox.updateCurrentColor(); } - - Item - { - id: tipsCell - anchors.top: helpersCell.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height * 2 - anchors.left: parent.left - width: parent.width - height: childrenRect.height - - Text - { - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - wrapMode: Text.WordWrap - //: Tips label - text: catalog.i18nc("@label", "Need help improving your prints?
Read the Ultimaker Troubleshooting Guides").arg("https://ultimaker.com/en/troubleshooting"); - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - linkColor: UM.Theme.getColor("text_link") - onLinkActivated: Qt.openUrlExternally(link) - } - } - - UM.SettingPropertyProvider - { - id: infillExtruderNumber - - containerStackId: Cura.MachineManager.activeStackId - key: "infill_extruder_nr" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - Binding - { - target: infillDensity - property: "containerStackId" - value: - { - var activeMachineId = Cura.MachineManager.activeMachineId; - if (machineExtruderCount.properties.value > 1) - { - var infillExtruderNr = parseInt(infillExtruderNumber.properties.value); - if (infillExtruderNr >= 0) - { - activeMachineId = ExtruderManager.extruderIds[infillExtruderNumber.properties.value]; - } - else if (ExtruderManager.activeExtruderStackId) - { - activeMachineId = ExtruderManager.activeExtruderStackId; - } - } - - infillSteps.containerStackId = activeMachineId; - return activeMachineId; - } - } - - UM.SettingPropertyProvider - { - id: infillDensity - - containerStackId: Cura.MachineManager.activeStackId - key: "infill_sparse_density" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: infillSteps - - containerStackId: Cura.MachineManager.activeStackId - key: "gradual_infill_steps" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: platformAdhesionType - - containerStackId: Cura.MachineManager.activeMachineId - key: "adhesion_type" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: supportEnabled - - containerStackId: Cura.MachineManager.activeMachineId - key: "support_enable" - watchedProperties: [ "value", "description" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - - containerStackId: Cura.MachineManager.activeMachineId - key: "machine_extruder_count" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: supportExtruderNr - - containerStackId: Cura.MachineManager.activeMachineId - key: "support_extruder_nr" - watchedProperties: [ "value" ] - storeIndex: 0 - } } diff --git a/resources/qml/Topbar.qml b/resources/qml/Topbar.qml index 210b9e1cfa..3e612b1478 100644 --- a/resources/qml/Topbar.qml +++ b/resources/qml/Topbar.qml @@ -44,7 +44,7 @@ Rectangle iconSource: UM.Theme.getIcon("tab_settings"); property color overlayColor: "transparent" property string overlayIconSource: "" - text: catalog.i18nc("@title:tab","Prepare") + text: catalog.i18nc("@title:tab", "Prepare") checkable: true checked: !base.monitoringPrint exclusiveGroup: sidebarHeaderBarGroup @@ -58,7 +58,7 @@ Rectangle height: UM.Theme.getSize("sidebar_header").height onClicked: base.startMonitoringPrint() text: catalog.i18nc("@title:tab", "Monitor") - iconSource: printerConnected ? UM.Theme.getIcon("tab_monitor_with_status") : UM.Theme.getIcon("tab_monitor") + iconSource: UM.Theme.getIcon("tab_monitor") property color overlayColor: { if(!printerAcceptsCommands) @@ -122,8 +122,6 @@ Rectangle return UM.Theme.getIcon("tab_status_paused") case "error": return UM.Theme.getIcon("tab_status_stopped") - case "offline": - return UM.Theme.getIcon("tab_status_offline") default: return "" } @@ -191,13 +189,13 @@ Rectangle height: UM.Theme.getSize("standard_arrow").height sourceSize.width: width sourceSize.height: width - color: UM.Theme.getColor("text_reversed") + color: UM.Theme.getColor("text_emphasis") source: UM.Theme.getIcon("arrow_bottom") } Label { id: sidebarComboBoxLabel - color: UM.Theme.getColor("text_reversed") + color: UM.Theme.getColor("sidebar_header_text_active") text: control.text; elide: Text.ElideRight; anchors.left: parent.left; diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json index 4129eebe27..45b8fd8675 100644 --- a/resources/themes/cura-dark/theme.json +++ b/resources/themes/cura-dark/theme.json @@ -4,183 +4,8 @@ "inherits": "cura" }, "colors": { - "sidebar": [83, 83, 83, 255], - "lining": [127, 127, 127, 255], - "viewport_overlay": [66, 66, 66, 255], - - "primary": [12, 169, 227, 255], - "primary_hover": [48, 182, 231, 255], - "primary_text": [83, 83, 83, 255], - "border": [127, 127, 127, 255], - "secondary": [66, 66, 66, 255], - - "text": [255, 255, 255, 255], - "text_detail": [174, 174, 174, 128], - "text_link": [12, 169, 227, 255], - "text_inactive": [174, 174, 174, 255], - "text_hover": [70, 84, 113, 255], - "text_pressed": [12, 169, 227, 255], - "text_reversed": [255, 255, 255, 255], - "text_subtext": [255, 255, 255, 255], - - "error": [255, 140, 0, 255], - - "sidebar_header_bar": [66, 66, 66, 255], - "sidebar_header_active": [83, 83, 83, 255], - "sidebar_header_hover": [83, 83, 83, 255], - "sidebar_header_highlight": [83, 83, 83, 255], - "sidebar_header_highlight_hover": [66, 66, 66, 255], - "sidebar_lining": [66, 66, 66, 255], - - "button": [83, 83, 83, 255], - "button_hover": [83, 83, 83, 255], - "button_active": [32, 166, 219, 255], - "button_active_hover": [12, 169, 227, 255], - "button_text": [255, 255, 255, 255], - "button_disabled": [255, 255, 255, 255], - "button_disabled_text": [70, 84, 113, 255], - - "button_tooltip": [83, 83, 83, 255], - "button_tooltip_border": [255, 255, 255, 255], - "button_tooltip_text": [255, 255, 255, 255], - - "toggle_checked": [255, 255, 255, 255], - "toggle_checked_border": [255, 255, 255, 255], - "toggle_checked_text": [83, 83, 83, 255], - "toggle_unchecked": [83, 83, 83, 255], - "toggle_unchecked_border": [127, 127, 127, 255], - "toggle_unchecked_text": [255, 255, 255, 255], - "toggle_hovered": [83, 83, 83, 255], - "toggle_hovered_border": [32, 166, 219, 255], - "toggle_hovered_text": [255, 255, 255, 255], - "toggle_active": [32, 166, 219, 255], - "toggle_active_border": [32, 166, 219, 255], - "toggle_active_text": [255, 255, 255, 255], - - "tab_checked": [83, 83, 83, 255], - "tab_checked_border": [83, 83, 83, 255], - "tab_checked_text": [255, 255, 255, 255], - "tab_unchecked": [66, 66, 66, 255], - "tab_unchecked_border": [66, 66, 66, 255], - "tab_unchecked_text": [127, 127, 127, 255], - "tab_hovered": [66, 66, 66, 255], - "tab_hovered_border": [66, 66, 66, 255], - "tab_hovered_text": [32, 166, 219, 255], - "tab_active": [83, 83, 83, 255], - "tab_active_border": [83, 83, 83, 255], - "tab_active_text": [255, 255, 255, 255], - "tab_background": [66, 66, 66, 255], - - "action_button": [83, 83, 83, 255], - "action_button_text": [255, 255, 255, 255], - "action_button_border": [127, 127, 127, 255], - "action_button_hovered": [83, 83, 83, 255], - "action_button_hovered_text": [255, 255, 255, 255], - "action_button_hovered_border": [12, 169, 227, 255], - "action_button_active": [12, 169, 227, 255], - "action_button_active_text": [83, 83, 83, 255], - "action_button_active_border": [12, 169, 227, 255], - "action_button_disabled": [66, 66, 66, 255], - "action_button_disabled_text": [127, 127, 127, 255], - "action_button_disabled_border": [66, 66, 66, 255], - - "scrollbar_background": [83, 83, 83, 255], - "scrollbar_handle": [255, 255, 255, 255], - "scrollbar_handle_hover": [12, 159, 227, 255], - "scrollbar_handle_down": [12, 159, 227, 255], - - "setting_category": [66, 66, 66, 255], - "setting_category_disabled": [83, 83, 83, 255], - "setting_category_hover": [66, 66, 66, 255], - "setting_category_active": [66, 66, 66, 255], - "setting_category_active_hover": [66, 66, 66, 255], - "setting_category_text": [255, 255, 255, 255], - "setting_category_border": [66, 66, 66, 255], - "setting_category_disabled_border": [66, 66, 66, 255], - "setting_category_hover_border": [12, 159, 227, 255], - "setting_category_active_border": [66, 66, 66, 255], - "setting_category_active_hover_border": [12, 159, 227, 255], - - "setting_control": [83, 83, 83, 255], - "setting_control_selected": [12, 159, 227, 255], - "setting_control_highlight": [83, 83, 83, 0], - "setting_control_border": [127, 127, 127, 255], - "setting_control_border_highlight": [12, 169, 227, 255], - "setting_control_text": [255, 255, 255, 255], - "setting_control_depth_line": [127, 127, 127, 255], - "setting_control_button": [127, 127, 127, 255], - "setting_control_button_hover": [70, 84, 113, 255], - "setting_control_disabled": [66, 66, 66, 255], - "setting_control_disabled_text": [127, 127, 127, 255], - "setting_control_disabled_border": [127, 127, 127, 255], - "setting_unit": [127, 127, 127, 255], - "setting_validation_error": [204, 37, 0, 255], - "setting_validation_warning": [204, 146, 0, 255], - "setting_validation_ok": [83, 83, 83, 255], - - "progressbar_background": [66, 66, 66, 255], - "progressbar_control": [255, 255, 255, 255], - - "slider_groove": [66, 66, 66, 255], - "slider_groove_border": [127, 127, 127, 255], - "slider_groove_fill": [127, 127, 127, 255], - "slider_handle": [32, 166, 219, 255], - "slider_handle_hover": [77, 182, 226, 255], - "slider_text_background": [83, 83, 83, 255], - - "checkbox": [83, 83, 83, 255], - "checkbox_hover": [83, 83, 83, 255], - "checkbox_border": [127, 127, 127, 255], - "checkbox_border_hover": [12, 169, 227, 255], - "checkbox_mark": [255, 255, 255, 255], - "checkbox_text": [255, 255, 255, 255], - - "mode_switch": [83, 83, 83, 255], - "mode_switch_hover": [83, 83, 83, 255], - "mode_switch_border": [127, 127, 127, 255], - "mode_switch_border_hover": [12, 169, 227, 255], - "mode_switch_handle": [255, 255, 255, 255], - "mode_switch_text": [255, 255, 255, 255], - "mode_switch_text_hover": [255, 255, 255, 255], - "mode_switch_text_checked": [12, 169, 227, 255], - - "tooltip": [40, 40, 40, 255], - "tooltip_text": [255, 255, 255, 255], - - "message_background": [255, 255, 255, 255], - "message_text": [83, 83, 83, 255], - "message_border": [255, 255, 255, 255], - "message_button": [83, 83, 83, 255], - "message_button_hover": [12, 169, 227, 255], - "message_button_active": [32, 166, 219, 255], - "message_button_text": [255, 255, 255, 255], - "message_button_text_hover": [83, 83, 83, 255], - "message_button_text_active": [83, 83, 83, 255], - "message_progressbar_background": [83, 83, 83, 255], - "message_progressbar_control": [12, 169, 227, 255], - - "tool_panel_background": [83, 83, 83, 255], - - "status_offline": [0, 0, 0, 255], - "status_ready": [0, 205, 0, 255], - "status_busy": [12, 169, 227, 255], - "status_paused": [255, 140, 0, 255], - "status_stopped": [236, 82, 80, 255], - "status_unknown": [127, 127, 127, 255], - - "disabled_axis": [127, 127, 127, 255], - "x_axis": [255, 0, 0, 255], - "y_axis": [0, 0, 255, 255], - "z_axis": [0, 255, 0, 255], - "all_axis": [83, 83, 83, 255], - - "viewport_background": [66, 66, 66, 255], - "volume_outline": [12, 169, 227, 255], - "buildplate": [169, 169, 169, 255], - "buildplate_alt": [204, 204, 204, 255], - - "convex_hull": [35, 35, 35, 127], - "disallowed_area": [0, 0, 0, 40], - "error_area": [255, 0, 0, 127] + "viewport_background": [31, 36, 39, 255], + "text_scene": [255, 255, 255, 162], + "text_scene_hover": [255, 255, 255, 204] } } diff --git a/resources/themes/cura/fonts/LICENSE.txt b/resources/themes/cura-light/fonts/LICENSE.txt similarity index 98% rename from resources/themes/cura/fonts/LICENSE.txt rename to resources/themes/cura-light/fonts/LICENSE.txt index 75b52484ea..d645695673 100644 --- a/resources/themes/cura/fonts/LICENSE.txt +++ b/resources/themes/cura-light/fonts/LICENSE.txt @@ -1,202 +1,202 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/resources/themes/cura/fonts/OpenSans-Bold.ttf b/resources/themes/cura-light/fonts/OpenSans-Bold.ttf similarity index 100% rename from resources/themes/cura/fonts/OpenSans-Bold.ttf rename to resources/themes/cura-light/fonts/OpenSans-Bold.ttf diff --git a/resources/themes/cura/fonts/OpenSans-BoldItalic.ttf b/resources/themes/cura-light/fonts/OpenSans-BoldItalic.ttf similarity index 100% rename from resources/themes/cura/fonts/OpenSans-BoldItalic.ttf rename to resources/themes/cura-light/fonts/OpenSans-BoldItalic.ttf diff --git a/resources/themes/cura/fonts/OpenSans-Italic.ttf b/resources/themes/cura-light/fonts/OpenSans-Italic.ttf similarity index 100% rename from resources/themes/cura/fonts/OpenSans-Italic.ttf rename to resources/themes/cura-light/fonts/OpenSans-Italic.ttf diff --git a/resources/themes/cura/fonts/OpenSans-Light.ttf b/resources/themes/cura-light/fonts/OpenSans-Light.ttf similarity index 100% rename from resources/themes/cura/fonts/OpenSans-Light.ttf rename to resources/themes/cura-light/fonts/OpenSans-Light.ttf diff --git a/resources/themes/cura/fonts/OpenSans-LightItalic.ttf b/resources/themes/cura-light/fonts/OpenSans-LightItalic.ttf similarity index 100% rename from resources/themes/cura/fonts/OpenSans-LightItalic.ttf rename to resources/themes/cura-light/fonts/OpenSans-LightItalic.ttf diff --git a/resources/themes/cura/fonts/OpenSans-Regular.ttf b/resources/themes/cura-light/fonts/OpenSans-Regular.ttf similarity index 100% rename from resources/themes/cura/fonts/OpenSans-Regular.ttf rename to resources/themes/cura-light/fonts/OpenSans-Regular.ttf diff --git a/resources/themes/cura/fonts/OpenSans-Semibold.ttf b/resources/themes/cura-light/fonts/OpenSans-Semibold.ttf similarity index 100% rename from resources/themes/cura/fonts/OpenSans-Semibold.ttf rename to resources/themes/cura-light/fonts/OpenSans-Semibold.ttf diff --git a/resources/themes/cura/fonts/OpenSans-SemiboldItalic.ttf b/resources/themes/cura-light/fonts/OpenSans-SemiboldItalic.ttf similarity index 100% rename from resources/themes/cura/fonts/OpenSans-SemiboldItalic.ttf rename to resources/themes/cura-light/fonts/OpenSans-SemiboldItalic.ttf diff --git a/resources/themes/cura/icons/application.svg b/resources/themes/cura-light/icons/application.svg similarity index 100% rename from resources/themes/cura/icons/application.svg rename to resources/themes/cura-light/icons/application.svg diff --git a/resources/themes/cura/icons/arrow_bottom.svg b/resources/themes/cura-light/icons/arrow_bottom.svg similarity index 100% rename from resources/themes/cura/icons/arrow_bottom.svg rename to resources/themes/cura-light/icons/arrow_bottom.svg diff --git a/resources/themes/cura/icons/arrow_left.svg b/resources/themes/cura-light/icons/arrow_left.svg similarity index 100% rename from resources/themes/cura/icons/arrow_left.svg rename to resources/themes/cura-light/icons/arrow_left.svg diff --git a/resources/themes/cura/icons/arrow_right.svg b/resources/themes/cura-light/icons/arrow_right.svg similarity index 100% rename from resources/themes/cura/icons/arrow_right.svg rename to resources/themes/cura-light/icons/arrow_right.svg diff --git a/resources/themes/cura/icons/arrow_top.svg b/resources/themes/cura-light/icons/arrow_top.svg similarity index 100% rename from resources/themes/cura/icons/arrow_top.svg rename to resources/themes/cura-light/icons/arrow_top.svg diff --git a/resources/themes/cura/icons/basic.svg b/resources/themes/cura-light/icons/basic.svg similarity index 100% rename from resources/themes/cura/icons/basic.svg rename to resources/themes/cura-light/icons/basic.svg diff --git a/resources/themes/cura/icons/category_adhesion.svg b/resources/themes/cura-light/icons/category_adhesion.svg similarity index 100% rename from resources/themes/cura/icons/category_adhesion.svg rename to resources/themes/cura-light/icons/category_adhesion.svg diff --git a/resources/themes/cura/icons/category_blackmagic.svg b/resources/themes/cura-light/icons/category_blackmagic.svg similarity index 100% rename from resources/themes/cura/icons/category_blackmagic.svg rename to resources/themes/cura-light/icons/category_blackmagic.svg diff --git a/resources/themes/cura/icons/category_cool.svg b/resources/themes/cura-light/icons/category_cool.svg similarity index 100% rename from resources/themes/cura/icons/category_cool.svg rename to resources/themes/cura-light/icons/category_cool.svg diff --git a/resources/themes/cura/icons/category_dual.svg b/resources/themes/cura-light/icons/category_dual.svg similarity index 100% rename from resources/themes/cura/icons/category_dual.svg rename to resources/themes/cura-light/icons/category_dual.svg diff --git a/resources/themes/cura/icons/category_experimental.svg b/resources/themes/cura-light/icons/category_experimental.svg similarity index 100% rename from resources/themes/cura/icons/category_experimental.svg rename to resources/themes/cura-light/icons/category_experimental.svg diff --git a/resources/themes/cura/icons/category_fixes.svg b/resources/themes/cura-light/icons/category_fixes.svg similarity index 100% rename from resources/themes/cura/icons/category_fixes.svg rename to resources/themes/cura-light/icons/category_fixes.svg diff --git a/resources/themes/cura/icons/category_infill.svg b/resources/themes/cura-light/icons/category_infill.svg similarity index 100% rename from resources/themes/cura/icons/category_infill.svg rename to resources/themes/cura-light/icons/category_infill.svg diff --git a/resources/themes/cura/icons/category_layer_height.svg b/resources/themes/cura-light/icons/category_layer_height.svg similarity index 100% rename from resources/themes/cura/icons/category_layer_height.svg rename to resources/themes/cura-light/icons/category_layer_height.svg diff --git a/resources/themes/cura/icons/category_machine.svg b/resources/themes/cura-light/icons/category_machine.svg similarity index 100% rename from resources/themes/cura/icons/category_machine.svg rename to resources/themes/cura-light/icons/category_machine.svg diff --git a/resources/themes/cura/icons/category_material.svg b/resources/themes/cura-light/icons/category_material.svg similarity index 100% rename from resources/themes/cura/icons/category_material.svg rename to resources/themes/cura-light/icons/category_material.svg diff --git a/resources/themes/cura/icons/category_shell.svg b/resources/themes/cura-light/icons/category_shell.svg similarity index 100% rename from resources/themes/cura/icons/category_shell.svg rename to resources/themes/cura-light/icons/category_shell.svg diff --git a/resources/themes/cura/icons/category_shield.svg b/resources/themes/cura-light/icons/category_shield.svg similarity index 100% rename from resources/themes/cura/icons/category_shield.svg rename to resources/themes/cura-light/icons/category_shield.svg diff --git a/resources/themes/cura/icons/category_speed.svg b/resources/themes/cura-light/icons/category_speed.svg similarity index 100% rename from resources/themes/cura/icons/category_speed.svg rename to resources/themes/cura-light/icons/category_speed.svg diff --git a/resources/themes/cura/icons/category_support.svg b/resources/themes/cura-light/icons/category_support.svg similarity index 100% rename from resources/themes/cura/icons/category_support.svg rename to resources/themes/cura-light/icons/category_support.svg diff --git a/resources/themes/cura/icons/category_travel.svg b/resources/themes/cura-light/icons/category_travel.svg similarity index 100% rename from resources/themes/cura/icons/category_travel.svg rename to resources/themes/cura-light/icons/category_travel.svg diff --git a/resources/themes/cura/icons/category_unknown.svg b/resources/themes/cura-light/icons/category_unknown.svg similarity index 100% rename from resources/themes/cura/icons/category_unknown.svg rename to resources/themes/cura-light/icons/category_unknown.svg diff --git a/resources/themes/cura/icons/check.svg b/resources/themes/cura-light/icons/check.svg similarity index 100% rename from resources/themes/cura/icons/check.svg rename to resources/themes/cura-light/icons/check.svg diff --git a/resources/themes/cura/icons/cross1.svg b/resources/themes/cura-light/icons/cross1.svg similarity index 100% rename from resources/themes/cura/icons/cross1.svg rename to resources/themes/cura-light/icons/cross1.svg diff --git a/resources/themes/cura/icons/cross2.svg b/resources/themes/cura-light/icons/cross2.svg similarity index 100% rename from resources/themes/cura/icons/cross2.svg rename to resources/themes/cura-light/icons/cross2.svg diff --git a/resources/themes/cura/icons/dense.svg b/resources/themes/cura-light/icons/dense.svg similarity index 100% rename from resources/themes/cura/icons/dense.svg rename to resources/themes/cura-light/icons/dense.svg diff --git a/resources/themes/cura/icons/dot.svg b/resources/themes/cura-light/icons/dot.svg similarity index 100% rename from resources/themes/cura/icons/dot.svg rename to resources/themes/cura-light/icons/dot.svg diff --git a/resources/themes/cura-light/icons/drop_down_button.svg b/resources/themes/cura-light/icons/drop_down_button.svg new file mode 100644 index 0000000000..18748e6d70 --- /dev/null +++ b/resources/themes/cura-light/icons/drop_down_button.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/gradual.svg b/resources/themes/cura-light/icons/gradual.svg similarity index 100% rename from resources/themes/cura/icons/gradual.svg rename to resources/themes/cura-light/icons/gradual.svg diff --git a/resources/themes/cura/icons/hollow.svg b/resources/themes/cura-light/icons/hollow.svg similarity index 100% rename from resources/themes/cura/icons/hollow.svg rename to resources/themes/cura-light/icons/hollow.svg diff --git a/resources/themes/cura/icons/link.svg b/resources/themes/cura-light/icons/link.svg similarity index 100% rename from resources/themes/cura/icons/link.svg rename to resources/themes/cura-light/icons/link.svg diff --git a/resources/themes/cura/icons/load.svg b/resources/themes/cura-light/icons/load.svg similarity index 100% rename from resources/themes/cura/icons/load.svg rename to resources/themes/cura-light/icons/load.svg diff --git a/resources/themes/cura/icons/material_not_selected.svg b/resources/themes/cura-light/icons/material_not_selected.svg similarity index 100% rename from resources/themes/cura/icons/material_not_selected.svg rename to resources/themes/cura-light/icons/material_not_selected.svg diff --git a/resources/themes/cura/icons/material_selected.svg b/resources/themes/cura-light/icons/material_selected.svg similarity index 100% rename from resources/themes/cura/icons/material_selected.svg rename to resources/themes/cura-light/icons/material_selected.svg diff --git a/resources/themes/cura/icons/minus.svg b/resources/themes/cura-light/icons/minus.svg similarity index 100% rename from resources/themes/cura/icons/minus.svg rename to resources/themes/cura-light/icons/minus.svg diff --git a/resources/themes/cura/icons/mirror.svg b/resources/themes/cura-light/icons/mirror.svg similarity index 100% rename from resources/themes/cura/icons/mirror.svg rename to resources/themes/cura-light/icons/mirror.svg diff --git a/resources/themes/cura-light/icons/notice.svg b/resources/themes/cura-light/icons/notice.svg new file mode 100644 index 0000000000..36154d6729 --- /dev/null +++ b/resources/themes/cura-light/icons/notice.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/pencil.svg b/resources/themes/cura-light/icons/pencil.svg similarity index 100% rename from resources/themes/cura/icons/pencil.svg rename to resources/themes/cura-light/icons/pencil.svg diff --git a/resources/themes/cura-light/icons/play.svg b/resources/themes/cura-light/icons/play.svg new file mode 100644 index 0000000000..04aea11a9b --- /dev/null +++ b/resources/themes/cura-light/icons/play.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/plugin.svg b/resources/themes/cura-light/icons/plugin.svg similarity index 100% rename from resources/themes/cura/icons/plugin.svg rename to resources/themes/cura-light/icons/plugin.svg diff --git a/resources/themes/cura/icons/plus.svg b/resources/themes/cura-light/icons/plus.svg similarity index 100% rename from resources/themes/cura/icons/plus.svg rename to resources/themes/cura-light/icons/plus.svg diff --git a/resources/themes/cura/icons/print_time.svg b/resources/themes/cura-light/icons/print_time.svg similarity index 100% rename from resources/themes/cura/icons/print_time.svg rename to resources/themes/cura-light/icons/print_time.svg diff --git a/resources/themes/cura/icons/printsetup.svg b/resources/themes/cura-light/icons/printsetup.svg similarity index 100% rename from resources/themes/cura/icons/printsetup.svg rename to resources/themes/cura-light/icons/printsetup.svg diff --git a/resources/themes/cura/icons/quick.svg b/resources/themes/cura-light/icons/quick.svg similarity index 100% rename from resources/themes/cura/icons/quick.svg rename to resources/themes/cura-light/icons/quick.svg diff --git a/resources/themes/cura/icons/reset.svg b/resources/themes/cura-light/icons/reset.svg similarity index 100% rename from resources/themes/cura/icons/reset.svg rename to resources/themes/cura-light/icons/reset.svg diff --git a/resources/themes/cura/icons/rotate.svg b/resources/themes/cura-light/icons/rotate.svg similarity index 100% rename from resources/themes/cura/icons/rotate.svg rename to resources/themes/cura-light/icons/rotate.svg diff --git a/resources/themes/cura/icons/rotate_layflat.svg b/resources/themes/cura-light/icons/rotate_layflat.svg similarity index 100% rename from resources/themes/cura/icons/rotate_layflat.svg rename to resources/themes/cura-light/icons/rotate_layflat.svg diff --git a/resources/themes/cura/icons/rotate_reset.svg b/resources/themes/cura-light/icons/rotate_reset.svg similarity index 100% rename from resources/themes/cura/icons/rotate_reset.svg rename to resources/themes/cura-light/icons/rotate_reset.svg diff --git a/resources/themes/cura/icons/scale.svg b/resources/themes/cura-light/icons/scale.svg similarity index 100% rename from resources/themes/cura/icons/scale.svg rename to resources/themes/cura-light/icons/scale.svg diff --git a/resources/themes/cura/icons/scale_max.svg b/resources/themes/cura-light/icons/scale_max.svg similarity index 100% rename from resources/themes/cura/icons/scale_max.svg rename to resources/themes/cura-light/icons/scale_max.svg diff --git a/resources/themes/cura/icons/scale_reset.svg b/resources/themes/cura-light/icons/scale_reset.svg similarity index 100% rename from resources/themes/cura/icons/scale_reset.svg rename to resources/themes/cura-light/icons/scale_reset.svg diff --git a/resources/themes/cura/icons/search.svg b/resources/themes/cura-light/icons/search.svg similarity index 100% rename from resources/themes/cura/icons/search.svg rename to resources/themes/cura-light/icons/search.svg diff --git a/resources/themes/cura/icons/setting_per_object.svg b/resources/themes/cura-light/icons/setting_per_object.svg similarity index 100% rename from resources/themes/cura/icons/setting_per_object.svg rename to resources/themes/cura-light/icons/setting_per_object.svg diff --git a/resources/themes/cura/icons/settings.svg b/resources/themes/cura-light/icons/settings.svg similarity index 100% rename from resources/themes/cura/icons/settings.svg rename to resources/themes/cura-light/icons/settings.svg diff --git a/resources/themes/cura/icons/solid.svg b/resources/themes/cura-light/icons/solid.svg similarity index 100% rename from resources/themes/cura/icons/solid.svg rename to resources/themes/cura-light/icons/solid.svg diff --git a/resources/themes/cura/icons/sparse.svg b/resources/themes/cura-light/icons/sparse.svg similarity index 100% rename from resources/themes/cura/icons/sparse.svg rename to resources/themes/cura-light/icons/sparse.svg diff --git a/resources/themes/cura/icons/star.svg b/resources/themes/cura-light/icons/star.svg similarity index 100% rename from resources/themes/cura/icons/star.svg rename to resources/themes/cura-light/icons/star.svg diff --git a/resources/themes/cura-light/icons/tab_monitor.svg b/resources/themes/cura-light/icons/tab_monitor.svg new file mode 100644 index 0000000000..afc661a22d --- /dev/null +++ b/resources/themes/cura-light/icons/tab_monitor.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/tab_settings.svg b/resources/themes/cura-light/icons/tab_settings.svg similarity index 76% rename from resources/themes/cura/icons/tab_settings.svg rename to resources/themes/cura-light/icons/tab_settings.svg index 0d90db81ef..e2a4860647 100644 --- a/resources/themes/cura/icons/tab_settings.svg +++ b/resources/themes/cura-light/icons/tab_settings.svg @@ -1,3 +1,3 @@ - - + + diff --git a/resources/themes/cura-light/icons/tab_status_busy.svg b/resources/themes/cura-light/icons/tab_status_busy.svg new file mode 100644 index 0000000000..cf8e384d88 --- /dev/null +++ b/resources/themes/cura-light/icons/tab_status_busy.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_connected.svg b/resources/themes/cura-light/icons/tab_status_connected.svg new file mode 100644 index 0000000000..56aecdf0a7 --- /dev/null +++ b/resources/themes/cura-light/icons/tab_status_connected.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_paused.svg b/resources/themes/cura-light/icons/tab_status_paused.svg new file mode 100644 index 0000000000..0ec744ad86 --- /dev/null +++ b/resources/themes/cura-light/icons/tab_status_paused.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_stopped.svg b/resources/themes/cura-light/icons/tab_status_stopped.svg new file mode 100644 index 0000000000..ec1afaec81 --- /dev/null +++ b/resources/themes/cura-light/icons/tab_status_stopped.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_unknown.svg b/resources/themes/cura-light/icons/tab_status_unknown.svg new file mode 100644 index 0000000000..382a2b2d8b --- /dev/null +++ b/resources/themes/cura-light/icons/tab_status_unknown.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/translate.svg b/resources/themes/cura-light/icons/translate.svg similarity index 100% rename from resources/themes/cura/icons/translate.svg rename to resources/themes/cura-light/icons/translate.svg diff --git a/resources/themes/cura/icons/ulti.svg b/resources/themes/cura-light/icons/ulti.svg similarity index 100% rename from resources/themes/cura/icons/ulti.svg rename to resources/themes/cura-light/icons/ulti.svg diff --git a/resources/themes/cura/icons/view_layer.svg b/resources/themes/cura-light/icons/view_layer.svg similarity index 100% rename from resources/themes/cura/icons/view_layer.svg rename to resources/themes/cura-light/icons/view_layer.svg diff --git a/resources/themes/cura/icons/view_normal.svg b/resources/themes/cura-light/icons/view_normal.svg similarity index 100% rename from resources/themes/cura/icons/view_normal.svg rename to resources/themes/cura-light/icons/view_normal.svg diff --git a/resources/themes/cura/icons/view_xray.svg b/resources/themes/cura-light/icons/view_xray.svg similarity index 100% rename from resources/themes/cura/icons/view_xray.svg rename to resources/themes/cura-light/icons/view_xray.svg diff --git a/resources/themes/cura-light/icons/viewmode.svg b/resources/themes/cura-light/icons/viewmode.svg new file mode 100644 index 0000000000..a21df01f37 --- /dev/null +++ b/resources/themes/cura-light/icons/viewmode.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/icons/warning.svg b/resources/themes/cura-light/icons/warning.svg new file mode 100644 index 0000000000..ae8a7a6430 --- /dev/null +++ b/resources/themes/cura-light/icons/warning.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/images/logo.svg b/resources/themes/cura-light/images/logo.svg new file mode 100644 index 0000000000..9a3dbdd6bd --- /dev/null +++ b/resources/themes/cura-light/images/logo.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura/styles.qml b/resources/themes/cura-light/styles.qml similarity index 76% rename from resources/themes/cura/styles.qml rename to resources/themes/cura-light/styles.qml index 30e3ce9ab8..2d40a0e8d0 100755 --- a/resources/themes/cura/styles.qml +++ b/resources/themes/cura-light/styles.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2015 Ultimaker B.V. +// Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the AGPLv3 or higher. import QtQuick 2.1 @@ -8,50 +8,6 @@ import QtQuick.Controls.Styles 1.1 import UM 1.1 as UM QtObject { - property Component mode_switch: Component { - SwitchStyle { - groove: Rectangle { - implicitWidth: UM.Theme.getSize("mode_switch").width - implicitHeight: UM.Theme.getSize("mode_switch").height - radius: implicitHeight / 2 - color: { - if(control.hovered || control._hovered) { - return UM.Theme.getColor("mode_switch_hover"); - } else { - return UM.Theme.getColor("mode_switch"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - border.color: { - if(control.hovered || control._hovered) { - return UM.Theme.getColor("mode_switch_border_hover"); - } else { - return UM.Theme.getColor("mode_switch_border"); - } - } - Behavior on border.color { ColorAnimation { duration: 50; } } - border.width: 1 - } - - handle: Rectangle { - implicitWidth: implicitHeight - implicitHeight: UM.Theme.getSize("mode_switch").height - radius: implicitHeight / 2 - - color: { - if (control.pressed || (control.checkable && control.checked)) { - return UM.Theme.getColor("sidebar_header_active"); - } else if(control.hovered) { - return UM.Theme.getColor("sidebar_header_hover"); - } else { - return UM.Theme.getColor("sidebar_header_bar"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - } - } - } - property Component sidebar_header_button: Component { ButtonStyle { background: Rectangle { @@ -61,23 +17,50 @@ QtObject { { if(control.valueError) { - return Theme.getColor("setting_validation_error"); + return Theme.getColor("setting_validation_error_background"); } else if(control.valueWarning) { - return Theme.getColor("setting_validation_warning"); - } else + return Theme.getColor("setting_validation_warning_background"); + } + else { return Theme.getColor("setting_control"); } - } else { + } + else + { return Theme.getColor("setting_control_disabled"); } } border.width: Theme.getSize("default_lining").width - border.color: !control.enabled ? Theme.getColor("setting_control_disabled_border") : - control.hovered ? Theme.getColor("setting_control_border_highlight") : Theme.getColor("setting_control_border") + border.color: + { + if (control.enabled) + { + if (control.valueError) + { + return Theme.getColor("setting_validation_error"); + } + else if (control.valueWarning) + { + return Theme.getColor("setting_validation_warning"); + } + else if (control.hovered) + { + return Theme.getColor("setting_control_border_highlight"); + } + else + { + return Theme.getColor("setting_control_border"); + } + } + else + { + return Theme.getColor("setting_control_disabled_border"); + } + } UM.RecolorImage { id: downArrow anchors.verticalCenter: parent.verticalCenter @@ -87,7 +70,7 @@ QtObject { height: Theme.getSize("standard_arrow").height sourceSize.width: width sourceSize.height: width - color: control.enabled ? Theme.getColor("setting_category_text") : Theme.getColor("setting_control_disabled_text") + color: control.enabled ? Theme.getColor("setting_category_text") : Theme.getColor("setting_category_disabled_text") source: Theme.getIcon("arrow_bottom") } Label { @@ -145,36 +128,34 @@ QtObject { label: Item { - - implicitHeight: Theme.getSize("button_icon").height + implicitHeight: Theme.getSize("topbar_button_icon").height implicitWidth: Theme.getSize("topbar_button").width; Item { anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter; width: childrenRect.width - height: Theme.getSize("button_icon").height + height: Theme.getSize("topbar_button_icon").height UM.RecolorImage { id: icon - color: UM.Theme.getColor("text_reversed") + color: UM.Theme.getColor("text_emphasis") opacity: !control.enabled ? 0.2 : 1.0 source: control.iconSource - width: Theme.getSize("button_icon").width - height: Theme.getSize("button_icon").height + width: Theme.getSize("topbar_button_icon").width + height: Theme.getSize("topbar_button_icon").height - sourceSize: Theme.getSize("button_icon") + sourceSize: Theme.getSize("topbar_button_icon") } - UM.RecolorImage + Image { visible: control.overlayIconSource != "" - color: control.overlayColor opacity: !control.enabled ? 0.2 : 1.0 source: control.overlayIconSource - width: Theme.getSize("button_icon").width - height: Theme.getSize("button_icon").height + width: Theme.getSize("topbar_button_icon").width + height: Theme.getSize("topbar_button_icon").height - sourceSize: Theme.getSize("button_icon") + sourceSize: Theme.getSize("topbar_button_icon") } Label { @@ -183,7 +164,21 @@ QtObject { anchors.leftMargin: Theme.getSize("default_margin").width anchors.verticalCenter: parent.verticalCenter; font: UM.Theme.getFont("large"); - color: UM.Theme.getColor("text_reversed") + color: + { + if(control.hovered) + { + return UM.Theme.getColor("sidebar_header_text_hover"); + } + if(control.checked) + { + return UM.Theme.getColor("sidebar_header_text_active"); + } + else + { + return UM.Theme.getColor("sidebar_header_text_inactive"); + } + } } } } @@ -205,7 +200,7 @@ QtObject { target: Qt.point(parent.x, y + height/2) arrowSize: Theme.getSize("button_tooltip_arrow").width - color: Theme.getColor("tooltip") + color: Theme.getColor("button_tooltip") opacity: control.hovered ? 1.0 : 0.0; width: control.hovered ? button_tip.width + Theme.getSize("button_tooltip").width : 0 @@ -250,7 +245,6 @@ QtObject { UM.RecolorImage { id: tool_button_arrow - opacity: !control.enabled ? 0.2 : 1.0 anchors.right: parent.right; anchors.rightMargin: (Theme.getSize("button").width - Theme.getSize("button_icon").width) / 4 anchors.bottom: parent.bottom; @@ -260,7 +254,25 @@ QtObject { sourceSize.width: width sourceSize.height: width visible: control.menu != null; - color: Theme.getColor("button_text") + color: + { + if(control.checkable && control.checked && control.hovered) + { + return Theme.getColor("button_text_active_hover"); + } + else if(control.pressed || (control.checkable && control.checked)) + { + return Theme.getColor("button_text_active"); + } + else if(control.hovered) + { + return Theme.getColor("button_text_hover"); + } + else + { + return Theme.getColor("button_text"); + } + } source: Theme.getIcon("arrow_bottom") } } @@ -273,7 +285,25 @@ QtObject { source: control.iconSource; width: Theme.getSize("button_icon").width; height: Theme.getSize("button_icon").height; - color: Theme.getColor("button_text") + color: + { + if(control.checkable && control.checked && control.hovered) + { + return Theme.getColor("button_text_active_hover"); + } + else if(control.pressed || (control.checkable && control.checked)) + { + return Theme.getColor("button_text_active"); + } + else if(control.hovered) + { + return Theme.getColor("button_text_hover"); + } + else + { + return Theme.getColor("button_text"); + } + } sourceSize: Theme.getSize("button_icon") } @@ -331,9 +361,9 @@ QtObject { background: Rectangle { anchors.fill: parent; anchors.left: parent.left - anchors.leftMargin: Theme.getSize("default_margin").width + anchors.leftMargin: Theme.getSize("sidebar_margin").width anchors.right: parent.right - anchors.rightMargin: Theme.getSize("default_margin").width + anchors.rightMargin: Theme.getSize("sidebar_margin").width implicitHeight: Theme.getSize("section").height; color: { if(control.color) { @@ -381,8 +411,30 @@ QtObject { UM.RecolorImage { anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left - anchors.leftMargin: Theme.getSize("default_margin").width - color: Theme.getColor("setting_category_text") + anchors.leftMargin: Theme.getSize("sidebar_margin").width + color: + { + if(!control.enabled) + { + return Theme.getColor("setting_category_disabled_text"); + } + else if((control.hovered || control.activeFocus) && control.checkable && control.checked) + { + return Theme.getColor("setting_category_active_hover_text"); + } + else if(control.pressed || (control.checkable && control.checked)) + { + return Theme.getColor("setting_category_active_text"); + } + else if(control.hovered || control.activeFocus) + { + return Theme.getColor("setting_category_hover_text"); + } + else + { + return Theme.getColor("setting_category_text"); + } + } source: control.iconSource; width: Theme.getSize("section_icon").width; height: Theme.getSize("section_icon").height; @@ -394,13 +446,35 @@ QtObject { Label { anchors { left: icon.right; - leftMargin: Theme.getSize("default_lining").width; + leftMargin: Theme.getSize("default_margin").width; right: parent.right; verticalCenter: parent.verticalCenter; } text: control.text; font: Theme.getFont("setting_category"); - color: Theme.getColor("setting_category_text"); + color: + { + if(!control.enabled) + { + return Theme.getColor("setting_category_disabled_text"); + } + else if((control.hovered || control.activeFocus) && control.checkable && control.checked) + { + return Theme.getColor("setting_category_active_hover_text"); + } + else if(control.pressed || (control.checkable && control.checked)) + { + return Theme.getColor("setting_category_active_text"); + } + else if(control.hovered || control.activeFocus) + { + return Theme.getColor("setting_category_hover_text"); + } + else + { + return Theme.getColor("setting_category_text"); + } + } fontSizeMode: Text.HorizontalFit; minimumPointSize: 8 } @@ -408,12 +482,34 @@ QtObject { id: category_arrow anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right - anchors.rightMargin: Theme.getSize("default_margin").width * 2 - width / 2 + anchors.rightMargin: Theme.getSize("default_margin").width * 3 - width / 2 width: Theme.getSize("standard_arrow").width height: Theme.getSize("standard_arrow").height sourceSize.width: width sourceSize.height: width - color: Theme.getColor("setting_category_text") + color: + { + if(!control.enabled) + { + return Theme.getColor("setting_category_disabled_text"); + } + else if((control.hovered || control.activeFocus) && control.checkable && control.checked) + { + return Theme.getColor("setting_category_active_hover_text"); + } + else if(control.pressed || (control.checkable && control.checked)) + { + return Theme.getColor("setting_category_active_text"); + } + else if(control.hovered || control.activeFocus) + { + return Theme.getColor("setting_category_hover_text"); + } + else + { + return Theme.getColor("setting_category_text"); + } + } source: control.checked ? Theme.getIcon("arrow_bottom") : Theme.getIcon("arrow_left") } } @@ -627,7 +723,9 @@ QtObject { width: Theme.getSize("slider_handle").width; height: Theme.getSize("slider_handle").height; color: control.hovered ? Theme.getColor("slider_handle_hover") : Theme.getColor("slider_handle"); - radius: Theme.getSize("slider_handle").width/2; + border.width: Theme.getSize("default_lining").width + border.color: control.hovered ? Theme.getColor("slider_handle_hover_border") : Theme.getColor("slider_handle_border") + radius: Theme.getSize("slider_handle").width / 2; //Round. Behavior on color { ColorAnimation { duration: 50; } } } } @@ -636,6 +734,7 @@ QtObject { property Component text_field: Component { TextFieldStyle { textColor: Theme.getColor("setting_control_text"); + placeholderTextColor: Theme.getColor("setting_control_text") font: Theme.getFont("default"); background: Rectangle @@ -691,7 +790,7 @@ QtObject { } Behavior on color { ColorAnimation { duration: 50; } } - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("default_margin").width * 2) + implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) Label { diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json new file mode 100644 index 0000000000..eb9fb72db6 --- /dev/null +++ b/resources/themes/cura-light/theme.json @@ -0,0 +1,345 @@ +{ + "metadata": { + "name": "Light" + }, + + "fonts": { + "large": { + "size": 1.25, + "bold": true, + "family": "Open Sans" + }, + "default": { + "size": 1.15, + "family": "Open Sans" + }, + "default_bold": { + "size": 1.15, + "bold": true, + "family": "Open Sans" + }, + "default_italic": { + "size": 1.15, + "italic": true, + "family": "Open Sans" + }, + "small": { + "size": 1.0, + "bold": true, + "family": "Open Sans" + }, + "very_small": { + "size": 1.0, + "family": "Open Sans" + }, + "button_tooltip": { + "size": 1.0, + "family": "Open Sans" + }, + "setting_category": { + "size": 1.15, + "bold": true, + "family": "Open Sans" + }, + "action_button": { + "size": 1.15, + "bold": true, + "family": "Open Sans" + } + }, + + "colors": { + "sidebar": [255, 255, 255, 255], + "lining": [127, 127, 127, 255], + "viewport_overlay": [24, 41, 77, 192], + + "primary": [12, 169, 227, 255], + "primary_hover": [48, 182, 231, 255], + "primary_text": [255, 255, 255, 255], + "border": [127, 127, 127, 255], + "secondary": [245, 245, 245, 255], + + "text": [24, 41, 77, 255], + "text_detail": [174, 174, 174, 128], + "text_link": [12, 169, 227, 255], + "text_inactive": [174, 174, 174, 255], + "text_hover": [70, 84, 113, 255], + "text_pressed": [12, 169, 227, 255], + "text_subtext": [70, 84, 113, 255], + "text_emphasis": [255, 255, 255, 255], + "text_scene": [24, 41, 77, 255], + "text_scene_hover": [70, 84, 113, 255], + + "error": [255, 140, 0, 255], + "sidebar_header_bar": [24, 41, 77, 255], + "sidebar_header_active": [70, 84, 113, 255], + "sidebar_header_hover": [24, 41, 77, 255], + "sidebar_header_highlight": [12, 169, 227, 255], + "sidebar_header_highlight_hover": [255, 255, 255, 255], + "sidebar_header_text_inactive": [255, 255, 255, 255], + "sidebar_header_text_active": [255, 255, 255, 255], + "sidebar_header_text_hover": [255, 255, 255, 255], + "sidebar_lining": [245, 245, 245, 255], + + "button": [24, 41, 77, 255], + "button_hover": [70, 84, 113, 255], + "button_active": [32, 166, 219, 255], + "button_active_hover": [12, 169, 227, 255], + "button_text": [255, 255, 255, 255], + "button_text_hover": [255, 255, 255, 255], + "button_text_active": [255, 255, 255, 255], + "button_text_active_hover": [255, 255, 255, 255], + "button_disabled": [24, 41, 77, 255], + "button_disabled_text": [255, 255, 255, 101], + + "button_tooltip": [12, 169, 227, 255], + "button_tooltip_border": [24, 41, 77, 255], + "button_tooltip_text": [24, 41, 77, 255], + + "tab_checked": [255, 255, 255, 255], + "tab_checked_border": [255, 255, 255, 255], + "tab_checked_text": [24, 41, 77, 255], + "tab_unchecked": [245, 245, 245, 255], + "tab_unchecked_border": [245, 245, 245, 255], + "tab_unchecked_text": [127, 127, 127, 255], + "tab_hovered": [245, 245, 245, 255], + "tab_hovered_border": [245, 245, 245, 255], + "tab_hovered_text": [32, 166, 219, 255], + "tab_active": [255, 255, 255, 255], + "tab_active_border": [255, 255, 255, 255], + "tab_active_text": [24, 41, 77, 255], + "tab_background": [245, 245, 245, 255], + + "action_button": [255, 255, 255, 255], + "action_button_text": [24, 41, 77, 255], + "action_button_border": [127, 127, 127, 255], + "action_button_hovered": [255, 255, 255, 255], + "action_button_hovered_text": [24, 41, 77, 255], + "action_button_hovered_border": [12, 169, 227, 255], + "action_button_active": [12, 169, 227, 255], + "action_button_active_text": [255, 255, 255, 255], + "action_button_active_border": [12, 169, 227, 255], + "action_button_disabled": [245, 245, 245, 255], + "action_button_disabled_text": [127, 127, 127, 255], + "action_button_disabled_border": [245, 245, 245, 255], + + "scrollbar_background": [255, 255, 255, 255], + "scrollbar_handle": [24, 41, 77, 255], + "scrollbar_handle_hover": [12, 159, 227, 255], + "scrollbar_handle_down": [12, 159, 227, 255], + + "setting_category": [245, 245, 245, 255], + "setting_category_disabled": [255, 255, 255, 255], + "setting_category_hover": [245, 245, 245, 255], + "setting_category_active": [245, 245, 245, 255], + "setting_category_active_hover": [245, 245, 245, 255], + "setting_category_text": [24, 41, 77, 255], + "setting_category_disabled_text": [24, 41, 77, 101], + "setting_category_hover_text": [24, 41, 77, 255], + "setting_category_active_text": [24, 41, 77, 255], + "setting_category_active_hover_text": [24, 41, 77, 255], + "setting_category_border": [245, 245, 245, 255], + "setting_category_disabled_border": [245, 245, 245, 255], + "setting_category_hover_border": [12, 159, 227, 255], + "setting_category_active_border": [245, 245, 245, 255], + "setting_category_active_hover_border": [12, 159, 227, 255], + + "setting_control": [255, 255, 255, 255], + "setting_control_selected": [24, 41, 77, 255], + "setting_control_highlight": [255, 255, 255, 0], + "setting_control_border": [127, 127, 127, 255], + "setting_control_border_highlight": [12, 169, 227, 255], + "setting_control_text": [24, 41, 77, 255], + "setting_control_depth_line": [127, 127, 127, 255], + "setting_control_button": [127, 127, 127, 255], + "setting_control_button_hover": [70, 84, 113, 255], + "setting_control_disabled": [245, 245, 245, 255], + "setting_control_disabled_text": [127, 127, 127, 255], + "setting_control_disabled_border": [127, 127, 127, 255], + "setting_unit": [127, 127, 127, 255], + "setting_validation_error_background": [255, 57, 14, 255], + "setting_validation_error": [127, 127, 127, 255], + "setting_validation_warning_background": [255, 186, 15, 255], + "setting_validation_warning": [127, 127, 127, 255], + "setting_validation_ok": [255, 255, 255, 255], + + "progressbar_background": [245, 245, 245, 255], + "progressbar_control": [24, 41, 77, 255], + + "slider_groove": [245, 245, 245, 255], + "slider_groove_border": [127, 127, 127, 255], + "slider_groove_fill": [127, 127, 127, 255], + "slider_handle": [32, 166, 219, 255], + "slider_handle_hover": [77, 182, 226, 255], + "slider_text_background": [255, 255, 255, 255], + + "checkbox": [255, 255, 255, 255], + "checkbox_hover": [255, 255, 255, 255], + "checkbox_border": [127, 127, 127, 255], + "checkbox_border_hover": [12, 169, 227, 255], + "checkbox_mark": [24, 41, 77, 255], + "checkbox_text": [24, 41, 77, 255], + + "mode_switch": [255, 255, 255, 255], + "mode_switch_hover": [255, 255, 255, 255], + "mode_switch_border": [127, 127, 127, 255], + "mode_switch_border_hover": [12, 169, 227, 255], + "mode_switch_handle": [24, 41, 77, 255], + "mode_switch_text": [24, 41, 77, 255], + "mode_switch_text_hover": [24, 41, 77, 255], + "mode_switch_text_checked": [12, 169, 227, 255], + + "tooltip": [12, 169, 227, 255], + "tooltip_text": [255, 255, 255, 255], + + "message_background": [24, 41, 77, 255], + "message_text": [255, 255, 255, 255], + "message_border": [24, 41, 77, 255], + "message_button": [255, 255, 255, 255], + "message_button_hover": [12, 169, 227, 255], + "message_button_active": [32, 166, 219, 255], + "message_button_text": [24, 41, 77, 255], + "message_button_text_hover": [255, 255, 255, 255], + "message_button_text_active": [255, 255, 255, 255], + "message_progressbar_background": [255, 255, 255, 255], + "message_progressbar_control": [12, 169, 227, 255], + + "tool_panel_background": [255, 255, 255, 255], + + "status_offline": [0, 0, 0, 255], + "status_ready": [0, 205, 0, 255], + "status_busy": [12, 169, 227, 255], + "status_paused": [255, 140, 0, 255], + "status_stopped": [236, 82, 80, 255], + "status_unknown": [127, 127, 127, 255], + + "disabled_axis": [127, 127, 127, 255], + "x_axis": [255, 0, 0, 255], + "y_axis": [0, 0, 255, 255], + "z_axis": [0, 255, 0, 255], + "all_axis": [255, 255, 255, 255], + + "viewport_background": [245, 245, 245, 255], + "volume_outline": [12, 169, 227, 255], + "buildplate": [244, 244, 244, 255], + "buildplate_alt": [204, 204, 204, 255], + "buildplate_grid": [129, 131, 134, 255], + "buildplate_grid_minor": [129, 131, 134, 31], + + "convex_hull": [35, 35, 35, 127], + "disallowed_area": [0, 0, 0, 40], + "error_area": [255, 0, 0, 127], + + "model_default": [255, 201, 36, 255], + "model_overhang": [255, 0, 0, 255], + "model_unslicable": [122, 122, 122, 255], + "model_unslicable_alt": [172, 172, 127, 255], + "model_selection_outline": [12, 169, 227, 255], + + "xray": [26, 26, 62, 255], + "xray_error": [255, 0, 0, 255], + + "layerview_ghost": [32, 32, 32, 96], + "layerview_none": [255, 255, 255, 255], + "layerview_inset_0": [255, 0, 0, 255], + "layerview_inset_x": [0, 255, 0, 255], + "layerview_skin": [255, 255, 0, 255], + "layerview_support": [0, 255, 255, 255], + "layerview_skirt": [0, 255, 255, 255], + "layerview_infill": [255, 192, 0, 255], + "layerview_support_infill": [0, 255, 255, 255], + "layerview_move_combing": [0, 0, 255, 255], + "layerview_move_retraction": [128, 128, 255, 255], + "layerview_support_interface": [64, 192, 255, 255] + }, + + "sizes": { + "window_minimum_size": [70, 50], + "window_margin": [1.0, 1.0], + "default_margin": [1.0, 1.0], + "default_lining": [0.08, 0.08], + "default_arrow": [0.8, 0.8], + "logo": [9.5, 2.0], + + "sidebar": [35.0, 10.0], + "sidebar_margin": [1.71, 1.43], + "sidebar_margin_thin": [0.71, 0.71], + "sidebar_header": [0.0, 4.0], + "sidebar_header_highlight": [0.25, 0.25], + "sidebar_header_mode_toggle": [0.0, 2.0], + "sidebar_header_mode_tabs": [0.0, 3.0], + "sidebar_lining": [0.5, 0.5], + "sidebar_lining_thin": [0.2, 0.2], + "sidebar_setup": [0.0, 2.0], + "sidebar_tabs": [0.0, 3.5], + "sidebar_inputfields": [0.0, 2.0], + "sidebar_extruder_box": [0.0, 6.0], + "simple_mode_infill_caption": [0.0, 5.0], + "simple_mode_infill_height": [0.0, 8.0], + + "section": [0.0, 2.2], + "section_icon": [1.6, 1.6], + "section_icon_column": [2.8, 0.0], + + "setting": [25.0, 1.8], + "setting_control": [10.0, 2.0], + "setting_control_depth_margin": [1.4, 0.0], + "setting_preferences_button_margin": [4, 0.0], + "setting_control_margin": [0.0, 0.0], + "setting_unit_margin": [0.5, 0.5], + "setting_text_maxwidth": [40.0, 0.0], + + "standard_list_lineheight": [1.5, 1.5], + "standard_list_input": [20.0, 25.0], + "standard_arrow": [0.8, 0.8], + + "button": [4, 4], + "button_icon": [2.5, 2.5], + "button_lining": [0, 0], + + "topbar_button": [17, 4], + "topbar_button_icon": [3.125, 2.5], + + "button_tooltip": [1.0, 1.3], + "button_tooltip_arrow": [0.25, 0.25], + + "progressbar": [26.0, 0.8], + "progressbar_radius": [0.4, 0.4], + "progressbar_control": [8.0, 0.8], + + "scrollbar": [0.75, 0.5], + + "slider_groove": [0.5, 0.5], + "slider_handle": [1.5, 1.5], + "slider_layerview_size": [1.0, 22.0], + "slider_layerview_background": [4.0, 0.0], + "slider_layerview_margin": [1.0, 1.0], + + "layerview_menu_size": [16.5, 21.0], + "layerview_menu_size_compatibility": [22, 23.0], + "layerview_legend_size": [1.0, 1.0], + "layerview_row": [11.0, 1.5], + "layerview_row_spacing": [0.0, 0.5], + + "checkbox": [2.0, 2.0], + + "tooltip": [20.0, 10.0], + "tooltip_margins": [1.0, 1.0], + "tooltip_arrow_margins": [2.0, 2.0], + + "save_button_text_margin": [0.3, 0.6], + "save_button_save_to_button": [0.3, 2.7], + "save_button_specs_icons": [1.4, 1.4], + + "modal_window_minimum": [60.0, 45], + "wizard_progress": [10.0, 0.0], + + "message": [30.0, 5.0], + "message_close": [1.25, 1.25], + "message_button": [6.0, 1.8], + + "infill_button_margin": [0.5, 0.5], + + "jobspecs_line": [2.0, 2.0] + } +} diff --git a/resources/themes/cura/icons/notice.svg b/resources/themes/cura/icons/notice.svg deleted file mode 100644 index 263f7bacf1..0000000000 --- a/resources/themes/cura/icons/notice.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/resources/themes/cura/icons/tab_monitor.svg b/resources/themes/cura/icons/tab_monitor.svg deleted file mode 100644 index 2677cec6e2..0000000000 --- a/resources/themes/cura/icons/tab_monitor.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/resources/themes/cura/icons/tab_monitor_with_status.svg b/resources/themes/cura/icons/tab_monitor_with_status.svg deleted file mode 100644 index dc3b373313..0000000000 --- a/resources/themes/cura/icons/tab_monitor_with_status.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/resources/themes/cura/icons/tab_status_busy.svg b/resources/themes/cura/icons/tab_status_busy.svg index cb72fdd623..7b5774e71b 100644 --- a/resources/themes/cura/icons/tab_status_busy.svg +++ b/resources/themes/cura/icons/tab_status_busy.svg @@ -1,4 +1,9 @@ - - - + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/tab_status_connected.svg b/resources/themes/cura/icons/tab_status_connected.svg index 16ec7d7523..7997ffbee6 100644 --- a/resources/themes/cura/icons/tab_status_connected.svg +++ b/resources/themes/cura/icons/tab_status_connected.svg @@ -1,4 +1,7 @@ - - - + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/tab_status_offline.svg b/resources/themes/cura/icons/tab_status_offline.svg deleted file mode 100644 index 850ca1bc03..0000000000 --- a/resources/themes/cura/icons/tab_status_offline.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/resources/themes/cura/icons/tab_status_paused.svg b/resources/themes/cura/icons/tab_status_paused.svg index feffb7894c..606d4cb96c 100644 --- a/resources/themes/cura/icons/tab_status_paused.svg +++ b/resources/themes/cura/icons/tab_status_paused.svg @@ -1,4 +1,8 @@ - - - + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/tab_status_stopped.svg b/resources/themes/cura/icons/tab_status_stopped.svg index 86386d3a6b..6cd0f18b17 100644 --- a/resources/themes/cura/icons/tab_status_stopped.svg +++ b/resources/themes/cura/icons/tab_status_stopped.svg @@ -1,51 +1,8 @@ - - - - - - image/svg+xml - - - - - - - - + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/tab_status_unknown.svg b/resources/themes/cura/icons/tab_status_unknown.svg index 1033b39a4c..5e46eec55b 100644 --- a/resources/themes/cura/icons/tab_status_unknown.svg +++ b/resources/themes/cura/icons/tab_status_unknown.svg @@ -1,4 +1,8 @@ - - - + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura/icons/viewmode.svg b/resources/themes/cura/icons/viewmode.svg deleted file mode 100644 index b270bf0e81..0000000000 --- a/resources/themes/cura/icons/viewmode.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/resources/themes/cura/icons/warning.svg b/resources/themes/cura/icons/warning.svg deleted file mode 100644 index 9269ce20ca..0000000000 --- a/resources/themes/cura/icons/warning.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/resources/themes/cura/images/logo.svg b/resources/themes/cura/images/logo.svg index ad76518991..545b42d193 100644 --- a/resources/themes/cura/images/logo.svg +++ b/resources/themes/cura/images/logo.svg @@ -1,83 +1,8 @@ - - - -image/svg+xml \ No newline at end of file + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura/theme.json b/resources/themes/cura/theme.json index c1d174e1a3..3ef5366c9e 100644 --- a/resources/themes/cura/theme.json +++ b/resources/themes/cura/theme.json @@ -1,198 +1,148 @@ { "metadata": { - "name": "Ultimaker" - }, - "fonts": { - "large": { - "size": 1.25, - "bold": true, - "family": "Open Sans" - }, - "default": { - "size": 1.15, - "family": "Open Sans" - }, - "default_bold": { - "size": 1.15, - "bold": true, - "family": "Open Sans" - }, - "default_italic": { - "size": 1.15, - "italic": true, - "family": "Open Sans" - }, - "small": { - "size": 1.0, - "bold": true, - "family": "Open Sans" - }, - "very_small": { - "size": 1.0, - "family": "Open Sans" - }, - "button_tooltip": { - "size": 1.0, - "family": "Open Sans" - }, - "setting_category": { - "size": 1.15, - "bold": true, - "family": "Open Sans" - }, - "action_button": { - "size": 1.15, - "bold": true, - "family": "Open Sans" - } + "name": "Ultimaker", + "inherits": "cura-light" }, "colors": { - "sidebar": [255, 255, 255, 255], - "lining": [127, 127, 127, 255], - "viewport_overlay": [24, 41, 77, 255], + "sidebar": [39, 44, 48, 255], + "lining": [64, 69, 72, 255], + "viewport_overlay": [0, 6, 9, 222], "primary": [12, 169, 227, 255], "primary_hover": [48, 182, 231, 255], - "primary_text": [255, 255, 255, 255], + "primary_text": [255, 255, 255, 204], "border": [127, 127, 127, 255], - "secondary": [245, 245, 245, 255], + "secondary": [241, 242, 242, 255], - "text": [24, 41, 77, 255], - "text_detail": [174, 174, 174, 128], - "text_link": [12, 169, 227, 255], - "text_inactive": [174, 174, 174, 255], - "text_hover": [70, 84, 113, 255], - "text_pressed": [12, 169, 227, 255], - "text_reversed": [255, 255, 255, 255], - "text_subtext": [70, 84, 113, 255], + "text": [255, 255, 255, 204], + "text_detail": [255, 255, 255, 172], + "text_link": [255, 255, 255, 127], + "text_inactive": [255, 255, 255, 88], + "text_hover": [255, 255, 255, 204], + "text_pressed": [255, 255, 255, 204], + "text_subtext": [255, 255, 255, 172], + "text_emphasis": [255, 255, 255, 255], + "text_scene": [39, 44, 48, 255], + "text_scene_hover": [43, 48, 52, 255], - "error": [255, 140, 0, 255], - "sidebar_header_bar": [24, 41, 77, 255], - "sidebar_header_active": [70, 84, 113, 255], - "sidebar_header_hover": [24, 41, 77, 255], - "sidebar_header_highlight": [12, 169, 227, 255], - "sidebar_header_highlight_hover": [255, 255, 255, 255], - "sidebar_lining": [245, 245, 245, 255], + "error": [212, 31, 53, 255], + "sidebar_header_bar": [39, 44, 48, 255], + "sidebar_header_active": [39, 44, 48, 255], + "sidebar_header_hover": [39, 44, 48, 255], + "sidebar_header_highlight": [68, 192, 255, 255], + "sidebar_header_highlight_hover": [68, 192, 255, 255], + "sidebar_header_text_active": [255, 255, 255, 255], + "sidebar_header_text_hover": [255, 255, 255, 255], + "sidebar_header_text_inactive": [255, 255, 255, 127], + "sidebar_lining": [31, 36, 39, 255], - "button": [24, 41, 77, 255], - "button_hover": [70, 84, 113, 255], - "button_active": [32, 166, 219, 255], - "button_active_hover": [12, 169, 227, 255], - "button_text": [255, 255, 255, 255], - "button_disabled": [24, 41, 77, 255], - "button_disabled_text": [70, 84, 113, 255], + "button": [39, 44, 48, 255], + "button_hover": [39, 44, 48, 255], + "button_active": [67, 72, 75, 255], + "button_active_hover": [67, 72, 75, 255], + "button_text": [255, 255, 255, 197], + "button_text_hover": [255, 255, 255, 255], + "button_text_active": [255, 255, 255, 255], + "button_text_active_hover": [255, 255, 255, 255], + "button_disabled": [39, 44, 48, 255], + "button_disabled_text": [255, 255, 255, 101], - "button_tooltip": [255, 255, 255, 255], - "button_tooltip_border": [24, 41, 77, 255], - "button_tooltip_text": [24, 41, 77, 255], + "button_tooltip": [39, 44, 48, 255], + "button_tooltip_border": [39, 44, 48, 255], + "button_tooltip_text": [255, 255, 255, 172], - "toggle_checked": [24, 41, 77, 255], - "toggle_checked_border": [24, 41, 77, 255], - "toggle_checked_text": [255, 255, 255, 255], - "toggle_unchecked": [255, 255, 255, 255], - "toggle_unchecked_border": [127, 127, 127, 255], - "toggle_unchecked_text": [24, 41, 77, 255], - "toggle_hovered": [255, 255, 255, 255], - "toggle_hovered_border": [32, 166, 219, 255], - "toggle_hovered_text": [24, 41, 77, 255], - "toggle_active": [32, 166, 219, 255], - "toggle_active_border": [32, 166, 219, 255], - "toggle_active_text": [24, 41, 77, 255], + "tab_checked": [39, 44, 48, 255], + "tab_checked_border": [255, 255, 255, 30], + "tab_checked_text": [255, 255, 255, 255], + "tab_unchecked": [39, 44, 48, 255], + "tab_unchecked_border": [255, 255, 255, 30], + "tab_unchecked_text": [255, 255, 255, 101], + "tab_hovered": [39, 44, 48, 255], + "tab_hovered_border": [255, 255, 255, 30], + "tab_hovered_text": [255, 255, 255, 255], + "tab_active": [39, 44, 48, 255], + "tab_active_border": [255, 255, 255, 30], + "tab_active_text": [255, 255, 255, 255], + "tab_background": [39, 44, 48, 255], - "tab_checked": [255, 255, 255, 255], - "tab_checked_border": [255, 255, 255, 255], - "tab_checked_text": [24, 41, 77, 255], - "tab_unchecked": [245, 245, 245, 255], - "tab_unchecked_border": [245, 245, 245, 255], - "tab_unchecked_text": [127, 127, 127, 255], - "tab_hovered": [245, 245, 245, 255], - "tab_hovered_border": [245, 245, 245, 255], - "tab_hovered_text": [32, 166, 219, 255], - "tab_active": [255, 255, 255, 255], - "tab_active_border": [255, 255, 255, 255], - "tab_active_text": [24, 41, 77, 255], - "tab_background": [245, 245, 245, 255], - - "action_button": [255, 255, 255, 255], - "action_button_text": [24, 41, 77, 255], - "action_button_border": [127, 127, 127, 255], - "action_button_hovered": [255, 255, 255, 255], - "action_button_hovered_text": [24, 41, 77, 255], - "action_button_hovered_border": [12, 169, 227, 255], - "action_button_active": [12, 169, 227, 255], + "action_button": [39, 44, 48, 255], + "action_button_text": [255, 255, 255, 101], + "action_button_border": [255, 255, 255, 30], + "action_button_hovered": [39, 44, 48, 255], + "action_button_hovered_text": [255, 255, 255, 255], + "action_button_hovered_border": [255, 255, 255, 30], + "action_button_active": [39, 44, 48, 30], "action_button_active_text": [255, 255, 255, 255], - "action_button_active_border": [12, 169, 227, 255], - "action_button_disabled": [245, 245, 245, 255], - "action_button_disabled_text": [127, 127, 127, 255], - "action_button_disabled_border": [245, 245, 245, 255], + "action_button_active_border": [255, 255, 255, 30], + "action_button_disabled": [39, 44, 48, 255], + "action_button_disabled_text": [255, 255, 255, 101], + "action_button_disabled_border": [255, 255, 255, 30], - "scrollbar_background": [255, 255, 255, 255], - "scrollbar_handle": [24, 41, 77, 255], - "scrollbar_handle_hover": [12, 159, 227, 255], - "scrollbar_handle_down": [12, 159, 227, 255], + "scrollbar_background": [39, 44, 48, 0], + "scrollbar_handle": [255, 255, 255, 105], + "scrollbar_handle_hover": [255, 255, 255, 255], + "scrollbar_handle_down": [255, 255, 255, 255], - "setting_category": [245, 245, 245, 255], - "setting_category_disabled": [255, 255, 255, 255], - "setting_category_hover": [245, 245, 245, 255], - "setting_category_active": [245, 245, 245, 255], - "setting_category_active_hover": [245, 245, 245, 255], - "setting_category_text": [24, 41, 77, 255], - "setting_category_border": [245, 245, 245, 255], - "setting_category_disabled_border": [245, 245, 245, 255], - "setting_category_hover_border": [12, 159, 227, 255], - "setting_category_active_border": [245, 245, 245, 255], - "setting_category_active_hover_border": [12, 159, 227, 255], + "setting_category": [39, 44, 48, 255], + "setting_category_disabled": [39, 44, 48, 255], + "setting_category_hover": [39, 44, 48, 255], + "setting_category_active": [39, 44, 48, 255], + "setting_category_active_hover": [39, 44, 48, 255], + "setting_category_text": [255, 255, 255, 152], + "setting_category_disabled_text": [255, 255, 255, 101], + "setting_category_hover_text": [255, 255, 255, 204], + "setting_category_active_text": [255, 255, 255, 204], + "setting_category_active_hover_text": [255, 255, 255, 204], + "setting_category_border": [39, 44, 48, 0], + "setting_category_disabled_border": [39, 44, 48, 0], + "setting_category_hover_border": [39, 44, 48, 0], + "setting_category_active_border": [39, 44, 48, 0], + "setting_category_active_hover_border": [39, 44, 48, 0], - "setting_control": [255, 255, 255, 255], - "setting_control_selected": [24, 41, 77, 255], + "setting_control": [43, 48, 52, 255], + "setting_control_selected": [34, 39, 42, 38], "setting_control_highlight": [255, 255, 255, 0], - "setting_control_border": [127, 127, 127, 255], - "setting_control_border_highlight": [12, 169, 227, 255], - "setting_control_text": [24, 41, 77, 255], - "setting_control_depth_line": [127, 127, 127, 255], - "setting_control_button": [127, 127, 127, 255], - "setting_control_button_hover": [70, 84, 113, 255], - "setting_control_disabled": [245, 245, 245, 255], - "setting_control_disabled_text": [127, 127, 127, 255], - "setting_control_disabled_border": [127, 127, 127, 255], - "setting_unit": [127, 127, 127, 255], - "setting_validation_error": [255, 57, 14, 255], - "setting_validation_warning": [255, 186, 15, 255], - "setting_validation_ok": [255, 255, 255, 255], + "setting_control_border": [255, 255, 255, 38], + "setting_control_border_highlight": [255, 255, 255, 38], + "setting_control_text": [255, 255, 255, 181], + "setting_control_button": [255, 255, 255, 127], + "setting_control_button_hover": [255, 255, 255, 204], + "setting_control_disabled": [34, 39, 42, 255], + "setting_control_disabled_text": [255, 255, 255, 101], + "setting_control_disabled_border": [255, 255, 255, 101], + "setting_unit": [255, 255, 255, 127], + "setting_validation_error_background": [59, 31, 53, 255], + "setting_validation_error": [212, 31, 53, 255], + "setting_validation_warning_background": [62, 54, 46, 255], + "setting_validation_warning": [245, 166, 35, 255], + "setting_validation_ok": [43, 48, 52, 255], - "progressbar_background": [245, 245, 245, 255], - "progressbar_control": [24, 41, 77, 255], + "progressbar_background": [255, 255, 255, 48], + "progressbar_control": [255, 255, 255, 197], - "slider_groove": [245, 245, 245, 255], - "slider_groove_border": [127, 127, 127, 255], - "slider_groove_fill": [127, 127, 127, 255], - "slider_handle": [32, 166, 219, 255], - "slider_handle_hover": [77, 182, 226, 255], - "slider_text_background": [255, 255, 255, 255], + "slider_groove": [39, 44, 48, 75], + "slider_groove_border": [39, 44, 48, 0], + "slider_groove_fill": [39, 44, 48, 182], + "slider_handle": [255, 255, 255, 255], + "slider_handle_border": [39, 44, 48, 255], + "slider_handle_hover": [255, 255, 255, 255], + "slider_handle_hover_border": [39, 44, 48, 255], + "slider_text_background": [39, 44, 48, 255], - "checkbox": [255, 255, 255, 255], - "checkbox_hover": [255, 255, 255, 255], - "checkbox_border": [127, 127, 127, 255], - "checkbox_border_hover": [12, 169, 227, 255], - "checkbox_mark": [24, 41, 77, 255], - "checkbox_text": [24, 41, 77, 255], + "checkbox": [43, 48, 52, 255], + "checkbox_hover": [43, 48, 52, 255], + "checkbox_border": [255, 255, 255, 38], + "checkbox_border_hover": [255, 255, 255, 38], + "checkbox_mark": [255, 255, 255, 181], + "checkbox_text": [255, 255, 255, 181], - "mode_switch": [255, 255, 255, 255], - "mode_switch_hover": [255, 255, 255, 255], - "mode_switch_border": [127, 127, 127, 255], - "mode_switch_border_hover": [12, 169, 227, 255], - "mode_switch_handle": [24, 41, 77, 255], - "mode_switch_text": [24, 41, 77, 255], - "mode_switch_text_hover": [24, 41, 77, 255], - "mode_switch_text_checked": [12, 169, 227, 255], + "tooltip": [39, 44, 48, 255], + "tooltip_text": [255, 255, 255, 204], - "tooltip": [12, 169, 227, 255], - "tooltip_text": [255, 255, 255, 255], - - "message_background": [24, 41, 77, 255], - "message_text": [255, 255, 255, 255], - "message_border": [24, 41, 77, 255], + "message_background": [255, 255, 255, 200], + "message_text": [0, 0, 0, 255], + "message_border": [191, 191, 191, 200], "message_button": [255, 255, 255, 255], "message_button_hover": [12, 169, 227, 255], "message_button_active": [32, 166, 219, 255], @@ -202,7 +152,7 @@ "message_progressbar_background": [255, 255, 255, 255], "message_progressbar_control": [12, 169, 227, 255], - "tool_panel_background": [255, 255, 255, 255], + "tool_panel_background": [39, 44, 48, 255], "status_offline": [0, 0, 0, 255], "status_ready": [0, 205, 0, 255], @@ -217,15 +167,15 @@ "z_axis": [0, 255, 0, 255], "all_axis": [255, 255, 255, 255], - "viewport_background": [245, 245, 245, 255], - "volume_outline": [12, 169, 227, 255], - "buildplate": [244, 244, 244, 255], + "viewport_background": [241, 242, 242, 255], + "volume_outline": [1, 168, 230, 255], + "buildplate": [252, 252, 252, 255], "buildplate_alt": [204, 204, 204, 255], "buildplate_grid": [129, 131, 134, 255], "buildplate_grid_minor": [129, 131, 134, 31], "convex_hull": [35, 35, 35, 127], - "disallowed_area": [0, 0, 0, 40], + "disallowed_area": [0, 0, 0, 52], "error_area": [255, 0, 0, 127], "model_default": [255, 201, 36, 255],