Merge pull request #1544 from SiboVG/issue-1539

[#1539] Apply preset after double-click
This commit is contained in:
Joe Pfeiffer 2022-08-02 14:59:25 -06:00 committed by GitHub
commit 5fb93cb9c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 225 additions and 214 deletions

View File

@ -1378,14 +1378,13 @@ main.menu.edit.editpreset= Edit Component Preset File
main.menu.edit.preferences = Preferences
main.menu.edit.preferences.desc = Setup the application preferences
main.menu.analyze = Tools
main.menu.analyze.desc = Rocket analysis
main.menu.analyze.componentAnalysis = Component analysis
main.menu.analyze.componentAnalysis.desc = Analyze the rocket components separately
main.menu.analyze.optimization = Rocket optimization
main.menu.analyze.optimization.desc = General rocket design optimization
main.menu.analyze.customExpressions = Custom expressions
main.menu.analyze.customExpressions.desc = Define new flight data types by writing custom mathematical expressions
main.menu.tools = Tools
main.menu.tools.componentAnalysis = Component analysis
main.menu.tools.componentAnalysis.desc = Analyze the rocket components separately
main.menu.tools.optimization = Rocket optimization
main.menu.tools.optimization.desc = General rocket design optimization
main.menu.tools.customExpressions = Custom expressions
main.menu.tools.customExpressions.desc = Define new flight data types by writing custom mathematical expressions
main.menu.help = Help
main.menu.help.desc = Information about OpenRocket

View File

@ -1004,12 +1004,11 @@ main.menu.edit.delete = Smazat
main.menu.edit.preferences = Nastavení
main.menu.edit.preferences.desc = Nastavení aplikace
main.menu.analyze = Anal\u017Eýza
main.menu.analyze.desc = Analýza rakety
main.menu.analyze.componentAnalysis = Analýza komponent
main.menu.analyze.componentAnalysis.desc = Analyzuj cásti rakety samostatne
main.menu.analyze.optimization = Optimalizace rakety
main.menu.analyze.optimization.desc = Obecný návrh optimalizace rakety
main.menu.tools = Anal\u017Eýza
main.menu.tools.componentAnalysis = Analýza komponent
main.menu.tools.componentAnalysis.desc = Analyzuj cásti rakety samostatne
main.menu.tools.optimization = Optimalizace rakety
main.menu.tools.optimization.desc = Obecný návrh optimalizace rakety
main.menu.help = Pomoc
main.menu.help.desc = Informace o programu OpenRocket

View File

@ -1061,12 +1061,11 @@ main.menu.edit.delete = L
main.menu.edit.preferences = Einstellungen
main.menu.edit.preferences.desc = Einstellungen der Anwenung ändern
main.menu.analyze = Analysieren
main.menu.analyze.desc = Rakete analysieren
main.menu.analyze.componentAnalysis = Komponente analysieren
main.menu.analyze.componentAnalysis.desc = Komponenten der Rakete einzeln analysieren
main.menu.analyze.optimization = Rocket optimization
main.menu.analyze.optimization.desc = General rocket design optimization
main.menu.tools = Analysieren
main.menu.tools.componentAnalysis = Komponente analysieren
main.menu.tools.componentAnalysis.desc = Komponenten der Rakete einzeln analysieren
main.menu.tools.optimization = Rocket optimization
main.menu.tools.optimization.desc = General rocket design optimization
main.menu.help = Hilfe
main.menu.help.desc = Informationen über OpenRocket

View File

@ -1429,14 +1429,13 @@ FileHelper.IMAGES = Archivos de imagen
! General file type names
FileHelper.PDF_FILTER = Archivos PDF
main.menu.analyze = Analizar
main.menu.analyze.componentAnalysis = An\u00e1lisis de los componentes
main.menu.analyze.componentAnalysis.desc = Analiza los componentes del cohete por separado
main.menu.analyze.customExpressions = Expresiones personalizadas
main.menu.analyze.customExpressions.desc = Defina nuevos tipos de datos escribiendo expresiones matem\u00e1ticas personalizadas
main.menu.analyze.desc = An\u00e1lisis del cohete
main.menu.analyze.optimization = Optimizaci\u00f3n del dise\u00f1o
main.menu.analyze.optimization.desc = Optimizaci\u00f3n global del dise\u00f1o del cohete
main.menu.tools = Analizar
main.menu.tools.componentAnalysis = An\u00e1lisis de los componentes
main.menu.tools.componentAnalysis.desc = Analiza los componentes del cohete por separado
main.menu.tools.customExpressions = Expresiones personalizadas
main.menu.tools.customExpressions.desc = Defina nuevos tipos de datos escribiendo expresiones matem\u00e1ticas personalizadas
main.menu.tools.optimization = Optimizaci\u00f3n del dise\u00f1o
main.menu.tools.optimization.desc = Optimizaci\u00f3n global del dise\u00f1o del cohete
main.menu.debug = Recuperaci\u00f3n
main.menu.debug.createtestrocket = Crear una prueba de modelo
main.menu.debug.whatisthismenu = \u00bfQue es este men\u00fa?

View File

@ -1423,14 +1423,13 @@ FileHelper.IMAGES = Fichiers Image
! General file type names
FileHelper.PDF_FILTER = fichier PDF
main.menu.analyze = Analyse
main.menu.analyze.componentAnalysis = Analyse des Pi\u00E8ces
main.menu.analyze.componentAnalysis.desc = Analyse s\u00E9par\u00E9e des pi\u00E8ces de la fus\u00E9e
main.menu.analyze.customExpressions = Expressions personnalis\u00E9es
main.menu.analyze.customExpressions.desc = D\u00E9fini de nouveaux type de donn\u00E9es de vol en \u00E9crivant des expressions math\u00E9matique personnalis\u00E9es
main.menu.analyze.desc = Analyses de la fus\u00E9e
main.menu.analyze.optimization = Optimisation de la fus\u00E9e
main.menu.analyze.optimization.desc = Optimisation g\u00E9n\u00E9rale de la fus\u00E9e
main.menu.tools = Analyse
main.menu.tools.componentAnalysis = Analyse des Pi\u00E8ces
main.menu.tools.componentAnalysis.desc = Analyse s\u00E9par\u00E9e des pi\u00E8ces de la fus\u00E9e
main.menu.tools.customExpressions = Expressions personnalis\u00E9es
main.menu.tools.customExpressions.desc = D\u00E9fini de nouveaux type de donn\u00E9es de vol en \u00E9crivant des expressions math\u00E9matique personnalis\u00E9es
main.menu.tools.optimization = Optimisation de la fus\u00E9e
main.menu.tools.optimization.desc = Optimisation g\u00E9n\u00E9rale de la fus\u00E9e
main.menu.debug = Debug
main.menu.debug.createtestrocket = Cr\u00E9er une fus\u00E9e test
main.menu.debug.whatisthismenu = Quel est ce menu?

View File

@ -1065,12 +1065,11 @@ main.menu.edit.delete = Cancella
main.menu.edit.preferences = Preferenze
main.menu.edit.preferences.desc = Imposta le preferenze dell'applicazione
main.menu.analyze = Analizza
main.menu.analyze.desc = Analisi del razzo
main.menu.analyze.componentAnalysis = Analizza componente
main.menu.analyze.componentAnalysis.desc = Analizza ogni componente del razzo separatamente
main.menu.analyze.optimization = Ottimizzazione del razzo
main.menu.analyze.optimization.desc = Ottimizzazioni generali sul disegno del razzo
main.menu.tools = Analizza
main.menu.tools.componentAnalysis = Analizza componente
main.menu.tools.componentAnalysis.desc = Analizza ogni componente del razzo separatamente
main.menu.tools.optimization = Ottimizzazione del razzo
main.menu.tools.optimization.desc = Ottimizzazioni generali sul disegno del razzo
main.menu.help = Aiuto
main.menu.help.desc = Informazioni su OpenRocket

View File

@ -1097,14 +1097,13 @@ main.menu.edit.editpreset = Component Preset File\u306E\u7DE8\u96C6
main.menu.edit.preferences = \u8A2D\u5B9A
main.menu.edit.preferences.desc = \u30A2\u30D7\u30EA\u306E\u8A2D\u5B9A\u3092\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7
main.menu.analyze = \u89E3\u6790
main.menu.analyze.desc = \u30ED\u30B1\u30C3\u30C8\u89E3\u6790
main.menu.analyze.componentAnalysis = \u90E8\u54C1\u89E3\u6790
main.menu.analyze.componentAnalysis.desc = \u90E8\u54C1\u3092\u5206\u3051\u3066\u89E3\u6790
main.menu.analyze.optimization = \u30ED\u30B1\u30C3\u30C8\u6700\u9069\u5316
main.menu.analyze.optimization.desc = \u5168\u4F53\u3092\u6700\u9069\u5316
main.menu.analyze.customExpressions = \u30AB\u30B9\u30BF\u30E0\u5F0F
main.menu.analyze.customExpressions.desc = \u65B0\u3057\u3044\u30D5\u30E9\u30A4\u30C8\u30C7\u30FC\u30BF\u30BF\u30A4\u30D7\u3092\u30AB\u30B9\u30BF\u30E0\u3057\u305F\u6570\u5F0F\u3067\u5B9A\u7FA9
main.menu.tools = \u89E3\u6790
main.menu.tools.componentAnalysis = \u90E8\u54C1\u89E3\u6790
main.menu.tools.componentAnalysis.desc = \u90E8\u54C1\u3092\u5206\u3051\u3066\u89E3\u6790
main.menu.tools.optimization = \u30ED\u30B1\u30C3\u30C8\u6700\u9069\u5316
main.menu.tools.optimization.desc = \u5168\u4F53\u3092\u6700\u9069\u5316
main.menu.tools.customExpressions = \u30AB\u30B9\u30BF\u30E0\u5F0F
main.menu.tools.customExpressions.desc = \u65B0\u3057\u3044\u30D5\u30E9\u30A4\u30C8\u30C7\u30FC\u30BF\u30BF\u30A4\u30D7\u3092\u30AB\u30B9\u30BF\u30E0\u3057\u305F\u6570\u5F0F\u3067\u5B9A\u7FA9
main.menu.help = \u30D8\u30EB\u30D7
main.menu.help.desc = OpenRocket\u306B\u3064\u3044\u3066\u306E\u60C5\u5831

View File

@ -1274,14 +1274,13 @@ main.menu.edit.editpreset= Bewerk Component Preset bestand
main.menu.edit.preferences = Voorkeuren
main.menu.edit.preferences.desc = Stel de programma voorkeuren in
main.menu.analyze = Tools
main.menu.analyze.desc = Raket-analyses
main.menu.analyze.componentAnalysis = Onderdeel-analyses
main.menu.analyze.componentAnalysis.desc = Analyseer de raketonderdelen afzonderlijk
main.menu.analyze.optimization = Raket-optimalisatie
main.menu.analyze.optimization.desc = Algemene optimalisatie van raketontwerp
main.menu.analyze.customExpressions = Aangepaste uitdrukkingen
main.menu.analyze.customExpressions.desc = Definieer nieuwe vluchtdatatypes door aangepaste wiskundige uitdrukkingen te schrijven
main.menu.tools = Tools
main.menu.tools.componentAnalysis = Onderdeel-analyses
main.menu.tools.componentAnalysis.desc = Analyseer de raketonderdelen afzonderlijk
main.menu.tools.optimization = Raket-optimalisatie
main.menu.tools.optimization.desc = Algemene optimalisatie van raketontwerp
main.menu.tools.customExpressions = Aangepaste uitdrukkingen
main.menu.tools.customExpressions.desc = Definieer nieuwe vluchtdatatypes door aangepaste wiskundige uitdrukkingen te schrijven
main.menu.help = Help
main.menu.help.desc = Informatie over OpenRocket

View File

@ -1006,12 +1006,11 @@ update.dlg.latestVersion = Korzystasz z najnowszej wersji OpenRocket: %s.
main.menu.edit.preferences = Ustawienia
main.menu.edit.preferences.desc = Edytuj ustawienia programu
main.menu.analyze = Analiza
main.menu.analyze.desc = Analiza rakiety
main.menu.analyze.componentAnalysis = Analiza cz\u0119\u015Bci
main.menu.analyze.componentAnalysis.desc = Analizuj oddzielnie poszczególne cz\u0119\u015Bci sk\u0142adóe rakiety
main.menu.analyze.optimization = Optymalizacja rakiety
main.menu.analyze.optimization.desc = Ogólna optymalizacja projektu rakiety
main.menu.tools = Analiza
main.menu.tools.componentAnalysis = Analiza cz\u0119\u015Bci
main.menu.tools.componentAnalysis.desc = Analizuj oddzielnie poszczególne cz\u0119\u015Bci sk\u0142adóe rakiety
main.menu.tools.optimization = Optymalizacja rakiety
main.menu.tools.optimization.desc = Ogólna optymalizacja projektu rakiety
main.menu.help = Pomoc
main.menu.help.desc = Informacje o programie OpenRocket

View File

@ -1386,14 +1386,13 @@ FileHelper.IMAGES = Arquivos de imagem
# General file type names
FileHelper.PDF_FILTER = Arquivos PDF (*.pdf)
main.menu.analyze = Analisar
main.menu.analyze.componentAnalysis = An\u00e1lise dos componentes
main.menu.analyze.componentAnalysis.desc = Analisar os componentes dos foguetes separadamente
main.menu.analyze.customExpressions = Express\u00f5es personalizadas
main.menu.analyze.customExpressions.desc = Definir novos tipos de dados de voo por escrito personalizados express\u00f5es matem\u00e1ticas
main.menu.analyze.desc = An\u00e1lise do foguete
main.menu.analyze.optimization = Otimiza\u00e7\u00e3o do foguete
main.menu.analyze.optimization.desc = Otimiza\u00e7\u00e3o do projeto geral do foguete
main.menu.tools = Analisar
main.menu.tools.componentAnalysis = An\u00e1lise dos componentes
main.menu.tools.componentAnalysis.desc = Analisar os componentes dos foguetes separadamente
main.menu.tools.customExpressions = Express\u00f5es personalizadas
main.menu.tools.customExpressions.desc = Definir novos tipos de dados de voo por escrito personalizados express\u00f5es matem\u00e1ticas
main.menu.tools.optimization = Otimiza\u00e7\u00e3o do foguete
main.menu.tools.optimization.desc = Otimiza\u00e7\u00e3o do projeto geral do foguete
main.menu.debug = Depura\u00e7\u00e3o
main.menu.debug.createtestrocket = Criar foguete de teste
main.menu.debug.whatisthismenu = O que \u00e9 esse menu?

View File

@ -1379,14 +1379,13 @@ main.menu.edit.editpreset = \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0
main.menu.edit.preferences = \u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
main.menu.edit.preferences.desc = \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F
main.menu.analyze = \u0410\u043D\u0430\u043B\u0438\u0437
main.menu.analyze.desc = \u0410\u043D\u0430\u043B\u0438\u0437 \u0440\u0430\u043A\u0435\u0442\u044B
main.menu.analyze.componentAnalysis = \u0410\u043D\u0430\u043B\u0438\u0437 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432
main.menu.analyze.componentAnalysis.desc = \u0410\u043D\u0430\u043B\u0438\u0437 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432 \u0440\u0430\u043A\u0435\u0442\u044B \u043F\u043E \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438
main.menu.analyze.optimization = \u041E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u044F \u0440\u0430\u043A\u0435\u0442\u044B
main.menu.analyze.optimization.desc = \u041E\u0431\u0449\u0430\u044F \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u0430 \u0440\u0430\u043A\u0435\u0442\u044B
main.menu.analyze.customExpressions = \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F
main.menu.analyze.customExpressions.desc = \u041E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043D\u043E\u0432\u044B\u0445 \u0442\u0438\u043F\u043E\u0432 \u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u043B\u0435\u0442\u0430 \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u0438\u0435\u043C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445 \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0439
main.menu.tools = \u0410\u043D\u0430\u043B\u0438\u0437
main.menu.tools.componentAnalysis = \u0410\u043D\u0430\u043B\u0438\u0437 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432
main.menu.tools.componentAnalysis.desc = \u0410\u043D\u0430\u043B\u0438\u0437 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u043E\u0432 \u0440\u0430\u043A\u0435\u0442\u044B \u043F\u043E \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438
main.menu.tools.optimization = \u041E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u044F \u0440\u0430\u043A\u0435\u0442\u044B
main.menu.tools.optimization.desc = \u041E\u0431\u0449\u0430\u044F \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u0430 \u0440\u0430\u043A\u0435\u0442\u044B
main.menu.tools.customExpressions = \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u044F
main.menu.tools.customExpressions.desc = \u041E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435 \u043D\u043E\u0432\u044B\u0445 \u0442\u0438\u043F\u043E\u0432 \u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u043B\u0435\u0442\u0430 \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u0438\u0435\u043C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445 \u043C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0445 \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0439
main.menu.help = \u0421\u043F\u0440\u0430\u0432\u043A\u0430
main.menu.help.desc = \u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E\u0431 OpenRocket

View File

@ -1175,14 +1175,13 @@ main.menu.edit.editpreset= Edit Component Preset File
main.menu.edit.preferences = Preferences
main.menu.edit.preferences.desc = Setup the application preferences
main.menu.analyze = Tools
main.menu.analyze.desc = Rocket analysis
main.menu.analyze.componentAnalysis = Component analysis
main.menu.analyze.componentAnalysis.desc = Analyze the rocket components separately
main.menu.analyze.optimization = Rocket optimization
main.menu.analyze.optimization.desc = General rocket design optimization
main.menu.analyze.customExpressions = Custom expressions
main.menu.analyze.customExpressions.desc = Define new flight data types by writing custom mathematical expressions
main.menu.tools = Tools
main.menu.tools.componentAnalysis = Component analysis
main.menu.tools.componentAnalysis.desc = Analyze the rocket components separately
main.menu.tools.optimization = Rocket optimization
main.menu.tools.optimization.desc = General rocket design optimization
main.menu.tools.customExpressions = Custom expressions
main.menu.tools.customExpressions.desc = Define new flight data types by writing custom mathematical expressions
main.menu.help = Help
main.menu.help.desc = Information about OpenRocket

View File

@ -1509,14 +1509,13 @@ generalprefs.languages.default = \u7CFB\u7EDF\u9ED8\u8BA4
generalprefs.lbl.language = \u754C\u9762\u8BED\u8A00
generalprefs.lbl.languageEffect = \u65B0\u7684\u8BED\u8A00\u5C06\u5728\u4E0B\u6B21\u542F\u52A8OpenRocket\u65F6\u751F\u6548.
main.menu.analyze = \u5206\u6790
main.menu.analyze.componentAnalysis = \u7EC4\u4EF6\u5206\u6790
main.menu.analyze.componentAnalysis.desc = \u4EC5\u5206\u6790\u706B\u7BAD\u90E8\u4EF6
main.menu.analyze.customExpressions = \u81EA\u5B9A\u4E49\u8868\u8FBE\u5F0F
main.menu.analyze.customExpressions.desc = \u901A\u8FC7\u81EA\u5B9A\u4E49\u7684\u6570\u5B66\u8868\u8FBE\u5F0F\u6765\u5B9A\u4E49\u65B0\u7684\u98DE\u884C\u6570\u636E\u7C7B\u578B
main.menu.analyze.desc = \u706B\u7BAD\u5206\u6790
main.menu.analyze.optimization = \u706B\u7BAD\u4F18\u5316
main.menu.analyze.optimization.desc = \u5E38\u89C4\u706B\u7BAD\u8BBE\u8BA1\u4F18\u5316
main.menu.tools = \u5206\u6790
main.menu.tools.componentAnalysis = \u7EC4\u4EF6\u5206\u6790
main.menu.tools.componentAnalysis.desc = \u4EC5\u5206\u6790\u706B\u7BAD\u90E8\u4EF6
main.menu.tools.customExpressions = \u81EA\u5B9A\u4E49\u8868\u8FBE\u5F0F
main.menu.tools.customExpressions.desc = \u901A\u8FC7\u81EA\u5B9A\u4E49\u7684\u6570\u5B66\u8868\u8FBE\u5F0F\u6765\u5B9A\u4E49\u65B0\u7684\u98DE\u884C\u6570\u636E\u7C7B\u578B
main.menu.tools.optimization = \u706B\u7BAD\u4F18\u5316
main.menu.tools.optimization.desc = \u5E38\u89C4\u706B\u7BAD\u8BBE\u8BA1\u4F18\u5316
main.menu.debug = \u8C03\u8BD5
main.menu.debug.createtestrocket = \u5EFA\u7ACB\u6D4B\u8BD5\u706B\u7BAD
main.menu.debug.whatisthismenu = \u8FD9\u662F\u4EC0\u4E48\u83DC\u5355?

View File

@ -264,12 +264,9 @@ public class RocketComponentConfig extends JPanel {
if (presetComboBox == null || presetModel == null) return;
((ComponentPresetDatabase) Application.getComponentPresetDao()).addDatabaseListener(presetModel);
ComponentPresetChooserDialog dialog =
new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(RocketComponentConfig.this), component);
new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(RocketComponentConfig.this),
component, presetModel);
dialog.setVisible(true);
ComponentPreset preset = dialog.getSelectedComponentPreset();
if (preset != null) {
presetModel.setSelectedItem(preset);
}
((ComponentPresetDatabase) Application.getComponentPresetDao()).removeChangeListener(presetModel);
}
});

