diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot
index c84b50d353..059c19eda9 100644
--- a/localization/i18n/OrcaSlicer.pot
+++ b/localization/i18n/OrcaSlicer.pot
@@ -3430,8 +3430,8 @@ msgid "Bed Shape"
msgstr ""
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
msgid ""
@@ -5154,8 +5154,7 @@ msgid "Layer: %d/%d"
msgstr ""
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
msgid "Still unload"
diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po
index 7816a5b624..991b0efa38 100644
--- a/localization/i18n/ca/OrcaSlicer_ca.po
+++ b/localization/i18n/ca/OrcaSlicer_ca.po
@@ -3662,11 +3662,11 @@ msgid "Bed Shape"
msgstr "Forma de la placa d'impressió"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
-"La temperatura mínima recomanada és inferior a 190 graus o la màxima "
-"recomanada és superior a 300 graus.\n"
+"La temperatura mínima recomanada és inferior a 190 °C o la màxima "
+"recomanada és superior a 300 °C.\n"
msgid ""
"The recommended minimum temperature cannot be higher than the recommended "
@@ -5542,11 +5542,10 @@ msgid "Layer: %d/%d"
msgstr "Capa: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
-"Escalfeu el broquet per sobre dels 170 graus abans de carregar o descarregar "
-"el filament."
+"Escalfeu el broquet per sobre dels 170 °C abans de carregar o descarregar el "
+"filament."
msgid "Still unload"
msgstr "Encara descarregat"
diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po
index 30c63caf74..99550fb037 100644
--- a/localization/i18n/cs/OrcaSlicer_cs.po
+++ b/localization/i18n/cs/OrcaSlicer_cs.po
@@ -3592,8 +3592,8 @@ msgid "Bed Shape"
msgstr "Tvar Podložky"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
msgid ""
@@ -5415,8 +5415,7 @@ msgid "Layer: %d/%d"
msgstr "Vrstva: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
msgid "Still unload"
@@ -17817,7 +17816,7 @@ msgstr ""
#~ "Ano - přepnout na přímočarý vzor automaticky\n"
#~ "Ne - automaticky resetovat hustotu na výchozí ne 100% hodnotu"
-#~ msgid "Please heat the nozzle to above 170 degree before loading filament."
+#~ msgid "Please heat the nozzle to above 170°C before loading filament."
#~ msgstr "Před vložením filamentu zahřejte trysku na více než 170 stupňů."
#~ msgid "Show G-code window"
diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po
index 5d337674e8..83d2d16930 100644
--- a/localization/i18n/de/OrcaSlicer_de.po
+++ b/localization/i18n/de/OrcaSlicer_de.po
@@ -3702,11 +3702,11 @@ msgid "Bed Shape"
msgstr "Druckbettform"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
-"Die empfohlene Mindesttemperatur liegt unter 190 Grad oder die empfohlene "
-"Maximaltemperatur liegt über 300 Grad.\n"
+"Die empfohlene Mindesttemperatur liegt unter 190°C oder die empfohlene "
+"Maximaltemperatur liegt über 300°C.\n"
msgid ""
"The recommended minimum temperature cannot be higher than the recommended "
@@ -5596,11 +5596,9 @@ msgid "Layer: %d/%d"
msgstr "Schicht: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
-"Heizen Sie die Düse vor dem Laden oder Entladen des Filaments auf über 170 "
-"Grad."
+"Heizen Sie die Düse vor dem Laden oder Entladen des Filaments auf über 170°C."
msgid "Still unload"
msgstr "Entlade immer noch"
diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po
index b1d3a33d17..6e428ee4e2 100644
--- a/localization/i18n/en/OrcaSlicer_en.po
+++ b/localization/i18n/en/OrcaSlicer_en.po
@@ -3481,8 +3481,8 @@ msgid "Bed Shape"
msgstr ""
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
msgid ""
@@ -5260,11 +5260,8 @@ msgid "Layer: %d/%d"
msgstr ""
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
-"Please heat the nozzle to above 170 degrees before loading or unloading "
-"filament."
msgid "Still unload"
msgstr ""
diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po
index a3f88dfc1b..d56d767508 100644
--- a/localization/i18n/es/OrcaSlicer_es.po
+++ b/localization/i18n/es/OrcaSlicer_es.po
@@ -3689,11 +3689,11 @@ msgid "Bed Shape"
msgstr "Forma de la cama de impresión"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
-"La temperatura mínima recomendada es inferior a 190 grados o la temperatura "
-"máxima recomendada es superior a 300 grados.\n"
+"La temperatura mínima recomendada es inferior a 190°C o la temperatura "
+"máxima recomendada es superior a 300°C.\n"
msgid ""
"The recommended minimum temperature cannot be higher than the recommended "
@@ -5569,10 +5569,9 @@ msgid "Layer: %d/%d"
msgstr "Capa: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
-"Por favor, caliente la boquilla por encima de 170 grados antes de cargar o "
+"Por favor, caliente la boquilla por encima de 170°C antes de cargar o "
"descargar filamento."
msgid "Still unload"
@@ -19827,9 +19826,9 @@ msgstr ""
#~ "Sí - cambiar a patrón rectilíneo automaticamente\n"
#~ "No - reiniciar a valor de densidad no 100% por defecto automáticamente"
-#~ msgid "Please heat the nozzle to above 170 degree before loading filament."
+#~ msgid "Please heat the nozzle to above 170°C before loading filament."
#~ msgstr ""
-#~ "Caliente la boquilla a más de 170 grados antes de cargar el filamento."
+#~ "Caliente la boquilla a más de 170°C antes de cargar el filamento."
#~ msgid "Show G-code window"
#~ msgstr "Mostrar la ventana de G-Code"
diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po
index 8244a94983..e7c6f04725 100644
--- a/localization/i18n/fr/OrcaSlicer_fr.po
+++ b/localization/i18n/fr/OrcaSlicer_fr.po
@@ -3702,11 +3702,11 @@ msgid "Bed Shape"
msgstr "Forme du plateau"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
-"La température minimale recommandée est inférieure à 190 degrés ou la "
-"température maximale recommandée est supérieure à 300 degrés.\n"
+"La température minimale recommandée est inférieure à 190°C ou la "
+"température maximale recommandée est supérieure à 300°C.\n"
msgid ""
"The recommended minimum temperature cannot be higher than the recommended "
@@ -5583,11 +5583,10 @@ msgid "Layer: %d/%d"
msgstr "Couche : %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
-"Veuillez chauffer la buse à plus de 170 degrés avant de charger ou de "
-"décharger le filament."
+"Veuillez chauffer la buse à plus de 170°C avant de charger ou de décharger "
+"le filament."
msgid "Still unload"
msgstr "Décharger encore"
@@ -20415,10 +20414,9 @@ msgstr ""
#~ "Oui - Passez automatiquement au modèle rectiligne\n"
#~ "Non - Réinitialise automatiquement la densité à la valeur par défaut"
-#~ msgid "Please heat the nozzle to above 170 degree before loading filament."
+#~ msgid "Please heat the nozzle to above 170°C before loading filament."
#~ msgstr ""
-#~ "Veuillez chauffer la buse à plus de 170 degrés avant de charger le "
-#~ "filament."
+#~ "Veuillez chauffer la buse à plus de 170°C avant de charger le filament."
#~ msgid "Show G-code window"
#~ msgstr "Afficher la fenêtre G-code"
diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po
index d95355059d..bc4ac79736 100644
--- a/localization/i18n/hu/OrcaSlicer_hu.po
+++ b/localization/i18n/hu/OrcaSlicer_hu.po
@@ -3548,9 +3548,10 @@ msgstr "Válassz egy STL fájlt az asztal textúrájának importálásához:"
msgid "Bed Shape"
msgstr "Asztal alakja"
+#, fuzzy
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
"Az ajánlott minimum hőmérséklet kevesebb, mint 190 fok, vagy az ajánlott "
"maximális hőmérséklet nagyobb, mint 300 fok.\n"
@@ -5357,9 +5358,9 @@ msgstr ""
msgid "Layer: %d/%d"
msgstr ""
+#, fuzzy
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
"Kérjük, melegítsd a fúvókát 170 fok fölé a filament betöltése vagy kihúzása "
"előtt."
diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po
index b339ad3c88..ea19bb73c4 100644
--- a/localization/i18n/it/OrcaSlicer_it.po
+++ b/localization/i18n/it/OrcaSlicer_it.po
@@ -3694,11 +3694,11 @@ msgid "Bed Shape"
msgstr "Forma Piano"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
-"La temperatura minima consigliata è inferiore a 190 gradi o la temperatura "
-"massima consigliata è superiore a 300 gradi.\n"
+"La temperatura minima consigliata è inferiore a 190°C o la temperatura "
+"massima consigliata è superiore a 300°C.\n"
msgid ""
"The recommended minimum temperature cannot be higher than the recommended "
@@ -5566,10 +5566,9 @@ msgid "Layer: %d/%d"
msgstr "Strato: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
-"Si prega di riscaldare l'ugello a oltre 170 gradi prima di caricare o "
+"Si prega di riscaldare l'ugello a oltre 170°C prima di caricare o "
"scaricare il filamento."
msgid "Still unload"
@@ -19892,9 +19891,9 @@ msgstr ""
#~ "Sì - passa automaticamente alla trama rettilinea\n"
#~ "No - ripristina automaticamente la densità al valore predefinito non 100%"
-#~ msgid "Please heat the nozzle to above 170 degree before loading filament."
+#~ msgid "Please heat the nozzle to above 170°C before loading filament."
#~ msgstr ""
-#~ "Riscaldare il nozzle a una temperatura superiore a 170 gradi prima di "
+#~ "Riscaldare il nozzle a una temperatura superiore a 170°C prima di "
#~ "caricare il filamento."
#~ msgid "Show G-code window"
diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po
index d5860f5549..e2c8e34ead 100644
--- a/localization/i18n/ja/OrcaSlicer_ja.po
+++ b/localization/i18n/ja/OrcaSlicer_ja.po
@@ -3504,8 +3504,8 @@ msgid "Bed Shape"
msgstr "ベッド形状"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
msgid ""
@@ -5265,8 +5265,7 @@ msgid "Layer: %d/%d"
msgstr ""
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
msgid "Still unload"
@@ -16765,7 +16764,7 @@ msgstr ""
#~ "はい - 直線パターンに切り替えます\n"
#~ "いいえ - 充填密度をリセットします"
-#~ msgid "Please heat the nozzle to above 170 degree before loading filament."
+#~ msgid "Please heat the nozzle to above 170°C before loading filament."
#~ msgstr ""
#~ "フィラメントをロードする前に、ノズル温度を170℃以上に加熱してください"
diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po
index ad21eb895b..3207e3393a 100644
--- a/localization/i18n/ko/OrcaSlicer_ko.po
+++ b/localization/i18n/ko/OrcaSlicer_ko.po
@@ -3563,9 +3563,10 @@ msgstr "베드 모델을 가져올 STL 파일 선택:"
msgid "Bed Shape"
msgstr "베드 모양"
+#, fuzzy
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr "권장 최저 온도는 190도 미만 또는 권장 최고 온도는 300도 이상입니다.\n"
msgid ""
@@ -5386,8 +5387,7 @@ msgid "Layer: %d/%d"
msgstr "레이어: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
"필라멘트를 로드하거나 언로드하기 전에 노즐을 170도 이상으로 가열하세요."
@@ -18871,7 +18871,7 @@ msgstr ""
#~ "예 - 자동으로 직선 패턴으로 전환합니다\n"
#~ "아니요 - 밀도를 기본값(100%가 아닌 값)으로 자동 재설정합니다"
-#~ msgid "Please heat the nozzle to above 170 degree before loading filament."
+#~ msgid "Please heat the nozzle to above 170°C before loading filament."
#~ msgstr "필라멘트를 로드하기 전에 노즐을 170도 이상으로 가열하십시오."
#~ msgid "Show G-code window"
diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po
index cedeaa1993..948d8f1741 100644
--- a/localization/i18n/lt/OrcaSlicer_lt.po
+++ b/localization/i18n/lt/OrcaSlicer_lt.po
@@ -3646,9 +3646,10 @@ msgstr "Pasirinkite STL failą, iš kurio norite importuoti pagrindo modelį:"
msgid "Bed Shape"
msgstr "Pagrindo forma"
+#, fuzzy
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
"Rekomenduojama minimali temperatūra yra žemesnė nei 190 laipsnių arba "
"maksimali temperatūra aukštesnė nei 300 laipsnių.\n"
@@ -5515,9 +5516,9 @@ msgstr "Sluoksnis: %s"
msgid "Layer: %d/%d"
msgstr "Sluoksnis: %d/%d"
+#, fuzzy
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
"Prašome prieš įtraukiant ar išstumiant giją įkaitinti purkštuką virš 170 "
"laipsnių."
diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po
index e6cd160446..752e46e086 100644
--- a/localization/i18n/nl/OrcaSlicer_nl.po
+++ b/localization/i18n/nl/OrcaSlicer_nl.po
@@ -3591,11 +3591,11 @@ msgid "Bed Shape"
msgstr "Printbed vorm"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
-"De aanbevolen minimumtemperatuur is lager dan 190 graden of de aanbevolen "
-"maximumtemperatuur is hoger dan 300 graden.\n"
+"De aanbevolen minimumtemperatuur is lager dan 190°C of de aanbevolen "
+"maximumtemperatuur is hoger dan 300°C.\n"
msgid ""
"The recommended minimum temperature cannot be higher than the recommended "
@@ -5407,11 +5407,9 @@ msgid "Layer: %d/%d"
msgstr ""
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
-"Verwarm het mondstuk tot boven de 170 graden voordat u filament laadt of "
-"lost."
+"Verwarm het mondstuk tot boven de 170°C voordat u filament laadt of lost."
msgid "Still unload"
msgstr "Nog steeds aan het ontladen"
diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po
index 3287308bf7..63da73689f 100644
--- a/localization/i18n/pl/OrcaSlicer_pl.po
+++ b/localization/i18n/pl/OrcaSlicer_pl.po
@@ -3654,9 +3654,10 @@ msgstr "Wybierz plik STL do zaimportowania modelu stołu z:"
msgid "Bed Shape"
msgstr "Kształt stołu"
+#, fuzzy
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
"Zalecana temperatura jest poniżej minimalnych 190 stopni lub temperatura "
"przekracza zalecane maksimum 300 stopni.\n"
@@ -5524,9 +5525,9 @@ msgstr "Warstwa: %s"
msgid "Layer: %d/%d"
msgstr "Warstwa: %d/%d"
+#, fuzzy
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
"Przed załadowaniem lub rozładunkiem filamentu, podgrzej dyszę do temperatury "
"powyżej 170 stopni."
@@ -20919,7 +20920,7 @@ msgstr ""
#~ "Tak - przełącz automatycznie na wzór prostoliniowy\n"
#~ "Nie - automatycznie zresetuj gęstość do domyślnej wartości nie 100%"
-#~ msgid "Please heat the nozzle to above 170 degree before loading filament."
+#~ msgid "Please heat the nozzle to above 170°C before loading filament."
#~ msgstr ""
#~ "Proszę podgrzać dyszę do ponad 170 stopni przed załadowaniem filamentu."
diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po
index 8af4601e54..37a3f15a0b 100644
--- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po
+++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po
@@ -2979,13 +2979,13 @@ msgid "Max volumetric speed"
msgstr "Fluxo volumétrico máximo"
msgid "℃"
-msgstr "°C"
+msgstr ""
msgid "Bed temperature"
msgstr "Temperatura da mesa"
msgid "mm³"
-msgstr "mm3"
+msgstr ""
msgid "Start calibration"
msgstr "Iniciar calibração"
@@ -3655,11 +3655,11 @@ msgid "Bed Shape"
msgstr "Forma da Mesa"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
-"A temperatura mínima recomendada é inferior a 190 graus ou a temperatura "
-"máxima recomendada é superior a 300 graus.\n"
+"A temperatura mínima recomendada é inferior a 190°C ou a temperatura máxima "
+"recomendada é superior a 300°C.\n"
msgid ""
"The recommended minimum temperature cannot be higher than the recommended "
@@ -5527,11 +5527,9 @@ msgid "Layer: %d/%d"
msgstr "Camada: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
-"Aqueça o bico a mais de 170 graus antes de carregar ou descarregar o "
-"filamento."
+"Aqueça o bico a mais de 170°C antes de carregar ou descarregar o filamento."
msgid "Still unload"
msgstr "Ainda descarregando"
@@ -10080,7 +10078,7 @@ msgstr ""
"filamento não suporta a impressão na Placa Fria."
msgid "°C"
-msgstr "°C"
+msgstr ""
msgid ""
"Bed temperature for layers except the initial one. A value of 0 means the "
diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po
index 7682b587fb..2ac8d284bf 100644
--- a/localization/i18n/ru/OrcaSlicer_ru.po
+++ b/localization/i18n/ru/OrcaSlicer_ru.po
@@ -3695,9 +3695,10 @@ msgstr "Выберите STL файл для импорта формы стол
msgid "Bed Shape"
msgstr "Форма стола"
+#, fuzzy
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
"Минимально рекомендуемая температура меньше 190 градусов или максимально "
"рекомендуемая температура выше 300 градусов.\n"
@@ -5595,8 +5596,7 @@ msgid "Layer: %d/%d"
msgstr "Слой: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
"Пожалуйста, перед загрузкой или выгрузкой прутка, нагрейте сопло до "
"температуры выше 170°C."
diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po
index ad90ff096d..cbcc7e5881 100644
--- a/localization/i18n/sv/OrcaSlicer_sv.po
+++ b/localization/i18n/sv/OrcaSlicer_sv.po
@@ -3543,11 +3543,11 @@ msgid "Bed Shape"
msgstr "Byggplattans Form"
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
-"Den rekommenderade lägsta temperaturen är lägre än 190 grader eller den "
-"rekommenderade max temperaturen är högre än 300 grader.\n"
+"Den rekommenderade lägsta temperaturen är lägre än 190°C eller den "
+"rekommenderade max temperaturen är högre än 300°C.\n"
msgid ""
"The recommended minimum temperature cannot be higher than the recommended "
@@ -5348,10 +5348,9 @@ msgid "Layer: %d/%d"
msgstr "Lager: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
-"Värm nozzeln till över 170 grader innan du laddar eller matar ut filament."
+"Värm nozzeln till över 170°C innan du laddar eller matar ut filament."
msgid "Still unload"
msgstr "Matar ut fortfarande"
diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po
index 9db0d24845..f98ca77daf 100644
--- a/localization/i18n/tr/OrcaSlicer_tr.po
+++ b/localization/i18n/tr/OrcaSlicer_tr.po
@@ -3621,9 +3621,10 @@ msgstr "Yatak modelini içe aktarmak için bir STL dosyası seçin:"
msgid "Bed Shape"
msgstr "Yatak Şekli"
+#, fuzzy
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
"Önerilen minimum sıcaklık 190 dereceden azdır veya önerilen maksimum "
"sıcaklık 300 dereceden yüksektir.\n"
@@ -5480,9 +5481,9 @@ msgstr "Katman: %s"
msgid "Layer: %d/%d"
msgstr "Katman: %d/%d"
+#, fuzzy
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
"Filamenti yüklemeden veya boşaltmadan önce lütfen nozulu 170 derecenin "
"üzerine ısıtın."
@@ -19713,7 +19714,7 @@ msgstr ""
#~ "Hayır - yoğunluğu otomatik olarak %100 olmayan varsayılan değere "
#~ "sıfırlayın"
-#~ msgid "Please heat the nozzle to above 170 degree before loading filament."
+#~ msgid "Please heat the nozzle to above 170°C before loading filament."
#~ msgstr ""
#~ "Filamenti yüklemeden önce lütfen Nozulu 170 derecenin üzerine ısıtın."
diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po
index 4fd876d62e..0ac99fbdc2 100644
--- a/localization/i18n/uk/OrcaSlicer_uk.po
+++ b/localization/i18n/uk/OrcaSlicer_uk.po
@@ -3657,9 +3657,10 @@ msgstr "Виберіть файл STL для імпорту моделі сто
msgid "Bed Shape"
msgstr "Форма столу"
+#, fuzzy
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr ""
"Мінімально рекомендована температура менше 190 градусів або максимально "
"рекомендована температура більше 300 градусів.\n"
@@ -5535,9 +5536,9 @@ msgstr "Шар: %s"
msgid "Layer: %d/%d"
msgstr "Шар: %d/%d"
+#, fuzzy
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr ""
"Будь ласка, нагрійте насадку до понад 170 градусів перед завантаженням або "
"вивантаженням філаменту."
diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po
index b70280759e..530a02a264 100644
--- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po
+++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po
@@ -3498,9 +3498,10 @@ msgstr "选择 STL 文件来导入床模型:"
msgid "Bed Shape"
msgstr "热床形状"
+#, fuzzy
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr "建议最低温度低于 190 度或建议最高温度高于 300 度。\n"
msgid ""
@@ -5291,8 +5292,7 @@ msgid "Layer: %d/%d"
msgstr "层: %d/%d"
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr "请在进料或退料前把喷嘴升温到170℃以上。"
msgid "Still unload"
@@ -17552,7 +17552,7 @@ msgstr ""
#~ "是 - 自动切换到直线图案\n"
#~ "否 - 自动将密度重置为默认的非100%值"
-#~ msgid "Please heat the nozzle to above 170 degree before loading filament."
+#~ msgid "Please heat the nozzle to above 170°C before loading filament."
#~ msgstr "请在进料前把喷嘴升温到170℃"
#~ msgid "Show G-code window"
diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
index 411bb038d3..8695b7c85a 100644
--- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
+++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po
@@ -3502,9 +3502,10 @@ msgstr "選擇 STL 檔案來匯入熱床模型:"
msgid "Bed Shape"
msgstr "熱床形狀"
+#, fuzzy
msgid ""
-"The recommended minimum temperature is less than 190 degree or the "
-"recommended maximum temperature is greater than 300 degree.\n"
+"The recommended minimum temperature is less than 190°C or the "
+"recommended maximum temperature is greater than 300°C.\n"
msgstr "推薦的最小溫度低於 190 度或推薦的最大溫度高於 300 度。\n"
msgid ""
@@ -5302,9 +5303,9 @@ msgstr "%s 層"
msgid "Layer: %d/%d"
msgstr "%d/%d 層"
+#, fuzzy
msgid ""
-"Please heat the nozzle to above 170 degree before loading or unloading "
-"filament."
+"Please heat the nozzle to above 170°C before loading or unloading filament."
msgstr "請在上料或退料之前將噴嘴加熱至 170 度以上。"
msgid "Still unload"
diff --git a/resources/images/param_dependencies_presets.svg b/resources/images/param_dependencies_presets.svg
new file mode 100644
index 0000000000..603c52b79f
--- /dev/null
+++ b/resources/images/param_dependencies_presets.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/param_dependencies_printers.svg b/resources/images/param_dependencies_printers.svg
new file mode 100644
index 0000000000..0646f4730c
--- /dev/null
+++ b/resources/images/param_dependencies_printers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/resources/images/param_profile_dependencies.svg b/resources/images/param_profile_dependencies.svg
deleted file mode 100644
index ceb305e081..0000000000
--- a/resources/images/param_profile_dependencies.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index c00c60d8e6..485500a897 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -542,7 +542,7 @@ void PrintConfigDef::init_common_params()
def = this->add("preferred_orientation", coFloat);
def->label = L("Preferred orientation");
def->tooltip = L("Automatically orient stls on the Z-axis upon initial import");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->max = 360;
def->min = -360;
def->mode = comAdvanced;
@@ -695,7 +695,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Other layers");
def->tooltip = L("Bed temperature for layers except the initial one. "
"A value of 0 means the filament does not support printing on the Cool Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->full_label = L("Bed temperature");
def->min = 0;
def->max = 300;
@@ -705,7 +705,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Other layers");
def->tooltip = L("Bed temperature for layers except the initial one. "
"A value of 0 means the filament does not support printing on the Textured Cool Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->full_label = L("Bed temperature");
def->min = 0;
def->max = 300;
@@ -715,7 +715,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Other layers");
def->tooltip = L("Bed temperature for layers except the initial one. "
"A value of 0 means the filament does not support printing on the Engineering Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->full_label = L("Bed temperature");
def->min = 0;
def->max = 300;
@@ -725,7 +725,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Other layers");
def->tooltip = L("Bed temperature for layers except the initial one. "
"A value of 0 means the filament does not support printing on the High Temp Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->full_label = L("Bed temperature");
def->min = 0;
def->max = 300;
@@ -735,7 +735,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Other layers");
def->tooltip = L("Bed temperature for layers except the initial one. "
"A value of 0 means the filament does not support printing on the Textured PEI Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->full_label = L("Bed temperature");
def->min = 0;
def->max = 300;
@@ -756,7 +756,7 @@ void PrintConfigDef::init_fff_params()
def->full_label = L("Initial layer bed temperature");
def->tooltip = L("Bed temperature of the initial layer. "
"A value of 0 means the filament does not support printing on the Cool Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->min = 0;
def->max = 120;
def->set_default_value(new ConfigOptionInts{ 35 });
@@ -766,7 +766,7 @@ void PrintConfigDef::init_fff_params()
def->full_label = L("Initial layer bed temperature");
def->tooltip = L("Bed temperature of the initial layer. "
"A value of 0 means the filament does not support printing on the Textured Cool Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->min = 0;
def->max = 120;
def->set_default_value(new ConfigOptionInts{ 40 });
@@ -776,7 +776,7 @@ void PrintConfigDef::init_fff_params()
def->full_label = L("Initial layer bed temperature");
def->tooltip = L("Bed temperature of the initial layer. "
"A value of 0 means the filament does not support printing on the Engineering Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->min = 0;
def->max = 300;
def->set_default_value(new ConfigOptionInts{ 45 });
@@ -786,7 +786,7 @@ void PrintConfigDef::init_fff_params()
def->full_label = L("Initial layer bed temperature");
def->tooltip = L("Bed temperature of the initial layer. "
"A value of 0 means the filament does not support printing on the High Temp Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->max = 300;
def->set_default_value(new ConfigOptionInts{ 45 });
@@ -795,7 +795,7 @@ void PrintConfigDef::init_fff_params()
def->full_label = L("Initial layer bed temperature");
def->tooltip = L("Bed temperature of the initial layer. "
"A value of 0 means the filament does not support printing on the Textured PEI Plate.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->min = 0;
def->max = 300;
def->set_default_value(new ConfigOptionInts{45});
@@ -934,7 +934,7 @@ void PrintConfigDef::init_fff_params()
"and bridges can improve the overall print quality of these features.\n\n"
"Please note, this fan speed is clamped on the lower end by the minimum fan speed threshold set above. It is also adjusted "
"upwards up to the maximum fan speed threshold when the minimum layer time threshold is not met.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 0;
def->max = 100;
def->mode = comAdvanced;
@@ -970,7 +970,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Bridging angle override. If left to zero, the bridging angle will be calculated "
"automatically. Otherwise the provided angle will be used for external bridges. "
"Use 180°for zero angle.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0.));
@@ -982,7 +982,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Internal bridging angle override. If left to zero, the bridging angle will be calculated "
"automatically. Otherwise the provided angle will be used for internal bridges. "
"Use 180°for zero angle.\n\nIt is recommended to leave it at 0 unless there is a specific model need not to.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0.));
@@ -993,7 +993,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Controls the density (spacing) of external bridge lines. 100% means solid bridge. Default is 100%.\n\n"
"Lower density external bridges can help improve reliability as there is more space for air to circulate "
"around the extruded bridge, improving its cooling speed.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 10;
def->max = 100;
def->mode = comAdvanced;
@@ -1007,7 +1007,7 @@ void PrintConfigDef::init_fff_params()
"air to circulate around the extruded bridge, improving its cooling speed. \n\n"
"This option works particularly well when combined with the second internal bridge over infill option, "
"further improving internal bridging structure before solid infill is extruded.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 10;
def->max = 100;
def->mode = comAdvanced;
@@ -1300,7 +1300,7 @@ void PrintConfigDef::init_fff_params()
def->category = L("Support");
def->tooltip = L("Maximum angle to let a brim ear appear. \nIf set to 0, no brim will be created. \nIf set to "
"~180, brim will be created on everything but straight sections.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 180;
def->mode = comAdvanced;
@@ -1318,7 +1318,7 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionFloat(1));
def = this->add("compatible_printers", coStrings);
- def->label = L("Compatible machine");
+ def->label = L("Select printers");
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionStrings());
def->cli = ConfigOptionDef::nocli;
@@ -1331,7 +1331,7 @@ void PrintConfigDef::init_fff_params()
def->cli = ConfigOptionDef::nocli;
def = this->add("compatible_printers_condition", coString);
- def->label = L("Compatible machine condition");
+ def->label = L("Condition");
def->tooltip = L("A boolean expression using the configuration values of an active printer profile. "
"If this expression evaluates to true, this profile is considered compatible "
"with the active printer profile.");
@@ -1340,13 +1340,13 @@ void PrintConfigDef::init_fff_params()
def->cli = ConfigOptionDef::nocli;
def = this->add("compatible_prints", coStrings);
- def->label = L("Compatible process profiles");
+ def->label = L("Select profiles");
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionStrings());
def->cli = ConfigOptionDef::nocli;
def = this->add("compatible_prints_condition", coString);
- def->label = L("Compatible process profiles condition");
+ def->label = L("Condition");
def->tooltip = L("A boolean expression using the configuration values of an active print profile. "
"If this expression evaluates to true, this profile is considered compatible "
"with the active print profile.");
@@ -1430,7 +1430,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("during_print_exhaust_fan_speed", coInts);
def->label = L("Fan speed");
def->tooltip=L("Speed of exhaust fan during printing. This speed will override the speed in filament custom G-code.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min=0;
def->max=100;
def->mode = comSimple;
@@ -1438,7 +1438,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("complete_print_exhaust_fan_speed", coInts);
def->label = L("Fan speed");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->tooltip=L("Speed of exhaust fan after printing completes");
def->min=0;
def->max=100;
@@ -1948,7 +1948,8 @@ void PrintConfigDef::init_fff_params()
def = this->add("default_filament_colour", coStrings);
def->label = L("Default color");
- def->tooltip = L("Default filament color");
+ def->tooltip = L("Default filament color"
+ "\nRight click to reset value to system default.");
def->gui_type = ConfigOptionDef::GUIType::color;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionStrings{""});
@@ -2060,7 +2061,7 @@ void PrintConfigDef::init_fff_params()
" The part will be scaled in xy to compensate."
" Only the filament used for the perimeter is taken into account."
"\nBe sure to allow enough space between objects, as this compensation is done after the checks.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->ratio_over = "";
def->min = 10;
def->mode = comAdvanced;
@@ -2071,7 +2072,7 @@ void PrintConfigDef::init_fff_params()
// xgettext:no-c-format, no-boost-format
def->tooltip = L("Enter the shrinkage percentage that the filament will get after cooling (94% if you measure 94mm instead of 100mm)."
" The part will be scaled in Z to compensate.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->ratio_over = "";
def->min = 10;
def->mode = comAdvanced;
@@ -2274,7 +2275,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("temperature_vitrification", coInts);
def->label = L("Softening temperature");
def->tooltip = L("The material softens at this temperature, so when the bed temperature is equal to or greater than it, it's highly recommended to open the front door and/or remove the upper glass to avoid clogging.");
- def->sidetext = L("°C"); // ORCA add side text
+ def->sidetext = "°C"; // ORCA add side text
def->mode = comSimple;
def->set_default_value(new ConfigOptionInts{ 100 });
@@ -2306,7 +2307,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Sparse infill direction");
def->category = L("Strength");
def->tooltip = L("Angle for sparse infill pattern, which controls the start or main direction of line");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 360;
def->mode = comAdvanced;
@@ -2316,7 +2317,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Solid infill direction");
def->category = L("Strength");
def->tooltip = L("Angle for solid infill pattern, which controls the start or main direction of line");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 360;
def->mode = comAdvanced;
@@ -2334,7 +2335,7 @@ void PrintConfigDef::init_fff_params()
def->category = L("Strength");
// xgettext:no-c-format, no-boost-format
def->tooltip = L("Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 0;
def->max = 100;
def->set_default_value(new ConfigOptionPercent(20));
@@ -2390,7 +2391,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Lattice angle 1");
def->category = L("Strength");
def->tooltip = L("The angle of the first set of 2D lattice elements in the Z direction. Zero is vertical.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = -75;
def->max = 75;
def->mode = comAdvanced;
@@ -2400,7 +2401,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Lattice angle 2");
def->category = L("Strength");
def->tooltip = L("The angle of the second set of 2D lattice elements in the Z direction. Zero is vertical.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = -75;
def->max = 75;
def->mode = comAdvanced;
@@ -2539,7 +2540,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("accel_to_decel_factor", coPercent);
def->label = L("accel_to_decel");
def->tooltip = L("Klipper's max_accel_to_decel will be adjusted to this %% of acceleration");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 1;
def->max = 100;
def->mode = comAdvanced;
@@ -2678,7 +2679,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Initial layer");
def->full_label = L("Initial layer nozzle temperature");
def->tooltip = L("Nozzle temperature for printing initial layer when using this filament");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->min = 0;
def->max = max_temp;
def->set_default_value(new ConfigOptionInts { 200 });
@@ -2701,7 +2702,7 @@ void PrintConfigDef::init_fff_params()
" reduces the layer binding strength between supports and the supported part, making them easier to separate."
"\nSet to -1 to disable it."
"\nThis setting is overridden by disable_fan_first_layers.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = -1;
def->max = 100;
def->mode = comAdvanced;
@@ -2713,7 +2714,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("The part cooling fan speed used for all internal bridges. Set to -1 to use the overhang fan speed settings instead.\n\n"
"Reducing the internal bridges fan speed, compared to your regular fan speed, can help reduce part warping due to excessive "
"cooling applied over a large surface for a prolonged period of time.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = -1;
def->max = 100;
def->mode = comAdvanced;
@@ -3097,7 +3098,7 @@ void PrintConfigDef::init_fff_params()
def->category = L("Strength");
// xgettext:no-c-format, no-boost-format
def->tooltip = L("Infill area is enlarged slightly to overlap with wall for better bonding. The percentage value is relative to line width of sparse infill. Set this value to ~10-15% to minimize potential over extrusion and accumulation of material resulting in rough top surfaces.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->ratio_over = "inner_wall_line_width";
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionPercent(15));
@@ -3107,7 +3108,7 @@ void PrintConfigDef::init_fff_params()
def->category = L("Strength");
// xgettext:no-c-format, no-boost-format
def->tooltip = L("Top solid infill area is enlarged slightly to overlap with wall for better bonding and to minimize the appearance of pinholes where the top infill meets the walls. A value of 25-30% is a good starting point, minimizing the appearance of pinholes. The percentage value is relative to line width of sparse infill");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->ratio_over = "inner_wall_line_width";
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionPercent(25));
@@ -3183,7 +3184,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("interlocking_orientation", coFloat);
def->label = L("Interlocking direction");
def->tooltip = L("Orientation of interlock beams.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 360;
def->category = L("Advanced");
@@ -3253,7 +3254,7 @@ void PrintConfigDef::init_fff_params()
def->category = L("Quality");
def->tooltip = L("The amount of material to extrude during ironing. Relative to flow of normal layer height. "
"Too high value results in overextrusion on the surface");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->ratio_over = "layer_height";
def->min = 0;
def->max = 100;
@@ -3293,7 +3294,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Ironing angle");
def->category = L("Quality");
def->tooltip = L("The angle ironing is done at. A negative number disables this function and uses the default method.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = -1;
def->max = 359;
def->mode = comAdvanced;
@@ -3514,7 +3515,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Fan speed");
def->tooltip = L("Part cooling fan speed may be increased when auto cooling is enabled. "
"This is the maximum speed limitation of part cooling fan");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 0;
def->max = 100;
def->mode = comSimple;
@@ -3573,7 +3574,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("fan_min_speed", coFloats);
def->label = L("Fan speed");
def->tooltip = L("Minimum speed for part cooling fan");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 0;
def->max = 100;
def->mode = comSimple;
@@ -3583,7 +3584,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Fan speed");
def->tooltip = L("Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed during printing except the first several layers "
"which is defined by no cooling layers.\nPlease enable auxiliary_fan in printer settings to use this feature. G-code command: M106 P2 S(0-255)");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 0;
def->max = 100;
def->mode = comSimple;
@@ -3755,7 +3756,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("Maximum angle of overhangs to allow after making more steep overhangs printable."
"90° will not change the model at all and allow any overhang, while 0 will "
"replace all overhangs with conical material.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->mode = comAdvanced;
def->min = 0.;
def->max = 90.;
@@ -3891,7 +3892,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Initial layer density");
def->category = L("Support");
def->tooltip = L("Density of the first raft or support layer");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 10;
def->max = 100;
def->mode = comAdvanced;
@@ -3937,7 +3938,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("retract_before_wipe", coPercents);
def->label = L("Retract amount before wipe");
def->tooltip = L("The length of fast retraction before wipe, relative to retraction length");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionPercents { 100 });
@@ -4038,7 +4039,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("travel_slope", coFloats);
def->label = L("Traveling angle");
def->tooltip = L("Traveling angle for Slope and Spiral Z-hop type. Setting it to 90° results in Normal Lift.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->mode = comAdvanced;
def->min = 1;
def->max = 90;
@@ -4180,7 +4181,7 @@ void PrintConfigDef::init_fff_params()
"This option sets the threshold angle for applying a conditional scarf joint seam.\nIf the maximum angle within the perimeter loop "
"exceeds this value (indicating the absence of sharp corners), a scarf joint seam will be used. The default value is 155°.");
def->mode = comAdvanced;
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 180;
def->set_default_value(new ConfigOptionInt(155));
@@ -4192,7 +4193,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("This option determines the overhang threshold for the application of scarf joint seams. If the unsupported portion "
"of the perimeter is less than this threshold, scarf joint seams will be applied. The default threshold is set at 40% "
"of the external wall's width. Due to performance considerations, the degree of overhang is estimated.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionPercent(40));
@@ -4301,7 +4302,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("skirt_start_angle", coFloat);
def->label = L("Skirt start point");
def->tooltip = L("Angle from the object center to skirt start point. Zero is the most right position, counter clockwise is positive angle.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = -180;
def->max = 180;
def->mode = comAdvanced;
@@ -4668,7 +4669,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Pattern angle");
def->category = L("Support");
def->tooltip = L("Use this setting to rotate the support pattern on the horizontal plane.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 359;
def->mode = comAdvanced;
@@ -4951,7 +4952,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Threshold angle");
def->category = L("Support");
def->tooltip = L("Support will be generated for overhangs whose slope angle is below the threshold.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 90;
def->mode = comSimple;
@@ -4973,7 +4974,7 @@ void PrintConfigDef::init_fff_params()
def->category = L("Support");
def->tooltip = L("This setting determines the maximum overhang angle that t he branches of tree support allowed to make."
"If the angle is increased, the branches can be printed more horizontally, allowing them to reach farther.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 60;
def->mode = comAdvanced;
@@ -4984,7 +4985,7 @@ void PrintConfigDef::init_fff_params()
def->category = L("Support");
def->tooltip = L("This setting determines the maximum overhang angle that t he branches of tree support allowed to make."
"If the angle is increased, the branches can be printed more horizontally, allowing them to reach farther.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 60;
def->mode = comAdvanced;
@@ -4996,7 +4997,7 @@ void PrintConfigDef::init_fff_params()
// TRN PrintSettings: "Organic supports" > "Preferred Branch Angle"
def->tooltip = L("The preferred angle of the branches, when they do not have to avoid the model. "
"Use a lower angle to make them more vertical and more stable. Use a higher angle for branches to merge faster.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 10;
def->max = 85;
def->mode = comAdvanced;
@@ -5030,7 +5031,7 @@ void PrintConfigDef::init_fff_params()
"A higher value results in better overhangs but the supports are harder to remove, "
"thus it is recommended to enable top support interfaces instead of a high branch density value "
"if dense interfaces are needed.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->min = 5;
def->max_literal = 35;
def->mode = comAdvanced;
@@ -5084,7 +5085,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("The angle of the branches' diameter as they gradually become thicker towards the bottom. "
"An angle of 0 will cause the branches to have uniform thickness over their length. "
"A bit of an angle can increase stability of the organic support.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->min = 0;
def->max = 15;
def->mode = comAdvanced;
@@ -5139,7 +5140,7 @@ void PrintConfigDef::init_fff_params()
"This may be useful if your printer does not support M141/M191 commands, or if you desire "
"to handle heat soaking in the print start macro if no active chamber heater is installed."
);
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->full_label = L("Chamber temperature");
def->min = 0;
def->max = max_temp;
@@ -5148,7 +5149,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("nozzle_temperature", coInts);
def->label = L("Other layers");
def->tooltip = L("Nozzle temperature for layers after the initial one");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->full_label = L("Nozzle temperature");
def->min = 0;
def->max = max_temp;
@@ -5157,7 +5158,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("nozzle_temperature_range_low", coInts);
def->label = L("Min");
//def->tooltip = L("");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->min = 0;
def->max = max_temp;
def->set_default_value(new ConfigOptionInts { 190 });
@@ -5165,7 +5166,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("nozzle_temperature_range_high", coInts);
def->label = L("Max");
//def->tooltip = L("");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->min = 0;
def->max = max_temp;
def->set_default_value(new ConfigOptionInts { 240 });
@@ -5346,7 +5347,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("wipe_tower_rotation_angle", coFloat);
def->label = L("Wipe tower rotation angle");
def->tooltip = L("Wipe tower rotation angle with respect to x-axis.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0.));
@@ -5362,7 +5363,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Stabilization cone apex angle");
def->tooltip = L("Angle at the apex of the cone that is used to stabilize the wipe tower. "
"Larger angle means wider base.");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->mode = comAdvanced;
def->min = 0.;
def->max = 90.;
@@ -5433,7 +5434,7 @@ void PrintConfigDef::init_fff_params()
def = this->add("wipe_tower_extra_spacing", coPercent);
def->label = L("Wipe tower purge lines spacing");
def->tooltip = L("Spacing of purge lines on the wipe tower.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->mode = comAdvanced;
def->min = 100.;
def->max = 300.;
@@ -5443,7 +5444,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Extra flow for purging");
def->tooltip = L("Extra flow used for the purging lines on the wipe tower. This makes the purging lines thicker or narrower "
"than they normally would be. The spacing is adjusted automatically.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->mode = comAdvanced;
def->min = 100.;
def->max = 300.;
@@ -5453,7 +5454,7 @@ void PrintConfigDef::init_fff_params()
def->label = L("Idle temperature");
def->tooltip = L("Nozzle temperature when the tool is currently not used in multi-tool setups."
"This is only used when 'Ooze prevention' is active in Print Settings. Set to 0 to disable.");
- def->sidetext = L("°C");
+ def->sidetext = "°C";
def->min = 0;
def->max = max_temp;
def->set_default_value(new ConfigOptionInts{0});
@@ -5560,7 +5561,7 @@ void PrintConfigDef::init_fff_params()
def->tooltip = L("When transitioning between different numbers of walls as the part becomes "
"thinner, a certain amount of space is allotted to split or join the wall segments. "
"It's expressed as a percentage over nozzle diameter");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->mode = comAdvanced;
def->min = 0;
def->set_default_value(new ConfigOptionPercent(100));
@@ -5575,7 +5576,7 @@ void PrintConfigDef::init_fff_params()
"starts/stops and travel time. However, large extrusion width variation can lead to "
"under- or overextrusion problems. "
"It's expressed as a percentage over nozzle diameter");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->mode = comAdvanced;
def->min = 0;
def->set_default_value(new ConfigOptionPercent(25));
@@ -5587,7 +5588,7 @@ void PrintConfigDef::init_fff_params()
" an angle greater than this setting will not have transitions and no walls will be "
"printed in the center to fill the remaining space. Reducing this setting reduces "
"the number and length of these center walls, but may leave gaps or overextrude");
- def->sidetext = L("°");
+ def->sidetext = "°";
def->mode = comAdvanced;
def->min = 1.;
def->max = 59.;
@@ -5609,7 +5610,7 @@ void PrintConfigDef::init_fff_params()
"not be printed, while features thicker than the Minimum feature size will be widened to "
"the Minimum wall width. "
"It's expressed as a percentage over nozzle diameter");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->mode = comAdvanced;
def->min = 0;
def->set_default_value(new ConfigOptionPercent(25));
@@ -5633,7 +5634,7 @@ void PrintConfigDef::init_fff_params()
def->category = L("Quality");
def->tooltip = L("The minimum wall width that should be used for the first layer is recommended to be set "
"to the same size as the nozzle. This adjustment is expected to enhance adhesion.");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->mode = comAdvanced;
def->min = 0;
def->set_default_value(new ConfigOptionPercent(85));
@@ -5645,7 +5646,7 @@ void PrintConfigDef::init_fff_params()
"of the model. If the Minimum wall width is thinner than the thickness of the feature,"
" the wall will become as thick as the feature itself. "
"It's expressed as a percentage over nozzle diameter");
- def->sidetext = L("%");
+ def->sidetext = "%";
def->mode = comAdvanced;
def->min = 0;
def->set_default_value(new ConfigOptionPercent(85));
diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp
index 6ee0711137..3155a1bb98 100644
--- a/src/slic3r/GUI/CameraPopup.cpp
+++ b/src/slic3r/GUI/CameraPopup.cpp
@@ -406,9 +406,9 @@ void CameraPopup::update(bool vcamera_streaming)
wxString CameraPopup::to_resolution_label_string(CameraResolution resolution) {
switch (resolution) {
case RESOLUTION_720P:
- return _L("720p");
+ return "720p";
case RESOLUTION_1080P:
- return _L("1080p");
+ return "1080p";
default:
return "";
}
diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp
index 6b05dfb909..75d4ca1ae9 100644
--- a/src/slic3r/GUI/ConfigManipulation.cpp
+++ b/src/slic3r/GUI/ConfigManipulation.cpp
@@ -62,7 +62,7 @@ void ConfigManipulation::check_nozzle_recommended_temperature_range(DynamicPrint
wxString msg_text;
bool need_check = false;
if (temperature_range_low < 190 || temperature_range_high > 300) {
- msg_text += _L("The recommended minimum temperature is less than 190 degree or the recommended maximum temperature is greater than 300 degree.\n");
+ msg_text += _L("The recommended minimum temperature is less than 190°C or the recommended maximum temperature is greater than 300°C.\n");
need_check = true;
}
if (temperature_range_low > temperature_range_high) {
@@ -630,7 +630,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
toggle_line("bridge_no_support", !support_is_normal_tree);
// This is only supported for auto normal tree
- toggle_line("support_critical_regions_only", is_auto(support_type) && support_is_normal_tree);
+ toggle_line("support_critical_regions_only", is_auto(support_type) && support_is_tree);
for (auto el : { "support_interface_spacing", "support_interface_filament",
"support_interface_loop_pattern", "support_bottom_interface_spacing" })
diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp
index 1673a6ec7f..f9a06a02e1 100644
--- a/src/slic3r/GUI/ConfigWizard.cpp
+++ b/src/slic3r/GUI/ConfigWizard.cpp
@@ -1448,7 +1448,7 @@ PageTemperatures::PageTemperatures(ConfigWizard *parent)
auto *sizer_extr = new wxFlexGridSizer(3, 5, 5);
auto *text_extr = new wxStaticText(this, wxID_ANY, _L("Extrusion Temperature:"));
- auto *unit_extr = new wxStaticText(this, wxID_ANY, _L("°C"));
+ auto *unit_extr = new wxStaticText(this, wxID_ANY, "°C");
sizer_extr->AddGrowableCol(0, 1);
sizer_extr->Add(text_extr, 0, wxALIGN_CENTRE_VERTICAL);
sizer_extr->Add(spin_extr);
@@ -1462,7 +1462,7 @@ PageTemperatures::PageTemperatures(ConfigWizard *parent)
auto *sizer_bed = new wxFlexGridSizer(3, 5, 5);
auto *text_bed = new wxStaticText(this, wxID_ANY, _L("Bed Temperature:"));
- auto *unit_bed = new wxStaticText(this, wxID_ANY, _L("°C"));
+ auto *unit_bed = new wxStaticText(this, wxID_ANY, "°C");
sizer_bed->AddGrowableCol(0, 1);
sizer_bed->Add(text_bed, 0, wxALIGN_CENTRE_VERTICAL);
sizer_bed->Add(spin_bed);
diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp
index 6c4ff935bd..bf580b4fd5 100644
--- a/src/slic3r/GUI/Field.cpp
+++ b/src/slic3r/GUI/Field.cpp
@@ -1727,7 +1727,7 @@ void Choice::msw_rescale()
void ColourPicker::BUILD()
{
- auto size = wxSize(def_width() * m_em_unit, wxDefaultCoord);
+ auto size = wxSize(def_width_wider() * m_em_unit, -1); // ORCA match color picker width
if (m_opt.height >= 0) size.SetHeight(m_opt.height*m_em_unit);
if (m_opt.width >= 0) size.SetWidth(m_opt.width*m_em_unit);
@@ -1750,7 +1750,24 @@ void ColourPicker::BUILD()
// // recast as a wxWindow to fit the calling convention
window = dynamic_cast(temp);
- temp->Bind(wxEVT_COLOURPICKER_CHANGED, ([this](wxCommandEvent e) { on_change_field(); }), temp->GetId());
+ temp->Bind(wxEVT_COLOURPICKER_CHANGED, ([this,temp](wxCommandEvent e) {
+ #ifdef __WXMSW__
+ draw_bmp_btn(temp, temp->GetColour());
+ #endif
+ on_change_field();
+ }), temp->GetId());
+
+ // ORCA reset value to default on right click. previously no way to switch back on windows
+ temp->GetPickerCtrl()->Bind(wxEVT_RIGHT_DOWN, [this, temp](wxMouseEvent e){
+ #ifdef __WXMSW__
+ temp->SetColour(wxTransparentColour);
+ draw_bmp_btn(temp, wxTransparentColour);
+ #else
+ set_undef_value(temp);
+ #endif
+ on_change_field();
+ e.Skip();
+ });
temp->SetToolTip(get_tooltip_text(clr_str));
}
@@ -1782,17 +1799,69 @@ void ColourPicker::set_undef_value(wxColourPickerCtrl* field)
btn->SetBitmapLabel(bmp);
}
+// ORCA match style with button on windows
+void ColourPicker::draw_bmp_btn(wxColourPickerCtrl* field, wxColour color)
+{
+ wxButton* btn = dynamic_cast(field->GetPickerCtrl());
+
+ if (!btn->GetBitmap().IsOk()) return;
+ btn->SetWindowStyle(wxBORDER_NONE); // ORCA just in case to prevent any overflow
+ btn->SetBackgroundColour(*wxWHITE);
+ wxGetApp().UpdateDarkUI(btn);
+
+ auto create_bitmap = [btn](const wxColour& picker_color,const wxColour& bg_color, bool focus) -> wxBitmap {
+ wxSize btn_sz = btn->GetSize();
+ wxImage image(btn_sz);
+ image.InitAlpha();
+ memset(image.GetAlpha(), 0, image.GetWidth() * image.GetHeight());
+ wxBitmap bmp(std::move(image));
+ wxMemoryDC dc(bmp);
+ if (!dc.IsOk()) return bmp;
+ wxGCDC dc2(dc); // just use wxGCDC since bitmap button only used for windows
+
+ dc2.SetPen(focus ? wxPen(wxColour(StateColor::darkModeColorFor(wxColour("#009688"))), 1) : *wxTRANSPARENT_PEN);
+ dc2.SetBrush(wxBrush(StateColor::darkModeColorFor(bg_color)));
+ dc2.DrawRoundedRectangle(btn->GetRect(), btn->FromDIP(4));
+
+ int padding = btn->FromDIP(5);
+ dc2.SetPen(*wxTRANSPARENT_PEN);
+ if (picker_color != wxTransparentColour){ // Draw color
+ dc2.SetBrush(wxBrush(picker_color));
+ dc2.DrawRectangle(wxRect(padding, padding, btn_sz.x - 2 * padding, btn_sz.y - 2 * padding));
+ } else { // Draw Pick text
+ // Label::Body_14 rendered much bolder with wxGCDC
+ dc2.SetFont(wxFont(11, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
+ wxString text = _L("Pick") + " " + dots;
+ wxSize text_sz = dc2.GetTextExtent(text);
+ dc2.SetTextForeground(StateColor::darkModeColorFor(wxColour("#262E30")));
+ dc2.DrawText(text, (btn_sz.x - text_sz.x) / 2, (btn_sz.y - text_sz.y) / 2);
+ }
+ dc.SelectObject(wxNullBitmap);
+ return bmp;
+ };
+
+ btn->SetBitmap( create_bitmap(color, wxColour("#DFDFDF"), false)); // Normal
+ btn->SetBitmapFocus( create_bitmap(color, wxColour("#DFDFDF"), true )); // Focus
+ btn->SetBitmapCurrent( create_bitmap(color, wxColour("#D4D4D4"), false)); // Hover
+}
+
void ColourPicker::set_value(const boost::any& value, bool change_event)
{
m_disable_change_event = !change_event;
const wxString clr_str(boost::any_cast(value));
auto field = dynamic_cast(window);
- wxColour clr(clr_str);
- if (clr_str.IsEmpty() || !clr.IsOk())
- set_undef_value(field);
- else
+ #ifdef __WXMSW__
+ wxColour clr = (clr_str.IsEmpty() || !clr.IsOk()) ? wxTransparentColour : clr_str;
field->SetColour(clr);
+ draw_bmp_btn(field, clr);
+ #else
+ wxColour clr(clr_str);
+ if (clr_str.IsEmpty() || !clr.IsOk())
+ set_undef_value(field);
+ else
+ field->SetColour(clr);
+ #endif
m_disable_change_event = false;
}
@@ -1814,7 +1883,7 @@ void ColourPicker::msw_rescale()
Field::msw_rescale();
wxColourPickerCtrl* field = dynamic_cast(window);
- auto size = wxSize(def_width() * m_em_unit, wxDefaultCoord);
+ auto size = wxSize(def_width_wider() * m_em_unit, -1); // ORCA match color picker width with parameters
if (m_opt.height >= 0)
size.SetHeight(m_opt.height * m_em_unit);
else if (parent_is_custom_ctrl && opt_height > 0)
@@ -1825,16 +1894,23 @@ void ColourPicker::msw_rescale()
else
field->SetMinSize(size);
- if (field->GetColour() == wxTransparentColour)
- set_undef_value(field);
+ #ifdef __WXMSW__
+ draw_bmp_btn(field, field->GetColour());
+ #else
+ if (field->GetColour() == wxTransparentColour)
+ set_undef_value(field);
+ #endif
+
}
void ColourPicker::sys_color_changed()
{
#ifdef _WIN32
- if (wxWindow* win = this->getWindow())
- if (wxColourPickerCtrl* picker = dynamic_cast(win))
- wxGetApp().UpdateDarkUI(picker->GetPickerCtrl(), true);
+ if (wxWindow* win = this->getWindow())
+ if (wxColourPickerCtrl* picker = dynamic_cast(win)){
+ wxGetApp().UpdateDarkUI(picker->GetPickerCtrl(), true);
+ draw_bmp_btn(picker, picker->GetColour());
+ }
#endif
}
diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp
index 2cc89f240a..b2e615842a 100644
--- a/src/slic3r/GUI/Field.hpp
+++ b/src/slic3r/GUI/Field.hpp
@@ -468,6 +468,7 @@ class ColourPicker : public Field {
using Field::Field;
void set_undef_value(wxColourPickerCtrl* field);
+ void draw_bmp_btn(wxColourPickerCtrl* field, wxColour color);
public:
ColourPicker(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) {}
ColourPicker(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field(parent, opt, id) {}
diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp
index ce021b48a5..98d887bd49 100644
--- a/src/slic3r/GUI/GCodeViewer.cpp
+++ b/src/slic3r/GUI/GCodeViewer.cpp
@@ -4867,8 +4867,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
}
// ORCA use % symbol for percentage and use "Usage" for "Used filaments"
- offsets = calculate_offsets({ {_u8L("Line Type"), labels}, {_u8L("Time"), times}, {_u8L("%"), percents}, {"", used_filaments_length}, {"", used_filaments_weight}, {_u8L("Display"), {""}}}, icon_size);
- append_headers({{_u8L("Line Type"), offsets[0]}, {_u8L("Time"), offsets[1]}, {_u8L("%"), offsets[2]}, {_u8L("Usage"), offsets[3]}, {_u8L("Display"), offsets[5]}});
+ offsets = calculate_offsets({ {_u8L("Line Type"), labels}, {_u8L("Time"), times}, {"%", percents}, {"", used_filaments_length}, {"", used_filaments_weight}, {_u8L("Display"), {""}}}, icon_size);
+ append_headers({{_u8L("Line Type"), offsets[0]}, {_u8L("Time"), offsets[1]}, {"%", offsets[2]}, {_u8L("Usage"), offsets[3]}, {_u8L("Display"), offsets[5]}});
break;
}
case EViewType::Height: { imgui.title(_u8L("Layer Height (mm)")); break; }
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp
index 8af9eda3c0..a2e0df35b3 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp
@@ -262,7 +262,7 @@ std::string GLGizmoCut3D::get_tooltip() const
if (tooltip.empty() && (m_hover_id == X || m_hover_id == Y || m_hover_id == CutPlaneZRotation)) {
std::string axis = m_hover_id == X ? "X" : m_hover_id == Y ? "Y" : "Z";
- return axis + ": " + format(float(rad2deg(m_angle)), 1) + _u8L("°");
+ return axis + ": " + format(float(rad2deg(m_angle)), 1) + "°";
}
return tooltip;
@@ -2541,7 +2541,7 @@ bool GLGizmoCut3D::render_angle_input(const std::string& label, float& in_val, c
float val = rad2deg(in_val);
const float old_val = val;
- const std::string format = "%.0f " + _u8L("°");
+ const std::string format = "%.0f°";
m_imgui->bbl_slider_float_style("##angle_" + label, &val, min_val, max_val, format.c_str(), 1.f, true, from_u8(label));
ImGui::SameLine(left_width);
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp
index 679c4f1cff..596325155e 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp
@@ -2108,7 +2108,7 @@ void GLGizmoMeasure::show_face_face_assembly_senior()
m_buffered_around_center = 0;
}
ImGui::SameLine(rotate_around_center_size + m_space_size + m_input_size_max + m_space_size / 2.0f);
- m_imgui->text(_L("°"));
+ m_imgui->text("°");
}
}
}
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp
index 1d9171e3bd..168b650e9e 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp
@@ -343,7 +343,7 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing,ImVec2(10,20));
if (is_worker_running) { // apply or preview
// draw progress bar
- std::string progress_text = GUI::format(_L("%1%"), std::to_string(progress)) + "%%";
+ std::string progress_text = GUI::format("%1%", std::to_string(progress)) + "%%";
ImVec2 progress_size(bottom_left_width - space_size, 0.0f);
ImGui::BBLProgressBar2(progress / 100., progress_size);
ImGui::SameLine();
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp
index 72c69dc0e9..8717e8571d 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp
@@ -972,7 +972,7 @@ void GLGizmoText::on_render_input_window(float x, float y, float bottom_limit)
//ImGui::SameLine();
//ImGui::AlignTextToFramePadding();
- //m_imgui->text(_L("Status:"));
+ //m_imgui->text(_L("Status") + ": ");
//float status_cap = m_imgui->calc_text_size(_L("Status:")).x + space_size + ImGui::GetStyle().WindowPadding.x;
//ImGui::SameLine();
//m_imgui->text(m_is_modify ? _L("Modify") : _L("Add"));
diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp
index cf4e68042f..d5f25146ba 100644
--- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp
+++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp
@@ -1034,7 +1034,7 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe
is_relative_input = true;
}
ImGui::SameLine(caption_max + (++index_unit) * unit_size + (++index) * space_size);
- imgui_wrapper->text(_L("°"));
+ imgui_wrapper->text("°");
m_buffered_rotation = rotation;
if (is_relative_input) {
m_last_rotate_type = RotateType::Relative;
@@ -1091,7 +1091,7 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe
is_absolute_input = true;
}
ImGui::SameLine(caption_max + (++index_unit) * unit_size + (++index) * space_size);
- imgui_wrapper->text(_L("°"));
+ imgui_wrapper->text("°");
m_buffered_absolute_rotation = absolute_rotation;
if (is_absolute_input) {
m_last_rotate_type = RotateType::Absolute;
@@ -1247,7 +1247,7 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w
ImGui::PushItemWidth(unit_size);
ImGui::BBLInputDouble(label_scale_values[0][2], &scale[2], 0.0f, 0.0f, "%.2f");
ImGui::SameLine(caption_max + (++index_unit) *unit_size + (++index) * space_size);
- imgui_wrapper->text(_L("%"));
+ imgui_wrapper->text("%");
if (scale.x() > 0 && scale.y() > 0 && scale.z() > 0) {
m_buffered_scale = scale;
}
diff --git a/src/slic3r/GUI/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp
index bcfa6c9910..13d1e3ba8a 100644
--- a/src/slic3r/GUI/PrintOptionsDialog.cpp
+++ b/src/slic3r/GUI/PrintOptionsDialog.cpp
@@ -535,7 +535,7 @@ void PrinterPartsDialog::set_nozzle_type(wxCommandEvent& evt)
nozzle_diameter_checkbox->Clear();
for (int i = 0; i < diameter_list.size(); i++)
{
- nozzle_diameter_checkbox->Append(wxString::Format(_L("%.1f"), diameter_list[i]));
+ nozzle_diameter_checkbox->Append(wxString::Format("%.1f", diameter_list[i]));
}
nozzle_diameter_checkbox->SetSelection(0);
@@ -618,7 +618,7 @@ bool PrinterPartsDialog::Show(bool show)
for (int i = 0; i < diameter_list.size(); i++)
{
- nozzle_diameter_checkbox->Append( wxString::Format(_L("%.1f"), diameter_list[i]));
+ nozzle_diameter_checkbox->Append( wxString::Format("%.1f", diameter_list[i]));
if (diameter_list[i] == diameter) {
nozzle_diameter_checkbox->SetSelection(i);
}
diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp
index b4d461b811..de89b1dd81 100644
--- a/src/slic3r/GUI/StatusPanel.cpp
+++ b/src/slic3r/GUI/StatusPanel.cpp
@@ -333,12 +333,12 @@ void PrintingTaskPanel::create_panel(wxWindow* parent)
sizer_percent_icon->Add(0, 0, 1, wxEXPAND, 0);
- m_staticText_progress_percent = new wxStaticText(penel_text, wxID_ANY, L("0"), wxDefaultPosition, wxDefaultSize, 0);
+ m_staticText_progress_percent = new wxStaticText(penel_text, wxID_ANY, "0", wxDefaultPosition, wxDefaultSize, 0);
m_staticText_progress_percent->SetFont(::Label::Head_18);
m_staticText_progress_percent->SetMaxSize(wxSize(-1, FromDIP(20)));
m_staticText_progress_percent->SetForegroundColour(wxColour(0, 150, 136));
- m_staticText_progress_percent_icon = new wxStaticText(penel_text, wxID_ANY, L("%"), wxDefaultPosition, wxDefaultSize, 0);
+ m_staticText_progress_percent_icon = new wxStaticText(penel_text, wxID_ANY, "%", wxDefaultPosition, wxDefaultSize, 0);
m_staticText_progress_percent_icon->SetFont(::Label::Body_11);
m_staticText_progress_percent_icon->SetMaxSize(wxSize(-1, FromDIP(13)));
m_staticText_progress_percent_icon->SetForegroundColour(wxColour(0, 150, 136));
@@ -1270,7 +1270,7 @@ wxBoxSizer *StatusBasePanel::create_misc_control(wxWindow *parent)
/* create speed control */
m_switch_speed = new ImageSwitchButton(parent, m_bitmap_speed_active, m_bitmap_speed);
- m_switch_speed->SetLabels(_L("100%"), _L("100%"));
+ m_switch_speed->SetLabels("100%", "100%");
m_switch_speed->SetMinSize(MISC_BUTTON_2FAN_SIZE);
m_switch_speed->SetMaxSize(MISC_BUTTON_2FAN_SIZE);
m_switch_speed->SetPadding(FromDIP(3));
@@ -1403,7 +1403,7 @@ void StatusBasePanel::reset_temp_misc_control()
m_tempCtrl_bed->Enable(true);
// reset misc control
- m_switch_speed->SetLabels(_L("100%"), _L("100%"));
+ m_switch_speed->SetLabels("100%", "100%");
m_switch_speed->SetValue(false);
m_switch_lamp->SetLabels(_L("Lamp"), _L("Lamp"));
m_switch_lamp->SetValue(false);
@@ -3392,7 +3392,7 @@ void StatusPanel::axis_ctrl_e_hint(bool up_down)
{
if (ctrl_e_hint_dlg == nullptr) {
ctrl_e_hint_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_CANCEL, wxDefaultPosition, wxDefaultSize, wxCLOSE_BOX | wxCAPTION, true);
- ctrl_e_hint_dlg->update_text(_L("Please heat the nozzle to above 170 degree before loading or unloading filament."));
+ ctrl_e_hint_dlg->update_text(_L("Please heat the nozzle to above 170°C before loading or unloading filament."));
ctrl_e_hint_dlg->show_again_config_text = std::string("not_show_ectrl_hint");
}
if (up_down) {
diff --git a/src/slic3r/GUI/StepMeshDialog.cpp b/src/slic3r/GUI/StepMeshDialog.cpp
index 18caa82e73..0b1395d39d 100644
--- a/src/slic3r/GUI/StepMeshDialog.cpp
+++ b/src/slic3r/GUI/StepMeshDialog.cpp
@@ -251,7 +251,7 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file, double line
wxBoxSizer* mesh_face_number_sizer = new wxBoxSizer(wxHORIZONTAL);
wxStaticText *mesh_face_number_title = new wxStaticText(this, wxID_ANY, _L("Number of triangular facets") + ": ");
mesh_face_number_title->SetForegroundColour(StateColor::darkModeColorFor(FONT_COLOR));
- mesh_face_number_text = new wxStaticText(this, wxID_ANY, _L("0"));
+ mesh_face_number_text = new wxStaticText(this, wxID_ANY, "0");
mesh_face_number_text->SetForegroundColour(StateColor::darkModeColorFor(FONT_COLOR));
mesh_face_number_text->SetMinSize(wxSize(FromDIP(150), -1));
mesh_face_number_sizer->Add(mesh_face_number_title, 0, wxALIGN_LEFT);
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index 14b890ff00..7ab9fc6375 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -3585,7 +3585,7 @@ void TabFilament::build()
optgroup->append_single_option_line("filament_multitool_ramming_flow");
page = add_options_page(L("Dependencies"), "advanced");
- optgroup = page->new_optgroup(L("Profile dependencies"), "param_profile_dependencies");
+ optgroup = page->new_optgroup(L("Compatible printers"), "param_dependencies_printers");
create_line_with_widget(optgroup.get(), "compatible_printers", "", [this](wxWindow* parent) {
return compatible_widget_create(parent, m_compatible_printers);
});
@@ -3594,6 +3594,7 @@ void TabFilament::build()
option.opt.full_width = true;
optgroup->append_single_option_line(option);
+ optgroup = page->new_optgroup(L("Compatible process profiles"), "param_dependencies_presets");
create_line_with_widget(optgroup.get(), "compatible_prints", "", [this](wxWindow* parent) {
return compatible_widget_create(parent, m_compatible_prints);
});
@@ -5921,10 +5922,14 @@ void Tab::create_line_with_widget(ConfigOptionsGroup* optgroup, const std::strin
// Return a callback to create a Tab widget to mark the preferences as compatible / incompatible to the current printer.
wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &deps)
{
- deps.checkbox = new wxCheckBox(parent, wxID_ANY, _(L("All")));
- deps.checkbox->SetFont(Slic3r::GUI::wxGetApp().normal_font());
+ deps.checkbox = new ::CheckBox(parent, wxID_ANY);
wxGetApp().UpdateDarkUI(deps.checkbox, false, true);
+ deps.checkbox_title = new wxStaticText(parent, wxID_ANY, _L("All"));
+ deps.checkbox_title->SetFont(Label::Body_14);
+ deps.checkbox_title->SetForegroundColour(wxColour("#363636"));
+ wxGetApp().UpdateDarkUI(deps.checkbox_title, false, true);
+
// ORCA modernize button style
Button* btn = new Button(parent, _(L("Set")) + " " + dots);
btn->SetFont(Label::Body_14);
@@ -5948,18 +5953,43 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep
auto sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->Add((deps.checkbox), 0, wxALIGN_CENTER_VERTICAL);
+ sizer->Add((deps.checkbox_title), 0, wxALIGN_CENTER_VERTICAL);
+ sizer->Add(new wxStaticText(parent, wxID_ANY, " ")); // weirdly didnt apply AddSpacer or wxRIGHT border
sizer->Add((deps.btn), 0, wxALIGN_CENTER_VERTICAL);
- deps.checkbox->Bind(wxEVT_CHECKBOX, ([this, &deps](wxCommandEvent e)
- {
- deps.btn->Enable(! deps.checkbox->GetValue());
+ auto on_toggle = [this, &deps](const bool &state){
+ deps.checkbox->SetValue(state);
+ deps.btn->Enable(!state);
// All printers have been made compatible with this preset.
- if (deps.checkbox->GetValue())
+ if (state)
this->load_key_value(deps.key_list, std::vector {});
- this->get_field(deps.key_condition)->toggle(deps.checkbox->GetValue());
+ this->get_field(deps.key_condition)->toggle(state);
this->update_changed_ui();
- }) );
+ };
+ deps.checkbox_title->Bind(wxEVT_LEFT_DOWN,([this, &deps, on_toggle](wxMouseEvent e) {
+ if (e.GetEventType() == wxEVT_LEFT_DCLICK) return;
+ on_toggle(!deps.checkbox->GetValue());
+ e.Skip();
+ }));
+
+ deps.checkbox_title->Bind(wxEVT_LEFT_DCLICK,([this, &deps, on_toggle](wxMouseEvent e) {
+ on_toggle(!deps.checkbox->GetValue());
+ e.Skip();
+ }));
+
+ deps.checkbox->Bind(wxEVT_TOGGLEBUTTON, ([this, on_toggle](wxCommandEvent e) {
+ on_toggle(e.IsChecked());
+ e.Skip();
+ }), deps.checkbox->GetId());
+
+ if (deps.checkbox){
+ bool is_empty = m_config->option(deps.key_list)->values.empty();
+ deps.checkbox->SetValue(is_empty);
+ deps.btn->Enable(!is_empty);
+ }
+
+ /*
if (m_compatible_printers.checkbox) {
bool is_empty = m_config->option("compatible_printers")->values.empty();
m_compatible_printers.checkbox->SetValue(is_empty);
@@ -5971,6 +6001,7 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep
m_compatible_prints.checkbox->SetValue(is_empty);
is_empty ? m_compatible_prints.btn->Disable() : m_compatible_prints.btn->Enable();
}
+ */
deps.btn->Bind(wxEVT_BUTTON, ([this, parent, &deps](wxCommandEvent e)
{
diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp
index 9161740239..2eac244b18 100644
--- a/src/slic3r/GUI/Tab.hpp
+++ b/src/slic3r/GUI/Tab.hpp
@@ -164,7 +164,8 @@ protected:
struct PresetDependencies {
Preset::Type type = Preset::TYPE_INVALID;
- wxCheckBox *checkbox = nullptr;
+ ::CheckBox* checkbox = nullptr;
+ wxStaticText* checkbox_title = nullptr;
Button *btn = nullptr;
std::string key_list; // "compatible_printers"
std::string key_condition;
diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp
index a82d4bfd3c..05aec78445 100644
--- a/src/slic3r/GUI/Widgets/AMSItem.cpp
+++ b/src/slic3r/GUI/Widgets/AMSItem.cpp
@@ -796,7 +796,7 @@ void AMSLib::render_extra_text(wxDC& dc)
auto tsize = dc.GetMultiLineTextExtent("?");
auto pot = wxPoint(0, 0);
pot = wxPoint((libsize.x - tsize.x) / 2 + FromDIP(2), (libsize.y - tsize.y) / 2 - FromDIP(5));
- dc.DrawText(L("?"), pot);
+ dc.DrawText("?", pot);
}
else {
auto tsize = dc.GetMultiLineTextExtent(m_info.material_name);
@@ -840,9 +840,9 @@ void AMSLib::render_extra_text(wxDC& dc)
}
if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_EMPTY) {
- auto tsize = dc.GetMultiLineTextExtent(_L("/"));
+ auto tsize = dc.GetMultiLineTextExtent("/");
auto pot = wxPoint((libsize.x - tsize.x) / 2 + FromDIP(2), (libsize.y - tsize.y) / 2 + FromDIP(3));
- dc.DrawText(_L("/"), pot);
+ dc.DrawText("/", pot);
}
}
@@ -895,7 +895,7 @@ void AMSLib::render_generic_text(wxDC &dc)
else {
pot = wxPoint((libsize.x - tsize.x) / 2, (libsize.y - tsize.y) / 2 + FromDIP(3));
}
- dc.DrawText(L("?"), pot);
+ dc.DrawText("?", pot);
}
else {