config panel: refactor input components creation into methods
This commit is contained in:
@@ -337,220 +337,35 @@ class ConfigPanel extends PluginPanel
|
|||||||
|
|
||||||
if (cid.getType() == boolean.class)
|
if (cid.getType() == boolean.class)
|
||||||
{
|
{
|
||||||
JCheckBox checkbox = new JCheckBox();
|
item.add(createCheckbox(cd, cid), BorderLayout.EAST);
|
||||||
checkbox.setBackground(ColorScheme.LIGHT_GRAY_COLOR);
|
|
||||||
checkbox.setSelected(Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName())));
|
|
||||||
checkbox.addActionListener(ae -> changeConfiguration(checkbox, cd, cid));
|
|
||||||
|
|
||||||
item.add(checkbox, BorderLayout.EAST);
|
|
||||||
}
|
}
|
||||||
|
else if (cid.getType() == int.class)
|
||||||
if (cid.getType() == int.class)
|
|
||||||
{
|
{
|
||||||
int value = Integer.parseInt(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
item.add(createIntSpinner(cd, cid), BorderLayout.EAST);
|
||||||
|
|
||||||
Range range = cid.getRange();
|
|
||||||
int min = 0, max = Integer.MAX_VALUE;
|
|
||||||
if (range != null)
|
|
||||||
{
|
|
||||||
min = range.min();
|
|
||||||
max = range.max();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Config may previously have been out of range
|
|
||||||
value = Ints.constrainToRange(value, min, max);
|
|
||||||
|
|
||||||
SpinnerModel model = new SpinnerNumberModel(value, min, max, 1);
|
|
||||||
JSpinner spinner = new JSpinner(model);
|
|
||||||
Component editor = spinner.getEditor();
|
|
||||||
JFormattedTextField spinnerTextField = ((JSpinner.DefaultEditor) editor).getTextField();
|
|
||||||
spinnerTextField.setColumns(SPINNER_FIELD_WIDTH);
|
|
||||||
spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid));
|
|
||||||
|
|
||||||
Units units = cid.getUnits();
|
|
||||||
if (units != null)
|
|
||||||
{
|
|
||||||
spinnerTextField.setFormatterFactory(new UnitFormatterFactory(units));
|
|
||||||
}
|
|
||||||
|
|
||||||
item.add(spinner, BorderLayout.EAST);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (cid.getType() == double.class)
|
else if (cid.getType() == double.class)
|
||||||
{
|
{
|
||||||
double value = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName(), double.class);
|
item.add(createDoubleSpinner(cd, cid), BorderLayout.EAST);
|
||||||
|
|
||||||
SpinnerModel model = new SpinnerNumberModel(value, 0, Double.MAX_VALUE, 0.1);
|
|
||||||
JSpinner spinner = new JSpinner(model);
|
|
||||||
Component editor = spinner.getEditor();
|
|
||||||
JFormattedTextField spinnerTextField = ((JSpinner.DefaultEditor) editor).getTextField();
|
|
||||||
spinnerTextField.setColumns(SPINNER_FIELD_WIDTH);
|
|
||||||
spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid));
|
|
||||||
|
|
||||||
item.add(spinner, BorderLayout.EAST);
|
|
||||||
}
|
}
|
||||||
|
else if (cid.getType() == String.class)
|
||||||
if (cid.getType() == String.class)
|
|
||||||
{
|
{
|
||||||
JTextComponent textField;
|
item.add(createTextField(cd, cid), BorderLayout.SOUTH);
|
||||||
|
|
||||||
if (cid.getItem().secret())
|
|
||||||
{
|
|
||||||
textField = new JPasswordField();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
final JTextArea textArea = new JTextArea();
|
|
||||||
textArea.setLineWrap(true);
|
|
||||||
textArea.setWrapStyleWord(true);
|
|
||||||
textField = textArea;
|
|
||||||
}
|
|
||||||
|
|
||||||
textField.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
|
|
||||||
textField.setText(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
|
||||||
|
|
||||||
textField.addFocusListener(new FocusAdapter()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void focusLost(FocusEvent e)
|
|
||||||
{
|
|
||||||
changeConfiguration(textField, cd, cid);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
item.add(textField, BorderLayout.SOUTH);
|
|
||||||
}
|
}
|
||||||
|
else if (cid.getType() == Color.class)
|
||||||
if (cid.getType() == Color.class)
|
|
||||||
{
|
{
|
||||||
Color existing = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName(), Color.class);
|
item.add(createColorPicker(cd, cid), BorderLayout.EAST);
|
||||||
|
|
||||||
ColorJButton colorPickerBtn;
|
|
||||||
|
|
||||||
boolean alphaHidden = cid.getAlpha() == null;
|
|
||||||
|
|
||||||
if (existing == null)
|
|
||||||
{
|
|
||||||
colorPickerBtn = new ColorJButton("Pick a color", Color.BLACK);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
String colorHex = "#" + (alphaHidden ? ColorUtil.colorToHexCode(existing) : ColorUtil.colorToAlphaHexCode(existing)).toUpperCase();
|
|
||||||
colorPickerBtn = new ColorJButton(colorHex, existing);
|
|
||||||
}
|
|
||||||
|
|
||||||
colorPickerBtn.setFocusable(false);
|
|
||||||
colorPickerBtn.addMouseListener(new MouseAdapter()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void mouseClicked(MouseEvent e)
|
|
||||||
{
|
|
||||||
RuneliteColorPicker colorPicker = colorPickerManager.create(
|
|
||||||
SwingUtilities.windowForComponent(ConfigPanel.this),
|
|
||||||
colorPickerBtn.getColor(),
|
|
||||||
cid.getItem().name(),
|
|
||||||
alphaHidden);
|
|
||||||
colorPicker.setLocation(getLocationOnScreen());
|
|
||||||
colorPicker.setOnColorChange(c ->
|
|
||||||
{
|
|
||||||
colorPickerBtn.setColor(c);
|
|
||||||
colorPickerBtn.setText("#" + (alphaHidden ? ColorUtil.colorToHexCode(c) : ColorUtil.colorToAlphaHexCode(c)).toUpperCase());
|
|
||||||
});
|
|
||||||
colorPicker.setOnClose(c -> changeConfiguration(colorPicker, cd, cid));
|
|
||||||
colorPicker.setVisible(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
item.add(colorPickerBtn, BorderLayout.EAST);
|
|
||||||
}
|
}
|
||||||
|
else if (cid.getType() == Dimension.class)
|
||||||
if (cid.getType() == Dimension.class)
|
|
||||||
{
|
{
|
||||||
JPanel dimensionPanel = new JPanel();
|
item.add(createDimension(cd, cid), BorderLayout.EAST);
|
||||||
dimensionPanel.setLayout(new BorderLayout());
|
|
||||||
|
|
||||||
String str = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName());
|
|
||||||
String[] splitStr = str.split("x");
|
|
||||||
int width = Integer.parseInt(splitStr[0]);
|
|
||||||
int height = Integer.parseInt(splitStr[1]);
|
|
||||||
|
|
||||||
SpinnerModel widthModel = new SpinnerNumberModel(width, 0, Integer.MAX_VALUE, 1);
|
|
||||||
JSpinner widthSpinner = new JSpinner(widthModel);
|
|
||||||
Component widthEditor = widthSpinner.getEditor();
|
|
||||||
JFormattedTextField widthSpinnerTextField = ((JSpinner.DefaultEditor) widthEditor).getTextField();
|
|
||||||
widthSpinnerTextField.setColumns(4);
|
|
||||||
|
|
||||||
SpinnerModel heightModel = new SpinnerNumberModel(height, 0, Integer.MAX_VALUE, 1);
|
|
||||||
JSpinner heightSpinner = new JSpinner(heightModel);
|
|
||||||
Component heightEditor = heightSpinner.getEditor();
|
|
||||||
JFormattedTextField heightSpinnerTextField = ((JSpinner.DefaultEditor) heightEditor).getTextField();
|
|
||||||
heightSpinnerTextField.setColumns(4);
|
|
||||||
|
|
||||||
ChangeListener listener = e ->
|
|
||||||
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue());
|
|
||||||
|
|
||||||
widthSpinner.addChangeListener(listener);
|
|
||||||
heightSpinner.addChangeListener(listener);
|
|
||||||
|
|
||||||
dimensionPanel.add(widthSpinner, BorderLayout.WEST);
|
|
||||||
dimensionPanel.add(new JLabel(" x "), BorderLayout.CENTER);
|
|
||||||
dimensionPanel.add(heightSpinner, BorderLayout.EAST);
|
|
||||||
|
|
||||||
item.add(dimensionPanel, BorderLayout.EAST);
|
|
||||||
}
|
}
|
||||||
|
else if (cid.getType().isEnum())
|
||||||
if (cid.getType().isEnum())
|
|
||||||
{
|
{
|
||||||
Class<? extends Enum> type = (Class<? extends Enum>) cid.getType();
|
item.add(createComboBox(cd, cid), BorderLayout.EAST);
|
||||||
|
|
||||||
JComboBox<Enum<?>> box = new JComboBox<Enum<?>>(type.getEnumConstants()); // NOPMD: UseDiamondOperator
|
|
||||||
// set renderer prior to calling box.getPreferredSize(), since it will invoke the renderer
|
|
||||||
// to build components for each combobox element in order to compute the display size of the
|
|
||||||
// combobox
|
|
||||||
box.setRenderer(new ComboBoxListRenderer<>());
|
|
||||||
box.setPreferredSize(new Dimension(box.getPreferredSize().width, 25));
|
|
||||||
box.setForeground(Color.WHITE);
|
|
||||||
box.setFocusable(false);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Enum<?> selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
|
||||||
box.setSelectedItem(selectedItem);
|
|
||||||
box.setToolTipText(Text.titleCase(selectedItem));
|
|
||||||
}
|
|
||||||
catch (IllegalArgumentException ex)
|
|
||||||
{
|
|
||||||
log.debug("invalid seleced item", ex);
|
|
||||||
}
|
|
||||||
box.addItemListener(e ->
|
|
||||||
{
|
|
||||||
if (e.getStateChange() == ItemEvent.SELECTED)
|
|
||||||
{
|
|
||||||
changeConfiguration(box, cd, cid);
|
|
||||||
box.setToolTipText(Text.titleCase((Enum<?>) box.getSelectedItem()));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
item.add(box, BorderLayout.EAST);
|
|
||||||
}
|
}
|
||||||
|
else if (cid.getType() == Keybind.class || cid.getType() == ModifierlessKeybind.class)
|
||||||
if (cid.getType() == Keybind.class || cid.getType() == ModifierlessKeybind.class)
|
|
||||||
{
|
{
|
||||||
Keybind startingValue = configManager.getConfiguration(cd.getGroup().value(),
|
item.add(createKeybind(cd, cid), BorderLayout.EAST);
|
||||||
cid.getItem().keyName(),
|
|
||||||
(Class<? extends Keybind>) cid.getType());
|
|
||||||
|
|
||||||
HotkeyButton button = new HotkeyButton(startingValue, cid.getType() == ModifierlessKeybind.class);
|
|
||||||
|
|
||||||
button.addFocusListener(new FocusAdapter()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void focusLost(FocusEvent e)
|
|
||||||
{
|
|
||||||
changeConfiguration(button, cd, cid);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
item.add(button, BorderLayout.EAST);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JPanel section = sectionWidgets.get(cid.getItem().section());
|
JPanel section = sectionWidgets.get(cid.getItem().section());
|
||||||
@@ -596,6 +411,223 @@ class ConfigPanel extends PluginPanel
|
|||||||
revalidate();
|
revalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JCheckBox createCheckbox(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
|
{
|
||||||
|
JCheckBox checkbox = new JCheckBox();
|
||||||
|
checkbox.setBackground(ColorScheme.LIGHT_GRAY_COLOR);
|
||||||
|
checkbox.setSelected(Boolean.parseBoolean(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName())));
|
||||||
|
checkbox.addActionListener(ae -> changeConfiguration(checkbox, cd, cid));
|
||||||
|
return checkbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSpinner createIntSpinner(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
|
{
|
||||||
|
int value = Integer.parseInt(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
||||||
|
|
||||||
|
Range range = cid.getRange();
|
||||||
|
int min = 0, max = Integer.MAX_VALUE;
|
||||||
|
if (range != null)
|
||||||
|
{
|
||||||
|
min = range.min();
|
||||||
|
max = range.max();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Config may previously have been out of range
|
||||||
|
value = Ints.constrainToRange(value, min, max);
|
||||||
|
|
||||||
|
SpinnerModel model = new SpinnerNumberModel(value, min, max, 1);
|
||||||
|
JSpinner spinner = new JSpinner(model);
|
||||||
|
Component editor = spinner.getEditor();
|
||||||
|
JFormattedTextField spinnerTextField = ((JSpinner.DefaultEditor) editor).getTextField();
|
||||||
|
spinnerTextField.setColumns(SPINNER_FIELD_WIDTH);
|
||||||
|
spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid));
|
||||||
|
|
||||||
|
Units units = cid.getUnits();
|
||||||
|
if (units != null)
|
||||||
|
{
|
||||||
|
spinnerTextField.setFormatterFactory(new UnitFormatterFactory(units));
|
||||||
|
}
|
||||||
|
|
||||||
|
return spinner;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JSpinner createDoubleSpinner(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
|
{
|
||||||
|
double value = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName(), double.class);
|
||||||
|
|
||||||
|
SpinnerModel model = new SpinnerNumberModel(value, 0, Double.MAX_VALUE, 0.1);
|
||||||
|
JSpinner spinner = new JSpinner(model);
|
||||||
|
Component editor = spinner.getEditor();
|
||||||
|
JFormattedTextField spinnerTextField = ((JSpinner.DefaultEditor) editor).getTextField();
|
||||||
|
spinnerTextField.setColumns(SPINNER_FIELD_WIDTH);
|
||||||
|
spinner.addChangeListener(ce -> changeConfiguration(spinner, cd, cid));
|
||||||
|
return spinner;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JTextComponent createTextField(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
|
{
|
||||||
|
JTextComponent textField;
|
||||||
|
|
||||||
|
if (cid.getItem().secret())
|
||||||
|
{
|
||||||
|
textField = new JPasswordField();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
final JTextArea textArea = new JTextArea();
|
||||||
|
textArea.setLineWrap(true);
|
||||||
|
textArea.setWrapStyleWord(true);
|
||||||
|
textField = textArea;
|
||||||
|
}
|
||||||
|
|
||||||
|
textField.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
|
||||||
|
textField.setText(configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
||||||
|
|
||||||
|
textField.addFocusListener(new FocusAdapter()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void focusLost(FocusEvent e)
|
||||||
|
{
|
||||||
|
changeConfiguration(textField, cd, cid);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return textField;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ColorJButton createColorPicker(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
|
{
|
||||||
|
Color existing = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName(), Color.class);
|
||||||
|
|
||||||
|
ColorJButton colorPickerBtn;
|
||||||
|
|
||||||
|
boolean alphaHidden = cid.getAlpha() == null;
|
||||||
|
|
||||||
|
if (existing == null)
|
||||||
|
{
|
||||||
|
colorPickerBtn = new ColorJButton("Pick a color", Color.BLACK);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String colorHex = "#" + (alphaHidden ? ColorUtil.colorToHexCode(existing) : ColorUtil.colorToAlphaHexCode(existing)).toUpperCase();
|
||||||
|
colorPickerBtn = new ColorJButton(colorHex, existing);
|
||||||
|
}
|
||||||
|
|
||||||
|
colorPickerBtn.setFocusable(false);
|
||||||
|
colorPickerBtn.addMouseListener(new MouseAdapter()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void mouseClicked(MouseEvent e)
|
||||||
|
{
|
||||||
|
RuneliteColorPicker colorPicker = colorPickerManager.create(
|
||||||
|
SwingUtilities.windowForComponent(ConfigPanel.this),
|
||||||
|
colorPickerBtn.getColor(),
|
||||||
|
cid.getItem().name(),
|
||||||
|
alphaHidden);
|
||||||
|
colorPicker.setLocation(getLocationOnScreen());
|
||||||
|
colorPicker.setOnColorChange(c ->
|
||||||
|
{
|
||||||
|
colorPickerBtn.setColor(c);
|
||||||
|
colorPickerBtn.setText("#" + (alphaHidden ? ColorUtil.colorToHexCode(c) : ColorUtil.colorToAlphaHexCode(c)).toUpperCase());
|
||||||
|
});
|
||||||
|
colorPicker.setOnClose(c -> changeConfiguration(colorPicker, cd, cid));
|
||||||
|
colorPicker.setVisible(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return colorPickerBtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JPanel createDimension(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
|
{
|
||||||
|
JPanel dimensionPanel = new JPanel();
|
||||||
|
dimensionPanel.setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
String str = configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName());
|
||||||
|
String[] splitStr = str.split("x");
|
||||||
|
int width = Integer.parseInt(splitStr[0]);
|
||||||
|
int height = Integer.parseInt(splitStr[1]);
|
||||||
|
|
||||||
|
SpinnerModel widthModel = new SpinnerNumberModel(width, 0, Integer.MAX_VALUE, 1);
|
||||||
|
JSpinner widthSpinner = new JSpinner(widthModel);
|
||||||
|
Component widthEditor = widthSpinner.getEditor();
|
||||||
|
JFormattedTextField widthSpinnerTextField = ((JSpinner.DefaultEditor) widthEditor).getTextField();
|
||||||
|
widthSpinnerTextField.setColumns(4);
|
||||||
|
|
||||||
|
SpinnerModel heightModel = new SpinnerNumberModel(height, 0, Integer.MAX_VALUE, 1);
|
||||||
|
JSpinner heightSpinner = new JSpinner(heightModel);
|
||||||
|
Component heightEditor = heightSpinner.getEditor();
|
||||||
|
JFormattedTextField heightSpinnerTextField = ((JSpinner.DefaultEditor) heightEditor).getTextField();
|
||||||
|
heightSpinnerTextField.setColumns(4);
|
||||||
|
|
||||||
|
ChangeListener listener = e ->
|
||||||
|
configManager.setConfiguration(cd.getGroup().value(), cid.getItem().keyName(), widthSpinner.getValue() + "x" + heightSpinner.getValue());
|
||||||
|
|
||||||
|
widthSpinner.addChangeListener(listener);
|
||||||
|
heightSpinner.addChangeListener(listener);
|
||||||
|
|
||||||
|
dimensionPanel.add(widthSpinner, BorderLayout.WEST);
|
||||||
|
dimensionPanel.add(new JLabel(" x "), BorderLayout.CENTER);
|
||||||
|
dimensionPanel.add(heightSpinner, BorderLayout.EAST);
|
||||||
|
|
||||||
|
return dimensionPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JComboBox<Enum<?>> createComboBox(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
|
{
|
||||||
|
Class<? extends Enum> type = (Class<? extends Enum>) cid.getType();
|
||||||
|
|
||||||
|
JComboBox<Enum<?>> box = new JComboBox<Enum<?>>(type.getEnumConstants()); // NOPMD: UseDiamondOperator
|
||||||
|
// set renderer prior to calling box.getPreferredSize(), since it will invoke the renderer
|
||||||
|
// to build components for each combobox element in order to compute the display size of the
|
||||||
|
// combobox
|
||||||
|
box.setRenderer(new ComboBoxListRenderer<>());
|
||||||
|
box.setPreferredSize(new Dimension(box.getPreferredSize().width, 25));
|
||||||
|
box.setForeground(Color.WHITE);
|
||||||
|
box.setFocusable(false);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Enum<?> selectedItem = Enum.valueOf(type, configManager.getConfiguration(cd.getGroup().value(), cid.getItem().keyName()));
|
||||||
|
box.setSelectedItem(selectedItem);
|
||||||
|
box.setToolTipText(Text.titleCase(selectedItem));
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ex)
|
||||||
|
{
|
||||||
|
log.debug("invalid seleced item", ex);
|
||||||
|
}
|
||||||
|
box.addItemListener(e ->
|
||||||
|
{
|
||||||
|
if (e.getStateChange() == ItemEvent.SELECTED)
|
||||||
|
{
|
||||||
|
changeConfiguration(box, cd, cid);
|
||||||
|
box.setToolTipText(Text.titleCase((Enum<?>) box.getSelectedItem()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return box;
|
||||||
|
}
|
||||||
|
|
||||||
|
private HotkeyButton createKeybind(ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
|
{
|
||||||
|
Keybind startingValue = configManager.getConfiguration(cd.getGroup().value(),
|
||||||
|
cid.getItem().keyName(),
|
||||||
|
(Class<? extends Keybind>) cid.getType());
|
||||||
|
|
||||||
|
HotkeyButton button = new HotkeyButton(startingValue, cid.getType() == ModifierlessKeybind.class);
|
||||||
|
|
||||||
|
button.addFocusListener(new FocusAdapter()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void focusLost(FocusEvent e)
|
||||||
|
{
|
||||||
|
changeConfiguration(button, cd, cid);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return button;
|
||||||
|
}
|
||||||
|
|
||||||
private void changeConfiguration(Component component, ConfigDescriptor cd, ConfigItemDescriptor cid)
|
private void changeConfiguration(Component component, ConfigDescriptor cd, ConfigItemDescriptor cid)
|
||||||
{
|
{
|
||||||
final ConfigItem configItem = cid.getItem();
|
final ConfigItem configItem = cid.getItem();
|
||||||
|
|||||||
Reference in New Issue
Block a user