From 0493ed03a517bfb624e0a6aa3f40ac55502dc485 Mon Sep 17 00:00:00 2001 From: yw4z Date: Wed, 15 Oct 2025 12:34:08 +0300 Subject: [PATCH] Preferences dialog redesign / improvements / fixes (#10665) * init * update * update * update * update * tooltips * update * fix tab colors * update * Update Preferences.cpp * Update Preferences.cpp * Update Preferences.cpp * Update Preferences.cpp * update "Auto backup" and "Downloads folder" * cleanup * update * update * update * update * update * update * Update Preferences.cpp * update * update * update * update * Update MainFrame.cpp * Update text.js * log level selection * move NetworkTestDialog to cpp * Update Preferences.cpp * Update Preferences.hpp * cleanup create_item_switch --------- Co-authored-by: Noisyfox --- localization/i18n/OrcaSlicer.pot | 37 +- localization/i18n/ca/OrcaSlicer_ca.po | 43 +- localization/i18n/cs/OrcaSlicer_cs.po | 39 +- localization/i18n/de/OrcaSlicer_de.po | 54 +- localization/i18n/en/OrcaSlicer_en.po | 39 +- localization/i18n/es/OrcaSlicer_es.po | 41 +- localization/i18n/fr/OrcaSlicer_fr.po | 42 +- localization/i18n/hu/OrcaSlicer_hu.po | 37 +- localization/i18n/it/OrcaSlicer_it.po | 39 +- localization/i18n/ja/OrcaSlicer_ja.po | 37 +- localization/i18n/ko/OrcaSlicer_ko.po | 39 +- localization/i18n/lt/OrcaSlicer_lt.po | 38 +- localization/i18n/nl/OrcaSlicer_nl.po | 41 +- localization/i18n/pl/OrcaSlicer_pl.po | 39 +- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 55 +- localization/i18n/ru/OrcaSlicer_ru.po | 45 +- localization/i18n/sv/OrcaSlicer_sv.po | 41 +- localization/i18n/tr/OrcaSlicer_tr.po | 55 +- localization/i18n/uk/OrcaSlicer_uk.po | 38 +- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 43 +- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 41 +- resources/images/loop.svg | 1 + src/slic3r/GUI/Preferences.cpp | 1295 +++++++++---------- src/slic3r/GUI/Preferences.hpp | 101 +- 24 files changed, 1267 insertions(+), 1013 deletions(-) create mode 100644 resources/images/loop.svg diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index b618d4ecd6..876a024b51 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -6368,10 +6368,10 @@ msgstr "" msgid "Others" msgstr "" -msgid "Login Region" +msgid "Login region" msgstr "" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6379,10 +6379,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6419,7 +6422,7 @@ msgstr "" msgid "Home" msgstr "" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6503,14 +6506,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6581,7 +6587,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6593,16 +6602,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "" msgid "" @@ -6618,10 +6627,13 @@ msgstr "" msgid "Downloads" msgstr "" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "" msgid "Develop mode" @@ -15060,6 +15072,9 @@ msgstr "" msgid "Network Test" msgstr "" +msgid "Network test" +msgstr "" + msgid "Start Test Multi-Thread" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 14f211cea8..fb9ad1e93e 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -6878,11 +6878,11 @@ msgstr "Nord-America" msgid "Others" msgstr "Altres" -msgid "Login Region" +msgid "Login region" msgstr "Regió d'inici de sessió" -msgid "Stealth Mode" -msgstr "Mode Silenciós" +msgid "Stealth mode" +msgstr "Mode silenciós" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " @@ -6892,10 +6892,13 @@ msgstr "" "usuaris que no utilitzen màquines BBL o només utilitzen el mode LAN poden " "activar aquesta funció de manera segura." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Habilita el plugin de xarxa" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6939,7 +6942,7 @@ msgstr "" msgid "Home" msgstr "Inici" -msgid "Default Page" +msgid "Default page" msgstr "Pàgina predeterminada" msgid "Set the page opened on startup." @@ -7042,15 +7045,18 @@ msgstr "" "Si està habilitada, l'Orca recordarà i canviarà automàticament la " "configuració del filament/procés per a cada impressora." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Gestió multidispositiu(Entra en vigor després de reiniciar Studio)." +msgid "Multi device management" +msgstr "Gestió multidispositiu" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7130,8 +7136,11 @@ msgstr "Pregunta sempre" msgid "Load Geometry Only" msgstr "Carregar només geometria" -msgid "Load Behaviour" -msgstr "Carregar Comportament" +msgid "Load behaviour" +msgstr "Carregar comportament" + +msgid "Behaviour" +msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" @@ -7144,16 +7153,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Esborrar la meva elecció sobre els projectes no desats." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "No hi ha avisos en carregar 3MF amb Codis-G modificats" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Còpia de seguretat automàtica" msgid "" @@ -7171,10 +7180,13 @@ msgstr "Freqüència de còpia de seguretat en segons." msgid "Downloads" msgstr "Descàrregues" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Mode fosc" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Habilitar el mode fosc" msgid "Develop mode" @@ -17542,6 +17554,9 @@ msgstr "Esborrar entrada" msgid "Network Test" msgstr "Prova de Xarxa" +msgid "Network test" +msgstr "Prova de Xarxa" + msgid "Start Test Multi-Thread" msgstr "Inicia la prova Multi-Thread" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index c60c571d67..87d4bcb599 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -6736,21 +6736,24 @@ msgstr "Severní Amerika" msgid "Others" msgstr "Ostatní" -msgid "Login Region" +msgid "Login region" msgstr "Región přihlášení" -msgid "Stealth Mode" -msgstr "Tajný Režim" +msgid "Stealth mode" +msgstr "Tajný režim" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6790,7 +6793,7 @@ msgstr "" msgid "Home" msgstr "Home" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6878,14 +6881,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6963,7 +6969,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6975,16 +6984,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Vymazat moje volby pro neuložené projekty." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatické zálohování" msgid "" @@ -7001,10 +7010,13 @@ msgstr "Doba zálohování v sekundách." msgid "Downloads" msgstr "Stahování" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Tmavý režim" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Povolit tmavý režim" msgid "Develop mode" @@ -16332,6 +16344,9 @@ msgstr "Smazat vstup" msgid "Network Test" msgstr "" +msgid "Network test" +msgstr "" + msgid "Start Test Multi-Thread" msgstr "" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 37cc4b4e07..69271ec307 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -6969,11 +6969,11 @@ msgstr "Nordamerika" msgid "Others" msgstr "Sonstiges" -msgid "Login Region" -msgstr "Login-Region" +msgid "Login region" +msgstr "Login region" -msgid "Stealth Mode" -msgstr "Unsichtbarer Modus" +msgid "Stealth mode" +msgstr "Unsichtbarer modus" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " @@ -6983,13 +6983,14 @@ msgstr "" "Benutzer, die keine BBL-Maschinen verwenden oder nur den LAN-Modus " "verwenden, können diese Funktion sicher aktivieren." +msgid "Network plugin" +msgstr "Netzwerk-Plugin" + msgid "Enable network plugin" msgstr "Netzwerk-Plugin aktivieren" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "" -"Verwenden Sie das alte Netzwerk-Plugin (wirkt sich nach dem Neustart von " -"Orca aus)" +msgid "Use legacy network plugin" +msgstr "Verwenden Sie das alte Netzwerk-Plugin" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -7032,7 +7033,7 @@ msgstr "" msgid "Home" msgstr "Startseite" -msgid "Default Page" +msgid "Default page" msgstr "Standardseite" msgid "Set the page opened on startup." @@ -7127,7 +7128,7 @@ msgstr "" "Wenn aktiviert, merkt sich Orca die Filament-/Prozesskonfiguration für jeden " "Drucker und wechselt automatisch." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "Zeige den Dialog für die Parameter-Einstellungen des Step-Netzes." msgid "" @@ -7135,8 +7136,11 @@ msgid "" msgstr "" "Wenn aktiviert, wird während des Imports von STEP-Dateien ein Dialogfeld " -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Multi-Geräte-Verwaltung (nach Neustart von Studio wirksam)." +msgid "Multi device management" +msgstr "Multi-Geräte-Verwaltung" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7214,9 +7218,12 @@ msgstr "Immer fragen" msgid "Load Geometry Only" msgstr "Nur Geometrie laden" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Ladeverhalten" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "sollen Drucker/Filament/Prozess Einstellungen geladen werden beim Öffnen " @@ -7228,19 +7235,18 @@ msgstr "Maximum zuletzt verwendeter Dateien" msgid "Maximum count of recent files" msgstr "Maximale Anzahl der zuletzt verwendeten Dateien" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" -"Modell-Dateien (stl/step) zur Liste der zuletzt verwendeten Dateien " -"hinzufügen." +"Modell-Dateien STL/STEP zur Liste der zuletzt verwendeten Dateien hinzufügen" msgid "Clear my choice on the unsaved projects." msgstr "Meine Auswahl für nicht gespeicherte Projekte löschen." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Keine Warnungen beim Laden von 3MF mit modifizierten G-Codes" -msgid "Auto-Backup" -msgstr "Automatische Datensicherung" +msgid "Auto backup" +msgstr "Automatische datensicherung" msgid "" "Backup your project periodically for restoring from the occasional crash." @@ -7257,11 +7263,14 @@ msgstr "Die Zeitdauer für die Sicherung in Sekunden." msgid "Downloads" msgstr "Downloads" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Dunkler Modus" -msgid "Enable Dark mode" -msgstr "Dunklen Modus aktivieren" +msgid "Enable dark mode" +msgstr "Dunklen modus aktivieren" msgid "Develop mode" msgstr "Entwicklermodus" @@ -17890,6 +17899,9 @@ msgstr "Eingabe löschen" msgid "Network Test" msgstr "Netzwerktest" +msgid "Network test" +msgstr "Netzwerktest" + msgid "Start Test Multi-Thread" msgstr "Starten Sie den Test mit mehreren Threads" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index e08e0a15b3..87838c91db 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -6480,10 +6480,10 @@ msgstr "" msgid "Others" msgstr "" -msgid "Login Region" +msgid "Login region" msgstr "" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6491,10 +6491,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6531,7 +6534,7 @@ msgstr "" msgid "Home" msgstr "" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6615,14 +6618,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6699,7 +6705,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6711,16 +6720,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "" msgid "" @@ -6738,11 +6747,14 @@ msgstr "" msgid "Downloads" msgstr "" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "" -msgid "Enable Dark mode" -msgstr "Enable Dark Mode" +msgid "Enable dark mode" +msgstr "Enable dark Mode" msgid "Develop mode" msgstr "Developer mode" @@ -15503,6 +15515,9 @@ msgstr "" msgid "Network Test" msgstr "" +msgid "Network test" +msgstr "" + msgid "Start Test Multi-Thread" msgstr "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index eee318dcd4..b368bea44c 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -6900,10 +6900,10 @@ msgstr "América del Norte" msgid "Others" msgstr "Otros" -msgid "Login Region" +msgid "Login region" msgstr "Región de inicio de sesión" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Modo invisible" msgid "" @@ -6914,10 +6914,13 @@ msgstr "" "Los usuarios que no utilicen máquinas BBL o que solo utilicen el modo LAN " "pueden activar esta función de forma segura." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Activar el plugin de red" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6961,7 +6964,7 @@ msgstr "" msgid "Home" msgstr "Página de Inicio" -msgid "Default Page" +msgid "Default page" msgstr "Página por defecto" msgid "Set the page opened on startup." @@ -7060,15 +7063,18 @@ msgstr "" "Si está activada, Orca recordará y cambiará la configuración de archivos/" "procesos para cada impresora automáticamente." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Gestión multidispositivo (surte efecto tras reiniciar Orca)." +msgid "Multi device management" +msgstr "Gestión multidispositivo" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7148,7 +7154,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -7160,16 +7169,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Limpiar mi elección de proyectos no guardados." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "No avisar cuando cargue archivos 3MF con G-Codes modificados" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Copia de seguridad automática" msgid "" @@ -7187,11 +7196,14 @@ msgstr "El periodo de copia de seguridad en segundos." msgid "Downloads" msgstr "Descargas" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Modo Oscuro" -msgid "Enable Dark mode" -msgstr "Activar Modo Oscuro" +msgid "Enable dark mode" +msgstr "Activar modo oscuro" msgid "Develop mode" msgstr "Modo de desarrollador" @@ -17405,6 +17417,9 @@ msgstr "Borrar original" msgid "Network Test" msgstr "Prueba de Red" +msgid "Network test" +msgstr "Prueba de red" + msgid "Start Test Multi-Thread" msgstr "Iniciar Pruebas Multitarea" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 644babb0e7..89671e8f50 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6938,10 +6938,10 @@ msgstr "Amérique du Nord" msgid "Others" msgstr "Autre" -msgid "Login Region" +msgid "Login region" msgstr "Région d'origine" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Mode privé" msgid "" @@ -6953,10 +6953,13 @@ msgstr "" "utilisent uniquement le mode LAN peuvent activer cette fonction en toute " "sécurité." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Activer le plug-in réseau" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -7000,7 +7003,7 @@ msgstr "" msgid "Home" msgstr "Accueil" -msgid "Default Page" +msgid "Default page" msgstr "Page par défaut" msgid "Set the page opened on startup." @@ -7104,15 +7107,18 @@ msgstr "" "Si cette option est activée, Orca se souviendra de la configuration du " "filament/processus pour chaque imprimante et la modifiera automatiquement." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Gestion multi-appareils (prend effet après le redémarrage d’Orca)." +msgid "Multi device management" +msgstr "Gestion multi appareils" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7192,9 +7198,12 @@ msgstr "Toujours demander" msgid "Load Geometry Only" msgstr "Charger uniquement la géométrie" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Comportement du chargement" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Les paramètres de l’imprimante/du filament/du processus doivent-ils être " @@ -7206,17 +7215,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Efface mon choix sur les projets non enregistrés." -msgid "No warnings when loading 3MF with modified G-code" -msgstr "" -"Pas d'avertissement lors du chargement de 3MF avec des G-codes modifiés" +msgid "Don't warn when loading 3MF with modified G-code" +msgstr "Pas d'avertissement lors du chargement de 3MF avec des G-codes modifiés" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Sauvegarde automatique" msgid "" @@ -7234,10 +7242,13 @@ msgstr "Période de sauvegarde en secondes." msgid "Downloads" msgstr "Téléchargements" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Mode Sombre" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Activer le mode Sombre" msgid "Develop mode" @@ -17769,6 +17780,9 @@ msgstr "Supprimer l’objet" msgid "Network Test" msgstr "Test du réseau" +msgid "Network test" +msgstr "Test du réseau" + msgid "Start Test Multi-Thread" msgstr "Démarrer le test multithread" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index f0fb387e07..1ef4398de0 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -6639,10 +6639,10 @@ msgstr "Észak-Amerika" msgid "Others" msgstr "Egyéb" -msgid "Login Region" +msgid "Login region" msgstr "Régió" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6650,10 +6650,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6694,7 +6697,7 @@ msgstr "" msgid "Home" msgstr "Haza" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6785,14 +6788,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6871,7 +6877,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6883,16 +6892,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatikus biztonsági mentés" msgid "" @@ -6908,10 +6917,13 @@ msgstr "" msgid "Downloads" msgstr "Letöltések" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Sötét mód" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Sötét mód engedélyezése" msgid "Develop mode" @@ -15961,6 +15973,9 @@ msgstr "Bemenet törlése" msgid "Network Test" msgstr "Hálózati teszt" +msgid "Network test" +msgstr "Hálózati teszt" + msgid "Start Test Multi-Thread" msgstr "Teszt indítása több szálon" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 6f0b1aea45..22b7c5735c 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -6899,10 +6899,10 @@ msgstr "Nord America" msgid "Others" msgstr "Altro" -msgid "Login Region" +msgid "Login region" msgstr "Regione di accesso" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Modalità invisibile" msgid "" @@ -6913,10 +6913,13 @@ msgstr "" "utenti che non utilizzano macchine BBL o che utilizzano la modalità Solo LAN " "possono attivare questa funzione in tutta sicurezza." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Abilita modulo di rete" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6959,7 +6962,7 @@ msgstr "" msgid "Home" msgstr "Pagina iniziale" -msgid "Default Page" +msgid "Default page" msgstr "Pagina predefinita" msgid "Set the page opened on startup." @@ -7059,15 +7062,18 @@ msgstr "" "Se abilitato, Orca ricorderà e cambierà automaticamente la configurazione " "del filamento/processo per ciascuna stampante." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Gestione multi-dispositivo (avrà effetto dopo il riavvio di Orca)." +msgid "Multi device management" +msgstr "Gestione multi-dispositivo" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7146,9 +7152,12 @@ msgstr "Chiedi sempre" msgid "Load Geometry Only" msgstr "Carica solo la geometria" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Comportamento di caricamento" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Quando si apre un file .3mf, è necessario caricare le impostazioni della " @@ -7160,16 +7169,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Cancella la mia scelta sui progetti non salvati." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Nessun avviso durante il caricamento di 3MF con G-code modificati" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Backup automatico" msgid "" @@ -7187,10 +7196,13 @@ msgstr "Periodo di backup in secondi." msgid "Downloads" msgstr "Scaricati" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Modalità scura" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Attiva modalità Scura" msgid "Develop mode" @@ -17676,6 +17688,9 @@ msgstr "Elimina input" msgid "Network Test" msgstr "Test di rete" +msgid "Network test" +msgstr "Test di rete" + msgid "Start Test Multi-Thread" msgstr "Avvia test multi-thread" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 1cfd164522..11eb2e4553 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -6512,10 +6512,10 @@ msgstr "北米" msgid "Others" msgstr "その他" -msgid "Login Region" +msgid "Login region" msgstr "地域" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6523,10 +6523,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6563,7 +6566,7 @@ msgstr "" msgid "Home" msgstr "ホーム" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6651,14 +6654,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6729,7 +6735,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6741,16 +6750,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "自動バックアップ" msgid "" @@ -6766,10 +6775,13 @@ msgstr "" msgid "Downloads" msgstr "ダウンロード" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "ダークモード" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "ダークモードを有効" msgid "Develop mode" @@ -15610,6 +15622,9 @@ msgstr "" msgid "Network Test" msgstr "" +msgid "Network test" +msgstr "" + msgid "Start Test Multi-Thread" msgstr "" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index eabc193bd6..314df57fa9 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -6684,10 +6684,10 @@ msgstr "북아메리카" msgid "Others" msgstr "기타" -msgid "Login Region" +msgid "Login region" msgstr "로그인 지역" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "스텔스 모드" msgid "" @@ -6697,10 +6697,13 @@ msgstr "" "이 기능은 뱀부의 클라우드 서비스로의 데이터 전송을 중지합니다. BBL 머신을 사" "용하지 않거나 LAN 모드만 사용하는 사용자는 이 기능을 안전하게 켤 수 있습니다." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "네트워크 플러그인 사용" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6742,7 +6745,7 @@ msgstr "" msgid "Home" msgstr "홈" -msgid "Default Page" +msgid "Default page" msgstr "기본 페이지" msgid "Set the page opened on startup." @@ -6835,15 +6838,18 @@ msgstr "" "활성화하면 Orca는 각 프린터의 필라멘트/프로세스 구성을 자동으로 기억하고 전환" "합니다." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "다중 장치 관리 (Orca를 다시 시작한 후 적용됨)." +msgid "Multi device management" +msgstr "다중 장치 관리" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -6918,9 +6924,12 @@ msgstr "항상 물어보세요" msgid "Load Geometry Only" msgstr "형상만 로드" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "행동 로드" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr ".3mf를 열 때 프린터/필라멘트/프로세스 설정이 로드되어야 합니까?" @@ -6930,16 +6939,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "저장되지 않은 프로젝트에서 내 선택을 지웁니다." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "수정된 Gcode로 3MF를 로드할 때 경고 없음" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "자동 백업" msgid "" @@ -6955,10 +6964,13 @@ msgstr "백업 기간(초)입니다." msgid "Downloads" msgstr "다운로드" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "다크 모드" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "다크 모드 사용" msgid "Develop mode" @@ -16741,6 +16753,9 @@ msgstr "입력객체 삭제" msgid "Network Test" msgstr "네트워크 테스트" +msgid "Network test" +msgstr "네트워크 테스트" + msgid "Start Test Multi-Thread" msgstr "멀티스레드 테스트 시작" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index c4e2e8ded3..65f6f0490f 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -6829,10 +6829,10 @@ msgstr "Šiaurės Amerika" msgid "Others" msgstr "Kita" -msgid "Login Region" +msgid "Login region" msgstr "Prisijungimo regionas" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Slaptas režimas" msgid "" @@ -6843,10 +6843,13 @@ msgstr "" "paslaugas. Šią funkciją gali drąsiai įjungti naudotojai, kurie nesinaudoja " "„BBL“ įrenginiais arba naudoja tik LAN režimą." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Įjungti tinklo papildinį" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6889,7 +6892,7 @@ msgstr "" msgid "Home" msgstr "Pradžia" -msgid "Default Page" +msgid "Default page" msgstr "Numatytas puslapis" msgid "Set the page opened on startup." @@ -6990,16 +6993,18 @@ msgstr "" "Jei įjungta, Orca Slicer automatiškai prisimins ir perjungs gijos ir proceso " "konfigūracijas kiekvienams spausdintuvui." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "Kelių įrenginių valdymas" + +msgid "(Requires restart)" msgstr "" -"Kelių įrenginių valdymas (įsigalios tik po programos paleidimo iš naujo)." msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7079,9 +7084,12 @@ msgstr "Visada klausti" msgid "Load Geometry Only" msgstr "Įkelti tik geometriją" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Įkelti elgseną" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Ar atidarant .3mf failą reikia įkelti spausdintuvo / gijų / proceso " @@ -7093,16 +7101,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Išvalyti mano pasirinkimus neišsaugotuose projektuose." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Nerodyti perspėjimų įkeliant 3MF su modifikuotais G-kodais" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatinis atsarginis kopijavimas" msgid "" @@ -7120,10 +7128,13 @@ msgstr "Atsarginės kopijos kūrimo laikotarpis sekundėmis." msgid "Downloads" msgstr "Atsisuntimai" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Tamsusis režimas" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Įjungti tamsųjį režimą" msgid "Develop mode" @@ -17304,6 +17315,9 @@ msgstr "Ištrinti įvestį" msgid "Network Test" msgstr "Tinklo testas" +msgid "Network test" +msgstr "Tinklo testas" + msgid "Start Test Multi-Thread" msgstr "Pradėti bandymą su keliais srautais" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 4891f995f8..086d5d6234 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -6714,11 +6714,11 @@ msgstr "Noord-Amerika" msgid "Others" msgstr "Andere" -msgid "Login Region" +msgid "Login region" msgstr "Inlogregio" -msgid "Stealth Mode" -msgstr "Stealth-modus" +msgid "Stealth mode" +msgstr "Stealth modus" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " @@ -6728,10 +6728,13 @@ msgstr "" "Gebruikers die geen BambuLab-machines gebruiken of alleen de LAN-modus " "gebruiken, kunnen deze functie veilig inschakelen." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Netwerkplug-in inschakelen" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6774,7 +6777,7 @@ msgstr "" msgid "Home" msgstr "Thuis" -msgid "Default Page" +msgid "Default page" msgstr "Startpagina" msgid "Set the page opened on startup." @@ -6879,15 +6882,18 @@ msgstr "" "Als dit is ingeschakeld, onthoudt Orca automatisch de filament-/" "procesconfiguratie voor elke printer en schakelt deze automatisch om." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Beheer van meerdere apparaten (Werkt nadat Orca opnieuw is opgestart)." +msgid "Multi device management" +msgstr "Beheer van meerdere apparaten" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -6965,7 +6971,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6977,16 +6986,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Wis keuze voor niet-opgeslagen projecten." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Geen waarschuwingen bij het laden van 3MF met aangepaste G-codes" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatisch een back-up maken" msgid "" @@ -7004,10 +7013,13 @@ msgstr "De periode van de back-up in seconden." msgid "Downloads" msgstr "" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Donkere modus" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Donkere modus inschakelen" msgid "Develop mode" @@ -16197,6 +16209,9 @@ msgstr "Invoer verwijderen" msgid "Network Test" msgstr "Netwerktest" +msgid "Network test" +msgstr "Netwerktest" + msgid "Start Test Multi-Thread" msgstr "Multi-thread test starten" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index a76934bf0a..326758a4ba 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -6857,10 +6857,10 @@ msgstr "Ameryka Północna" msgid "Others" msgstr "Inne" -msgid "Login Region" +msgid "Login region" msgstr "Region logowania" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Tryb niewidoczny" msgid "" @@ -6871,10 +6871,13 @@ msgstr "" "korzystają z maszyn BBL lub używają trybu „tylko LAN”, mogą bezpiecznie " "włączyć tę funkcję." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Włączenie wtyczki sieciowej" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6917,7 +6920,7 @@ msgstr "" msgid "Home" msgstr "Strona główna" -msgid "Default Page" +msgid "Default page" msgstr "Domyślna strona" msgid "Set the page opened on startup." @@ -7013,15 +7016,18 @@ msgstr "" "Automatycznie zapamiętuje i przełącza konfigurację filamentu/procesu dla " "każdej drukarki." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Obsługiwanie wielu urządzeń (wymaga ponownego uruchomienia programu)" +msgid "Multi device management" +msgstr "Obsługiwanie wielu urządzeń" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7094,9 +7100,12 @@ msgstr "Pytanie zawsze" msgid "Load Geometry Only" msgstr "Wczytanie tylko geometrii" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Zachowanie przy wczytywaniu" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Określa czy ustawienia drukarki/filamentu/procesu mają być wczytywane " @@ -7108,16 +7117,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Wyczyść wybory na niezapisanych projektach." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Brak ostrzeżeń przy wczytywaniu plików 3MF z zmodyfikowanymi G-code" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Automatyczne tworzenie kopii zapasowej" msgid "" @@ -7135,10 +7144,13 @@ msgstr "Określa okres kopii zapasowej w sekundach." msgid "Downloads" msgstr "Położenie pobierania" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Tryb ciemny" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Włączenie trybu ciemnego" msgid "Develop mode" @@ -17432,6 +17444,9 @@ msgstr "Usuń wejście" msgid "Network Test" msgstr "Test sieci" +msgid "Network test" +msgstr "Test sieci" + msgid "Start Test Multi-Thread" msgstr "Rozpocznij test wielowątkowy" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index f7add0d510..15531b4a42 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -6878,11 +6878,11 @@ msgstr "América do Norte" msgid "Others" msgstr "Outros" -msgid "Login Region" -msgstr "Região de Login" +msgid "Login region" +msgstr "Região de login" -msgid "Stealth Mode" -msgstr "Modo Oculto" +msgid "Stealth mode" +msgstr "Modo oculto" msgid "" "This stops the transmission of data to Bambu's cloud services. Users who " @@ -6892,11 +6892,14 @@ msgstr "" "Os usuários que não usam máquinas BBL ou usar modo LAN só podem ativar esta " "função com segurança." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Ativar plugin de rede" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "Usar o plugin de rede legado (entra em vigor após reiniciar o Orca)" +msgid "Use legacy network plugin" +msgstr "Usar o plugin de rede legado" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -6940,8 +6943,8 @@ msgstr "" msgid "Home" msgstr "Início" -msgid "Default Page" -msgstr "Página Padrão" +msgid "Default page" +msgstr "Página padrão" msgid "Set the page opened on startup." msgstr "Define a página aberta na inicialização." @@ -7035,17 +7038,18 @@ msgstr "" "Se ativo, Orca vai lembrar e alternar a configuração de filamento/processo " "para cada impressora automaticamente." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "Gerenciamento de multi dispositivos" + +msgid "(Requires restart)" msgstr "" -"Gerenciamento de Multi-dispositivos (Entra em vigor após reiniciar o " -"OrcaSlicer)." msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7123,8 +7127,11 @@ msgstr "Perguntar Sempre" msgid "Load Geometry Only" msgstr "Carregar Apenas Geometria" -msgid "Load Behaviour" -msgstr "Comportamento de Carregamento" +msgid "Load behaviour" +msgstr "Comportamento de carregamento" + +msgid "Behaviour" +msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" @@ -7137,17 +7144,17 @@ msgstr "Máximo de arquivos recentes" msgid "Maximum count of recent files" msgstr "Contagem máxima de arquivos recentes" -msgid "Add model files (stl/step) to recent file list." -msgstr "Adicionar arquivos de modelo (stl/step) à lista de arquivos recentes." +msgid "Add STL/STEP files to recent files list" +msgstr "Adicionar arquivos de modelo STL/STEP à lista de arquivos recentes" msgid "Clear my choice on the unsaved projects." msgstr "Limpar minha escolha nos projetos não salvos." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Sem avisos ao carregar 3MF com G-code modificado" -msgid "Auto-Backup" -msgstr "Backup Automático" +msgid "Auto backup" +msgstr "Backup automático" msgid "" "Backup your project periodically for restoring from the occasional crash." @@ -7164,11 +7171,14 @@ msgstr "O período de backup em segundos." msgid "Downloads" msgstr "Transferências" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Modo Escuro" -msgid "Enable Dark mode" -msgstr "Ativar Modo Escuro" +msgid "Enable dark mode" +msgstr "Ativar modo escuro" msgid "Develop mode" msgstr "Modo de Desenvolvimento" @@ -17671,6 +17681,9 @@ msgstr "Excluir entrada" msgid "Network Test" msgstr "Teste de Rede" +msgid "Network test" +msgstr "Teste de Rede" + msgid "Start Test Multi-Thread" msgstr "Iniciar Teste Multi-Thread" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index b3b8c231bc..641aa2231d 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -6937,10 +6937,10 @@ msgstr "Северная Америка" msgid "Others" msgstr "Прочее" -msgid "Login Region" +msgid "Login region" msgstr "Регион входа" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Режим конфиденциальности (отключение телеметрии Bambulab)" msgid "" @@ -6951,10 +6951,13 @@ msgstr "" "которые не используют принтеры BBL или используют режим «Только LAN», могут " "безопасно включить эту функцию." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Включить сетевой плагин" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6999,10 +7002,8 @@ msgstr "" msgid "Home" msgstr "Home" -msgid "Default Page" -msgstr "" -"Страница \n" -"по умолчанию" +msgid "Default page" +msgstr "Страница по умолчанию" msgid "Set the page opened on startup." msgstr "Задание страницы, открываемой при запуске приложения." @@ -7113,7 +7114,7 @@ msgstr "" "с профилем пластиковой нити и процессом печати, выставленными вами в " "последний раз." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "Показывать диалоговое окно настройки сетки при импорте STEP файла" msgid "" @@ -7122,8 +7123,11 @@ msgstr "" "Если включено, во время импорта STEP файла появится диалоговое окно настроек " "параметров импорта." -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "Управление несколькими устройствами (требуется перезапуск программы)" +msgid "Multi device management" +msgstr "Управление несколькими устройствами" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7206,10 +7210,11 @@ msgid "Load Geometry Only" msgstr "Загружать только геометрию" # нее влезает Поведение при открытии -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "Поведение при открытии" + +msgid "Behaviour" msgstr "" -"Поведение \n" -"при открытии" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" @@ -7222,7 +7227,7 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" # ??? Сбросить мой выбор действия для проектов, Сбросить запрос о несохранённых изменениях для проекта при закрытии программы @@ -7232,10 +7237,10 @@ msgstr "" "при запросе о несохранённых \n" "изменениях в проекте." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Отключить предупреждения при загрузке 3MF с модифицированным G-кодом" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Автосоздание резервной копии" msgid "" @@ -7253,10 +7258,13 @@ msgstr "Время резервного копирования в секунда msgid "Downloads" msgstr "Загрузки" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Тёмная тема" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Включить тёмную тему" msgid "Develop mode" @@ -17843,6 +17851,9 @@ msgstr "Удалить исходные" msgid "Network Test" msgstr "Проверка сети" +msgid "Network test" +msgstr "Проверка сети" + msgid "Start Test Multi-Thread" msgstr "Запуск многопоточного теста" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index b8a40711c6..279b00e29d 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -6631,10 +6631,10 @@ msgstr "Nordamerika" msgid "Others" msgstr "Andra" -msgid "Login Region" -msgstr "Logga in Region" +msgid "Login region" +msgstr "Logga in region" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "" msgid "" @@ -6642,10 +6642,13 @@ msgid "" "don't use BBL machines or use LAN mode only can safely turn on this function." msgstr "" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6685,7 +6688,7 @@ msgstr "" msgid "Home" msgstr "" -msgid "Default Page" +msgid "Default page" msgstr "" msgid "Set the page opened on startup." @@ -6774,14 +6777,17 @@ msgid "" "each printer automatically." msgstr "" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "" + +msgid "(Requires restart)" msgstr "" msgid "" @@ -6854,7 +6860,10 @@ msgstr "" msgid "Load Geometry Only" msgstr "" -msgid "Load Behaviour" +msgid "Load behaviour" +msgstr "" + +msgid "Behaviour" msgstr "" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" @@ -6866,17 +6875,17 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Rensa mitt val för de osparade projekten." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "" -msgid "Auto-Backup" -msgstr "Auto Säkerhetskopiera" +msgid "Auto backup" +msgstr "Auto säkerhetskopiera" msgid "" "Backup your project periodically for restoring from the occasional crash." @@ -6893,10 +6902,13 @@ msgstr "Säkerhetskopieringens varaktighet i sekunder." msgid "Downloads" msgstr "Nedladdningar" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Mörkt Läge" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Aktivera mörkt läge" msgid "Develop mode" @@ -15867,6 +15879,9 @@ msgstr "Ta bort inmatning" msgid "Network Test" msgstr "Nätverkstest" +msgid "Network test" +msgstr "Nätverkstest" + msgid "Start Test Multi-Thread" msgstr "Börja testa flera trådar" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index c71b461a70..1361addb6b 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -6812,10 +6812,10 @@ msgstr "Kuzey Amerika" msgid "Others" msgstr "Diğer" -msgid "Login Region" -msgstr "Giriş Bölgesi" +msgid "Login region" +msgstr "Giriş bölgesi" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Gizli mod" msgid "" @@ -6826,12 +6826,14 @@ msgstr "" "kullanmayan veya yalnızca LAN modunu kullanan kullanıcılar bu işlevi güvenle " "açabilir." +msgid "Network plugin" +msgstr "Ağ eklentisi" + msgid "Enable network plugin" msgstr "Ağ eklentisini etkinleştir" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "" -"Eski ağ eklentisini kullan (Orca'yı yeniden başlattıktan sonra etkili olur)" +msgid "Use legacy network plugin" +msgstr "Eski ağ eklentisini kullan" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -6876,8 +6878,8 @@ msgstr "" msgid "Home" msgstr "Ana Sayfa" -msgid "Default Page" -msgstr "Varsayılan Sayfa" +msgid "Default page" +msgstr "Varsayılan sayfa" msgid "Set the page opened on startup." msgstr "Açılışta açılacak sayfayı ayarlayın." @@ -6973,8 +6975,8 @@ msgstr "" "Etkinleştirilirse, Orca her yazıcı için filament/işlem yapılandırmasını " "hatırlayacak ve otomatik olarak değiştirecektir." -msgid "Show the step mesh parameter setting dialog." -msgstr "Step ağ parametresi ayar iletişim kutusunu göster." +msgid "Show options when importing STEP file" +msgstr "STEP dosyasını içe aktarırken seçenekleri göster" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." @@ -6982,9 +6984,11 @@ msgstr "" "Etkinleştirilirse, STEP dosyası içe aktarılırken bir parametre ayarları " "iletişim kutusu görüntülenir." -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "" -"Çoklu Cihaz Yönetimi(Studio yeniden başlatıldıktan sonra geçerli olur)." +msgid "Multi device management" +msgstr "Çoklu Cihaz Yönetimi" + +msgid "(Requires restart)" +msgstr "(Yeniden başlatma gerektirir)" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7062,8 +7066,11 @@ msgstr "Her Zaman Sor" msgid "Load Geometry Only" msgstr "Yalnızca Geometriyi Yükle" -msgid "Load Behaviour" -msgstr "Yükleme Davranışı" +msgid "Load behaviour" +msgstr "Yükleme davranışı" + +msgid "Behaviour" +msgstr "Davranış" msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "Bir .3mf açılırken yazıcı/filament/işlem ayarları yüklenmeli mi?" @@ -7074,16 +7081,16 @@ msgstr "Son kullanılan dosyaların maksimum sayısı" msgid "Maximum count of recent files" msgstr "Son dosyaların maksimum sayısı" -msgid "Add model files (stl/step) to recent file list." -msgstr "Model dosyalarını (STL/STEP) son dosyalar listesine ekle." +msgid "Add STL/STEP files to recent files list" +msgstr "STL/STEP dosyalarını son dosyalar listesine ekle" msgid "Clear my choice on the unsaved projects." msgstr "Kaydedilmemiş projelerdeki seçimimi temizle." -msgid "No warnings when loading 3MF with modified G-code" -msgstr "Değiştirilmiş G-kodları içeren 3MF dosyalarını yüklerken uyarı verme" +msgid "Don't warn when loading 3MF with modified G-code" +msgstr "Değiştirilmiş G-kodları içeren 3MF dosyalarını yüklerken uyarma" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Otomatik yedekleme" msgid "" @@ -7101,10 +7108,13 @@ msgstr "Saniye cinsinden yedekleme periyodu." msgid "Downloads" msgstr "İndirilenler" +msgid "Downloads folder" +msgstr "İndirilenler klasörü" + msgid "Dark Mode" msgstr "Karanlık Mod" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Karanlık modu etkinleştir" msgid "Develop mode" @@ -17462,6 +17472,9 @@ msgid "Delete input" msgstr "Girişi sil" msgid "Network Test" +msgstr "Ağ Testi" + +msgid "Network test" msgstr "Ağ testi" msgid "Start Test Multi-Thread" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index df839c8b9e..0b27c7402f 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -6870,10 +6870,10 @@ msgstr "Північна Америка" msgid "Others" msgstr "Інші" -msgid "Login Region" +msgid "Login region" msgstr "Регіон входу" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "Прихований режим" msgid "" @@ -6884,10 +6884,13 @@ msgstr "" "користуються машинами BBL або використовують лише режим локальної мережі, " "можуть безпечно ввімкнути цю функцію." +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "Увімкнути мережевий плагін" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" +msgid "Use legacy network plugin" msgstr "" msgid "" @@ -6931,7 +6934,7 @@ msgstr "" msgid "Home" msgstr "Домашня" -msgid "Default Page" +msgid "Default page" msgstr "Початкова сторінка" msgid "Set the page opened on startup." @@ -7031,16 +7034,18 @@ msgstr "" "Якщо увімкнено, Orca запам'ятовує та автоматично перемикає конфігурацію " "нитки/процесу для кожного принтера." -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." +msgid "Multi device management" +msgstr "Керування кількома пристроями" + +msgid "(Requires restart)" msgstr "" -"Керування кількома пристроями (набуває чинності після перезапуску Orca)." msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -7119,9 +7124,12 @@ msgstr "Запитувати завжди" msgid "Load Geometry Only" msgstr "Завантажити Тільки Геометрію" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "Поведінка завантаження" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "" "Чи повинні бути завантажені налаштування принтера/філаменту/процесу при " @@ -7133,16 +7141,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "Очистити мій вибір для незбережених проектів." -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "Немає попереджень при завантаженні файлу 3MF із зміненими G-кодами" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "Автобекап" msgid "" @@ -7160,10 +7168,13 @@ msgstr "Період резервного копіювання в секунда msgid "Downloads" msgstr "Завантаження" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "Темний режим" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "Увімкнути темний режим" msgid "Develop mode" @@ -17392,6 +17403,9 @@ msgstr "Видалити початкові об'єкти" msgid "Network Test" msgstr "Тест мережі" +msgid "Network test" +msgstr "Тест мережі" + msgid "Start Test Multi-Thread" msgstr "Розпочати тестування багатопотоково" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 4e8abfa2d2..6c7c2782b9 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6545,10 +6545,10 @@ msgstr "北美" msgid "Others" msgstr "其他" -msgid "Login Region" +msgid "Login region" msgstr "登录区域" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "局域网模式" msgid "" @@ -6558,11 +6558,14 @@ msgstr "" "停止向拓竹科技服务器发送数据。如果您不使用Bambu Lab的打印机或仅使用局域网模" "式,则可以安全地启用此功能。" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "启用网络插件" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "使用旧版网络插件(重启Orca后生效)" +msgid "Use legacy network plugin" +msgstr "使用旧版网络插件" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -6602,7 +6605,7 @@ msgstr "" msgid "Home" msgstr "首页" -msgid "Default Page" +msgid "Default page" msgstr "起始页" msgid "Set the page opened on startup." @@ -6689,15 +6692,18 @@ msgid "" "each printer automatically." msgstr "如果启用,Orca会自动记录并切换您不同打印机之间的耗材配置与打印参数。" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "显示STEP网格参数设置对话框" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "如果启用,在导入STEP文件时将出现参数设置对话框" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "多设备管理 (重启Orca后生效)" +msgid "Multi device management" +msgstr "多设备管理" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -6767,9 +6773,12 @@ msgstr "总是提问" msgid "Load Geometry Only" msgstr "仅加载几何形状" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "加载 交互项" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "printter/filament/process 设置项文件能否以 .3mf后缀方式打开" @@ -6779,16 +6788,16 @@ msgstr "最大最近使用文件数" msgid "Maximum count of recent files" msgstr "最近使用文件的最大数量" -msgid "Add model files (stl/step) to recent file list." -msgstr "添加模型文件(stl/step)到最近文件列表" +msgid "Add STL/STEP files to recent files list" +msgstr "添加模型文件 STL/STEP 到最近文件列表" msgid "Clear my choice on the unsaved projects." msgstr "清除我对未保存的项目的选择。" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "加载具有修改的 G-Code 的 3MF 时不会出现警告" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "自动备份" msgid "" @@ -6804,10 +6813,13 @@ msgstr "备份的周期" msgid "Downloads" msgstr "下载" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "深色模式" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "启用深色模式" msgid "Develop mode" @@ -15976,6 +15988,9 @@ msgstr "删除输入" msgid "Network Test" msgstr "网络测试" +msgid "Network test" +msgstr "网络测试" + msgid "Start Test Multi-Thread" msgstr "多线程开始测试" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 95f16659b8..8639ab3d5b 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -6560,10 +6560,10 @@ msgstr "北美" msgid "Others" msgstr "其他" -msgid "Login Region" +msgid "Login region" msgstr "登入區域" -msgid "Stealth Mode" +msgid "Stealth mode" msgstr "區域網路模式" msgid "" @@ -6573,11 +6573,14 @@ msgstr "" "這會停止資料傳輸到 Bambu 的雲端服務。使用者如果不使用 Bambu 機台或僅使用區域" "網路模式,可以安全地啟用此功能。" +msgid "Network plugin" +msgstr "" + msgid "Enable network plugin" msgstr "啟用網路外掛程式" -msgid "Use legacy network plugin (Takes effect after restarting Orca)" -msgstr "使用舊版網路外掛(重新啟動 Orca 後生效)" +msgid "Use legacy network plugin" +msgstr "使用舊版網路外掛" msgid "" "Disable to use latest network plugin that supports new BambuLab firmwares." @@ -6617,7 +6620,7 @@ msgstr "" msgid "Home" msgstr "首頁" -msgid "Default Page" +msgid "Default page" msgstr "預設頁面" msgid "Set the page opened on startup." @@ -6704,15 +6707,18 @@ msgid "" "each printer automatically." msgstr "啟用後,Orca 會記住且自動切換各機臺線材與列印設定。" -msgid "Show the step mesh parameter setting dialog." +msgid "Show options when importing STEP file" msgstr "顯示 STEP 網格參數設定視窗。" msgid "" "If enabled,a parameter settings dialog will appear during STEP file import." msgstr "啟用後,匯入 STEP 檔案時會顯示參數設定視窗。" -msgid "Multi-device Management (Take effect after restarting Orca Slicer)." -msgstr "多臺設備管理 (需重開 Orca)" +msgid "Multi device management" +msgstr "多臺設備管理" + +msgid "(Requires restart)" +msgstr "" msgid "" "With this option enabled, you can send a task to multiple devices at the " @@ -6782,9 +6788,12 @@ msgstr "總是詢問" msgid "Load Geometry Only" msgstr "僅載入幾何資料" -msgid "Load Behaviour" +msgid "Load behaviour" msgstr "載入方式" +msgid "Behaviour" +msgstr "" + msgid "Should printer/filament/process settings be loaded when opening a .3mf?" msgstr "開啟 .3mf 檔案時,是否需要載入印表機、線材和參數設定?" @@ -6794,16 +6803,16 @@ msgstr "" msgid "Maximum count of recent files" msgstr "" -msgid "Add model files (stl/step) to recent file list." +msgid "Add STL/STEP files to recent files list" msgstr "" msgid "Clear my choice on the unsaved projects." msgstr "清除我對未儲存專案項目的選擇。" -msgid "No warnings when loading 3MF with modified G-code" +msgid "Don't warn when loading 3MF with modified G-code" msgstr "載入包含修改過 G-code 的 3MF 時不顯示警告" -msgid "Auto-Backup" +msgid "Auto backup" msgstr "自動備份" msgid "" @@ -6819,10 +6828,13 @@ msgstr "備份的週期。" msgid "Downloads" msgstr "下載" +msgid "Downloads folder" +msgstr "" + msgid "Dark Mode" msgstr "深色模式" -msgid "Enable Dark mode" +msgid "Enable dark mode" msgstr "啟用深色模式" msgid "Develop mode" @@ -16144,6 +16156,9 @@ msgstr "刪除輸入" msgid "Network Test" msgstr "網路測試" +msgid "Network test" +msgstr "網路測試" + msgid "Start Test Multi-Thread" msgstr "啟動多執行緒測試" diff --git a/resources/images/loop.svg b/resources/images/loop.svg new file mode 100644 index 0000000000..446d9f305a --- /dev/null +++ b/resources/images/loop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 20376fad17..d17427e6da 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -7,17 +7,13 @@ #include "I18N.hpp" #include "libslic3r/AppConfig.hpp" #include -#include -#include "Notebook.hpp" #include "OG_CustomCtrl.hpp" #include "wx/graphics.h" -#include "Widgets/CheckBox.hpp" -#include "Widgets/ComboBox.hpp" -#include "Widgets/RadioBox.hpp" -#include "Widgets/TextInput.hpp" #include #include -#include +#include "NetworkTestDialog.hpp" +#include "Widgets/StaticLine.hpp" +#include "Widgets/RadioGroup.hpp" #ifdef __WINDOWS__ #ifdef _MSW_DARK_MODE @@ -27,10 +23,6 @@ namespace Slic3r { namespace GUI { -WX_DEFINE_LIST(RadioSelectorList); -wxDEFINE_EVENT(EVT_PREFERENCES_SELECT_TAB, wxCommandEvent); - - class MyscrolledWindow : public wxScrolledWindow { public: MyscrolledWindow(wxWindow* parent, @@ -42,46 +34,37 @@ public: bool ShouldScrollToChildOnFocus(wxWindow* child) override { return false; } }; - -wxBoxSizer *PreferencesDialog::create_item_title(wxString title, wxWindow *parent, wxString tooltip) +wxBoxSizer *PreferencesDialog::create_item_title(wxString title) { wxBoxSizer *m_sizer_title = new wxBoxSizer(wxHORIZONTAL); - auto m_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); - m_title->SetForegroundColour(DESIGN_GRAY800_COLOR); - m_title->SetFont(::Label::Head_13); - m_title->Wrap(-1); - //m_title->SetToolTip(tooltip); - - auto m_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); - m_line->SetBackgroundColour(DESIGN_GRAY400_COLOR); - - m_sizer_title->Add(m_title, 0, wxALIGN_CENTER | wxALL, 3); - m_sizer_title->Add(0, 0, 0, wxLEFT, 9); - //m_sizer_title->Add(m_line, 0, wxEXPAND, 0); - wxBoxSizer *sizer_line = new wxBoxSizer(wxVERTICAL); - sizer_line->Add( m_line, 0, wxEXPAND, 0 ); - m_sizer_title->Add( sizer_line, 1, wxALIGN_CENTER, 0 ); - //m_sizer_title->Add( 0, 0, 0, wxEXPAND|wxLEFT, 80 ); + auto title_ctrl = new StaticLine(m_parent, 0, title); + title_ctrl->SetFont(Label::Head_14); + title_ctrl->SetForegroundColour(DESIGN_GRAY900_COLOR); + m_sizer_title->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN - 10)); + m_sizer_title->Add(title_ctrl, 1, wxEXPAND | wxBOTTOM | wxTOP, FromDIP(6)); + m_sizer_title->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN - 10)); return m_sizer_title; } -std::tuple PreferencesDialog::create_item_combobox_base(wxString title, wxWindow* parent, wxString tooltip, std::string param, std::vector vlist, unsigned int current_index) +std::tuple PreferencesDialog::create_item_combobox_base(wxString title, wxString tooltip, std::string param, std::vector vlist, unsigned int current_index) { wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_combox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty + + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); - combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); - m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->SetFont(::Label::Body_14); + combo_title->SetToolTip(tip); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox->SetFont(::Label::Body_13); - combobox->GetDropDown().SetFont(::Label::Body_13); + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); std::vector::iterator iter; for (iter = vlist.begin(); iter != vlist.end(); iter++) { @@ -90,12 +73,12 @@ std::tuple PreferencesDialog::create_item_combobox_base( combobox->SetSelection(current_index); - m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER, 0); + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); return {m_sizer_combox, combobox}; } -wxBoxSizer* PreferencesDialog::create_item_combobox(wxString title, wxWindow* parent, wxString tooltip, std::string param, std::vector vlist) +wxBoxSizer* PreferencesDialog::create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector vlist) { unsigned int current_index = 0; @@ -104,7 +87,7 @@ wxBoxSizer* PreferencesDialog::create_item_combobox(wxString title, wxWindow* pa current_index = atoi(current_setting.c_str()); } - auto [sizer, combobox] = create_item_combobox_base(title, parent, tooltip, param, vlist, current_index); + auto [sizer, combobox] = create_item_combobox_base(title, tooltip, param, vlist, current_index); //// save config combobox->GetDropDown().Bind(wxEVT_COMBOBOX, [this, param](wxCommandEvent& e) { @@ -115,7 +98,7 @@ wxBoxSizer* PreferencesDialog::create_item_combobox(wxString title, wxWindow* pa return sizer; } -wxBoxSizer *PreferencesDialog::create_item_combobox(wxString title, wxWindow *parent, wxString tooltip, std::string param, std::vector vlist, std::vector config_name_index) +wxBoxSizer *PreferencesDialog::create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector vlist, std::vector config_name_index) { assert(vlist.size() == config_name_index.size()); unsigned int current_index = 0; @@ -127,7 +110,7 @@ wxBoxSizer *PreferencesDialog::create_item_combobox(wxString title, wxWindow *pa current_index = iterator - config_name_index.begin(); } - auto [sizer, combobox] = create_item_combobox_base(title, parent, tooltip, param, vlist, current_index); + auto [sizer, combobox] = create_item_combobox_base(title, tooltip, param, vlist, current_index); //// save config combobox->GetDropDown().Bind(wxEVT_COMBOBOX, [this, param, config_name_index](wxCommandEvent& e) { @@ -138,23 +121,68 @@ wxBoxSizer *PreferencesDialog::create_item_combobox(wxString title, wxWindow *pa return sizer; } -wxBoxSizer *PreferencesDialog::create_item_language_combobox( - wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param, std::vector vlist) +wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxString tooltip) { + wxLanguage supported_languages[]{ + wxLANGUAGE_ENGLISH, + wxLANGUAGE_CHINESE_SIMPLIFIED, + wxLANGUAGE_CHINESE, + wxLANGUAGE_GERMAN, + wxLANGUAGE_CZECH, + wxLANGUAGE_FRENCH, + wxLANGUAGE_SPANISH, + wxLANGUAGE_SWEDISH, + wxLANGUAGE_DUTCH, + wxLANGUAGE_HUNGARIAN, + wxLANGUAGE_JAPANESE, + wxLANGUAGE_ITALIAN, + wxLANGUAGE_KOREAN, + wxLANGUAGE_RUSSIAN, + wxLANGUAGE_UKRAINIAN, + wxLANGUAGE_TURKISH, + wxLANGUAGE_POLISH, + wxLANGUAGE_CATALAN, + wxLANGUAGE_PORTUGUESE_BRAZILIAN, + wxLANGUAGE_LITHUANIAN, + }; + + auto translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); + std::vector language_infos; + language_infos.emplace_back(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH)); + for (size_t i = 0; i < translations.GetCount(); ++i) { + const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(translations[i]); + + if (langinfo == nullptr) continue; + int language_num = sizeof(supported_languages) / sizeof(supported_languages[0]); + for (auto si = 0; si < language_num; si++) { + if (langinfo == wxLocale::GetLanguageInfo(supported_languages[si])) { + language_infos.emplace_back(langinfo); + } + } + //if (langinfo != nullptr) language_infos.emplace_back(langinfo); + } + sort_remove_duplicates(language_infos); + std::sort(language_infos.begin(), language_infos.end(), [](const wxLanguageInfo *l, const wxLanguageInfo *r) { return l->Description < r->Description; }); + + auto vlist = language_infos; + auto param = "language"; + wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_combox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty + + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); - combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); - m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->SetFont(::Label::Body_14); + combo_title->SetToolTip(tip); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox->SetFont(::Label::Body_13); - combobox->GetDropDown().SetFont(::Label::Body_13); + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); auto language = app_config->get(param); m_current_language_selected = -1; std::vector::iterator iter; @@ -235,7 +263,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( } combobox->SetSelection(m_current_language_selected); - m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER, 0); + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); combobox->Bind(wxEVT_LEFT_DOWN, [this, combobox](wxMouseEvent &e) { m_current_language_selected = combobox->GetSelection(); @@ -296,24 +324,30 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( return m_sizer_combox; } -wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxWindow *parent, wxString tooltip, std::vector vlist) +wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxString tooltip) { + + std::vector Regions = {_L("Asia-Pacific"), _L("China"), _L("Europe"), _L("North America"), _L("Others")}; std::vector local_regions = {"Asia-Pacific", "China", "Europe", "North America", "Others"}; + auto vlist = Regions; + wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_combox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty + + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); - combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); - m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->SetFont(::Label::Body_14); + combo_title->SetToolTip(tip); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox->SetFont(::Label::Body_13); - combobox->GetDropDown().SetFont(::Label::Body_13); - m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER, 0); + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); std::vector::iterator iter; for (iter = vlist.begin(); iter != vlist.end(); iter++) { combobox->Append(*iter); } @@ -377,21 +411,64 @@ wxBoxSizer *PreferencesDialog::create_item_region_combobox(wxString title, wxWin return m_sizer_combox; } -wxBoxSizer *PreferencesDialog::create_item_loglevel_combobox(wxString title, wxWindow *parent, wxString tooltip, std::vector vlist) +wxBoxSizer *PreferencesDialog::create_item_autoflush(wxString title, wxString tooltip) { wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_combox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title , wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); + combo_title->SetFont(::Label::Body_14); combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); - m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox->SetFont(::Label::Body_13); - combobox->GetDropDown().SetFont(::Label::Body_13); + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); + + std::vector FlushOptions = {_L("All"), _L("Color"), _L("Filament"), _L("None")}; + std::vector::iterator iter; + for (iter = FlushOptions.begin(); iter != FlushOptions.end(); iter++) { combobox->Append(*iter); } + + auto opt_color = app_config->get("auto_calculate") == "true"; + auto opt_filam = app_config->get("auto_calculate_when_filament_change") == "true"; + if (opt_color && opt_filam) { + combobox->SetValue(FlushOptions[0]); + }else if(opt_color){ + combobox->SetValue(FlushOptions[1]); + }else if(opt_filam){ + combobox->SetValue(FlushOptions[2]); + }else{ + combobox->SetValue(FlushOptions[3]); + } + + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); + + combobox->GetDropDown().Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { + auto sel = e.GetSelection(); + app_config->set("auto_calculate" ,(sel == 0 || sel == 1) ? "true" : "false"); + app_config->set("auto_calculate_when_filament_change",(sel == 0 || sel == 2) ? "true" : "false"); + e.Skip(); + }); + return m_sizer_combox; +} + +wxBoxSizer *PreferencesDialog::create_item_loglevel_combobox(wxString title, wxString tooltip, std::vector vlist) +{ + wxBoxSizer *m_sizer_combox = new wxBoxSizer(wxHORIZONTAL); + m_sizer_combox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); + combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + combo_title->SetFont(::Label::Body_14); + combo_title->SetToolTip(tooltip); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_combox->Add(combo_title, 0, wxALIGN_CENTER); + + auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox->SetFont(::Label::Body_14); + combobox->GetDropDown().SetFont(::Label::Body_14); std::vector::iterator iter; for (iter = vlist.begin(); iter != vlist.end(); iter++) { combobox->Append(*iter); } @@ -399,7 +476,7 @@ wxBoxSizer *PreferencesDialog::create_item_loglevel_combobox(wxString title, wxW auto severity_level = app_config->get("log_severity_level"); if (!severity_level.empty()) { combobox->SetValue(severity_level); } - m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER, 0); + m_sizer_combox->Add(combobox, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); //// save config combobox->GetDropDown().Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &e) { @@ -411,9 +488,8 @@ wxBoxSizer *PreferencesDialog::create_item_loglevel_combobox(wxString title, wxW return m_sizer_combox; } - wxBoxSizer *PreferencesDialog::create_item_multiple_combobox( - wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param, std::vector vlista, std::vector vlistb) + wxString title, wxString tooltip, std::string param, std::vector vlista, std::vector vlistb) { std::vector params; Split(app_config->get(param), "/", params); @@ -421,37 +497,37 @@ wxBoxSizer *PreferencesDialog::create_item_multiple_combobox( std::vector::iterator iter; wxBoxSizer *m_sizer_tcombox= new wxBoxSizer(wxHORIZONTAL); - m_sizer_tcombox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_tcombox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto combo_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto combo_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); combo_title->SetToolTip(tooltip); - combo_title->Wrap(-1); + combo_title->Wrap(DESIGN_TITLE_SIZE.x); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); - m_sizer_tcombox->Add(combo_title, 0, wxALIGN_CENTER | wxALL, 3); + combo_title->SetFont(::Label::Body_14); + m_sizer_tcombox->Add(combo_title, 0, wxALIGN_CENTER); - auto combobox_left = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox_left->SetFont(::Label::Body_13); - combobox_left->GetDropDown().SetFont(::Label::Body_13); + auto combobox_left = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox_left->SetFont(::Label::Body_14); + combobox_left->GetDropDown().SetFont(::Label::Body_14); for (iter = vlista.begin(); iter != vlista.end(); iter++) { combobox_left->Append(*iter); } combobox_left->SetValue(std::string(params[0].mb_str())); - m_sizer_tcombox->Add(combobox_left, 0, wxALIGN_CENTER, 0); + m_sizer_tcombox->Add(combobox_left, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); - auto combo_title_add = new wxStaticText(parent, wxID_ANY, wxT("+"), wxDefaultPosition, wxDefaultSize, 0); + auto combo_title_add = new wxStaticText(m_parent, wxID_ANY, wxT("+"), wxDefaultPosition, wxDefaultSize, 0); combo_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - combo_title->SetFont(::Label::Body_13); + combo_title->SetFont(::Label::Body_14); combo_title_add->Wrap(-1); - m_sizer_tcombox->Add(combo_title_add, 0, wxALIGN_CENTER | wxALL, 3); + m_sizer_tcombox->Add(combo_title_add, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(5)); - auto combobox_right = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); - combobox_right->SetFont(::Label::Body_13); - combobox_right->GetDropDown().SetFont(::Label::Body_13); + auto combobox_right = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); + combobox_right->SetFont(::Label::Body_14); + combobox_right->GetDropDown().SetFont(::Label::Body_14); for (iter = vlistb.begin(); iter != vlistb.end(); iter++) { combobox_right->Append(*iter); } combobox_right->SetValue(std::string(params[1].mb_str())); - m_sizer_tcombox->Add(combobox_right, 0, wxALIGN_CENTER, 0); + m_sizer_tcombox->Add(combobox_right, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); // save config combobox_left->GetDropDown().Bind(wxEVT_COMBOBOX, [this, param, combobox_right](wxCommandEvent &e) { @@ -469,33 +545,33 @@ wxBoxSizer *PreferencesDialog::create_item_multiple_combobox( return m_sizer_tcombox; } -wxBoxSizer *PreferencesDialog::create_item_input(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::string param, std::function onchange) +wxBoxSizer *PreferencesDialog::create_item_input(wxString title, wxString title2, wxString tooltip, std::string param, std::function onchange) { wxBoxSizer *sizer_input = new wxBoxSizer(wxHORIZONTAL); - auto input_title = new wxStaticText(parent, wxID_ANY, title); + auto input_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - input_title->SetFont(::Label::Body_13); + input_title->SetFont(::Label::Body_14); input_title->SetToolTip(tooltip); - input_title->Wrap(-1); + input_title->Wrap(DESIGN_TITLE_SIZE.x); - auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + auto input = new ::TextInput(m_parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); input->SetBackgroundColor(input_bg); input->GetTextCtrl()->SetValue(app_config->get(param)); wxTextValidator validator(wxFILTER_DIGITS); + input->SetToolTip(tooltip); input->GetTextCtrl()->SetValidator(validator); - auto second_title = new wxStaticText(parent, wxID_ANY, title2, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); + auto second_title = new wxStaticText(m_parent, wxID_ANY, title2, wxDefaultPosition, wxDefaultSize, 0); second_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - second_title->SetFont(::Label::Body_13); + second_title->SetFont(::Label::Body_14); second_title->SetToolTip(tooltip); second_title->Wrap(-1); - sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); - sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); - sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); - sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + sizer_input->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + sizer_input->Add(input_title , 0, wxALIGN_CENTER_VERTICAL); + sizer_input->Add(input , 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); + sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(2)); input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [this, param, input, onchange](wxCommandEvent &e) { auto value = input->GetTextCtrl()->GetValue(); @@ -515,27 +591,27 @@ wxBoxSizer *PreferencesDialog::create_item_input(wxString title, wxString title2 return sizer_input; } -wxBoxSizer *PreferencesDialog::create_camera_orbit_mult_input(wxString title, wxWindow *parent, wxString tooltip) +wxBoxSizer *PreferencesDialog::create_camera_orbit_mult_input(wxString title, wxString tooltip) { wxBoxSizer *sizer_input = new wxBoxSizer(wxHORIZONTAL); - auto input_title = new wxStaticText(parent, wxID_ANY, title); + auto input_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - input_title->SetFont(::Label::Body_13); + input_title->SetFont(::Label::Body_14); input_title->SetToolTip(tooltip); - input_title->Wrap(-1); + input_title->Wrap(DESIGN_TITLE_SIZE.x); auto param = "camera_orbit_mult"; - auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + auto input = new ::TextInput(m_parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); input->SetBackgroundColor(input_bg); input->GetTextCtrl()->SetValue(app_config->get(param)); wxTextValidator validator(wxFILTER_NUMERIC); + input->SetToolTip(tooltip); input->GetTextCtrl()->SetValidator(validator); - sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); - sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); - sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); + sizer_input->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL); + sizer_input->Add(input , 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); const double min = 0.05; const double max = 2.0; @@ -568,42 +644,53 @@ wxBoxSizer *PreferencesDialog::create_camera_orbit_mult_input(wxString title, wx return sizer_input; } -wxBoxSizer *PreferencesDialog::create_item_backup_input(wxString title, wxWindow *parent, wxString tooltip, std::string param) +wxBoxSizer *PreferencesDialog::create_item_backup(wxString title, wxString tooltip) { wxBoxSizer *m_sizer_input = new wxBoxSizer(wxHORIZONTAL); - auto input_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); - input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - input_title->SetFont(::Label::Body_13); - input_title->SetToolTip(tooltip); - input_title->Wrap(-1); - auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + m_sizer_input->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + + auto checkbox_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); + checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + checkbox_title->SetFont(::Label::Body_14); + checkbox_title->Wrap(DESIGN_TITLE_SIZE.x); + checkbox_title->SetToolTip(tooltip); + + auto checkbox = new ::CheckBox(m_parent); + checkbox->SetValue(app_config->get_bool("backup_switch")); + checkbox->SetToolTip(tooltip); + + checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox](wxCommandEvent &e) { + app_config->set_bool("backup_switch", checkbox->GetValue()); + app_config->save(); + bool pbool = app_config->get("backup_switch") == "true" ? true : false; + std::string backup_interval = "10"; + app_config->get("backup_interval", backup_interval); + Slic3r::set_backup_interval(pbool ? boost::lexical_cast(backup_interval) : 0); + if (m_backup_interval_textinput != nullptr) { m_backup_interval_textinput->Enable(pbool); } + e.Skip(); + }); + + m_backup_interval_time = app_config->get("backup_interval"); + + auto input = new ::TextInput(m_parent, wxEmptyString, _L("sec"), "loop", wxDefaultPosition, wxSize(FromDIP(97), -1), wxTE_PROCESS_ENTER); StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); input->SetBackgroundColor(input_bg); - input->GetTextCtrl()->SetValue(app_config->get(param)); + input->GetTextCtrl()->SetValue(m_backup_interval_time); wxTextValidator validator(wxFILTER_DIGITS); + input->SetToolTip(_L("The period of backup in seconds.")); input->GetTextCtrl()->SetValidator(validator); + m_sizer_input->Add(checkbox_title, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(3)); + m_sizer_input->Add(checkbox , 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(5)); + m_sizer_input->Add(input , 0, wxALIGN_CENTER_VERTICAL); - auto second_title = new wxStaticText(parent, wxID_ANY, _L("Second"), wxDefaultPosition, DESIGN_TITLE_SIZE, 0); - second_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - second_title->SetFont(::Label::Body_13); - second_title->SetToolTip(tooltip); - second_title->Wrap(-1); - - m_sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - m_sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); - m_sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); - m_sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); - m_sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); - - - input->GetTextCtrl()->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this, param, input](wxCommandEvent &e) { + input->GetTextCtrl()->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this, input](wxCommandEvent &e) { m_backup_interval_time = input->GetTextCtrl()->GetValue(); e.Skip(); }); - std::function backup_interval = [this, param, input]() { + std::function backup_interval = [this, input]() { m_backup_interval_time = input->GetTextCtrl()->GetValue(); app_config->set("backup_interval", std::string(m_backup_interval_time.mb_str())); app_config->save(); @@ -622,69 +709,30 @@ wxBoxSizer *PreferencesDialog::create_item_backup_input(wxString title, wxWindow e.Skip(); }); - if (app_config->get("backup_switch") == "true") { - input->Enable(true); - input->Refresh(); - } else { - input->Enable(false); - input->Refresh(); - } + input->Enable(app_config->get("backup_switch") == "true"); + input->Refresh(); - if (param == "backup_interval") { m_backup_interval_textinput = input; } + m_backup_interval_textinput = input; return m_sizer_input; } - -wxBoxSizer *PreferencesDialog::create_item_switch(wxString title, wxWindow *parent, wxString tooltip ,std::string param) -{ - wxBoxSizer *m_sizer_switch = new wxBoxSizer(wxHORIZONTAL); - auto switch_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, 0); - switch_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - switch_title->SetFont(::Label::Body_13); - switch_title->SetToolTip(tooltip); - switch_title->Wrap(-1); - auto switchbox = new ::SwitchButton(parent, wxID_ANY); - - /*auto index = app_config->get(param); - if (!index.empty()) { combobox->SetSelection(atoi(index.c_str())); }*/ - - m_sizer_switch->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - m_sizer_switch->Add(switch_title, 0, wxALIGN_CENTER | wxALL, 3); - m_sizer_switch->Add( 0, 0, 1, wxEXPAND, 0 ); - m_sizer_switch->Add(switchbox, 0, wxALIGN_CENTER, 0); - m_sizer_switch->Add( 0, 0, 0, wxEXPAND|wxLEFT, 40 ); - - //// save config - switchbox->Bind(wxEVT_TOGGLEBUTTON, [this, param](wxCommandEvent &e) { - /* app_config->set(param, std::to_string(e.GetSelection())); - app_config->save();*/ - e.Skip(); - }); - return m_sizer_switch; -} - -wxBoxSizer* PreferencesDialog::create_item_darkmode_checkbox(wxString title, wxWindow* parent, wxString tooltip, int padding_left, std::string param) +wxBoxSizer* PreferencesDialog::create_item_darkmode(wxString title,wxString tooltip, std::string param) { wxBoxSizer* m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_checkbox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); - auto checkbox = new ::CheckBox(parent); + auto checkbox = new ::CheckBox(m_parent); checkbox->SetValue((app_config->get(param) == "1") ? true : false); m_dark_mode_ckeckbox = checkbox; - m_sizer_checkbox->Add(checkbox, 0, wxALIGN_CENTER, 0); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); - - auto checkbox_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); + auto checkbox_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - checkbox_title->SetFont(::Label::Body_13); - - auto size = checkbox_title->GetTextExtent(title); - checkbox_title->SetMinSize(wxSize(size.x + FromDIP(40), -1)); - checkbox_title->Wrap(-1); - m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); + checkbox_title->SetFont(::Label::Body_14); + checkbox_title->Wrap(DESIGN_TITLE_SIZE.x); + m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(3)); + m_sizer_checkbox->Add(checkbox , 0, wxALIGN_CENTER | wxRIGHT | wxLEFT, FromDIP(5)); //// save config checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox, param](wxCommandEvent& e) { @@ -703,7 +751,9 @@ wxBoxSizer* PreferencesDialog::create_item_darkmode_checkbox(wxString title, wxW e.Skip(); }); - checkbox->SetToolTip(tooltip); + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty + checkbox_title->SetToolTip(tip); + checkbox->SetToolTip(tip); return m_sizer_checkbox; } @@ -720,27 +770,35 @@ void PreferencesDialog::set_dark_mode() #endif } -wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param) +wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxString tooltip, std::string param, const wxString secondary_title) { wxBoxSizer *m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + m_sizer_checkbox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + + auto tip = tooltip.IsEmpty() ? title : tooltip; // auto fill tooltips with title if its empty - auto checkbox = new ::CheckBox(parent); - checkbox->SetValue(app_config->get_bool(param)); - - m_sizer_checkbox->Add(checkbox, 0, wxALIGN_CENTER, 0); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); - - auto checkbox_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); + auto checkbox_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - checkbox_title->SetFont(::Label::Body_13); + checkbox_title->SetFont(::Label::Body_14); + checkbox_title->Wrap(DESIGN_TITLE_SIZE.x); + checkbox_title->SetToolTip(tip); - auto size = checkbox_title->GetTextExtent(title); - checkbox_title->SetMinSize(wxSize(size.x + FromDIP(5), -1)); - checkbox_title->Wrap(-1); - m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); + auto checkbox = new ::CheckBox(m_parent); + checkbox->SetValue(app_config->get_bool(param)); + checkbox->SetToolTip(tip); + m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(3)); + m_sizer_checkbox->Add(checkbox , 0, wxALIGN_CENTER | wxRIGHT | wxLEFT, FromDIP(5)); + + if(!secondary_title.IsEmpty()){ + auto sec_title = new wxStaticText(m_parent, wxID_ANY, secondary_title); + sec_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + sec_title->SetFont(::Label::Body_14); + sec_title->Wrap(-1); + sec_title->SetToolTip(tip); + m_sizer_checkbox->Add(sec_title, 0, wxALIGN_CENTER); + } //// save config checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox, param](wxCommandEvent &e) { @@ -752,15 +810,6 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa // wxGetApp().switch_staff_pick(pbool); // } - // backup - if (param == "backup_switch") { - bool pbool = app_config->get("backup_switch") == "true" ? true : false; - std::string backup_interval = "10"; - app_config->get("backup_interval", backup_interval); - Slic3r::set_backup_interval(pbool ? boost::lexical_cast(backup_interval) : 0); - if (m_backup_interval_textinput != nullptr) { m_backup_interval_textinput->Enable(pbool); } - } - if (param == "sync_user_preset") { bool sync = app_config->get("sync_user_preset") == "true" ? true : false; if (sync) { @@ -841,59 +890,68 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa checkbox->Enable(pbool); } - - checkbox->SetToolTip(tooltip); return m_sizer_checkbox; } -wxBoxSizer* PreferencesDialog::create_item_button( - wxString title, wxString title2, wxWindow* parent, wxString tooltip, wxString tooltip2, std::function onclick, bool button_on_left/* = false*/) +wxBoxSizer* PreferencesDialog::create_item_button(wxString title, wxString title2, wxString tooltip, wxString tooltip2, std::function onclick) { wxBoxSizer *m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - auto m_staticTextPath = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - m_staticTextPath->SetMaxSize(wxSize(FromDIP(240), -1)); + m_sizer_checkbox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + auto m_staticTextPath = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE, wxST_NO_AUTORESIZE); m_staticTextPath->SetForegroundColour(DESIGN_GRAY900_COLOR); - m_staticTextPath->SetFont(::Label::Body_13); - m_staticTextPath->Wrap(-1); - m_staticTextPath->SetToolTip(tooltip); + m_staticTextPath->SetFont(::Label::Body_14); + m_staticTextPath->Wrap(DESIGN_TITLE_SIZE.x); + + m_staticTextPath->SetToolTip(tooltip.IsEmpty() ? tooltip2 : tooltip); // use button tooltip if label tooltip empty - auto m_button_download = new Button(parent, title2); - m_button_download->SetStyle(ButtonStyle::Regular, ButtonType::Window); - m_button_download->SetToolTip(tooltip2); + auto m_button_download = new Button(m_parent, title2); + m_button_download->SetStyle(title2 == _L("Clear") ? ButtonStyle::Alert : ButtonStyle::Regular, ButtonType::Parameter); + m_button_download->SetToolTip(tooltip2.IsEmpty() ? tooltip : tooltip2); // use label tooltip if button tooltip empty m_button_download->Bind(wxEVT_BUTTON, [this, onclick](auto &e) { onclick(); }); - if (button_on_left) { - m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); - m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - } else { - m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); - } + m_sizer_checkbox->Add(m_staticTextPath , 0, wxALIGN_CENTER_VERTICAL); + m_sizer_checkbox->Add(m_button_download, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); return m_sizer_checkbox; } -wxWindow* PreferencesDialog::create_item_downloads(wxWindow* parent, int padding_left, std::string param) +wxBoxSizer* PreferencesDialog::create_item_downloads(wxString title, wxString tooltip) { wxString download_path = wxString::FromUTF8(app_config->get("download_path")); - auto item_panel = new wxWindow(parent, wxID_ANY); - item_panel->SetBackgroundColour(*wxWHITE); + wxBoxSizer* m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); + wxPanel* label_panel = new wxPanel(m_parent); + wxBoxSizer* label_sizer = new wxBoxSizer(wxHORIZONTAL); - m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); - auto m_staticTextPath = new wxStaticText(item_panel, wxID_ANY, download_path, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - //m_staticTextPath->SetMaxSize(wxSize(FromDIP(440), -1)); + m_sizer_checkbox->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); + + auto downloads_folder = new wxStaticText(label_panel, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxST_NO_AUTORESIZE); + downloads_folder->SetForegroundColour(DESIGN_GRAY900_COLOR); + downloads_folder->SetFont(::Label::Body_14); + downloads_folder->SetToolTip(tooltip); + downloads_folder->Wrap(-1); + + auto m_staticTextPath = new wxStaticText(label_panel, wxID_ANY, download_path, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); m_staticTextPath->SetForegroundColour(DESIGN_GRAY600_COLOR); - m_staticTextPath->SetFont(::Label::Body_13); + m_staticTextPath->SetFont(::Label::Body_14); m_staticTextPath->Wrap(-1); + m_staticTextPath->SetToolTip(download_path); - auto m_button_download = new Button(item_panel, _L("Browse")); - m_button_download->SetStyle(ButtonStyle::Regular, ButtonType::Window); + label_sizer->Add(downloads_folder , 0, wxALIGN_CENTER_VERTICAL); + label_sizer->Add(m_staticTextPath , 0, wxALIGN_CENTER_VERTICAL); + label_panel->SetSize( wxSize(DESIGN_TITLE_SIZE.x, -1)); + label_panel->SetMinSize(wxSize(DESIGN_TITLE_SIZE.x, -1)); + label_panel->SetMaxSize(wxSize(DESIGN_TITLE_SIZE.x, -1)); + label_panel->SetSizer(label_sizer); + label_panel->Layout(); - m_button_download->Bind(wxEVT_BUTTON, [this, m_staticTextPath, item_panel](auto& e) { + auto m_button_download = new Button(m_parent, _L("Browse") + " " + dots); + m_button_download->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); + m_button_download->SetToolTip(_L("Choose folder for downloaded items")); + + m_button_download->Bind(wxEVT_BUTTON, [this, m_staticTextPath, m_sizer_checkbox](auto& e) { wxString defaultPath = wxT("/"); wxDirDialog dialog(this, _L("Choose Download Directory"), defaultPath, wxDD_NEW_DIR_BUTTON); @@ -902,45 +960,19 @@ wxWindow* PreferencesDialog::create_item_downloads(wxWindow* parent, int padding std::string download_path_str = download_path.ToUTF8().data(); app_config->set("download_path", download_path_str); m_staticTextPath->SetLabelText(download_path); - item_panel->Layout(); + m_staticTextPath->SetToolTip(download_path); + m_sizer_checkbox->Layout(); } }); - m_sizer_checkbox->Add(m_staticTextPath, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - m_sizer_checkbox->Add(m_button_download, 0, wxALL, FromDIP(5)); + m_sizer_checkbox->Add(label_panel , 0, wxALIGN_CENTER_VERTICAL); + m_sizer_checkbox->Add(m_button_download, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); - item_panel->SetSizer(m_sizer_checkbox); - item_panel->Layout(); - - return item_panel; -} - -wxWindow *PreferencesDialog ::create_item_radiobox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, int groupid, std::string param) -{ - wxWindow *item = new wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(28))); - item->SetBackgroundColour(*wxWHITE); - - RadioBox *radiobox = new RadioBox(item); - radiobox->SetPosition(wxPoint(padding_left, (item->GetSize().GetHeight() - radiobox->GetSize().GetHeight()) / 2)); - radiobox->Bind(wxEVT_LEFT_DOWN, &PreferencesDialog::OnSelectRadio, this); - - RadioSelector *rs = new RadioSelector; - rs->m_groupid = groupid; - rs->m_param_name = param; - rs->m_radiobox = radiobox; - rs->m_selected = false; - m_radio_group.Append(rs); - - wxStaticText *text = new wxStaticText(item, wxID_ANY, title, wxDefaultPosition, wxDefaultSize); - text->SetPosition(wxPoint(padding_left + radiobox->GetSize().GetWidth() + 10, (item->GetSize().GetHeight() - text->GetSize().GetHeight()) / 2)); - - radiobox->SetToolTip(tooltip); - text->SetToolTip(tooltip); - return item; + return m_sizer_checkbox; } #ifdef WIN32 -wxBoxSizer* PreferencesDialog::create_item_link_association(wxWindow* parent, wxString url_prefix, wxString website_name) +wxBoxSizer* PreferencesDialog::create_item_link_association( wxString url_prefix, wxString website_name) { wxString title = _L("Associate") + (boost::format(" %1%://") % url_prefix.c_str()).str(); wxString tooltip = _L("Associate") + " " + url_prefix + ":// " + _L("with OrcaSlicer so that Orca can open models from") + " " + website_name; @@ -949,34 +981,31 @@ wxBoxSizer* PreferencesDialog::create_item_link_association(wxWindow* parent, wx bool reg_to_current_instance = wxGetApp().check_url_association(url_prefix.ToStdWstring(), registered_bin); auto* h_sizer = new wxBoxSizer(wxHORIZONTAL); // contains checkbox and other elements on the first line - h_sizer->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + h_sizer->AddSpacer(FromDIP(DESIGN_LEFT_MARGIN)); // build checkbox - auto checkbox = new ::CheckBox(parent); + auto checkbox = new ::CheckBox(m_parent); checkbox->SetToolTip(tooltip); checkbox->SetValue(reg_to_current_instance); // If registered to the current instance, checkbox should be checked checkbox->Enable(!reg_to_current_instance); // Since unregistering isn't supported, checkbox is disabled when checked - h_sizer->Add(checkbox, 0, wxALIGN_CENTER, 0); - h_sizer->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); - // build text next to checkbox - auto checkbox_title = new wxStaticText(parent, wxID_ANY, title); + auto checkbox_title = new wxStaticText(m_parent, wxID_ANY, title, wxDefaultPosition, DESIGN_TITLE_SIZE); checkbox_title->SetToolTip(tooltip); checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - checkbox_title->SetFont(::Label::Body_13); - auto size = checkbox_title->GetTextExtent(title); - checkbox_title->SetMinSize({ size.x + FromDIP(5), -1 }); + checkbox_title->SetFont(::Label::Body_14); checkbox_title->Wrap(-1); - h_sizer->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); + + h_sizer->Add(checkbox_title, 0, wxALIGN_CENTER | wxTOP | wxBOTTOM, FromDIP(3)); + h_sizer->Add(checkbox , 0, wxALIGN_CENTER | wxLEFT , FromDIP(5)); auto* v_sizer = new wxBoxSizer(wxVERTICAL); v_sizer->Add(h_sizer); // build text below checkbox that indicates the instance currently registered to handle the link type - auto* registered_instance_title = new wxStaticText(parent, wxID_ANY, ""); - registered_instance_title->SetForegroundColour(DESIGN_GRAY900_COLOR); - registered_instance_title->SetFont(::Label::Body_13); + auto* registered_instance_title = new wxStaticText(m_parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + registered_instance_title->SetForegroundColour(DESIGN_GRAY600_COLOR); + registered_instance_title->SetFont(::Label::Body_14); registered_instance_title->Wrap(-1); // update the text below checkbox @@ -996,16 +1025,17 @@ wxBoxSizer* PreferencesDialog::create_item_link_association(wxWindow* parent, wx registered_instance_title->SetToolTip(_L("Current Instance Path: ") + registered_bin); } else if (registered_bin.empty()) current_association_str += _L("None"); - else + else{ current_association_str += registered_bin; + registered_instance_title->SetToolTip(current_association_str); + } registered_instance_title->SetLabel(current_association_str); - auto size = registered_instance_title->GetTextExtent(current_association_str); - registered_instance_title->SetMinSize({ size.x + FromDIP(5), -1 }); + registered_instance_title->SetMaxSize(wxSize(DESIGN_WINDOW_SIZE.x - FromDIP(DESIGN_LEFT_MARGIN) - FromDIP(40), -1)); // prevent horizontal scroll }; update_current_association_str(); - v_sizer->Add(registered_instance_title, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 60); + v_sizer->Add(registered_instance_title, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(DESIGN_LEFT_MARGIN)); checkbox->Bind(wxEVT_TOGGLEBUTTON, [=](wxCommandEvent& e) { wxGetApp().associate_url(url_prefix.ToStdWstring()); @@ -1022,8 +1052,10 @@ PreferencesDialog::PreferencesDialog(wxWindow *parent, wxWindowID id, const wxSt : DPIDialog(parent, id, _L("Preferences"), pos, size, style) { SetBackgroundColour(*wxWHITE); + SetMinSize(DESIGN_WINDOW_SIZE); create(); wxGetApp().UpdateDlgDarkUI(this); + Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& event) { try { NetworkAgent* agent = GUI::wxGetApp().getAgent(); @@ -1043,60 +1075,55 @@ PreferencesDialog::PreferencesDialog(wxWindow *parent, wxWindowID id, const wxSt void PreferencesDialog::create() { - app_config = get_app_config(); - m_backup_interval_time = app_config->get("backup_interval"); + app_config = get_app_config(); - SetSizeHints(wxDefaultSize, wxDefaultSize); - - auto main_sizer = new wxBoxSizer(wxVERTICAL); - - m_scrolledWindow = new MyscrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); - m_scrolledWindow->SetScrollRate(5, 5); + m_parent = new MyscrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + m_parent->SetScrollRate(5, 5); + m_parent->SetBackgroundColour(*wxWHITE); m_sizer_body = new wxBoxSizer(wxVERTICAL); - auto m_top_line = new wxPanel(m_scrolledWindow, wxID_ANY, wxDefaultPosition, wxSize(DESIGN_RESOUTION_PREFERENCES.x, 1), wxTAB_TRAVERSAL); - m_top_line->SetBackgroundColour(DESIGN_GRAY400_COLOR); + m_pref_tabs = new TabCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | wxTR_FULL_ROW_HIGHLIGHT); + m_pref_tabs->Bind(wxEVT_RIGHT_DOWN, [this](auto &e) {}); // disable right select + m_pref_tabs->SetFont(Label::Body_14); - m_sizer_body->Add(m_top_line, 0, wxEXPAND, 0); + create_items(); - auto general_page = create_general_page(); -#if !BBL_RELEASE_TO_PUBLIC - auto debug_page = create_debug_page(); -#endif + m_pref_tabs->Bind(wxEVT_TAB_SEL_CHANGED, [this](wxCommandEvent& e) { + Freeze(); + #ifdef __linux__ + m_pref_tabs->SetFocus(); + #endif + int selection = e.GetSelection(); + for (size_t i = 0; i < m_pref_tabs->GetCount(); ++i){ + m_pref_tabs->SetItemBold(i, i == selection); + f_sizers[i]->Show(i == selection); + } + Layout(); + Thaw(); + }); - m_sizer_body->Add(0, 0, 0, wxTOP, FromDIP(28)); - m_sizer_body->Add(general_page, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); -#if !BBL_RELEASE_TO_PUBLIC - m_sizer_body->Add(debug_page, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); -#endif - m_sizer_body->Add(0, 0, 0, wxBOTTOM, FromDIP(28)); - m_scrolledWindow->SetSizerAndFit(m_sizer_body); + auto item_color = StateColor( + std::make_pair(wxColour("#6B6B6C"), (int) StateColor::NotChecked), + std::make_pair(wxColour("#363636"), (int) StateColor::Normal) + ); - main_sizer->Add(m_scrolledWindow, 1, wxEXPAND); + for (size_t i = 0; i < m_pref_tabs->GetCount(); ++i) + m_pref_tabs->SetItemTextColour(i, item_color); - SetSizer(main_sizer); + m_pref_tabs->SelectItem(0); + + m_sizer_body->Add(m_pref_tabs, 0, wxEXPAND | wxBOTTOM, FromDIP(5)); + m_sizer_body->Add(m_parent, 1, wxEXPAND); + + SetSizer(m_sizer_body); Layout(); Fit(); - int screen_height = wxDisplay(m_parent).GetClientArea().GetHeight(); - if (this->GetSize().GetY() > screen_height) - this->SetSize(this->GetSize().GetX() + FromDIP(40), screen_height * 4 / 5); - CenterOnParent(); - wxPoint start_pos = this->GetPosition(); - if (start_pos.y < 0) { this->SetPosition(wxPoint(start_pos.x, 0)); } - - //select first - auto event = wxCommandEvent(EVT_PREFERENCES_SELECT_TAB); - event.SetInt(0); - event.SetEventObject(this); - wxPostEvent(this, event); } PreferencesDialog::~PreferencesDialog() { - m_radio_group.DeleteContents(true); - m_hash_selector.clear(); } void PreferencesDialog::on_dpi_changed(const wxRect &suggested_rect) { this->Refresh(); } @@ -1122,257 +1149,291 @@ void PreferencesDialog::Split(const std::string &src, const std::string &separat dest.push_back(substring); } -wxWindow* PreferencesDialog::create_general_page() +void PreferencesDialog::create_items() { - auto page = new wxWindow(m_scrolledWindow, wxID_ANY); - page->SetBackgroundColour(*wxWHITE); - wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); + // ORCA + // Window focus follows item creation order. so below code has to be in same order with UI + // Create functions for custom controls to keep list clean + // Tooltips added automatically from related title if its empty - auto title_general_settings = create_item_title(_L("General Settings"), page, _L("General Settings")); + wxBoxSizer*sizer_page = new wxBoxSizer(wxVERTICAL); + wxFlexGridSizer* g_sizer; // use same name on all sizers to make easier to ordering without renaming + auto v_gap = FromDIP(4); - // bbs supported languages - wxLanguage supported_languages[]{ - wxLANGUAGE_ENGLISH, - wxLANGUAGE_CHINESE_SIMPLIFIED, - wxLANGUAGE_CHINESE, - wxLANGUAGE_GERMAN, - wxLANGUAGE_CZECH, - wxLANGUAGE_FRENCH, - wxLANGUAGE_SPANISH, - wxLANGUAGE_SWEDISH, - wxLANGUAGE_DUTCH, - wxLANGUAGE_HUNGARIAN, - wxLANGUAGE_JAPANESE, - wxLANGUAGE_ITALIAN, - wxLANGUAGE_KOREAN, - wxLANGUAGE_RUSSIAN, - wxLANGUAGE_UKRAINIAN, - wxLANGUAGE_TURKISH, - wxLANGUAGE_POLISH, - wxLANGUAGE_CATALAN, - wxLANGUAGE_PORTUGUESE_BRAZILIAN, - wxLANGUAGE_LITHUANIAN, - }; + ////////////////////////// + //// GENERAL TAB + ///////////////////////////////////// + m_pref_tabs->AppendItem(_L("General")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); - auto translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); - std::vector language_infos; - language_infos.emplace_back(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH)); - for (size_t i = 0; i < translations.GetCount(); ++i) { - const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(translations[i]); + //// GENERAL > Settings + g_sizer->Add(create_item_title(_L("Settings")), 1, wxEXPAND); - if (langinfo == nullptr) continue; - int language_num = sizeof(supported_languages) / sizeof(supported_languages[0]); - for (auto si = 0; si < language_num; si++) { - if (langinfo == wxLocale::GetLanguageInfo(supported_languages[si])) { - language_infos.emplace_back(langinfo); - } - } - //if (langinfo != nullptr) language_infos.emplace_back(langinfo); - } - sort_remove_duplicates(language_infos); - std::sort(language_infos.begin(), language_infos.end(), [](const wxLanguageInfo *l, const wxLanguageInfo *r) { return l->Description < r->Description; }); - auto item_language = create_item_language_combobox(_L("Language"), page, _L("Language"), 50, "language", language_infos); + auto item_language = create_item_language_combobox(_L("Language"), ""); + g_sizer->Add(item_language); - std::vector Regions = {_L("Asia-Pacific"), _L("China"), _L("Europe"), _L("North America"), _L("Others")}; - auto item_region= create_item_region_combobox(_L("Login Region"), page, _L("Login Region"), Regions); + std::vectorUnits = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"}; + auto item_currency = create_item_combobox(_L("Units"), "", "use_inches", Units); + g_sizer->Add(item_currency); - auto item_stealth_mode = create_item_checkbox(_L("Stealth Mode"), page, _L("This stops the transmission of data to Bambu's cloud services. Users who don't use BBL machines or use LAN mode only can safely turn on this function."), 50, "stealth_mode"); - auto item_enable_plugin = create_item_checkbox(_L("Enable network plugin"), page, _L("Enable network plugin"), 50, "installed_networking"); - auto item_legacy_network_plugin = create_item_checkbox(_L("Use legacy network plugin (Takes effect after restarting Orca)"), page, _L("Disable to use latest network plugin that supports new BambuLab firmwares."), 50, "legacy_networking"); - auto item_check_stable_version_only = create_item_checkbox(_L("Check for stable updates only"), page, _L("Check for stable updates only"), 50, "check_stable_update_only"); + std::vector DefaultPage = {_L("Home"), _L("Prepare")}; + auto item_default_page = create_item_combobox(_L("Default page"), _L("Set the page opened on startup."), "default_page", DefaultPage); + g_sizer->Add(item_default_page); - std::vector Units = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"}; - auto item_currency = create_item_combobox(_L("Units"), page, _L("Units"), "use_inches", Units); - auto item_single_instance = create_item_checkbox(_L("Allow only one OrcaSlicer instance"), page, +#ifdef _WIN32 + auto item_darkmode = create_item_darkmode(_L("Enable dark mode"), "", "dark_color_mode"); + g_sizer->Add(item_darkmode); +#endif + + auto item_single_instance = create_item_checkbox(_L("Allow only one OrcaSlicer instance"), #if __APPLE__ _L("On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances " "of same app from the command line. In such case this settings will allow only one instance."), #else _L("If this is enabled, when starting OrcaSlicer and another instance of the same OrcaSlicer is already running, that instance will be reactivated instead."), #endif - 50, "single_instance"); + "single_instance"); + g_sizer->Add(item_single_instance); - std::vector DefaultPage = {_L("Home"), _L("Prepare")}; - auto item_default_page = create_item_combobox(_L("Default Page"), page, _L("Set the page opened on startup."), "default_page", DefaultPage); + auto item_show_splash_scr = create_item_checkbox(_L("Show splash screen"), _L("Show the splash screen during startup."), "show_splash_screen"); + g_sizer->Add(item_show_splash_scr); - std::vector CameraNavStyle = {_L("Default"), _L("Touchpad")}; - auto item_camera_navigation_style = create_item_combobox(_L("Camera style"), page, _L("Select camera navigation style.\nDefault: LMB+move for rotation, RMB/MMB+move for panning.\nTouchpad: Alt+move for rotation, Shift+move for panning."), "camera_navigation_style", CameraNavStyle); + //auto item_hints = create_item_checkbox(_L("Show \"Daily Tips\" after start"), page, _L("If enabled, useful hints are displayed at startup."), "show_daily_tips"); + //g_sizer->Add(item_hints); - auto item_mouse_zoom_settings = create_item_checkbox(_L("Zoom to mouse position"), page, _L("Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center."), 50, "zoom_to_mouse"); - auto item_use_free_camera_settings = create_item_checkbox(_L("Use free camera"), page, _L("If enabled, use free camera. If not enabled, use constrained camera."), 50, "use_free_camera"); - auto swap_pan_rotate = create_item_checkbox(_L("Swap pan and rotate mouse buttons"), page, _L("If enabled, swaps the left and right mouse buttons pan and rotate functions."), 50, "swap_mouse_buttons"); - auto reverse_mouse_zoom = create_item_checkbox(_L("Reverse mouse zoom"), page, _L("If enabled, reverses the direction of zoom with mouse wheel."), 50, "reverse_mouse_wheel_zoom"); - auto camera_orbit_mult = create_camera_orbit_mult_input(_L("Orbit speed multiplier"), page, _L("Multiplies the orbit speed for finer or coarser camera movement.")); + auto item_downloads = create_item_downloads(_L("Downloads folder") + ": ", _L("Target folder for downloaded items")); + g_sizer->Add(item_downloads); - auto item_show_splash_screen = create_item_checkbox(_L("Show splash screen"), page, _L("Show the splash screen during startup."), 50, "show_splash_screen"); - auto item_hints = create_item_checkbox(_L("Show \"Tip of the day\" notification after start"), page, _L("If enabled, useful hints are displayed at startup."), 50, "show_hints"); - - auto item_calc_mode = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time the color changed."), page, _L("If enabled, auto-calculate every time the color changed."), 50, "auto_calculate"); - auto item_calc_in_long_retract = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time when the filament is changed."), page, _L("If enabled, auto-calculate every time when filament is changed"), 50, "auto_calculate_when_filament_change"); - auto item_remember_printer_config = create_item_checkbox(_L("Remember printer configuration"), page, _L("If enabled, Orca will remember and switch filament/process configuration for each printer automatically."), 50, "remember_printer_config"); - auto item_step_mesh_setting = create_item_checkbox(_L("Show the step mesh parameter setting dialog."), page, _L("If enabled,a parameter settings dialog will appear during STEP file import."), 50, "enable_step_mesh_setting"); - auto item_multi_machine = create_item_checkbox(_L("Multi-device Management (Take effect after restarting Orca Slicer)."), page, _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), 50, "enable_multi_machine"); - auto item_auto_arrange = create_item_checkbox(_L("Auto arrange plate after cloning"), page, _L("Auto arrange plate after object cloning"), 50, "auto_arrange"); - auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); - auto title_network = create_item_title(_L("Network"), page, _L("Network")); - auto item_user_sync = create_item_checkbox(_L("Auto sync user presets (Printer/Filament/Process)"), page, _L("User Sync"), 50, "sync_user_preset"); - auto item_system_sync = create_item_checkbox(_L("Update built-in Presets automatically."), page, _L("System Sync"), 50, "sync_system_preset"); - auto item_save_presets = create_item_button(_L("Clear my choice on the unsaved presets."), _L("Clear"), page, L"", _L("Clear my choice on the unsaved presets."), []() { - wxGetApp().app_config->set("save_preset_choise", ""); - }); - -#ifdef _WIN32 - auto title_associate_file = create_item_title(_L("Associate files to OrcaSlicer"), page, _L("Associate files to OrcaSlicer")); - - // associate file - auto item_associate_3mf = create_item_checkbox(_L("Associate .3mf files to OrcaSlicer"), page, - _L("If enabled, sets OrcaSlicer as default application to open .3mf files"), 50, "associate_3mf"); - auto item_associate_stl = create_item_checkbox(_L("Associate .stl files to OrcaSlicer"), page, - _L("If enabled, sets OrcaSlicer as default application to open .stl files"), 50, "associate_stl"); - auto item_associate_step = create_item_checkbox(_L("Associate .step/.stp files to OrcaSlicer"), page, - _L("If enabled, sets OrcaSlicer as default application to open .step files"), 50, "associate_step"); - - auto title_associate_url = create_item_title(_L("Associate web links to OrcaSlicer"), page, _L("Associate URLs to OrcaSlicer")); - - auto associate_url_prusaslicer = create_item_link_association(page, L"prusaslicer", "Printables.com"); - auto associate_url_bambustudio = create_item_link_association(page, L"bambustudio", "Makerworld.com"); - auto associate_url_cura = create_item_link_association(page, L"cura", "Thingiverse.com"); -#endif // _WIN32 - - // auto title_modelmall = create_item_title(_L("Online Models"), page, _L("Online Models")); - // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); - // auto item_modelmall = create_item_checkbox(_L("Show online staff-picked models on the home page"), page, _L("Show online staff-picked models on the home page"), 50, "staff_pick_switch"); - - auto title_project = create_item_title(_L("Project"), page, ""); + //// GENERAL > Project + g_sizer->Add(create_item_title(_L("Project")), 1, wxEXPAND); std::vector projectLoadSettingsBehaviourOptions = {_L("Load All"), _L("Ask When Relevant"), _L("Always Ask"), _L("Load Geometry Only")}; - std::vector projectLoadSettingsConfigOptions = { OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_ALL, OPTION_PROJECT_LOAD_BEHAVIOUR_ASK_WHEN_RELEVANT, OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_GEOMETRY }; - auto item_project_load_behaviour = create_item_combobox(_L("Load Behaviour"), page, _L("Should printer/filament/process settings be loaded when opening a .3mf?"), SETTING_PROJECT_LOAD_BEHAVIOUR, projectLoadSettingsBehaviourOptions, projectLoadSettingsConfigOptions); + std::vector projectLoadSettingsConfigOptions = { OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_ALL, OPTION_PROJECT_LOAD_BEHAVIOUR_ASK_WHEN_RELEVANT, OPTION_PROJECT_LOAD_BEHAVIOUR_ALWAYS_ASK, OPTION_PROJECT_LOAD_BEHAVIOUR_LOAD_GEOMETRY }; + auto item_project_load = create_item_combobox(_L("Load behaviour"), _L("Should printer/filament/process settings be loaded when opening a .3mf?"), SETTING_PROJECT_LOAD_BEHAVIOUR, projectLoadSettingsBehaviourOptions, projectLoadSettingsConfigOptions); + g_sizer->Add(item_project_load); - auto item_max_recent_count = create_item_input(_L("Maximum recent files"), "", page, _L("Maximum count of recent files"), "max_recent_count", [](wxString value) { + auto item_max_recent_count = create_item_input(_L("Maximum recent files"), "", _L("Maximum count of recent files"), "max_recent_count", [](wxString value) { long max = 0; if (value.ToLong(&max)) wxGetApp().mainframe->set_max_recent_count(max); }); + g_sizer->Add(item_max_recent_count); - auto item_recent_models = create_item_checkbox(_L("Add model files (stl/step) to recent file list."), page, _L("Add model files (stl/step) to recent file list."), 50, "recent_models"); + auto item_recent_models = create_item_checkbox(_L("Add STL/STEP files to recent files list"), "", "recent_models"); + g_sizer->Add(item_recent_models); - auto item_save_choise = create_item_button(_L("Clear my choice on the unsaved projects."), _L("Clear"), page, L"", _L("Clear my choice on the unsaved projects."), []() { + auto item_gcodes_warning = create_item_checkbox(_L("Don't warn when loading 3MF with modified G-code"), "", "no_warn_when_modified_gcodes"); + g_sizer->Add(item_gcodes_warning); + + auto item_step_dialog = create_item_checkbox(_L("Show options when importing STEP file"), _L("If enabled,a parameter settings dialog will appear during STEP file import."), "enable_step_mesh_setting"); + g_sizer->Add(item_step_dialog); + + auto item_backup = create_item_backup(_L("Auto backup"), _L("Backup your project periodically for restoring from the occasional crash.")); + g_sizer->Add(item_backup); + + //// GENERAL > Preset + g_sizer->Add(create_item_title(_L("Preset")), 1, wxEXPAND); + + auto item_remember_printer = create_item_checkbox(_L("Remember printer configuration"), _L("If enabled, Orca will remember and switch filament/process configuration for each printer automatically."), "remember_printer_config"); + g_sizer->Add(item_remember_printer); + + //// GENERAL > Features + g_sizer->Add(create_item_title(_L("Features")), 1, wxEXPAND); + + auto item_multi_machine = create_item_checkbox(_L("Multi device management"), _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), "enable_multi_machine", _L("(Requires restart)")); + g_sizer->Add(item_multi_machine); + + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); + + ////////////////////////// + //// CONTROL TAB + ///////////////////////////////////// + m_pref_tabs->AppendItem(_L("Control")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); + + //// CONTROL > Behaviour + g_sizer->Add(create_item_title(_L("Behaviour")), 1, wxEXPAND); + + auto item_auto_flush = create_item_autoflush(_L("Auto flush after changing ..."), _L("Auto calculate flushing volumes when selected values changed")); + g_sizer->Add(item_auto_flush); + + auto item_auto_arrange = create_item_checkbox(_L("Auto arrange plate after cloning"), "", "auto_arrange"); + g_sizer->Add(item_auto_arrange); + + //// CONTROL > Camera + g_sizer->Add(create_item_title(_L("Camera")), 1, wxEXPAND); + + std::vector CameraNavStyle = {_L("Default"), _L("Touchpad")}; + auto item_camera_nav_style = create_item_combobox(_L("Camera style"), _L("Select camera navigation style.\nDefault: LMB+move for rotation, RMB/MMB+move for panning.\nTouchpad: Alt+move for rotation, Shift+move for panning."), "camera_navigation_style", CameraNavStyle); + g_sizer->Add(item_camera_nav_style); + + auto camera_orbit_mult = create_camera_orbit_mult_input(_L("Orbit speed multiplier"), _L("Multiplies the orbit speed for finer or coarser camera movement.")); + g_sizer->Add(camera_orbit_mult); + + auto item_zoom_to_mouse = create_item_checkbox(_L("Zoom to mouse position"), _L("Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center."), "zoom_to_mouse"); + g_sizer->Add(item_zoom_to_mouse); + + auto item_use_free_camera = create_item_checkbox(_L("Use free camera"), _L("If enabled, use free camera. If not enabled, use constrained camera."), "use_free_camera"); + g_sizer->Add(item_use_free_camera); + + auto swap_pan_rotate = create_item_checkbox(_L("Swap pan and rotate mouse buttons"), _L("If enabled, swaps the left and right mouse buttons pan and rotate functions."), "swap_mouse_buttons"); + g_sizer->Add(swap_pan_rotate); + + auto reverse_mouse_zoom = create_item_checkbox(_L("Reverse mouse zoom"), _L("If enabled, reverses the direction of zoom with mouse wheel."), "reverse_mouse_wheel_zoom"); + g_sizer->Add(reverse_mouse_zoom); + + //// CONTROL > Clear my choice on ... + g_sizer->Add(create_item_title(_L("Clear my choice on ...")), 1, wxEXPAND); + + auto item_save_choise = create_item_button(_L("Unsaved projects"), _L("Clear"), "", _L("Clear my choice on the unsaved projects."), []() { wxGetApp().app_config->set("save_project_choise", ""); }); - // auto item_backup = create_item_switch(_L("Backup switch"), page, _L("Backup switch"), "units"); - auto item_gcodes_warning = create_item_checkbox(_L("No warnings when loading 3MF with modified G-code"), page, _L("No warnings when loading 3MF with modified G-code"), 50, "no_warn_when_modified_gcodes"); - auto item_backup = create_item_checkbox(_L("Auto-Backup"), page,_L("Backup your project periodically for restoring from the occasional crash."), 50, "backup_switch"); - auto item_backup_interval = create_item_backup_input(_L("every"), page, _L("The period of backup in seconds."), "backup_interval"); + g_sizer->Add(item_save_choise); - //downloads - auto title_downloads = create_item_title(_L("Downloads"), page, _L("Downloads")); - auto item_downloads = create_item_downloads(page,50,"download_path"); + auto item_save_presets = create_item_button(_L("Unsaved presets"), _L("Clear"), "", _L("Clear my choice on the unsaved presets."), []() { + wxGetApp().app_config->set("save_preset_choise", ""); + }); + g_sizer->Add(item_save_presets); - //dark mode + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); + + ////////////////////////// + //// ONLINE TAB + ///////////////////////////////////// + m_pref_tabs->AppendItem(_L("Online")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); + + //// ONLINE > Connection + g_sizer->Add(create_item_title(_L("Connection")), 1, wxEXPAND); + + auto item_region = create_item_region_combobox(_L("Login region"), ""); + g_sizer->Add(item_region); + + auto item_stealth_mode = create_item_checkbox(_L("Stealth mode"), _L("This stops the transmission of data to Bambu's cloud services. Users who don't use BBL machines or use LAN mode only can safely turn on this function."), "stealth_mode"); + g_sizer->Add(item_stealth_mode); + + auto item_network_test = create_item_button(_L("Network test"), _L("Test") + " " + dots, "", _L("Open Network Test"), []() { + NetworkTestDialog dlg(wxGetApp().mainframe); + dlg.ShowModal(); + }); + g_sizer->Add(item_network_test); + + //// ONLINE > Update & sync + g_sizer->Add(create_item_title(_L("Update & sync")), 1, wxEXPAND); + + auto item_stable_updates = create_item_checkbox(_L("Check for stable updates only"), "", "check_stable_update_only"); + g_sizer->Add(item_stable_updates); + + auto item_user_sync = create_item_checkbox(_L("Auto sync user presets (Printer/Filament/Process)"), "", "sync_user_preset"); + g_sizer->Add(item_user_sync); + + auto item_system_sync = create_item_checkbox(_L("Update built-in Presets automatically."), "", "sync_system_preset"); + g_sizer->Add(item_system_sync); + + //// ONLINE > Network plugin + g_sizer->Add(create_item_title(_L("Network plugin")), 1, wxEXPAND); + + auto item_enable_plugin = create_item_checkbox(_L("Enable network plugin"), "", "installed_networking"); + g_sizer->Add(item_enable_plugin); + + auto item_legacy_network = create_item_checkbox(_L("Use legacy network plugin"), _L("Disable to use latest network plugin that supports new BambuLab firmwares."), "legacy_networking", _L("(Requires restart)")); + g_sizer->Add(item_legacy_network); + + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); + + ////////////////////////// + //// ASSOCIATE TAB + ///////////////////////////////////// #ifdef _WIN32 - auto title_darkmode = create_item_title(_L("Dark Mode"), page, _L("Dark Mode")); - auto item_darkmode = create_item_darkmode_checkbox(_L("Enable Dark mode"), page,_L("Enable Dark mode"), 50, "dark_color_mode"); -#endif + m_pref_tabs->AppendItem(_L("Associate")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); - auto title_develop_mode = create_item_title(_L("Develop mode"), page, _L("Develop mode")); - auto item_develop_mode = create_item_checkbox(_L("Develop mode"), page, _L("Develop mode"), 50, "developer_mode"); - auto item_skip_ams_blacklist_check = create_item_checkbox(_L("Skip AMS blacklist check"), page, _L("Skip AMS blacklist check"), 50, "skip_ams_blacklist_check"); + //// ASSOCIATE > Extensions + g_sizer->Add(create_item_title(_L("Associate files to OrcaSlicer")), 1, wxEXPAND); - sizer_page->Add(title_general_settings, 0, wxEXPAND, 0); - sizer_page->Add(item_language, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_region, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_currency, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_default_page, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_camera_navigation_style, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_single_instance, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_mouse_zoom_settings, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_use_free_camera_settings, 0, wxTOP, FromDIP(3)); - sizer_page->Add(swap_pan_rotate, 0, wxTOP, FromDIP(3)); - sizer_page->Add(reverse_mouse_zoom, 0, wxTOP, FromDIP(3)); - sizer_page->Add(camera_orbit_mult, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_show_splash_screen, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_calc_in_long_retract, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_multi_machine, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_step_mesh_setting, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_auto_arrange, 0, wxTOP, FromDIP(3)); - sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20)); - sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_user_sync, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_system_sync, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_remember_printer_config, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_save_presets, 0, wxTOP, FromDIP(3)); - sizer_page->Add(title_network, 0, wxTOP | wxEXPAND, FromDIP(20)); - sizer_page->Add(item_check_stable_version_only, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_stealth_mode, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_enable_plugin, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_legacy_network_plugin, 0, wxTOP, FromDIP(3)); -#ifdef _WIN32 - sizer_page->Add(title_associate_file, 0, wxTOP| wxEXPAND, FromDIP(20)); - sizer_page->Add(item_associate_3mf, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_associate_stl, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_associate_step, 0, wxTOP, FromDIP(3)); - sizer_page->Add(title_associate_url, 0, wxTOP| wxEXPAND, FromDIP(20)); - sizer_page->Add(associate_url_prusaslicer, 0, wxTOP, FromDIP(3)); - sizer_page->Add(associate_url_bambustudio, 0, wxTOP, FromDIP(3)); - sizer_page->Add(associate_url_cura, 0, wxTOP, FromDIP(3)); + auto item_associate_3mf = create_item_checkbox(_L("Associate .3mf files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open .3mf files") , "associate_3mf"); + g_sizer->Add(item_associate_3mf); + + auto item_associate_stl = create_item_checkbox(_L("Associate .stl files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open .stl files") , "associate_stl"); + g_sizer->Add(item_associate_stl); + + auto item_associate_step = create_item_checkbox(_L("Associate .step/.stp files to OrcaSlicer"), _L("If enabled, sets OrcaSlicer as default application to open .step files"), "associate_step"); + g_sizer->Add(item_associate_step); + + //// ASSOCIATE > WebLinks + g_sizer->Add(create_item_title(_L("Associate web links to OrcaSlicer")), 1, wxEXPAND); + + auto associate_url_prusa = create_item_link_association(L"prusaslicer", "Printables.com"); + g_sizer->Add(associate_url_prusa); + + auto associate_url_bambu = create_item_link_association(L"bambustudio", "Makerworld.com"); + g_sizer->Add(associate_url_bambu); + + auto associate_url_cura = create_item_link_association(L"cura", "Thingiverse.com"); + g_sizer->Add(associate_url_cura); + + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); #endif // _WIN32 - // auto item_title_modelmall = sizer_page->Add(title_modelmall, 0, wxTOP | wxEXPAND, FromDIP(20)); - // auto item_item_modelmall = sizer_page->Add(item_modelmall, 0, wxTOP, FromDIP(3)); - // auto update_modelmall = [this, item_title_modelmall, item_item_modelmall] (wxEvent & e) { - // bool has_model_mall = wxGetApp().has_model_mall(); - // item_title_modelmall->Show(has_model_mall); - // item_item_modelmall->Show(has_model_mall); - // Layout(); - // Fit(); - // }; - // wxCommandEvent eee(wxEVT_COMBOBOX); - // update_modelmall(eee); - // item_region->GetItem(size_t(2))->GetWindow()->Bind(wxEVT_COMBOBOX, update_modelmall); - sizer_page->Add(title_project, 0, wxTOP| wxEXPAND, FromDIP(20)); - sizer_page->Add(item_project_load_behaviour, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_max_recent_count, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_recent_models, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_save_choise, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_gcodes_warning, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_backup, 0, wxTOP,FromDIP(3)); - item_backup->Add(item_backup_interval, 0, wxLEFT, 0); - sizer_page->Add(title_downloads, 0, wxTOP| wxEXPAND, FromDIP(20)); - sizer_page->Add(item_downloads, 0, wxEXPAND, FromDIP(3)); + ////////////////////////// + //// DEVELOPER TAB + ///////////////////////////////////// + m_pref_tabs->AppendItem(_L("Developer")); + f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); + g_sizer = f_sizers.back(); + g_sizer->AddGrowableCol(0, 1); -#ifdef _WIN32 - sizer_page->Add(title_darkmode, 0, wxTOP | wxEXPAND, FromDIP(20)); - sizer_page->Add(item_darkmode, 0, wxEXPAND, FromDIP(3)); + //// DEVELOPER > Settings + g_sizer->Add(create_item_title(_L("Settings")), 1, wxEXPAND); + + auto item_develop_mode = create_item_checkbox(_L("Develop mode"), "", "developer_mode"); + g_sizer->Add(item_develop_mode); + + auto item_ams_blacklist = create_item_checkbox(_L("Skip AMS blacklist check"), "", "skip_ams_blacklist_check"); + g_sizer->Add(item_ams_blacklist); + + g_sizer->Add(create_item_title(_L("Log Level")), 1, wxEXPAND); + auto log_level_list = std::vector{_L("fatal"), _L("error"), _L("warning"), _L("info"), _L("debug"), _L("trace")}; + auto loglevel_combox = create_item_loglevel_combobox(_L("Log Level"), _L("Log Level"), log_level_list); + g_sizer->Add(loglevel_combox); + + //// DEVELOPER > Debug +#if !BBL_RELEASE_TO_PUBLIC + g_sizer->Add(create_item_title(_L("Debug")), 1, wxEXPAND); + auto debug_page = create_debug_page(); + g_sizer->Add(debug_page, 1, wxEXPAND); #endif - sizer_page->Add(title_develop_mode, 0, wxTOP | wxEXPAND, FromDIP(20)); - sizer_page->Add(item_develop_mode, 0, wxTOP, FromDIP(3)); - sizer_page->Add(item_skip_ams_blacklist_check, 0, wxTOP, FromDIP(3)); + g_sizer->AddSpacer(FromDIP(10)); + sizer_page->Add(g_sizer, 0, wxEXPAND); - page->SetSizer(sizer_page); - page->Layout(); - sizer_page->Fit(page); - return page; -} + ///////////////////////////////////// + ////////////////////////// -void PreferencesDialog::create_gui_page() -{ - auto page = new wxWindow(this, wxID_ANY); - wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); + g_sizer = nullptr; - auto title_index_and_tip = create_item_title(_L("Home page and daily tips"), page, _L("Home page and daily tips")); - auto item_home_page = create_item_checkbox(_L("Show home page on startup"), page, _L("Show home page on startup"), 50, "show_home_page"); - //auto item_daily_tip = create_item_checkbox(_L("Show daily tip on startup"), page, _L("Show daily tip on startup"), 50, "show_daily_tips"); + // Hide all tabs instead first one + for (size_t i = 1; i < f_sizers.size(); ++i) + f_sizers[i]->Show(false); - sizer_page->Add(title_index_and_tip, 0, wxTOP, 26); - sizer_page->Add(item_home_page, 0, wxTOP, 6); - //sizer_page->Add(item_daily_tip, 0, wxTOP, 6); + ///////////////////////////////////// + ////////////////////////// - page->SetSizer(sizer_page); - page->Layout(); - sizer_page->Fit(page); + m_parent->SetSizer(sizer_page); + m_parent->Layout(); + sizer_page->Fit(m_parent); } void PreferencesDialog::create_sync_page() @@ -1380,10 +1441,10 @@ void PreferencesDialog::create_sync_page() auto page = new wxWindow(this, wxID_ANY); wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); - auto title_sync_settingy = create_item_title(_L("Sync settings"), page, _L("Sync settings")); - auto item_user_sync = create_item_checkbox(_L("User sync"), page, _L("User sync"), 50, "user_sync_switch"); - auto item_preset_sync = create_item_checkbox(_L("Preset sync"), page, _L("Preset sync"), 50, "preset_sync_switch"); - auto item_preferences_sync = create_item_checkbox(_L("Preferences sync"), page, _L("Preferences sync"), 50, "preferences_sync_switch"); + auto title_sync_settingy = create_item_title(_L("Sync settings")); + auto item_user_sync = create_item_checkbox(_L("User sync"), _L("User sync"), "user_sync_switch"); + auto item_preset_sync = create_item_checkbox(_L("Preset sync"), _L("Preset sync"), "preset_sync_switch"); + auto item_preferences_sync = create_item_checkbox(_L("Preferences sync"), _L("Preferences sync"), "preferences_sync_switch"); sizer_page->Add(title_sync_settingy, 0, wxTOP, 26); sizer_page->Add(item_user_sync, 0, wxTOP, 6); @@ -1400,20 +1461,20 @@ void PreferencesDialog::create_shortcuts_page() auto page = new wxWindow(this, wxID_ANY); wxBoxSizer *sizer_page = new wxBoxSizer(wxVERTICAL); - auto title_view_control = create_item_title(_L("View control settings"), page, _L("View control settings")); + auto title_view_control = create_item_title(_L("View control settings")); std::vector keyboard_supported; Split(app_config->get("keyboard_supported"), "/", keyboard_supported); std::vector mouse_supported; Split(app_config->get("mouse_supported"), "/", mouse_supported); - auto item_rotate_view = create_item_multiple_combobox(_L("Rotate of view"), page, _L("Rotate of view"), 10, "rotate_view", keyboard_supported, + auto item_rotate_view = create_item_multiple_combobox(_L("Rotate of view"), _L("Rotate of view"), "rotate_view", keyboard_supported, mouse_supported); - auto item_move_view = create_item_multiple_combobox(_L("Move of view"), page, _L("Move of view"), 10, "move_view", keyboard_supported, mouse_supported); - auto item_zoom_view = create_item_multiple_combobox(_L("Zoom of view"), page, _L("Zoom of view"), 10, "rotate_view", keyboard_supported, mouse_supported); + auto item_move_view = create_item_multiple_combobox(_L("Move of view"), _L("Move of view"), "move_view", keyboard_supported, mouse_supported); + auto item_zoom_view = create_item_multiple_combobox(_L("Zoom of view"), _L("Zoom of view"), "rotate_view", keyboard_supported, mouse_supported); - auto title_other = create_item_title(_L("Other"), page, _L("Other")); - auto item_other = create_item_checkbox(_L("Mouse wheel reverses when zooming"), page, _L("Mouse wheel reverses when zooming"), 50, "mouse_wheel"); + auto title_other = create_item_title(_L("Other")); + auto item_other = create_item_checkbox(_L("Mouse wheel reverses when zooming"), _L("Mouse wheel reverses when zooming"), "mouse_wheel"); sizer_page->Add(title_view_control, 0, wxTOP, 26); sizer_page->Add(item_rotate_view, 0, wxTOP, 8); @@ -1428,52 +1489,46 @@ void PreferencesDialog::create_shortcuts_page() sizer_page->Fit(page); } -wxWindow* PreferencesDialog::create_debug_page() +wxBoxSizer* PreferencesDialog::create_debug_page() { - auto page = new wxWindow(m_scrolledWindow, wxID_ANY); - page->SetBackgroundColour(*wxWHITE); - m_internal_developer_mode_def = app_config->get("internal_developer_mode"); m_backup_interval_def = app_config->get("backup_interval"); m_iot_environment_def = app_config->get("iot_environment"); wxBoxSizer *bSizer = new wxBoxSizer(wxVERTICAL); + auto enable_ssl_for_mqtt = create_item_checkbox(_L("Enable SSL(MQTT)"), _L("Enable SSL(MQTT)"), "enable_ssl_for_mqtt"); + auto enable_ssl_for_ftp = create_item_checkbox(_L("Enable SSL(FTP)"), _L("Enable SSL(MQTT)"), "enable_ssl_for_ftp"); + auto item_internal_developer = create_item_checkbox(_L("Internal developer mode"), _L("Internal developer mode"), "internal_developer_mode"); - auto enable_ssl_for_mqtt = create_item_checkbox(_L("Enable SSL(MQTT)"), page, _L("Enable SSL(MQTT)"), 50, "enable_ssl_for_mqtt"); - auto enable_ssl_for_ftp = create_item_checkbox(_L("Enable SSL(FTP)"), page, _L("Enable SSL(MQTT)"), 50, "enable_ssl_for_ftp"); - auto item_internal_developer = create_item_checkbox(_L("Internal developer mode"), page, _L("Internal developer mode"), 50, "internal_developer_mode"); + auto title_host = create_item_title(_L("Host Setting")); + // ORCA RadioGroup + auto radio_group = new RadioGroup(m_parent, { + _L("DEV host: api-dev.bambu-lab.com/v1"), // 0 + _L("QA host: api-qa.bambu-lab.com/v1"), // 1 + _L("PRE host: api-pre.bambu-lab.com/v1"), // 2 + _L("Product host") // 3 + }, wxVERTICAL); - auto title_log_level = create_item_title(_L("Log Level"), page, _L("Log Level")); - auto log_level_list = std::vector{_L("fatal"), _L("error"), _L("warning"), _L("info"), _L("debug"), _L("trace")}; - auto loglevel_combox = create_item_loglevel_combobox(_L("Log Level"), page, _L("Log Level"), log_level_list); - - auto title_host = create_item_title(_L("Host Setting"), page, _L("Host Setting")); - auto radio1 = create_item_radiobox(_L("DEV host: api-dev.bambu-lab.com/v1"), page, wxEmptyString, 50, 1, "dev_host"); - auto radio2 = create_item_radiobox(_L("QA host: api-qa.bambu-lab.com/v1"), page, wxEmptyString, 50, 1, "qa_host"); - auto radio3 = create_item_radiobox(_L("PRE host: api-pre.bambu-lab.com/v1"), page, wxEmptyString, 50, 1, "pre_host"); - auto radio4 = create_item_radiobox(_L("Product host"), page, wxEmptyString, 50, 1, "product_host"); + radio_group->SetRadioTooltip(0, "dev_host"); + radio_group->SetRadioTooltip(1, "qa_host"); + radio_group->SetRadioTooltip(2, "pre_host"); + radio_group->SetRadioTooltip(3, "product_host"); if (m_iot_environment_def == ENV_DEV_HOST) { - on_select_radio("dev_host"); + radio_group->SetSelection(0); } else if (m_iot_environment_def == ENV_QAT_HOST) { - on_select_radio("qa_host"); + radio_group->SetSelection(1); } else if (m_iot_environment_def == ENV_PRE_HOST) { - on_select_radio("pre_host"); + radio_group->SetSelection(2); } else if (m_iot_environment_def == ENV_PRODUCT_HOST) { - on_select_radio("product_host"); + radio_group->SetSelection(3); } + Button* debug_button = new Button(m_parent, _L("debug save button")); + debug_button->SetStyle(ButtonStyle::Confirm, ButtonType::Window); - StateColor btn_bg_white(std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair(AMS_CONTROL_DISABLE_COLOUR, StateColor::Pressed), - std::pair(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, StateColor::Hovered), - std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Normal)); - StateColor btn_bd_white(std::pair(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); - - Button* debug_button = new Button(page, _L("debug save button")); - debug_button->SetStyle(ButtonStyle::Regular, ButtonType::Window); - - debug_button->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + debug_button->Bind(wxEVT_LEFT_DOWN, [this, radio_group](wxMouseEvent &e) { // success message box MessageDialog dialog(this, _L("save debug settings"), _L("DEBUG settings have been saved successfully!"), wxNO_DEFAULT | wxYES_NO | wxICON_INFORMATION); dialog.SetSize(400,-1); @@ -1491,13 +1546,13 @@ wxWindow* PreferencesDialog::create_debug_page() if (m_backup_interval_def != m_backup_interval_time) { m_backup_interval_textinput->GetTextCtrl()->SetValue(m_backup_interval_def); } if (m_iot_environment_def == ENV_DEV_HOST) { - on_select_radio("dev_host"); + radio_group->SetSelection(0); } else if (m_iot_environment_def == ENV_QAT_HOST) { - on_select_radio("qa_host"); + radio_group->SetSelection(1); } else if (m_iot_environment_def == ENV_PRE_HOST) { - on_select_radio("pre_host"); + radio_group->SetSelection(2); } else if (m_iot_environment_def == ENV_PRODUCT_HOST) { - on_select_radio("product_host"); + radio_group->SetSelection(3); } break; @@ -1505,7 +1560,7 @@ wxWindow* PreferencesDialog::create_debug_page() case wxID_YES: { // bbs domain changed - auto param = get_select_radio(1); + auto param = radio_group->GetSelection(); std::map iot_environment_map; iot_environment_map["dev_host"] = ENV_DEV_HOST; @@ -1516,21 +1571,19 @@ wxWindow* PreferencesDialog::create_debug_page() //if (iot_environment_map[param] != m_iot_environment_def) { if (true) { NetworkAgent* agent = wxGetApp().getAgent(); - if (param == "dev_host") { + if (param == 0) { // "dev_host" app_config->set("iot_environment", ENV_DEV_HOST); } - else if (param == "qa_host") { + else if (param == 1) { // "qa_host" app_config->set("iot_environment", ENV_QAT_HOST); } - else if (param == "pre_host") { + else if (param == 2) { // "pre_host" app_config->set("iot_environment", ENV_PRE_HOST); } - else if (param == "product_host") { + else if (param == 3) { // "product_host" app_config->set("iot_environment", ENV_PRODUCT_HOST); } - - AppConfig* config = GUI::wxGetApp().app_config; std::string country_code = config->get_country_code(); if (agent) { @@ -1553,76 +1606,14 @@ wxWindow* PreferencesDialog::create_debug_page() } }); - bSizer->Add(enable_ssl_for_mqtt, 0, wxTOP, FromDIP(3)); bSizer->Add(enable_ssl_for_ftp, 0, wxTOP, FromDIP(3)); bSizer->Add(item_internal_developer, 0, wxTOP, FromDIP(3)); - bSizer->Add(title_log_level, 0, wxTOP| wxEXPAND, FromDIP(20)); - bSizer->Add(loglevel_combox, 0, wxTOP, FromDIP(3)); - bSizer->Add(title_host, 0, wxTOP| wxEXPAND, FromDIP(20)); - bSizer->Add(radio1, 0, wxEXPAND | wxTOP, FromDIP(3)); - bSizer->Add(radio2, 0, wxEXPAND | wxTOP, FromDIP(3)); - bSizer->Add(radio3, 0, wxEXPAND | wxTOP, FromDIP(3)); - bSizer->Add(radio4, 0, wxEXPAND | wxTOP, FromDIP(3)); + bSizer->Add(title_host, 0, wxEXPAND); + bSizer->Add(radio_group, 0, wxEXPAND | wxLEFT, FromDIP(DESIGN_LEFT_MARGIN)); bSizer->Add(debug_button, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(15)); - page->SetSizer(bSizer); - page->Layout(); - bSizer->Fit(page); - return page; + return bSizer; } -void PreferencesDialog::on_select_radio(std::string param) -{ - RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); - auto groupid = 0; - - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_param_name == param) groupid = rs->m_groupid; - it = it->GetNext(); - } - - it = m_radio_group.GetFirst(); - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_groupid == groupid && rs->m_param_name == param) rs->m_radiobox->SetValue(true); - if (rs->m_groupid == groupid && rs->m_param_name != param) rs->m_radiobox->SetValue(false); - it = it->GetNext(); - } -} - -wxString PreferencesDialog::get_select_radio(int groupid) -{ - RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_groupid == groupid && rs->m_radiobox->GetValue()) { return rs->m_param_name; } - it = it->GetNext(); - } - - return wxEmptyString; -} - -void PreferencesDialog::OnSelectRadio(wxMouseEvent &event) -{ - RadioSelectorList::compatibility_iterator it = m_radio_group.GetFirst(); - auto groupid = 0; - - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_radiobox->GetId() == event.GetId()) groupid = rs->m_groupid; - it = it->GetNext(); - } - - it = m_radio_group.GetFirst(); - while (it) { - RadioSelector *rs = it->GetData(); - if (rs->m_groupid == groupid && rs->m_radiobox->GetId() == event.GetId()) rs->m_radiobox->SetValue(true); - if (rs->m_groupid == groupid && rs->m_radiobox->GetId() != event.GetId()) rs->m_radiobox->SetValue(false); - it = it->GetNext(); - } -} - - }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index e65ae52d35..9be0d9d656 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -4,7 +4,6 @@ #include "GUI.hpp" #include "GUI_Utils.hpp" -#include #include #include #include @@ -13,48 +12,23 @@ #include "Widgets/ComboBox.hpp" #include "Widgets/CheckBox.hpp" #include "Widgets/TextInput.hpp" +#include "Widgets/TabCtrl.hpp" namespace Slic3r { namespace GUI { +#define DESIGN_GRAY900_COLOR wxColour("#363636") // Label color +#define DESIGN_GRAY600_COLOR wxColour("#ACACAC") // Dimmed text color -#define DESIGN_SELECTOR_NOMORE_COLOR wxColour(248, 248, 248) -#define DESIGN_GRAY900_COLOR wxColour(38, 46, 48) -#define DESIGN_GRAY800_COLOR wxColour(50, 58, 61) -#define DESIGN_GRAY600_COLOR wxColour(144, 144, 144) -#define DESIGN_GRAY400_COLOR wxColour(166, 169, 170) +#define DESIGN_WINDOW_SIZE wxSize(FromDIP(640), FromDIP(640)) +#define DESIGN_TITLE_SIZE wxSize(FromDIP(280), -1) +#define DESIGN_COMBOBOX_SIZE wxSize(FromDIP(120), -1) +#define DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(120), -1) +#define DESIGN_INPUT_SIZE wxSize(FromDIP(120), -1) +#define DESIGN_LEFT_MARGIN 25 -class Selector -{ -public: - int m_index; - wxWindow *m_tab_button; - wxWindow *m_tab_text; -}; -WX_DECLARE_HASH_MAP(int, Selector *, wxIntegerHash, wxIntegerEqual, SelectorHash); - -class RadioBox; -class RadioSelector -{ -public: - wxString m_param_name; - int m_groupid; - RadioBox *m_radiobox; - bool m_selected = false; -}; - -WX_DECLARE_LIST(RadioSelector, RadioSelectorList); class CheckBox; class TextInput; - - -#define DESIGN_RESOUTION_PREFERENCES wxSize(FromDIP(540), -1) -#define DESIGN_TITLE_SIZE wxSize(FromDIP(100), -1) -#define DESIGN_COMBOBOX_SIZE wxSize(FromDIP(140), -1) -#define DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(160), -1) -#define DESIGN_INPUT_SIZE wxSize(FromDIP(100), -1) - - class PreferencesDialog : public DPIDialog { private: @@ -62,7 +36,8 @@ private: protected: wxBoxSizer * m_sizer_body; - wxScrolledWindow* m_scrolledWindow; + wxScrolledWindow* m_parent; + TabCtrl* m_pref_tabs; // bool m_settings_layout_changed {false}; bool m_seq_top_layer_only_changed{false}; @@ -86,7 +61,6 @@ public: wxString m_backup_interval_time; void create(); - wxWindow *create_tab_button(int id, wxString text); // debug mode ::CheckBox * m_developer_mode_ckeckbox = {nullptr}; @@ -100,56 +74,43 @@ public: wxString m_backup_interval_def; wxString m_iot_environment_def; - SelectorHash m_hash_selector; - RadioSelectorList m_radio_group; - // ComboBoxSelectorList m_comxbo_group; + std::vector f_sizers; - wxBoxSizer *create_item_title(wxString title, wxWindow *parent, wxString tooltip); - wxBoxSizer *create_item_combobox(wxString title, wxWindow *parent, wxString tooltip, std::string param, std::vector vlist); - wxBoxSizer *create_item_combobox(wxString title, wxWindow *parent, wxString tooltip, std::string param, std::vector vlist, std::vector config_name_index); - wxBoxSizer *create_item_region_combobox(wxString title, wxWindow *parent, wxString tooltip, std::vector vlist); - wxBoxSizer *create_item_language_combobox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param, std::vector vlist); - wxBoxSizer *create_item_loglevel_combobox(wxString title, wxWindow *parent, wxString tooltip, std::vector vlist); - wxBoxSizer *create_item_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param); - wxBoxSizer *create_item_darkmode_checkbox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string param); + wxBoxSizer *create_item_title(wxString title); + wxBoxSizer *create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector vlist); + wxBoxSizer *create_item_combobox(wxString title, wxString tooltip, std::string param, std::vector vlist, std::vector config_name_index); + wxBoxSizer *create_item_region_combobox(wxString title, wxString tooltip); + wxBoxSizer *create_item_language_combobox(wxString title, wxString tooltip); + wxBoxSizer *create_item_autoflush(wxString title, wxString tooltip); + wxBoxSizer *create_item_loglevel_combobox(wxString title, wxString tooltip, std::vector vlist); + wxBoxSizer *create_item_checkbox(wxString title, wxString tooltip, std::string param, const wxString secondary_title = ""); + wxBoxSizer *create_item_darkmode(wxString title,wxString tooltip, std::string param); void set_dark_mode(); - wxBoxSizer *create_item_button(wxString title, wxString title2, wxWindow *parent, wxString tooltip, wxString tooltip2, std::function onclick, bool button_on_left = false); - wxWindow* create_item_downloads(wxWindow* parent, int padding_left, std::string param); - wxBoxSizer *create_item_input(wxString title, wxString title2, wxWindow *parent, wxString tooltip, std::string param, std::function onchange = {}); - wxBoxSizer *create_camera_orbit_mult_input(wxString title, wxWindow *parent, wxString tooltip); - wxBoxSizer *create_item_backup_input(wxString title, wxWindow *parent, wxString tooltip, std::string param); - wxBoxSizer *create_item_multiple_combobox( - wxString title, wxWindow *parent, wxString tooltip, int padding_left, std::string parama, std::vector vlista, std::vector vlistb); - wxBoxSizer *create_item_switch(wxString title, wxWindow *parent, wxString tooltip, std::string param); - wxWindow * create_item_radiobox(wxString title, wxWindow *parent, wxString tooltip, int padding_left, int groupid, std::string param); + wxBoxSizer *create_item_button(wxString title, wxString title2, wxString tooltip, wxString tooltip2, std::function onclick); + wxBoxSizer *create_item_downloads(wxString title, wxString tooltip); + wxBoxSizer *create_item_input(wxString title, wxString title2, wxString tooltip, std::string param, std::function onchange = {}); + wxBoxSizer *create_camera_orbit_mult_input(wxString title, wxString tooltip); + wxBoxSizer *create_item_backup(wxString title, wxString tooltip); + wxBoxSizer *create_item_multiple_combobox(wxString title, wxString tooltip, std::string parama, std::vector vlista, std::vector vlistb); #ifdef WIN32 - wxBoxSizer* create_item_link_association(wxWindow* parent, wxString url_prefix, wxString website_name); + wxBoxSizer *create_item_link_association(wxString url_prefix, wxString website_name); #endif // WIN32 - wxWindow* create_general_page(); - void create_gui_page(); + void create_items(); void create_sync_page(); void create_shortcuts_page(); - wxWindow* create_debug_page(); + wxBoxSizer* create_debug_page(); - void on_select_radio(std::string param); - wxString get_select_radio(int groupid); // BBS void create_select_domain_widget(); void Split(const std::string &src, const std::string &separator, std::vector &dest); int m_current_language_selected = {0}; -protected: - void OnSelectTabel(wxCommandEvent &event); - void OnSelectRadio(wxMouseEvent &event); - private: - std::tuple create_item_combobox_base(wxString title, wxWindow* parent, wxString tooltip, std::string param, std::vector vlist, unsigned int current_index); + std::tuple create_item_combobox_base(wxString title, wxString tooltip, std::string param, std::vector vlist, unsigned int current_index); }; -wxDECLARE_EVENT(EVT_PREFERENCES_SELECT_TAB, wxCommandEvent); - }} // namespace Slic3r::GUI #endif /* slic3r_Preferences_hpp_ */