SimulationMenu.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package ui.view;
  2. import javax.swing.JButton;
  3. import javax.swing.JComboBox;
  4. import javax.swing.JFileChooser;
  5. import javax.swing.JFrame;
  6. import javax.swing.JLabel;
  7. import javax.swing.JMenuBar;
  8. import javax.swing.JPanel;
  9. import javax.swing.JRadioButton;
  10. import javax.swing.JTextField;
  11. import javax.swing.event.CaretEvent;
  12. import javax.swing.event.CaretListener;
  13. import javax.swing.event.ChangeEvent;
  14. import javax.swing.event.ChangeListener;
  15. import com.sun.crypto.provider.JceKeyStore;
  16. import classes.CpsObject;
  17. import classes.HolonObject;
  18. import classes.HolonSwitch;
  19. import classes.HolonTransformer;
  20. import ui.controller.Control;
  21. import ui.model.Model;
  22. import java.util.ArrayList;
  23. import java.util.HashMap;
  24. import java.awt.GridBagLayout;
  25. import java.awt.Color;
  26. import java.awt.Cursor;
  27. import java.awt.Dimension;
  28. import java.awt.GridBagConstraints;
  29. import java.awt.Insets;
  30. import java.awt.event.ActionListener;
  31. import java.awt.event.MouseAdapter;
  32. import java.awt.event.MouseEvent;
  33. import java.beans.PropertyChangeEvent;
  34. import java.beans.PropertyChangeListener;
  35. import java.io.File;
  36. import java.awt.FlowLayout;
  37. public class SimulationMenu extends JMenuBar {
  38. /**
  39. *
  40. */
  41. private static final long serialVersionUID = 1L;
  42. private JPanel menuPanel = new JPanel();
  43. private JRadioButton simButton = new JRadioButton("Simulate");
  44. private JLabel simSpeedLabel = new JLabel("Simulation Speed:");
  45. private JTextField simSpeedText = new JTextField("1000");
  46. private JComboBox algoCombo = new JComboBox<>();
  47. private JButton algoFolderButton = new JButton("Algorithm:");
  48. private HashMap<String, File> algosHash = new HashMap<>();
  49. Model model;
  50. Control controller;
  51. public SimulationMenu(Model mod, Control cont) {
  52. super();
  53. // Init Stuff
  54. this.model = mod;
  55. this.controller = cont;
  56. // algoFolderButton Action
  57. algoFolderButton.addActionListener(new ActionListener() {
  58. @Override
  59. public void actionPerformed(java.awt.event.ActionEvent evt) {
  60. menuSetFolderActionPerformed(evt);
  61. }
  62. private void menuSetFolderActionPerformed(java.awt.event.ActionEvent evt) {
  63. JFileChooser fileChooser = new JFileChooser();
  64. JFrame test = new JFrame();
  65. fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  66. fileChooser.setAcceptAllFileFilterUsed(false);
  67. if (fileChooser.showOpenDialog(test) == JFileChooser.APPROVE_OPTION) {
  68. algoCombo.removeAllItems();
  69. File[] files = fileChooser.getSelectedFile().listFiles();
  70. for (int i = 0; i < files.length; i++) {
  71. if (files[i].toString().endsWith(".java") || files[i].toString().endsWith(".class")) {
  72. String name = files[i].toString();
  73. int tmpS = name.lastIndexOf('/');
  74. int tmpBS = name.lastIndexOf('\\');
  75. int tmpA;
  76. if (tmpS > tmpBS) {
  77. tmpA = tmpS;
  78. } else {
  79. tmpA = tmpBS;
  80. }
  81. int tmpB = name.lastIndexOf('.');
  82. name = name.substring(tmpA + 1, tmpB);
  83. algosHash.put(name, files[i]);
  84. algoCombo.addItem(name);
  85. }
  86. }
  87. }
  88. }
  89. });
  90. // Add to Panel
  91. GridBagLayout gbl_menuPanel = new GridBagLayout();
  92. gbl_menuPanel.columnWidths = new int[] { 79, 105, 34, 60, 31, 151, 0 };
  93. gbl_menuPanel.rowHeights = new int[] { 25, 0 };
  94. gbl_menuPanel.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE };
  95. gbl_menuPanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE };
  96. menuPanel.setLayout(gbl_menuPanel);
  97. // isSimulation
  98. simButton.addPropertyChangeListener(new PropertyChangeListener() {
  99. @Override
  100. public void propertyChange(PropertyChangeEvent evt) {
  101. controller.setIsSimulation(simButton.isSelected());
  102. }
  103. });
  104. GridBagConstraints gbc_simButton = new GridBagConstraints();
  105. gbc_simButton.anchor = GridBagConstraints.NORTHWEST;
  106. gbc_simButton.insets = new Insets(0, 0, 0, 5);
  107. gbc_simButton.gridx = 0;
  108. gbc_simButton.gridy = 0;
  109. menuPanel.add(simButton, gbc_simButton);
  110. GridBagConstraints gbc_simSpeedLabel = new GridBagConstraints();
  111. gbc_simSpeedLabel.anchor = GridBagConstraints.WEST;
  112. gbc_simSpeedLabel.insets = new Insets(0, 0, 0, 5);
  113. gbc_simSpeedLabel.gridx = 1;
  114. gbc_simSpeedLabel.gridy = 0;
  115. menuPanel.add(simSpeedLabel, gbc_simSpeedLabel);
  116. // timerSpeed
  117. simSpeedText.setMaximumSize(new Dimension(300, 300));
  118. simSpeedText.addCaretListener(new CaretListener() {
  119. @Override
  120. public void caretUpdate(CaretEvent e) {
  121. try {
  122. controller.setTimerSpeed(Integer.parseInt(simSpeedText.getText()));
  123. } catch (Exception e2) {
  124. // TODO: handle exception
  125. }
  126. }
  127. });
  128. GridBagConstraints gbc_simSpeedText = new GridBagConstraints();
  129. gbc_simSpeedText.anchor = GridBagConstraints.WEST;
  130. gbc_simSpeedText.insets = new Insets(0, 0, 0, 5);
  131. gbc_simSpeedText.gridx = 2;
  132. gbc_simSpeedText.gridy = 0;
  133. menuPanel.add(simSpeedText, gbc_simSpeedText);
  134. GridBagConstraints gbc_algoFolderButton = new GridBagConstraints();
  135. gbc_algoFolderButton.anchor = GridBagConstraints.WEST;
  136. gbc_algoFolderButton.insets = new Insets(0, 0, 0, 5);
  137. gbc_algoFolderButton.gridx = 3;
  138. gbc_algoFolderButton.gridy = 0;
  139. menuPanel.add(algoFolderButton, gbc_algoFolderButton);
  140. GridBagConstraints gbc_algoCombo = new GridBagConstraints();
  141. gbc_algoCombo.anchor = GridBagConstraints.WEST;
  142. gbc_algoCombo.insets = new Insets(0, 0, 0, 5);
  143. gbc_algoCombo.gridx = 4;
  144. gbc_algoCombo.gridy = 0;
  145. menuPanel.add(algoCombo, gbc_algoCombo);
  146. algoCombo.addItem("choose folder");
  147. // Add Panel to SimulationMenu
  148. this.add(menuPanel);
  149. }
  150. }