diff --git a/CMakeLists.txt b/CMakeLists.txt index bdcd8f44c2..7870759cd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,8 @@ if(NOT APPLE AND NOT WIN32) DESTINATION lib/python${PYTHON_VERSION_MAJOR}/dist-packages/cura) install(FILES ${CMAKE_BINARY_DIR}/cura.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) + install(FILES ${CMAKE_SOURCE_DIR}/resources/images/cura-icon.png + DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/128x128/apps/) install(FILES cura.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/appdata) install(FILES cura.sharedmimeinfo 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/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index 6643ce6e03..ea00122105 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -71,6 +71,9 @@ class PrinterOutputDevice(QObject, OutputDevice): self._control_item = None self._qml_context = None + self._can_pause = True + self._can_abort = True + self._can_pre_heat_bed = True def requestWrite(self, nodes, file_name = None, filter_by_machine = False, file_handler = None): raise NotImplementedError("requestWrite needs to be implemented") @@ -126,6 +129,21 @@ class PrinterOutputDevice(QObject, OutputDevice): # Signal to be emitted when some drastic change occurs in the remaining time (not when the time just passes on normally). preheatBedRemainingTimeChanged = pyqtSignal() + # Does the printer support pre-heating the bed at all + @pyqtProperty(bool, constant=True) + def canPreHeatBed(self): + return self._can_pre_heat_bed + + # Does the printer support pause at all + @pyqtProperty(bool, constant=True) + def canPause(self): + return self._can_pause + + # Does the printer support abort at all + @pyqtProperty(bool, constant=True) + def canAbort(self): + return self._can_abort + @pyqtProperty(QObject, constant=True) def monitorItem(self): # Note that we specifically only check if the monitor component is created. 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..ef9190a1fe 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/Logs/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/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 40d3b5a960..dc4a3c0302 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -824,7 +824,7 @@ Cura.MachineAction polygon.push([-printHeadPolygon["x"]["min"], printHeadPolygon["y"]["max"]]); polygon.push([-printHeadPolygon["x"]["min"],-printHeadPolygon["y"]["min"]]); polygon.push([ printHeadPolygon["x"]["max"], printHeadPolygon["y"]["max"]]); - polygon.push([ printHeadPolygon["x"]["max"],-printHeadPolygon["y"]["mìn"]]); + polygon.push([ printHeadPolygon["x"]["max"],-printHeadPolygon["y"]["min"]]); var polygon_string = JSON.stringify(polygon); if(polygon_string != machineHeadPolygonProvider.properties.value) { 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/PluginBrowser/PluginBrowser.qml b/plugins/PluginBrowser/PluginBrowser.qml index 05a17b4265..f8a4001443 100644 --- a/plugins/PluginBrowser/PluginBrowser.qml +++ b/plugins/PluginBrowser/PluginBrowser.qml @@ -9,10 +9,10 @@ UM.Dialog id: base title: catalog.i18nc("@title:window", "Find & Update plugins") - width: 600 - height: 450 - minimumWidth: 350 - minimumHeight: 350 + width: 600 * Screen.devicePixelRatio + height: 450 * Screen.devicePixelRatio + minimumWidth: 350 * Screen.devicePixelRatio + minimumHeight: 350 * Screen.devicePixelRatio Item { anchors.fill: parent @@ -198,8 +198,8 @@ UM.Dialog id: licenseDialog title: catalog.i18nc("@title:window", "Plugin License Agreement") - minimumWidth: UM.Theme.getSize("modal_window_minimum").width - minimumHeight: UM.Theme.getSize("modal_window_minimum").height + minimumWidth: UM.Theme.getSize("license_window_minimum").width + minimumHeight: UM.Theme.getSize("license_window_minimum").height width: minimumWidth height: minimumHeight diff --git a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py index f7adef9a3f..80b2a2a430 100644 --- a/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py +++ b/plugins/RemovableDriveOutputDevice/RemovableDriveOutputDevice.py @@ -123,8 +123,17 @@ class RemovableDriveOutputDevice(OutputDevice): def _onFinished(self, job): if self._stream: # Explicitly closing the stream flushes the write-buffer - self._stream.close() - self._stream = None + try: + self._stream.close() + self._stream = None + except: + Logger.logException("w", "An execption occured while trying to write to removable drive.") + message = Message(catalog.i18nc("@info:status", "Could not save to removable drive {0}: {1}").format(self.getName(), + str( + job.getError()))) + message.show() + self.writeError.emit(self) + return self._writing = False self.writeFinished.emit(self) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 8c13c344aa..5e384d1d03 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -328,14 +328,15 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): def _stopCamera(self): if self._camera_timer.isActive(): self._camera_timer.stop() - if self._image_reply: - try: - self._image_reply.abort() - self._image_reply.downloadProgress.disconnect(self._onStreamDownloadProgress) - except RuntimeError: - pass # It can happen that the wrapped c++ object is already deleted. - self._image_reply = None - self._image_request = None + + if self._image_reply: + try: + self._image_reply.abort() + self._image_reply.downloadProgress.disconnect(self._onStreamDownloadProgress) + except RuntimeError: + pass # It can happen that the wrapped c++ object is already deleted. + self._image_reply = None + self._image_request = None def _startCamera(self): if self._use_stream: @@ -756,6 +757,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/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 4beec290ca..5a7cca5a31 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1228,7 +1228,8 @@ { "back": "User Specified", "shortest": "Shortest", - "random": "Random" + "random": "Random", + "sharpest_corner": "Sharpest Corner" }, "default_value": "shortest", "limit_to_extruder": "wall_0_extruder_nr", @@ -1258,6 +1259,23 @@ "limit_to_extruder": "wall_0_extruder_nr", "settable_per_mesh": true }, + "z_seam_corner": + { + "label": "Seam Corner Preference", + "description": "Control whether corners on the model outline influence the position of the seam. None means that corners have no influence on the seam position. Hide Seam makes the seam more likely to occur on an inside corner. Expose Seam makes the seam more likely to occur on an outside corner. Hide or Expose Seam makes the seam more likely to occur at an inside or outside corner.", + "type": "enum", + "options": + { + "z_seam_corner_none": "None", + "z_seam_corner_inner": "Hide Seam", + "z_seam_corner_outer": "Expose Seam", + "z_seam_corner_any": "Hide or Expose Seam" + }, + "default_value": "z_seam_corner_inner", + "enabled": "z_seam_type != 'random'", + "limit_to_extruder": "wall_0_extruder_nr", + "settable_per_mesh": true + }, "z_seam_relative": { "label": "Z Seam Relative", @@ -2997,7 +3015,7 @@ "unit": "mm", "type": "float", "default_value": 0.0, - "minimum_value": "0", + "minimum_value": "machine_width / -2 if machine_center_is_zero else 0", "settable_per_mesh": false, "settable_per_extruder": true, "settable_per_meshgroup": true @@ -3009,7 +3027,7 @@ "unit": "mm", "type": "float", "default_value": 0.0, - "minimum_value": "0", + "minimum_value": "machine_depth / -2 if machine_center_is_zero else 0", "settable_per_mesh": false, "settable_per_extruder": true, "settable_per_meshgroup": true diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index d4055f59f8..094e138fbd 100755 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -425,7 +425,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..45c28847cd 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 { @@ -220,7 +220,7 @@ Item property bool userClicked: false property string lastJobState: "" - visible: printerConnected + visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].canPause enabled: (!userClicked) && printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands && (["paused", "printing"].indexOf(Cura.MachineManager.printerOutputDevices[0].jobState) >= 0) @@ -261,7 +261,7 @@ Item { id: abortButton - visible: printerConnected + visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].canAbort enabled: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands && (["paused", "printing", "pre_print"].indexOf(Cura.MachineManager.printerOutputDevices[0].jobState) >= 0) diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index 04933129e9..0aecf839d2 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)) @@ -388,7 +388,7 @@ Column anchors.bottomMargin: UM.Theme.getSize("default_margin").height width: UM.Theme.getSize("setting_control").width height: UM.Theme.getSize("setting_control").height - + visible: connectedPrinter != null ? connectedPrinter.canPreHeatBed: true Rectangle //Highlight of input field. { anchors.fill: parent @@ -511,6 +511,7 @@ Column { id: preheatButton height: UM.Theme.getSize("setting_control").height + visible: connectedPrinter != null ? connectedPrinter.canPreHeatBed: true enabled: { if (!preheatTemperatureControl.enabled) 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 ce146f5831..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,9 +386,10 @@ 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 UM.TooltipArea { @@ -500,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 } @@ -510,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..8d83dd1468 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 + 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 bec159e6c5..91f7b36bb5 100644 --- a/resources/qml/Topbar.qml +++ b/resources/qml/Topbar.qml @@ -59,7 +59,7 @@ Rectangle onClicked: base.stopMonitoringPrint() 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 @@ -227,13 +227,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/quality/ultimaker3/um3_bb0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PP_Fast_Print.inst.cfg new file mode 100644 index 0000000000..a73cfd2332 --- /dev/null +++ b/resources/quality/ultimaker3/um3_bb0.4_PP_Fast_Print.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 2 +name = Not Supported +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_pp_ultimaker3_BB_0.4 +weight = 0 +supported = False +setting_version = 2 + +[values] diff --git a/resources/quality/ultimaker3/um3_bb0.4_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PP_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..dbfbd58f9c --- /dev/null +++ b/resources/quality/ultimaker3/um3_bb0.4_PP_Superdraft_Print.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 2 +name = Not Supported +definition = ultimaker3 + +[metadata] +type = quality +quality_type = superdraft +material = generic_pp_ultimaker3_BB_0.4 +weight = 0 +supported = False +setting_version = 2 + +[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PP_Fast_Print.inst.cfg new file mode 100644 index 0000000000..92921030ca --- /dev/null +++ b/resources/quality/ultimaker3/um3_bb0.8_PP_Fast_Print.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 2 +name = Not Supported +definition = ultimaker3 + +[metadata] +type = quality +quality_type = normal +material = generic_pp_ultimaker3_BB_0.8 +weight = 0 +supported = False +setting_version = 2 + +[values] diff --git a/resources/quality/ultimaker3/um3_bb0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PP_Superdraft_Print.inst.cfg new file mode 100644 index 0000000000..534efa78e0 --- /dev/null +++ b/resources/quality/ultimaker3/um3_bb0.8_PP_Superdraft_Print.inst.cfg @@ -0,0 +1,14 @@ +[general] +version = 2 +name = Not Supported +definition = ultimaker3 + +[metadata] +type = quality +quality_type = superdraft +material = generic_pp_ultimaker3_BB_0.8 +weight = 0 +supported = False +setting_version = 2 + +[values] 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-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 77% rename from resources/themes/cura/styles.qml rename to resources/themes/cura-light/styles.qml index f96c2380c0..b51d4159d9 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,26 +128,25 @@ 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 { visible: control.iconSource != "" 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: visible ? Theme.getSize("button_icon").width : 0 - height: Theme.getSize("button_icon").height + width: visible ? Theme.getSize("topbar_button_icon").width : 0 + height: Theme.getSize("topbar_button_icon").height - sourceSize: Theme.getSize("button_icon") + sourceSize: Theme.getSize("topbar_button_icon") } UM.RecolorImage { @@ -172,10 +154,10 @@ QtObject { color: control.overlayColor opacity: !control.enabled ? 0.2 : 1.0 source: control.overlayIconSource - width: visible ? Theme.getSize("button_icon").width : 0 - height: Theme.getSize("button_icon").height + width: visible ? Theme.getSize("topbar_button_icon").width : 0 + height: Theme.getSize("topbar_button_icon").height - sourceSize: Theme.getSize("button_icon") + sourceSize: Theme.getSize("topbar_button_icon") } Label { @@ -184,7 +166,21 @@ QtObject { anchors.leftMargin: icon.visible ? Theme.getSize("default_margin").width : 0 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"); + } + } } } } @@ -206,7 +202,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 @@ -251,7 +247,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; @@ -261,7 +256,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") } } @@ -274,7 +287,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") } @@ -332,9 +363,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) { @@ -382,8 +413,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; @@ -395,13 +448,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 } @@ -409,12 +484,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") } } @@ -628,7 +725,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; } } } } @@ -637,6 +736,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 @@ -692,7 +792,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..a28833903e --- /dev/null +++ b/resources/themes/cura-light/theme.json @@ -0,0 +1,346 @@ +{ + "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": [8, 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], + "license_window_minimum": [45, 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 a025f15d1d..46da3cbe7a 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],