RandomPriotity.java 5.2 KB

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