RandomPriotity.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package holeg.addon.helper;
  2. import java.util.Hashtable;
  3. import java.util.logging.Logger;
  4. import javax.swing.BorderFactory;
  5. import javax.swing.BoxLayout;
  6. import javax.swing.JLabel;
  7. import javax.swing.JPanel;
  8. import javax.swing.JSlider;
  9. import holeg.model.HolonElement.Priority;
  10. public class RandomPriotity extends JPanel{
  11. private static final Logger LOGGER = Logger.getLogger("holeg");
  12. /**
  13. * Its like a Gradient the Values are on one Axis from Start to End:
  14. * |--start--lm--mh--he--end--|
  15. * lm: lowMedium
  16. * mh: mediumHigh
  17. * he: highEssential
  18. */
  19. private int lm = 25 , mh = 50, he = 75;
  20. private final int start = 0, end = 100;
  21. private JSlider lowChanceSlider = new JSlider(JSlider.HORIZONTAL,0, 100, lm - start);
  22. private JSlider mediumChanceSlider = new JSlider(JSlider.HORIZONTAL,0, 100, mh - lm);
  23. private JSlider highChanceSlider = new JSlider(JSlider.HORIZONTAL,0, 100, he - mh);
  24. private JSlider essentialChanceSlider = new JSlider(JSlider.HORIZONTAL,0, 100, end - he);
  25. public RandomPriotity(){
  26. this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
  27. this.add(initVisualizeSlider(this.lowChanceSlider, "Low"));
  28. this.add(initVisualizeSlider(this.mediumChanceSlider, "Medium"));
  29. this.add(initVisualizeSlider(this.highChanceSlider, "High"));
  30. this.add(initVisualizeSlider(this.essentialChanceSlider, "Essential"));
  31. lowChanceSlider.setToolTipText("" +((double)lowChanceSlider.getValue()/ 100.0));
  32. mediumChanceSlider.setToolTipText("" +((double)mediumChanceSlider.getValue()/ 100.0));
  33. highChanceSlider.setToolTipText("" +((double)highChanceSlider.getValue()/ 100.0));
  34. essentialChanceSlider.setToolTipText("" +((double)essentialChanceSlider.getValue()/ 100.0));
  35. lowChanceSlider.addChangeListener(actionEvent ->{
  36. setLM(lowChanceSlider.getValue());
  37. updateSliders();
  38. lowChanceSlider.setToolTipText("" +((double)lowChanceSlider.getValue()/ 100.0));
  39. LOGGER.info("lowChance = " +lowChanceSlider.getValue());
  40. });
  41. mediumChanceSlider.addChangeListener(actionEvent ->{
  42. if(lm + mediumChanceSlider.getValue() <= 100) setMH(lm + mediumChanceSlider.getValue());
  43. else setLM(end - mediumChanceSlider.getValue());
  44. updateSliders();
  45. mediumChanceSlider.setToolTipText("" +((double)mediumChanceSlider.getValue()/ 100.0));
  46. LOGGER.info("mediumChance = " + mediumChanceSlider.getValue());
  47. });
  48. highChanceSlider.addChangeListener(actionEvent ->{
  49. if(mh + highChanceSlider.getValue() <= 100) setHE(mh + highChanceSlider.getValue());
  50. else setMH(end - highChanceSlider.getValue());
  51. updateSliders();
  52. highChanceSlider.setToolTipText("" +((double)highChanceSlider.getValue()/ 100.0));
  53. LOGGER.info("highChance = " +highChanceSlider.getValue());
  54. });
  55. essentialChanceSlider.addChangeListener(actionEvent ->{
  56. setHE(end - essentialChanceSlider.getValue());
  57. updateSliders();
  58. essentialChanceSlider.setToolTipText("" +((double)essentialChanceSlider.getValue()/ 100.0));
  59. LOGGER.info("essentialChance = " +essentialChanceSlider.getValue());
  60. });
  61. }
  62. private void setLM(int value) {
  63. lm = clamp(value, 0, 100);
  64. if(lm > mh) mh = lm;
  65. if(lm > he) he = lm;
  66. }
  67. private void setMH(int value) {
  68. mh = clamp(value, 0, 100);
  69. if(mh < lm) lm = mh;
  70. if(mh > he) he = mh;
  71. }
  72. private void setHE(int value) {
  73. he = clamp(value, 0, 100);
  74. if(he < lm) lm = he;
  75. if(he < mh) mh = he;
  76. }
  77. private int clamp(int input, int min , int max) {
  78. return Math.max(min, Math.min(max, input));
  79. }
  80. private void updateSliders(){
  81. lowChanceSlider.setValue(lm - start);
  82. mediumChanceSlider.setValue(mh - lm);
  83. highChanceSlider.setValue(he - mh);
  84. essentialChanceSlider.setValue(end - he);
  85. }
  86. private JSlider initVisualizeSlider(JSlider jslider, String name) {
  87. jslider.setBorder(BorderFactory.createTitledBorder(name));
  88. jslider.setMajorTickSpacing(50);
  89. jslider.setMinorTickSpacing(5);
  90. jslider.setPaintTicks(true);
  91. Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
  92. labelTable.put( Integer.valueOf( 0 ), new JLabel("0.0") );
  93. labelTable.put( Integer.valueOf( 50 ), new JLabel("0.5") );
  94. labelTable.put( Integer.valueOf( 100 ), new JLabel("1.0") );
  95. jslider.setLabelTable( labelTable );
  96. jslider.setPaintLabels(true);
  97. return jslider;
  98. }
  99. public Priority getPriority() {
  100. double randomDoubleInRange = Math.random() * 100.0;
  101. if(randomDoubleInRange <= lm) {
  102. return Priority.Low;
  103. } else if(randomDoubleInRange <= mh) {
  104. return Priority.Medium;
  105. } else if(randomDoubleInRange <= he) {
  106. return Priority.High;
  107. } else {
  108. return Priority.Essential;
  109. }
  110. }
  111. @Override
  112. public void setEnabled(boolean value) {
  113. lowChanceSlider.setEnabled(value);
  114. mediumChanceSlider.setEnabled(value);
  115. highChanceSlider.setEnabled(value);
  116. essentialChanceSlider.setEnabled(value);
  117. }
  118. }