View File

@ -7,6 +7,8 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -25,6 +27,7 @@ import javax.swing.table.TableColumn;
import javax.swing.table.TableModel;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.gui.adaptors.PresetModel;
import net.sf.openrocket.gui.components.StyledLabel;
import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.gui.util.SwingPreferences;
@ -49,8 +52,8 @@ public class ComponentPresetChooserDialog extends JDialog {
private final RocketComponent component;
private ComponentPresetTable componentSelectionTable;
private JTextField filterText;
private final ComponentPresetTable componentSelectionTable;
private final JTextField filterText;
private JCheckBox foreDiameterFilterCheckBox;
private JCheckBox aftDiameterFilterCheckBox;
private JCheckBox showLegacyCheckBox;
@ -70,12 +73,14 @@ public class ComponentPresetChooserDialog extends JDialog {
private List<ComponentPreset> presets;
private ComponentPreset.Type presetType;
private PresetModel presetModel;
public ComponentPresetChooserDialog(Window owner, RocketComponent component) {
public ComponentPresetChooserDialog(Window owner, RocketComponent component, PresetModel presetModel) {
super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL);
this.component = component;
this.presetType = component.getPresetType();
this.presetModel = presetModel;
this.presets = Application.getComponentPresetDao().listForType(component.getPresetType());
List<TypedKey<?>> displayedColumnKeys = Arrays.asList(component.getPresetType().getDisplayedColumns());
@ -155,6 +160,16 @@ public class ComponentPresetChooserDialog extends JDialog {
panel.add(new StyledLabel(String.format("<html>%s %s</html>", Chars.UP_ARROW, trans.get("lbl.favorites")), -1), "spanx, gapleft 5px, wrap para");
// When double-clicking a preset row, apply the preset and close this dialog
componentSelectionTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// Don't do anything when double-clicking the first column
if (e.getClickCount() == 2 && componentSelectionTable.getSelectedColumn() > 0 && applySelectedPreset()) {
ComponentPresetChooserDialog.this.setVisible(false);
}
}
});
// Close buttons
JButton closeButton = new SelectColorButton(trans.get("dlg.but.close"));
@ -162,6 +177,7 @@ public class ComponentPresetChooserDialog extends JDialog {
@Override
public void actionPerformed(ActionEvent e) {
ComponentPresetChooserDialog.this.setVisible(false);
applySelectedPreset();
}
});
panel.add(closeButton, "spanx, right, tag close");
@ -174,6 +190,21 @@ public class ComponentPresetChooserDialog extends JDialog {
updateFilters();
}
/**
* Applies the currently selected preset to presetModel.
*
* @return true if the preset was applied, false if otherwise.
*/
private boolean applySelectedPreset() {
if (presetModel == null) return false;
ComponentPreset preset = getSelectedComponentPreset();
if (preset != null) {
presetModel.setSelectedItem(preset);
return true;
}
return false;
}
private JPanel getFilterCheckboxes(XTableColumnModel tm, int legacyColumnIndex) {
JPanel panel = new JPanel(new MigLayout("ins 0"));

View File

@ -841,19 +841,15 @@ public class BasicFrame extends JFrame {
}
//// Analyze
menu = new JMenu(trans.get("main.menu.analyze"));
menu.setMnemonic(KeyEvent.VK_A);
//// Analyzing the rocket
menu.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.analyze.desc"));
// Tools
menu = new JMenu(trans.get("main.menu.tools"));
menubar.add(menu);
//// Component analysis
item = new JMenuItem(trans.get("main.menu.analyze.componentAnalysis"), KeyEvent.VK_C);
item = new JMenuItem(trans.get("main.menu.tools.componentAnalysis"), KeyEvent.VK_C);
//// Analyze the rocket components separately
item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.analyze.componentAnalysis.desc"));
item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.tools.componentAnalysis.desc"));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@ -864,8 +860,8 @@ public class BasicFrame extends JFrame {
menu.add(item);
//// Optimize
item = new JMenuItem(trans.get("main.menu.analyze.optimization"), KeyEvent.VK_O);
item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.analyze.optimization.desc"));
item = new JMenuItem(trans.get("main.menu.tools.optimization"), KeyEvent.VK_O);
item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.tools.optimization.desc"));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@ -880,8 +876,8 @@ public class BasicFrame extends JFrame {
menu.add(item);
//// Custom expressions
item = new JMenuItem(trans.get("main.menu.analyze.customExpressions"), KeyEvent.VK_E);
item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.analyze.customExpressions.desc"));
item = new JMenuItem(trans.get("main.menu.tools.customExpressions"), KeyEvent.VK_E);
item.getAccessibleContext().setAccessibleDescription(trans.get("main.menu.tools.customExpressions.desc"));
item.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {

View File

@ -72,7 +72,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
private static final long serialVersionUID = -3298642844886682536L;
private static Translator trans = Application.getTranslator();
private static final Translator trans = Application.getTranslator();
private static final Logger log = LoggerFactory.getLogger(PresetEditorDialog.class);
@ -83,137 +83,136 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
*/
final PresetInputVerifier NON_NEGATIVE_INTEGER = new PresetInputVerifier(Pattern.compile(NON_NEGATIVE_INTEGER_FIELD));
private final JPanel contentPanel = new JPanel();
private DeselectableComboBox<String> typeCombo;
private JTextField mfgTextField;
private MaterialChooser materialChooser;
private final DeselectableComboBox<String> typeCombo;
private final JTextField mfgTextField;
private final MaterialChooser materialChooser;
private MaterialHolder holder = null;
private JTextField ncPartNoTextField;
private JTextField ncDescTextField;
private DoubleModel ncLength;
private JCheckBox ncFilledCB;
private JComboBox<String> ncShapeCB;
private DoubleModel ncAftDia;
private DoubleModel ncAftShoulderDia;
private DoubleModel ncAftShoulderLen;
private DoubleModel ncMass;
private final JTextField ncPartNoTextField;
private final JTextField ncDescTextField;
private final DoubleModel ncLength;
private final JCheckBox ncFilledCB;
private final JComboBox<String> ncShapeCB;
private final DoubleModel ncAftDia;
private final DoubleModel ncAftShoulderDia;
private final DoubleModel ncAftShoulderLen;
private final DoubleModel ncMass;
private ImageIcon ncImage;
private JButton ncImageBtn;
private final JButton ncImageBtn;
private JTextField trPartNoTextField;
private JTextField trDescTextField;
private DoubleModel trLength;
private DoubleModel trAftDia;
private DoubleModel trAftShoulderDia;
private DoubleModel trAftShoulderLen;
private DoubleModel trForeDia;
private DoubleModel trForeShoulderDia;
private DoubleModel trForeShoulderLen;
private final JTextField trPartNoTextField;
private final JTextField trDescTextField;
private final DoubleModel trLength;
private final DoubleModel trAftDia;
private final DoubleModel trAftShoulderDia;
private final DoubleModel trAftShoulderLen;
private final DoubleModel trForeDia;
private final DoubleModel trForeShoulderDia;
private final DoubleModel trForeShoulderLen;
private DoubleModel trMass;
private ImageIcon trImage;
private JCheckBox trFilledCB;
private JComboBox<String> trShapeCB;
private JButton trImageBtn;
private final JCheckBox trFilledCB;
private final JComboBox<String> trShapeCB;
private final JButton trImageBtn;
private JTextField btPartNoTextField;
private JTextField btDescTextField;
private DoubleModel btMass;
private DoubleModel btInnerDia;
private DoubleModel btOuterDia;
private DoubleModel btLength;
private final JTextField btPartNoTextField;
private final JTextField btDescTextField;
private final DoubleModel btMass;
private final DoubleModel btInnerDia;
private final DoubleModel btOuterDia;
private final DoubleModel btLength;
private ImageIcon btImage;
private JButton btImageBtn;
private final JButton btImageBtn;
private JTextField tcPartNoTextField;
private JTextField tcDescTextField;
private DoubleModel tcMass;
private DoubleModel tcInnerDia;
private DoubleModel tcOuterDia;
private DoubleModel tcLength;
private final JTextField tcPartNoTextField;
private final JTextField tcDescTextField;
private final DoubleModel tcMass;
private final DoubleModel tcInnerDia;
private final DoubleModel tcOuterDia;
private final DoubleModel tcLength;
private ImageIcon tcImage;
private JButton tcImageBtn;
private final JButton tcImageBtn;
private JTextField bhPartNoTextField;
private JTextField bhDescTextField;
private DoubleModel bhOuterDia;
private DoubleModel bhLength;
private DoubleModel bhMass;
private final JTextField bhPartNoTextField;
private final JTextField bhDescTextField;
private final DoubleModel bhOuterDia;
private final DoubleModel bhLength;
private final DoubleModel bhMass;
private ImageIcon bhImage;
private JButton bhImageBtn;
private final JButton bhImageBtn;
private JTextField crPartNoTextField;
private JTextField crDescTextField;
private DoubleModel crOuterDia;
private DoubleModel crInnerDia;
private DoubleModel crThickness;
private DoubleModel crMass;
private final JTextField crPartNoTextField;
private final JTextField crDescTextField;
private final DoubleModel crOuterDia;
private final DoubleModel crInnerDia;
private final DoubleModel crThickness;
private final DoubleModel crMass;
private ImageIcon crImage;
private JButton crImageBtn;
private final JButton crImageBtn;
private JTextField ebPartNoTextField;
private JTextField ebDescTextField;
private DoubleModel ebOuterDia;
private DoubleModel ebInnerDia;
private DoubleModel ebThickness;
private DoubleModel ebMass;
private final JTextField ebPartNoTextField;
private final JTextField ebDescTextField;
private final DoubleModel ebOuterDia;
private final DoubleModel ebInnerDia;
private final DoubleModel ebThickness;
private final DoubleModel ebMass;
private ImageIcon ebImage;
private JButton ebImageBtn;
private final JButton ebImageBtn;
private JTextField llPartNoTextField;
private JTextField llDescTextField;
private DoubleModel llOuterDia;
private DoubleModel llInnerDia;
private DoubleModel llLength;
private DoubleModel llMass;
private final JTextField llPartNoTextField;
private final JTextField llDescTextField;
private final DoubleModel llOuterDia;
private final DoubleModel llInnerDia;
private final DoubleModel llLength;
private final DoubleModel llMass;
private ImageIcon llImage;
private JButton llImageBtn;
private final JButton llImageBtn;
private JTextField rbPartNoTextField;
private JTextField rbDescTextField;
private DoubleModel rbOuterDia;
private DoubleModel rbInnerDia;
private DoubleModel rbHeight;
private DoubleModel rbStandoffHeight;
private DoubleModel rbFlangeHeight;
private DoubleModel rbMass;
private final JTextField rbPartNoTextField;
private final JTextField rbDescTextField;
private final DoubleModel rbOuterDia;
private final DoubleModel rbInnerDia;
private final DoubleModel rbHeight;
private final DoubleModel rbStandoffHeight;
private final DoubleModel rbFlangeHeight;
private final DoubleModel rbMass;
private ImageIcon rbImage;
private JButton rbImageBtn;
private final JButton rbImageBtn;
private JTextField stPartNoTextField;
private JTextField stDescTextField;
private DoubleModel stThickness;
private DoubleModel stWidth;
private DoubleModel stLength;
private DoubleModel stMass;
private final JTextField stPartNoTextField;
private final JTextField stDescTextField;
private final DoubleModel stThickness;
private final DoubleModel stWidth;
private final DoubleModel stLength;
private final DoubleModel stMass;
private ImageIcon stImage;
private JButton stImageBtn;
private final JButton stImageBtn;
// Parachute Specific
private JTextField pcPartNoTextField;
private JTextField pcDescTextField;
private DoubleModel pcDiameter;
private final JTextField pcPartNoTextField;
private final JTextField pcDescTextField;
private final DoubleModel pcDiameter;
private DoubleModel pcSpillDia;
private DoubleModel pcSurfaceArea;
private DoubleModel pcDragCoefficient;
// Canopy material = private MaterialChooser materialChooser;
private JTextField pcSides;
private JTextField pcLineCount;
private DoubleModel pcLineLength;
private final JTextField pcSides;
private final JTextField pcLineCount;
private final DoubleModel pcLineLength;
private DoubleModel pcPackedLength;
private DoubleModel pcPackedDiameter;
private MaterialChooser pcLineMaterialChooser;
private DoubleModel pcMass;
private final MaterialChooser pcLineMaterialChooser;
private final DoubleModel pcMass;
private ImageIcon pcImage;
private JButton pcImageBtn;
private final JButton pcImageBtn;
private final JFileChooser imageChooser = createImageChooser();
private JPanel componentOverlayPanel;
private final JPanel componentOverlayPanel;
private PresetResultListener resultListener;
private final PresetResultListener resultListener;
private static Map<String, String> componentMap = new HashMap<String, String>();
private static final Map<String, String> componentMap = new HashMap<String, String>();
private static final String NOSE_CONE_KEY = "NoseCone.NoseCone";
private static final String BODY_TUBE_KEY = "BodyTube.BodyTube";
@ -263,6 +262,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener {
getContentPane().setMinimumSize(new Dimension(200, 200));
setBounds(100, 100, 825, 610);
getContentPane().setLayout(new BorderLayout());
JPanel contentPanel = new JPanel();
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
contentPanel.setLayout(new MigLayout("", "[][grow][94.00,grow][232.0,grow][130.00][grow]", "[][][20.00,grow][grow]"));