SimulationMenu.java 5.3 KB

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