mirror of
https://github.com/correl/mage.git
synced 2024-12-26 03:00:11 +00:00
Merge origin/master
This commit is contained in:
commit
6dde3e7374
2 changed files with 76 additions and 71 deletions
|
@ -289,15 +289,15 @@ public class DeckGeneratorDialog {
|
||||||
adjustingSliderPanel = new RatioAdjustingSliderPanel();
|
adjustingSliderPanel = new RatioAdjustingSliderPanel();
|
||||||
|
|
||||||
// Restore saved slider values
|
// Restore saved slider values
|
||||||
String creaturePercentage = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_CREATURE_PERCENTAGE,
|
|
||||||
Integer.toString(DeckGeneratorPool.DEFAULT_CREATURE_PERCENTAGE));
|
|
||||||
adjustingSliderPanel.setCreaturePercentage(Integer.parseInt(creaturePercentage));
|
|
||||||
String nonCreaturePercentage = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_NON_CREATURE_PERCENTAGE,
|
|
||||||
Integer.toString(DeckGeneratorPool.DEFAULT_NON_CREATURE_PERCENTAGE));
|
|
||||||
adjustingSliderPanel.setNonCreaturePercentage(Integer.parseInt(nonCreaturePercentage));
|
|
||||||
String landPercentage = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_LAND_PERCENTAGE,
|
String landPercentage = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_LAND_PERCENTAGE,
|
||||||
Integer.toString(DeckGeneratorPool.DEFAULT_LAND_PERCENTAGE));
|
Integer.toString(DeckGeneratorPool.DEFAULT_LAND_PERCENTAGE));
|
||||||
adjustingSliderPanel.setLandPercentage(Integer.parseInt(landPercentage));
|
adjustingSliderPanel.setLandPercentage(Integer.parseInt(landPercentage));
|
||||||
|
String nonCreaturePercentage = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_NON_CREATURE_PERCENTAGE,
|
||||||
|
Integer.toString(DeckGeneratorPool.DEFAULT_NON_CREATURE_PERCENTAGE));
|
||||||
|
adjustingSliderPanel.setNonCreaturePercentage(Integer.parseInt(nonCreaturePercentage));
|
||||||
|
String creaturePercentage = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_CREATURE_PERCENTAGE,
|
||||||
|
Integer.toString(DeckGeneratorPool.DEFAULT_CREATURE_PERCENTAGE));
|
||||||
|
adjustingSliderPanel.setCreaturePercentage(Integer.parseInt(creaturePercentage));
|
||||||
advancedPanel.add(adjustingSliderPanel, c);
|
advancedPanel.add(adjustingSliderPanel, c);
|
||||||
|
|
||||||
// Reset
|
// Reset
|
||||||
|
@ -306,7 +306,7 @@ public class DeckGeneratorDialog {
|
||||||
c.ipady = 0;
|
c.ipady = 0;
|
||||||
c.weightx = 1.0;
|
c.weightx = 1.0;
|
||||||
c.anchor = GridBagConstraints.LAST_LINE_END;
|
c.anchor = GridBagConstraints.LAST_LINE_END;
|
||||||
c.insets = new Insets(10,10, 0, 0);
|
c.insets = new Insets(10, 10, 0, 0);
|
||||||
c.gridx = 2;
|
c.gridx = 2;
|
||||||
c.gridwidth = 1;
|
c.gridwidth = 1;
|
||||||
c.gridy = 2;
|
c.gridy = 2;
|
||||||
|
@ -418,13 +418,11 @@ public class DeckGeneratorDialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeckGeneratorCMC getDeckGeneratorCMC() {
|
public DeckGeneratorCMC getDeckGeneratorCMC() {
|
||||||
DeckGeneratorCMC selectedCMC = (DeckGeneratorCMC)cbCMC.getSelectedItem();
|
DeckGeneratorCMC selectedCMC = (DeckGeneratorCMC) cbCMC.getSelectedItem();
|
||||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_ADVANCED_CMC, selectedCMC.name());
|
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_ADVANCED_CMC, selectedCMC.name());
|
||||||
return selectedCMC;
|
return selectedCMC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public String getSelectedColors() {
|
public String getSelectedColors() {
|
||||||
if (selectedColors != null) {
|
if (selectedColors != null) {
|
||||||
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_DECK_SIZE, cbDeckSize.getSelectedItem().toString());
|
PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_DECK_GENERATOR_DECK_SIZE, cbDeckSize.getSelectedItem().toString());
|
||||||
|
|
|
@ -45,20 +45,22 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public class RatioAdjustingSliderPanel extends JPanel {
|
public class RatioAdjustingSliderPanel extends JPanel {
|
||||||
|
|
||||||
|
private static final int MAXIMUM = 100;
|
||||||
|
private int adjustableCount;
|
||||||
private JStorageSlider creatureSlider, nonCreatureSlider, landSlider;
|
private JStorageSlider creatureSlider, nonCreatureSlider, landSlider;
|
||||||
private List<JLabel> textLabels = new ArrayList<>();
|
private List<JLabel> textLabels = new ArrayList<>();
|
||||||
private AdjustingSliderGroup sg;
|
private AdjustingSliderGroup sg;
|
||||||
|
|
||||||
private class JStorageSlider extends JSlider {
|
private class JStorageSlider extends JSlider {
|
||||||
|
|
||||||
// Slider stores its initial value to revert to when reset
|
// Slider stores its initial value to revert to when reset
|
||||||
private int defaultValue;
|
private int defaultValue;
|
||||||
private int previousValue;
|
private boolean adjust;
|
||||||
|
|
||||||
public JStorageSlider(int min, int max, int value) {
|
public JStorageSlider(int min, int max, int value, boolean adjust) {
|
||||||
super(min, max, value);
|
super(min, max, value);
|
||||||
previousValue = value;
|
|
||||||
defaultValue = value;
|
defaultValue = value;
|
||||||
|
this.adjust = adjust;
|
||||||
setMinorTickSpacing(5);
|
setMinorTickSpacing(5);
|
||||||
setMajorTickSpacing(10);
|
setMajorTickSpacing(10);
|
||||||
setPaintTicks(true);
|
setPaintTicks(true);
|
||||||
|
@ -66,30 +68,23 @@ public class RatioAdjustingSliderPanel extends JPanel {
|
||||||
setLabelTable(createStandardLabels(10));
|
setLabelTable(createStandardLabels(10));
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPreviousValue() {
|
|
||||||
return previousValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPreviousValue(int value) {
|
|
||||||
previousValue = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void resetDefault() {
|
public void resetDefault() {
|
||||||
this.setValue(defaultValue);
|
this.setValue(defaultValue);
|
||||||
previousValue = defaultValue;
|
}
|
||||||
|
|
||||||
|
public boolean isAdjust() {
|
||||||
|
return adjust;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class AdjustingSliderGroup
|
private class AdjustingSliderGroup {
|
||||||
{
|
|
||||||
private final ArrayList<JStorageSlider> storageSliders;
|
private final ArrayList<JStorageSlider> storageSliders;
|
||||||
private int sliderIndex = 0;
|
private int sliderIndex = 0;
|
||||||
|
|
||||||
AdjustingSliderGroup(JStorageSlider... sliders)
|
AdjustingSliderGroup(JStorageSlider... sliders) {
|
||||||
{
|
|
||||||
storageSliders = new ArrayList<>();
|
storageSliders = new ArrayList<>();
|
||||||
for(JStorageSlider slider: sliders) {
|
for (JStorageSlider slider : sliders) {
|
||||||
storageSliders.add(slider);
|
storageSliders.add(slider);
|
||||||
slider.addChangeListener(new ChangeListener() {
|
slider.addChangeListener(new ChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -97,37 +92,52 @@ public class RatioAdjustingSliderPanel extends JPanel {
|
||||||
fireSliderChangedEvent((JStorageSlider) e.getSource());
|
fireSliderChangedEvent((JStorageSlider) e.getSource());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
if (slider.isAdjust()) {
|
||||||
|
adjustableCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void fireSliderChangedEvent(JStorageSlider source) {
|
|
||||||
// We don't want to do anything if the value isn't changing
|
|
||||||
if(!source.getValueIsAdjusting())
|
|
||||||
return;
|
|
||||||
// Update the slider depending on how much it's changed relative to its previous position
|
|
||||||
int change = (source.getValue() - source.getPreviousValue());
|
|
||||||
updateSliderPosition(change, source);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateSliderPosition(int change, JStorageSlider source) {
|
public void fireSliderChangedEvent(JStorageSlider source) {
|
||||||
int remaining = change;
|
// We don't want to do anything if the value isn't changing
|
||||||
while (remaining != 0) {
|
if (!source.getValueIsAdjusting())
|
||||||
// Get the currently indexed slider
|
return;
|
||||||
JStorageSlider slider = storageSliders.get(sliderIndex);
|
// Update the slider depending on how much it's changed relative to its previous position
|
||||||
// If it's not the slider that fired the event
|
updateSliderPosition(source);
|
||||||
if (slider != source) {
|
}
|
||||||
// Check we don't go over the upper and lower bounds
|
|
||||||
if (remaining < 0 || (remaining > 0 && slider.getValue() > 0)) {
|
private void updateSliderPosition(JStorageSlider source) {
|
||||||
// Adjust the currently selected slider by +/- 1
|
int maximum = MAXIMUM;
|
||||||
int adjustment = Integer.signum(remaining);
|
int excess = 100;
|
||||||
slider.setValue(slider.getValue() - adjustment);
|
int sign = 0;
|
||||||
remaining -= adjustment;
|
for (JStorageSlider slider : storageSliders) {
|
||||||
}
|
excess -= slider.getValue();
|
||||||
}
|
|
||||||
// Select the next slider in the list of sliders
|
|
||||||
sliderIndex = (sliderIndex + 1) % storageSliders.size();
|
|
||||||
}
|
}
|
||||||
for (JStorageSlider slider : storageSliders) {
|
sign = Integer.signum(excess);
|
||||||
slider.setPreviousValue(slider.getValue());
|
excess = Math.abs(excess);
|
||||||
|
int addition = excess / (adjustableCount - 1); // divide the deficit between all adjustable sliders except this one
|
||||||
|
if (addition == 0 && excess != 0) {
|
||||||
|
addition = 1;
|
||||||
|
}
|
||||||
|
for (int i = storageSliders.size() - 1; i >= 0; i--) {
|
||||||
|
JStorageSlider slider = storageSliders.get(i);
|
||||||
|
int value = slider.getValue();
|
||||||
|
if (slider != source && slider.isAdjust()) {
|
||||||
|
slider.setMaximum(maximum);
|
||||||
|
if (excess >= addition) {
|
||||||
|
value += addition * sign;
|
||||||
|
excess -= addition;
|
||||||
|
} else {
|
||||||
|
value += excess * sign;
|
||||||
|
excess = 0;
|
||||||
|
}
|
||||||
|
if (value < 0) {
|
||||||
|
excess += value;
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
slider.setValue(value);
|
||||||
|
}
|
||||||
|
maximum -= value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,10 +153,10 @@ public class RatioAdjustingSliderPanel extends JPanel {
|
||||||
|
|
||||||
private void initPanel() {
|
private void initPanel() {
|
||||||
|
|
||||||
// Create three sliders with default values
|
// Create three sliders with default values
|
||||||
creatureSlider = new JStorageSlider(0, 100, DeckGeneratorPool.DEFAULT_CREATURE_PERCENTAGE);
|
creatureSlider = new JStorageSlider(0, MAXIMUM, DeckGeneratorPool.DEFAULT_CREATURE_PERCENTAGE, true);
|
||||||
nonCreatureSlider = new JStorageSlider(0, 100, DeckGeneratorPool.DEFAULT_NON_CREATURE_PERCENTAGE);
|
nonCreatureSlider = new JStorageSlider(0, MAXIMUM, DeckGeneratorPool.DEFAULT_NON_CREATURE_PERCENTAGE, true);
|
||||||
landSlider = new JStorageSlider(0, 100, DeckGeneratorPool.DEFAULT_LAND_PERCENTAGE);
|
landSlider = new JStorageSlider(0, MAXIMUM, DeckGeneratorPool.DEFAULT_LAND_PERCENTAGE, false);
|
||||||
|
|
||||||
sg = new AdjustingSliderGroup(creatureSlider, nonCreatureSlider, landSlider);
|
sg = new AdjustingSliderGroup(creatureSlider, nonCreatureSlider, landSlider);
|
||||||
|
|
||||||
|
@ -178,7 +188,7 @@ public class RatioAdjustingSliderPanel extends JPanel {
|
||||||
return sliderPanel;
|
return sliderPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static JLabel createChangingPercentageLabel(final JSlider slider) {
|
private static JLabel createChangingPercentageLabel(final JSlider slider) {
|
||||||
|
|
||||||
final JLabel label = new JLabel(" " + String.valueOf(slider.getValue()) + "%");
|
final JLabel label = new JLabel(" " + String.valueOf(slider.getValue()) + "%");
|
||||||
|
|
||||||
|
@ -187,8 +197,8 @@ public class RatioAdjustingSliderPanel extends JPanel {
|
||||||
public void stateChanged(ChangeEvent e) {
|
public void stateChanged(ChangeEvent e) {
|
||||||
String value = String.valueOf(slider.getValue());
|
String value = String.valueOf(slider.getValue());
|
||||||
StringBuilder labelBuilder = new StringBuilder();
|
StringBuilder labelBuilder = new StringBuilder();
|
||||||
// Pad with spaces so all percentage labels are of equal size
|
// Pad with spaces so all percentage labels are of equal size
|
||||||
for(int i = 0; i < (5-value.length()); i++) {
|
for (int i = 0; i < (5 - value.length()); i++) {
|
||||||
labelBuilder.append(" ");
|
labelBuilder.append(" ");
|
||||||
}
|
}
|
||||||
labelBuilder.append(value);
|
labelBuilder.append(value);
|
||||||
|
@ -201,16 +211,16 @@ public class RatioAdjustingSliderPanel extends JPanel {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setEnabled(boolean enabled) {
|
public void setEnabled(boolean enabled) {
|
||||||
for(JStorageSlider slider: sg.getSliders()) {
|
for (JStorageSlider slider : sg.getSliders()) {
|
||||||
slider.setEnabled(enabled);
|
slider.setEnabled(enabled);
|
||||||
}
|
}
|
||||||
for(JLabel label: textLabels) {
|
for (JLabel label : textLabels) {
|
||||||
label.setEnabled(enabled);
|
label.setEnabled(enabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetValues() {
|
public void resetValues() {
|
||||||
for(JStorageSlider slider: sg.getSliders()) {
|
for (JStorageSlider slider : sg.getSliders()) {
|
||||||
slider.resetDefault();
|
slider.resetDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -229,20 +239,17 @@ public class RatioAdjustingSliderPanel extends JPanel {
|
||||||
|
|
||||||
public void setCreaturePercentage(int percentage) {
|
public void setCreaturePercentage(int percentage) {
|
||||||
creatureSlider.setValue(percentage);
|
creatureSlider.setValue(percentage);
|
||||||
creatureSlider.previousValue = percentage;
|
sg.updateSliderPosition(creatureSlider);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNonCreaturePercentage(int percentage) {
|
public void setNonCreaturePercentage(int percentage) {
|
||||||
nonCreatureSlider.setValue(percentage);
|
nonCreatureSlider.setValue(percentage);
|
||||||
nonCreatureSlider.previousValue = percentage;
|
sg.updateSliderPosition(nonCreatureSlider);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLandPercentage(int percentage) {
|
public void setLandPercentage(int percentage) {
|
||||||
landSlider.setValue(percentage);
|
landSlider.setValue(percentage);
|
||||||
landSlider.previousValue = percentage;
|
sg.updateSliderPosition(landSlider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue