001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.preferences; 003 004import java.awt.Component; 005import java.util.HashMap; 006import java.util.Map; 007 008import javax.swing.JPanel; 009import javax.swing.JScrollPane; 010import javax.swing.JTabbedPane; 011 012import org.openstreetmap.josm.Main; 013import org.openstreetmap.josm.tools.GBC; 014 015public abstract class DefaultTabPreferenceSetting extends DefaultPreferenceSetting implements TabPreferenceSetting { 016 017 private final String iconName; 018 private final String description; 019 private final String title; 020 private final JTabbedPane tabpane; 021 private final Map<SubPreferenceSetting, Component> subSettingMap; 022 023 /** 024 * Constructs a new {@code DefaultTabPreferenceSetting}. 025 */ 026 public DefaultTabPreferenceSetting() { 027 this(null, null, null); 028 } 029 030 public DefaultTabPreferenceSetting(String iconName, String title, String description) { 031 this(iconName, title, description, false); 032 } 033 034 public DefaultTabPreferenceSetting(String iconName, String title, String description, boolean isExpert) { 035 this(iconName, title, description, isExpert, null); 036 } 037 038 public DefaultTabPreferenceSetting(String iconName, String title, String description, boolean isExpert, JTabbedPane tabpane) { 039 super(isExpert); 040 this.iconName = iconName; 041 this.description = description; 042 this.title = title; 043 this.tabpane = tabpane; 044 this.subSettingMap = tabpane != null ? new HashMap<>() : null; 045 } 046 047 @Override 048 public String getIconName() { 049 return iconName; 050 } 051 052 @Override 053 public String getTooltip() { 054 if (getDescription() != null) { 055 return "<html>"+getDescription()+"</html>"; 056 } else { 057 return null; 058 } 059 } 060 061 @Override 062 public String getDescription() { 063 return description; 064 } 065 066 @Override 067 public String getTitle() { 068 return title; 069 } 070 071 /** 072 * Get the inner tab pane, if any. 073 * @return The JTabbedPane contained in this tab preference settings, or null if none is set. 074 * @since 5631 075 */ 076 public final JTabbedPane getTabPane() { 077 return tabpane; 078 } 079 080 protected final void createPreferenceTabWithScrollPane(PreferenceTabbedPane gui, JPanel panel) { 081 GBC a = GBC.eol().insets(-5, 0, 0, 0); 082 a.anchor = GBC.EAST; 083 084 JScrollPane scrollPane = new JScrollPane(panel); 085 scrollPane.setBorder(null); 086 087 JPanel tab = gui.createPreferenceTab(this); 088 tab.add(scrollPane, GBC.eol().fill(GBC.BOTH)); 089 tab.add(GBC.glue(0, 10), a); 090 } 091 092 @Override 093 public boolean selectSubTab(SubPreferenceSetting subPref) { 094 if (tabpane != null && subPref != null) { 095 Component tab = getSubTab(subPref); 096 if (tab != null) { 097 try { 098 tabpane.setSelectedComponent(tab); 099 return true; 100 } catch (IllegalArgumentException e) { 101 // Ignore exception and return false below 102 Main.debug(Main.getErrorMessage(e)); 103 } 104 } 105 } 106 return false; 107 } 108 109 @Override 110 public final void addSubTab(SubPreferenceSetting sub, String title, Component component) { 111 addSubTab(sub, title, component, null); 112 } 113 114 @Override 115 public final void addSubTab(SubPreferenceSetting sub, String title, Component component, String tip) { 116 if (tabpane != null && component != null) { 117 tabpane.addTab(title, null, component, tip); 118 registerSubTab(sub, component); 119 } 120 } 121 122 @Override 123 public final void registerSubTab(SubPreferenceSetting sub, Component component) { 124 if (subSettingMap != null && sub != null && component != null) { 125 subSettingMap.put(sub, component); 126 } 127 } 128 129 @Override 130 public final Component getSubTab(SubPreferenceSetting sub) { 131 return subSettingMap != null ? subSettingMap.get(sub) : null; 132 } 133}