From 829109ee2de26ac3baa764a9924879f21d59af16 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Wed, 7 Aug 2024 12:01:08 +0200 Subject: [PATCH] Display user-defined materials with (ud) prefix --- .../swing/gui/configdialog/MaterialPanel.java | 12 +++++++++- .../SearchableAndCategorizableComboBox.java | 24 ++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/swing/src/main/java/info/openrocket/swing/gui/configdialog/MaterialPanel.java b/swing/src/main/java/info/openrocket/swing/gui/configdialog/MaterialPanel.java index 335e315ef..a49e553e2 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/configdialog/MaterialPanel.java +++ b/swing/src/main/java/info/openrocket/swing/gui/configdialog/MaterialPanel.java @@ -172,7 +172,17 @@ public class MaterialPanel extends JPanel implements Invalidatable, Invalidating public static SearchableAndCategorizableComboBox createComboBox( MaterialGroup[] allGroups, Material[] materials, Component... extraCategoryWidgets) { final Map materialGroupMap = createMaterialGroupMap(allGroups, materials); - return new SearchableAndCategorizableComboBox<>(materialGroupMap, trans.get("MaterialPanel.MaterialComboBox.placeholder"), extraCategoryWidgets); + return new SearchableAndCategorizableComboBox<>(materialGroupMap, + trans.get("MaterialPanel.MaterialComboBox.placeholder"), extraCategoryWidgets) { + @Override + public String getDisplayString(Material item) { + String baseText = item.toString(); + if (item.isUserDefined()) { + baseText = "(ud) " + baseText; + } + return baseText; + } + }; } public static void updateComboBoxItems(SearchableAndCategorizableComboBox comboBox, diff --git a/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndCategorizableComboBox.java b/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndCategorizableComboBox.java index 3c59592ec..f0a5d15c4 100644 --- a/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndCategorizableComboBox.java +++ b/swing/src/main/java/info/openrocket/swing/gui/widgets/SearchableAndCategorizableComboBox.java @@ -85,6 +85,7 @@ public class SearchableAndCategorizableComboBox extends JComboBox { this.extraCategoryWidgets = extraCategoryWidgets; this.placeHolderText = placeHolderText; updateItems(itemGroupMap); + setupMainRenderer(); // Add key listener for the search fields searchFieldCategory.addKeyListener(new KeyAdapter() { @@ -155,6 +156,19 @@ public class SearchableAndCategorizableComboBox extends JComboBox { textSelectionBackground = GUIUtil.getUITheme().getTextSelectionBackgroundColor(); } + public void setupMainRenderer() { + setRenderer(new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value != null) { + label.setText(getDisplayString((T) value)); + } + return label; + } + }); + } + public void updateItems(Map itemGroupMap) { this.itemGroupMap = itemGroupMap; this.allItems = extractItemsFromMap(itemGroupMap); @@ -197,7 +211,7 @@ public class SearchableAndCategorizableComboBox extends JComboBox { if (itemsForGroup != null) { for (T item : itemsForGroup) { - JMenuItem itemMenu = new JMenuItem(item.toString()) { + JMenuItem itemMenu = new JMenuItem(getDisplayString(item)) { @Override public void paintComponent(Graphics g) { super.paintComponent(g); @@ -240,6 +254,10 @@ public class SearchableAndCategorizableComboBox extends JComboBox { return menu; } + public String getDisplayString(T item) { + return item.toString(); + } + private JList createFilteredList() { JList list = new JList<>(); // Don't fill the list with the items yet, this will be done during filtering @@ -248,7 +266,7 @@ public class SearchableAndCategorizableComboBox extends JComboBox { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); T item = (T) value; - String itemName = item.toString(); + String itemName = getDisplayString(item); // If the item is currently selected, draw a checkmark before it if (item.equals(getSelectedItem())) { @@ -337,7 +355,7 @@ public class SearchableAndCategorizableComboBox extends JComboBox { SortedListModel filteredModel = new SortedListModel<>(); for (T item : this.allItems) { - if (item.toString().toLowerCase().contains(searchText)) { + if (getDisplayString(item).toLowerCase().contains(searchText)) { filteredModel.add(item); } }