SimulationMenu.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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 tmpA = name.lastIndexOf('/');
  74. int tmpB = name.lastIndexOf('.');
  75. name = name.substring(tmpA+1, tmpB);
  76. algosHash.put(name, files[i]);
  77. algoCombo.addItem(name);
  78. }
  79. }
  80. }
  81. }
  82. });
  83. // Add to Panel
  84. GridBagLayout gbl_menuPanel = new GridBagLayout();
  85. gbl_menuPanel.columnWidths = new int[] { 79, 105, 34, 60, 31, 151, 0 };
  86. gbl_menuPanel.rowHeights = new int[] { 25, 0 };
  87. gbl_menuPanel.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE };
  88. gbl_menuPanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE };
  89. menuPanel.setLayout(gbl_menuPanel);
  90. // isSimulation
  91. simButton.addPropertyChangeListener(new PropertyChangeListener() {
  92. @Override
  93. public void propertyChange(PropertyChangeEvent evt) {
  94. controller.setIsSimulation(simButton.isSelected());
  95. controller.calculateStateForCurrentTimeStep();
  96. }
  97. });
  98. GridBagConstraints gbc_simButton = new GridBagConstraints();
  99. gbc_simButton.anchor = GridBagConstraints.NORTHWEST;
  100. gbc_simButton.insets = new Insets(0, 0, 0, 5);
  101. gbc_simButton.gridx = 0;
  102. gbc_simButton.gridy = 0;
  103. menuPanel.add(simButton, gbc_simButton);
  104. GridBagConstraints gbc_simSpeedLabel = new GridBagConstraints();
  105. gbc_simSpeedLabel.anchor = GridBagConstraints.WEST;
  106. gbc_simSpeedLabel.insets = new Insets(0, 0, 0, 5);
  107. gbc_simSpeedLabel.gridx = 1;
  108. gbc_simSpeedLabel.gridy = 0;
  109. menuPanel.add(simSpeedLabel, gbc_simSpeedLabel);
  110. // timerSpeed
  111. simSpeedText.setMaximumSize(new Dimension(300, 300));
  112. simSpeedText.addCaretListener(new CaretListener() {
  113. @Override
  114. public void caretUpdate(CaretEvent e) {
  115. try {
  116. controller.setTimerSpeed(Integer.parseInt(simSpeedText.getText()));
  117. } catch (Exception e2) {
  118. // TODO: handle exception
  119. }
  120. }
  121. });
  122. GridBagConstraints gbc_simSpeedText = new GridBagConstraints();
  123. gbc_simSpeedText.anchor = GridBagConstraints.WEST;
  124. gbc_simSpeedText.insets = new Insets(0, 0, 0, 5);
  125. gbc_simSpeedText.gridx = 2;
  126. gbc_simSpeedText.gridy = 0;
  127. menuPanel.add(simSpeedText, gbc_simSpeedText);
  128. GridBagConstraints gbc_algoFolderButton = new GridBagConstraints();
  129. gbc_algoFolderButton.anchor = GridBagConstraints.WEST;
  130. gbc_algoFolderButton.insets = new Insets(0, 0, 0, 5);
  131. gbc_algoFolderButton.gridx = 3;
  132. gbc_algoFolderButton.gridy = 0;
  133. menuPanel.add(algoFolderButton, gbc_algoFolderButton);
  134. GridBagConstraints gbc_algoCombo = new GridBagConstraints();
  135. gbc_algoCombo.anchor = GridBagConstraints.WEST;
  136. gbc_algoCombo.insets = new Insets(0, 0, 0, 5);
  137. gbc_algoCombo.gridx = 4;
  138. gbc_algoCombo.gridy = 0;
  139. menuPanel.add(algoCombo, gbc_algoCombo);
  140. algoCombo.addItem("choose folder");
  141. //Add Panel to SimulationMenu
  142. this.add(menuPanel);
  143. }
  144. }