diff --git a/core/resources/l10n/messages.properties b/core/resources/l10n/messages.properties index aa9ae51b7..0b951c197 100644 --- a/core/resources/l10n/messages.properties +++ b/core/resources/l10n/messages.properties @@ -2071,8 +2071,9 @@ CustomFinImport.error.badimage = Could not deduce fin shape from image. CustomFinImport.description = The image will be converted internally to black and white image (black for the fin), so make sure you use a solid dark color for the fin, and white or a light color for the background. The fin must be touching the bottom of the image, which is the base of the fin. -PresetModel.lbl.select = Select preset -PresetModel.lbl.database = From database\u2026 +PresetModel.lbl.nopreset = No preset +PresetModel.lbl.selectpreset = Select preset +PresetModel.lbl.selectpreset.ttip = Select a preset model for this rocket component from a database of components. DecalModel.lbl.select = DecalModel.lbl.choose = From file\u2026 diff --git a/core/resources/l10n/messages_cs.properties b/core/resources/l10n/messages_cs.properties index f5b5933f7..b8e41d2fe 100644 --- a/core/resources/l10n/messages_cs.properties +++ b/core/resources/l10n/messages_cs.properties @@ -1587,8 +1587,8 @@ CustomFinImport.error.badimage = Nemohu vyvodit tvar stabiliz CustomFinImport.description = Obrázek bude zmenen na cernobílý \n(cerná pro stabilizátor), ujistete se prosím, \u017Ee jste pou\u017Eily cernou barvu na stabilizátor \na bílou nebo svetlou barvu na pozadí. Stabilizátor \nse musí dotýkat steny obrázku, která predstavuje uchycení pro stabilizátor. -PresetModel.lbl.select = Výber predvolby: -PresetModel.lbl.database = Z databáze... +PresetModel.lbl.nopreset = ?ádné predvolby +PresetModel.lbl.selectpreset = Výber predvolby ! Component Preset Chooser Dialog diff --git a/core/resources/l10n/messages_de.properties b/core/resources/l10n/messages_de.properties index 45f91eda5..baa259f3e 100644 --- a/core/resources/l10n/messages_de.properties +++ b/core/resources/l10n/messages_de.properties @@ -1645,8 +1645,8 @@ CustomFinImport.error.badimage = Konnte keine Leitwerksform aus dem Bild erzeuge CustomFinImport.description = Das Bild wird intern in ein Schwarz-Weiß-Bild konvertiert (Leitwerk: schwarz). Bitte sicherstellen, dass das Leitwerk in einer dichten, dunklen Farbe ist, während der Hintergrund weiß oder sehr hell sein sollte. Das Leitwerk muss das untere Bildende berühren, da dies die Verbindungsstelle zur Rakete wird. -PresetModel.lbl.select = Voreinstellung auswählen: -PresetModel.lbl.database = Aus Datenbank... +PresetModel.lbl.nopreset = Keine Voreinstellung +PresetModel.lbl.selectpreset = Voreinstellung auswählen ! Component Preset Chooser Dialog diff --git a/core/resources/l10n/messages_es.properties b/core/resources/l10n/messages_es.properties index 255e26369..245f68472 100644 --- a/core/resources/l10n/messages_es.properties +++ b/core/resources/l10n/messages_es.properties @@ -737,8 +737,8 @@ PreferencesDialog.languages.default = Idioma por defecto PreferencesDialog.lbl.language = Idioma de la interfaz: PreferencesDialog.lbl.languageEffect = El idioma cambiar\u00e1 la pr\u00f3xima vez que abra OpenRocket. -PresetModel.lbl.database = Desde la Base de Datos... -PresetModel.lbl.select = Prefabricado +PresetModel.lbl.nopreset = No hay preselección +PresetModel.lbl.selectpreset = Prefabricado PrintDialog.but.previewAndPrint = Vista previa e Imprimir PrintDialog.checkbox.showByStage = Mostrar por etapas diff --git a/core/resources/l10n/messages_fr.properties b/core/resources/l10n/messages_fr.properties index d4cee80d0..dfefe8177 100644 --- a/core/resources/l10n/messages_fr.properties +++ b/core/resources/l10n/messages_fr.properties @@ -729,8 +729,8 @@ PreferencesDialog.languages.default = Valeur syst\u00E8me par d\u00E9faut PreferencesDialog.lbl.language = Langue du programme: PreferencesDialog.lbl.languageEffect = La langue sera chang\u00E9e apr\u00E8s avoir red\u00E9marr\u00E9 OpenRocket. -PresetModel.lbl.database = A partir d'une base de donn\u00E9es... -PresetModel.lbl.select = Choisir une pi\u00E8ce pr\u00E9d\u00E9finie: +PresetModel.lbl.nopreset = Aucune pr\u00E9s\u00E9lection +PresetModel.lbl.selectpreset = Choisir une pi\u00E8ce pr\u00E9d\u00E9finie: PrintDialog.but.previewAndPrint = Pr\u00E9-visualiser et imprimer PrintDialog.checkbox.showByStage = Montrer par \u00E9tage diff --git a/core/resources/l10n/messages_it.properties b/core/resources/l10n/messages_it.properties index f99e43eb3..06791b98b 100644 --- a/core/resources/l10n/messages_it.properties +++ b/core/resources/l10n/messages_it.properties @@ -1651,8 +1651,8 @@ CustomFinImport.error.badimage = Non riesco a capire la forma della pinna dall CustomFinImport.description = L'immagine sar\u00e0 convertita in bianco e nero internamente (nero per le pinne), cos\u00ec assicurati di usare un nero pieno per le pinne e bianco, o colore chiaro, per lo sfondo. La pinna ndeve toccare il fondo dell'immagine, che \u00e8 la base della pinna. -PresetModel.lbl.select = Seleziona precaricati: -PresetModel.lbl.database = Da database... +PresetModel.lbl.nopreset = Nessuna preimpostazione +PresetModel.lbl.selectpreset = Seleziona precaricati ! Component Preset Chooser Dialog diff --git a/core/resources/l10n/messages_ja.properties b/core/resources/l10n/messages_ja.properties index 2417dd0c0..56b24fd27 100644 --- a/core/resources/l10n/messages_ja.properties +++ b/core/resources/l10n/messages_ja.properties @@ -1713,8 +1713,8 @@ CustomFinImport.error.badimage = \u753B\u50CF\u304B\u3089\u30D5\u30A3\u30F3\u5F CustomFinImport.description = \u753B\u50CF\u306F\u5185\u90E8\u3067\u767D\u80CC\u666F\u3068\u9ED2\u7DDA\u306B\u5909\u63DB\u3055\u308C\u307E\u3059\u3002\u306A\u306E\u3067\u30D5\u30A3\u30F3\u306B\u306F\u6697\u3044\u8272\u306E\u5B9F\u7DDA\u3001\u80CC\u666F\u306B\u306F\u767D\u304B\u660E\u308B\u3044\u8272\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30D5\u30A3\u30F3\u306F\u753B\u50CF\u306E\u5E95\u9762\u306B\u63A5\u3057\u3066\u3044\u306A\u304F\u3066\u306F\u3044\u3051\u307E\u305B\u3093\u3001\u3053\u308C\u306F\u30D5\u30A3\u30F3\u306E\u5E95\u9762\u306B\u306A\u308A\u307E\u3059\u3002 -PresetModel.lbl.select = Select preset -PresetModel.lbl.database = From database... +PresetModel.lbl.nopreset = \u30d7\u30ea\u30bb\u30c3\u30c8\u306a\u3057 +PresetModel.lbl.selectpreset = \u30d7\u30ea\u30bb\u30c3\u30c8\u9078\u629e ! Component Preset Chooser Dialog diff --git a/core/resources/l10n/messages_nl.properties b/core/resources/l10n/messages_nl.properties index b32a8d0a5..40f3b18f7 100644 --- a/core/resources/l10n/messages_nl.properties +++ b/core/resources/l10n/messages_nl.properties @@ -1967,8 +1967,8 @@ CustomFinImport.error.badimage = Kon de vorm van de vin niet afleiden uit het be CustomFinImport.description = De afbeelding wordt intern geconverteerd naar een zwart-wit afbeelding (zwart voor de vin), dus zorg ervoor dat je een effen donkere kleur gebruikt voor de vin, en wit of een lichte kleur voor de achtergrond. De vin moet de onderkant van het beeld raken, dat is de basis van de vin. -PresetModel.lbl.select = Selecteer preset -PresetModel.lbl.database = Uit databank... +PresetModel.lbl.nopreset = Geen preset +PresetModel.lbl.selectpreset = Selecteer preset DecalModel.lbl.select = DecalModel.lbl.choose = Van bestand... diff --git a/core/resources/l10n/messages_pl.properties b/core/resources/l10n/messages_pl.properties index 08bcaec77..84dee7a9f 100644 --- a/core/resources/l10n/messages_pl.properties +++ b/core/resources/l10n/messages_pl.properties @@ -1592,8 +1592,8 @@ update.dlg.latestVersion = Korzystasz z najnowszej wersji OpenRocket: %s. CustomFinImport.description = Obraz zostanie automatycznie zamieniony na czarno-bia\u0142y (statecznik w kolorze czarnym), wi\u0119c upewnij si\u0119, \u017Ce kszta\u0142t statecznika jest wype\u0142niony ciemnym kolorem, a t\u0142o jest bia\u0142e lub jasne. Podstawa statecznika musi przylega\u0107 do dolnej kraw\u0119dzi obrazu. - PresetModel.lbl.select = Wybierz ustawienia: - PresetModel.lbl.database = Z bazy danych... + PresetModel.lbl.nopreset = Brak ustawienia + PresetModel.lbl.selectpreset = Wybierz ustawienia ! Component Preset Chooser Dialog diff --git a/core/resources/l10n/messages_pt.properties b/core/resources/l10n/messages_pt.properties index c40699812..229032f76 100644 --- a/core/resources/l10n/messages_pt.properties +++ b/core/resources/l10n/messages_pt.properties @@ -715,8 +715,8 @@ PreferencesDialog.languages.default = Padr\u00e3o do sistema PreferencesDialog.lbl.language = Idioma da interface: PreferencesDialog.lbl.languageEffect = A linguagem vai mudar na pr\u00f3xima vez que voc\u00ea iniciar o OpenRocket. -PresetModel.lbl.database = \u00c0 partir do banco de dados... -PresetModel.lbl.select = Selecione ajustes pr\u00e9-definidos +PresetModel.lbl.nopreset = Sem pr\u00e9-definidos +PresetModel.lbl.selectpreset = Selecione ajustes pr\u00e9-definidos PrintDialog.but.previewAndPrint = Visualiza\u00e7\u00e3o e impress\u00e3o PrintDialog.checkbox.showByStage = Mostrar por est\u00e1gio diff --git a/core/resources/l10n/messages_ru.properties b/core/resources/l10n/messages_ru.properties index f7eeb8792..7a3978031 100644 --- a/core/resources/l10n/messages_ru.properties +++ b/core/resources/l10n/messages_ru.properties @@ -2075,8 +2075,8 @@ CustomFinImport.error.badimage = \u041D\u0435\u0432\u043E\u0437\u043C\u043E\u043 CustomFinImport.description = \u0418\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435 \u043F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044F \u0432 \u0447\u0435\u0440\u043D\u043E-\u0431\u0435\u043B\u043E\u0435 (\u0433\u0434\u0435 \u0447\u0435\u0440\u043D\u044B\u0439 - \u0446\u0432\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430), \u0442\u0430\u043A \u0447\u0442\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0447\u0435\u0440\u043D\u044B\u0439 \u0446\u0432\u0435\u0442 \u0434\u043B\u044F \u0440\u0438\u0441\u0443\u043D\u043A\u0430 \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430 \u0438 \u0431\u0435\u043B\u044B\u0439 \u0438\u043B\u0438 \u0441\u0432\u0435\u0442\u043B\u044B\u0439 \u0446\u0432\u0435\u0442 \u0434\u043B\u044F \u0444\u043E\u043D\u0430. \u041E\u0441\u043D\u043E\u0432\u0430\u043D\u0438\u0435 \u0441\u0442\u0430\u0431\u0438\u043B\u0438\u0437\u0430\u0442\u043E\u0440\u0430 \u0434\u043E\u043B\u0436\u043D\u043E \u043D\u0430\u0447\u0438\u043D\u0430\u0442\u044C\u0441\u044F \u0441\u043D\u0438\u0437\u0443 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F. -PresetModel.lbl.select = \u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0437\u0430\u0433\u043E\u0442\u043E\u0432\u043A\u0443 -PresetModel.lbl.database = \u0418\u0437 \u0431\u0430\u0437\u044B \u0434\u0430\u043D\u043D\u044B\u0445... +PresetModel.lbl.nopreset = \u041d\u0435\u0442\u0020\u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 +PresetModel.lbl.selectpreset = \u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0437\u0430\u0433\u043E\u0442\u043E\u0432\u043A\u0443 DecalModel.lbl.select = <\u043D\u0435\u0442> DecalModel.lbl.choose = \u0418\u0437 \u0444\u0430\u0439\u043B\u0430... diff --git a/core/resources/l10n/messages_uk_UA.properties b/core/resources/l10n/messages_uk_UA.properties index 5d7147134..10846074b 100644 --- a/core/resources/l10n/messages_uk_UA.properties +++ b/core/resources/l10n/messages_uk_UA.properties @@ -1812,8 +1812,8 @@ CustomFinImport.error.badimage = Could not deduce fin shape from image. CustomFinImport.description = The image will be converted internally to black and white image (black for the fin), so make sure you use a solid dark color for the fin, and white or a light color for the background. The fin must be touching the bottom of the image, which is the base of the fin. -PresetModel.lbl.select = Select preset -PresetModel.lbl.database = From database... +PresetModel.lbl.nopreset = No preset +PresetModel.lbl.selectpreset = Select preset DecalModel.lbl.select = DecalModel.lbl.choose = From file... diff --git a/core/resources/l10n/messages_zh_CN.properties b/core/resources/l10n/messages_zh_CN.properties index 9e9cfed05..804bc7ac9 100644 --- a/core/resources/l10n/messages_zh_CN.properties +++ b/core/resources/l10n/messages_zh_CN.properties @@ -803,8 +803,8 @@ PreferencesDialog.languages.default = \u7CFB\u7EDF\u9ED8\u8BA4 PreferencesDialog.lbl.language = \u754C\u9762\u8BED\u8A00: PreferencesDialog.lbl.languageEffect = \u8BED\u8A00\u8BBE\u7F6E\u5C06\u5728OpenRocket\u91CD\u542F\u540E\u751F\u6548 -PresetModel.lbl.database = \u4ECE\u6570\u636E\u5E93... -PresetModel.lbl.select = \u9009\u62E9\u9884\u8BBE +PresetModel.lbl.nopreset = \u6ca1\u6709\u9884\u8bbe +PresetModel.lbl.selectpreset = \u9009\u62E9\u9884\u8BBE PrintDialog.but.previewAndPrint = \u9884\u89C8 & \u6253\u5370 PrintDialog.checkbox.showByStage = \u6309\u7EA7\u663E\u793A diff --git a/swing/src/net/sf/openrocket/gui/adaptors/PresetModel.java b/swing/src/net/sf/openrocket/gui/adaptors/PresetModel.java index 5fb2355d7..59f017e03 100644 --- a/swing/src/net/sf/openrocket/gui/adaptors/PresetModel.java +++ b/swing/src/net/sf/openrocket/gui/adaptors/PresetModel.java @@ -29,8 +29,7 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com private static final Logger log = LoggerFactory.getLogger(PresetModel.class); private static final Translator trans = Application.getTranslator(); - private static final String NONE_SELECTED = trans.get("lbl.select"); - private static final String SELECT_DATABASE = trans.get("lbl.database"); + private static final String NONE_SELECTED = String.format("%s", trans.get("lbl.nopreset")); private final Component parent; private final RocketComponent component; @@ -50,7 +49,7 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com @Override public int getSize() { - return presets.size() + 2; + return presets.size() + 1; } @Override @@ -58,9 +57,6 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com if (index == 0) { return NONE_SELECTED; } - if (index == getSize() - 1) { - return SELECT_DATABASE; - } return presets.get(index - 1); } @@ -72,21 +68,6 @@ public class PresetModel extends AbstractListModel implements ComboBoxModel, Com throw new BugException("item is null"); } else if (item.equals(NONE_SELECTED)) { component.clearPreset(); - } else if (item.equals(SELECT_DATABASE)) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - ((ComponentPresetDatabase) Application.getComponentPresetDao()).addDatabaseListener(PresetModel.this); - ComponentPresetChooserDialog dialog = - new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(parent), component); - dialog.setVisible(true); - ComponentPreset preset = dialog.getSelectedComponentPreset(); - if (preset != null) { - setSelectedItem(preset); - } - ((ComponentPresetDatabase) Application.getComponentPresetDao()).removeChangeListener(PresetModel.this); - } - }); } else { document.addUndoPosition("Use Preset " + component.getComponentName()); component.loadPreset((ComponentPreset) item); diff --git a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java index 976e2945a..e380a7303 100644 --- a/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java +++ b/swing/src/net/sf/openrocket/gui/configdialog/RocketComponentConfig.java @@ -22,8 +22,11 @@ import javax.swing.JSpinner; import javax.swing.JTabbedPane; import javax.swing.JTextArea; import javax.swing.JTextField; +import javax.swing.SwingUtilities; import net.miginfocom.swing.MigLayout; +import net.sf.openrocket.database.ComponentPresetDatabase; +import net.sf.openrocket.database.DatabaseListener; import net.sf.openrocket.document.OpenRocketDocument; import net.sf.openrocket.gui.SpinnerEditor; import net.sf.openrocket.gui.adaptors.BooleanModel; @@ -36,6 +39,7 @@ import net.sf.openrocket.gui.components.BasicSlider; import net.sf.openrocket.gui.components.StyledLabel; import net.sf.openrocket.gui.components.StyledLabel.Style; import net.sf.openrocket.gui.components.UnitSelector; +import net.sf.openrocket.gui.dialogs.preset.ComponentPresetChooserDialog; import net.sf.openrocket.gui.util.GUIUtil; import net.sf.openrocket.gui.widgets.SelectColorButton; import net.sf.openrocket.l10n.Translator; @@ -115,8 +119,19 @@ public class RocketComponentConfig extends JPanel { // If the component supports a preset, show the preset selection box. presetModel = new PresetModel(this, document, component); presetComboBox = new JComboBox(presetModel); + presetComboBox.setMaximumRowCount(20); presetComboBox.setEditable(false); - this.add(presetComboBox, ""); + this.add(presetComboBox); + + JButton selectPreset = new SelectColorButton(trans.get("PresetModel.lbl.selectpreset")); + selectPreset.setToolTipText(trans.get("PresetModel.lbl.selectpreset.ttip")); + selectPreset.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + selectPreset(); + } + }); + this.add(selectPreset); } tabbedPane = new JTabbedPane(); @@ -241,6 +256,24 @@ public class RocketComponentConfig extends JPanel { } } + private void selectPreset() { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + if (presetComboBox == null || presetModel == null) return; + ((ComponentPresetDatabase) Application.getComponentPresetDao()).addDatabaseListener(presetModel); + ComponentPresetChooserDialog dialog = + new ComponentPresetChooserDialog(SwingUtilities.getWindowAncestor(RocketComponentConfig.this), component); + dialog.setVisible(true); + ComponentPreset preset = dialog.getSelectedComponentPreset(); + if (preset != null) { + presetComboBox.setSelectedItem(preset); + } + ((ComponentPresetDatabase) Application.getComponentPresetDao()).removeChangeListener(presetModel); + } + }); + } + public void clearConfigListeners() { if (appearancePanel != null) { appearancePanel.clearConfigListeners();