mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 02:38:02 +00:00
Use FComboBox in place of JComboBox
This commit is contained in:
@@ -6,7 +6,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JOptionPane;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
@@ -22,6 +21,7 @@ import forge.control.RestartUtil;
|
||||
import forge.game.ai.AiProfileUtil;
|
||||
import forge.gui.framework.FScreen;
|
||||
import forge.gui.framework.ICDoc;
|
||||
import forge.gui.toolbox.FComboBox;
|
||||
import forge.gui.toolbox.FComboBoxPanel;
|
||||
import forge.gui.toolbox.FLabel;
|
||||
import forge.properties.ForgePreferences;
|
||||
@@ -195,14 +195,14 @@ public enum CSubmenuPreferences implements ICDoc {
|
||||
private void initializeGameLogVerbosityComboBox() {
|
||||
FPref userSetting = FPref.DEV_LOG_ENTRY_TYPE;
|
||||
FComboBoxPanel<GameLogEntryType> panel = this.view.getGameLogVerbosityComboBoxPanel();
|
||||
JComboBox<GameLogEntryType> comboBox = createComboBox(GameLogEntryType.values(), userSetting);
|
||||
FComboBox<GameLogEntryType> comboBox = createComboBox(GameLogEntryType.values(), userSetting);
|
||||
GameLogEntryType selectedItem = GameLogEntryType.valueOf(this.prefs.getPref(userSetting));
|
||||
panel.setComboBox(comboBox, selectedItem);
|
||||
}
|
||||
|
||||
private void initializeCloseActionComboBox() {
|
||||
final FComboBoxPanel<CloseAction> panel = this.view.getCloseActionComboBoxPanel();
|
||||
final JComboBox<CloseAction> comboBox = new JComboBox<CloseAction>(CloseAction.values());
|
||||
final FComboBox<CloseAction> comboBox = new FComboBox<CloseAction>(CloseAction.values());
|
||||
comboBox.addItemListener(new ItemListener() {
|
||||
@Override
|
||||
public void itemStateChanged(final ItemEvent e) {
|
||||
@@ -215,18 +215,18 @@ public enum CSubmenuPreferences implements ICDoc {
|
||||
private void initializeAiProfilesComboBox() {
|
||||
FPref userSetting = FPref.UI_CURRENT_AI_PROFILE;
|
||||
FComboBoxPanel<String> panel = this.view.getAiProfilesComboBoxPanel();
|
||||
JComboBox<String> comboBox = createComboBox(AiProfileUtil.getProfilesArray(), userSetting);
|
||||
FComboBox<String> comboBox = createComboBox(AiProfileUtil.getProfilesArray(), userSetting);
|
||||
String selectedItem = this.prefs.getPref(userSetting);
|
||||
panel.setComboBox(comboBox, selectedItem);
|
||||
}
|
||||
|
||||
private <E> JComboBox<E> createComboBox(E[] items, final ForgePreferences.FPref setting) {
|
||||
final JComboBox<E> comboBox = new JComboBox<E>(items);
|
||||
private <E> FComboBox<E> createComboBox(E[] items, final ForgePreferences.FPref setting) {
|
||||
final FComboBox<E> comboBox = new FComboBox<E>(items);
|
||||
addComboBoxListener(comboBox, setting);
|
||||
return comboBox;
|
||||
}
|
||||
|
||||
private <E> void addComboBoxListener(final JComboBox<E> comboBox, final ForgePreferences.FPref setting) {
|
||||
private <E> void addComboBoxListener(final FComboBox<E> comboBox, final ForgePreferences.FPref setting) {
|
||||
comboBox.addItemListener(new ItemListener() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
|
||||
@@ -4,6 +4,8 @@ import java.awt.Component;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.LayoutManager;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.swing.ComboBoxModel;
|
||||
import javax.swing.DefaultListCellRenderer;
|
||||
import javax.swing.JButton;
|
||||
@@ -45,6 +47,10 @@ public class FComboBox<E> extends JComboBox<E> {
|
||||
super(items);
|
||||
initialize();
|
||||
}
|
||||
public FComboBox(Vector<E> items) {
|
||||
super(items);
|
||||
initialize();
|
||||
}
|
||||
|
||||
private void initialize() {
|
||||
setUI(new FComboBoxUI());
|
||||
@@ -64,10 +70,16 @@ public class FComboBox<E> extends JComboBox<E> {
|
||||
super.paintComponent(g);
|
||||
Graphics2D g2d = (Graphics2D)g;
|
||||
g2d.setPaint(getForeground());
|
||||
int shapeWidth = 10;
|
||||
int shapeHeight = 10;
|
||||
int x = getWidth() - shapeWidth - 8;
|
||||
int y = getHeight() / 2 - 2;
|
||||
int shapeWidth = 8;
|
||||
int shapeHeight = 8;
|
||||
int x = getWidth() - shapeWidth - 6;
|
||||
int y = getHeight() / 2 - 1;
|
||||
if (getHeight() > 26) { //increase arrow size if taller combo box
|
||||
shapeWidth += 2;
|
||||
shapeHeight += 2;
|
||||
x -= 4;
|
||||
y--;
|
||||
}
|
||||
int[] xPoints = {x, x + shapeWidth, x + (shapeWidth / 2)};
|
||||
int[] yPoints = {y, y, y + (shapeHeight / 2)};
|
||||
g2d.fillPolygon(xPoints, yPoints, 3);
|
||||
|
||||
@@ -5,7 +5,6 @@ import java.awt.FlowLayout;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.swing.DefaultListCellRenderer;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JList;
|
||||
import javax.swing.JPanel;
|
||||
@@ -17,7 +16,7 @@ import forge.gui.toolbox.FSkin.JLabelSkin;
|
||||
import forge.properties.ForgePreferences.FPref;
|
||||
|
||||
/**
|
||||
* Panel with combo box and caption (either FComboBoxWrapper or FComboBoxPanel should be used instead of JComboBox so skinning works)
|
||||
* Panel with combo box and caption (either FComboBoxWrapper or FComboBoxPanel should be used instead of FComboBox so skinning works)
|
||||
*
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
@@ -32,7 +31,7 @@ public class FComboBoxPanel<E> extends JPanel {
|
||||
}
|
||||
|
||||
private String comboBoxCaption = "";
|
||||
private JComboBox<E> comboBox = null;
|
||||
private FComboBox<E> comboBox = null;
|
||||
|
||||
public FComboBoxPanel(String comboBoxCaption) {
|
||||
super();
|
||||
@@ -41,7 +40,7 @@ public class FComboBoxPanel<E> extends JPanel {
|
||||
allPanels.add(this);
|
||||
}
|
||||
|
||||
public void setComboBox(JComboBox<E> comboBox, E selectedItem) {
|
||||
public void setComboBox(FComboBox<E> comboBox, E selectedItem) {
|
||||
removeExistingComboBox();
|
||||
this.comboBox = comboBox;
|
||||
this.comboBox.setSelectedItem(selectedItem);
|
||||
@@ -81,7 +80,7 @@ public class FComboBoxPanel<E> extends JPanel {
|
||||
private void setComboBoxLayout() {
|
||||
if (this.comboBox != null) {
|
||||
if (Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_THEMED_COMBOBOX)) {
|
||||
FSkin.JComponentSkin<JComboBox<E>> comboBoxSkin = FSkin.get(this.comboBox);
|
||||
FSkin.JComponentSkin<FComboBox<E>> comboBoxSkin = FSkin.get(this.comboBox);
|
||||
comboBoxSkin.setBackground(FSkin.getColor(FSkin.Colors.CLR_THEME2));
|
||||
comboBoxSkin.setForeground(FSkin.getColor(FSkin.Colors.CLR_TEXT));
|
||||
comboBoxSkin.setFont(FSkin.getFont(12));
|
||||
|
||||
@@ -8,11 +8,10 @@ import java.util.ArrayList;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.swing.ComboBoxModel;
|
||||
import javax.swing.JComboBox;
|
||||
import javax.swing.ListCellRenderer;
|
||||
|
||||
/**
|
||||
* Wrapper for combo box with extra logic (either FComboBoxWrapper or FComboBoxPanel should be used instead of JComboBox so skinning works)
|
||||
* Wrapper for combo box with extra logic (either FComboBoxWrapper or FComboBoxPanel should be used instead of FComboBox so skinning works)
|
||||
*
|
||||
*/
|
||||
public class FComboBoxWrapper<E> {
|
||||
@@ -25,30 +24,30 @@ public class FComboBoxWrapper<E> {
|
||||
}
|
||||
}
|
||||
|
||||
private JComboBox<E> comboBox;
|
||||
private FComboBox<E> comboBox;
|
||||
private Object constraints;
|
||||
|
||||
public FComboBoxWrapper() {
|
||||
super();
|
||||
this.comboBox = new JComboBox<E>();
|
||||
this.comboBox = new FComboBox<E>();
|
||||
allWrappers.add(this);
|
||||
}
|
||||
|
||||
public FComboBoxWrapper(E[] items) {
|
||||
super();
|
||||
this.comboBox = new JComboBox<E>(items);
|
||||
this.comboBox = new FComboBox<E>(items);
|
||||
allWrappers.add(this);
|
||||
}
|
||||
|
||||
public FComboBoxWrapper(Vector<E> items) {
|
||||
super();
|
||||
this.comboBox = new JComboBox<E>(items);
|
||||
this.comboBox = new FComboBox<E>(items);
|
||||
allWrappers.add(this);
|
||||
}
|
||||
|
||||
public FComboBoxWrapper(ComboBoxModel<E> aModel) {
|
||||
super();
|
||||
this.comboBox = new JComboBox<E>(aModel);
|
||||
this.comboBox = new FComboBox<E>(aModel);
|
||||
allWrappers.add(this);
|
||||
}
|
||||
|
||||
@@ -129,10 +128,10 @@ public class FComboBoxWrapper<E> {
|
||||
|
||||
//refresh combo box skin by replacing it with a copy of itself
|
||||
//TODO: Figure out if there's a better way, as calling updateUI doesn't seem to work
|
||||
public static <E> JComboBox<E> refreshComboBoxSkin(JComboBox<E> comboBox) {
|
||||
public static <E> FComboBox<E> refreshComboBoxSkin(FComboBox<E> comboBox) {
|
||||
return refreshComboBoxSkin(comboBox, null);
|
||||
}
|
||||
public static <E> JComboBox<E> refreshComboBoxSkin(JComboBox<E> comboBox, Object constraints) {
|
||||
public static <E> FComboBox<E> refreshComboBoxSkin(FComboBox<E> comboBox, Object constraints) {
|
||||
//find index of combo box within parent
|
||||
Container parent = comboBox.getParent();
|
||||
if (parent == null) { return comboBox; }
|
||||
@@ -145,7 +144,7 @@ public class FComboBoxWrapper<E> {
|
||||
}
|
||||
|
||||
//create copy of combo box
|
||||
JComboBox<E> newComboBox = new JComboBox<E>();
|
||||
FComboBox<E> newComboBox = new FComboBox<E>();
|
||||
for (int i = 0; i < comboBox.getItemCount(); i++) {
|
||||
newComboBox.addItem(comboBox.getItemAt(i));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user