MainMenu.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package panels;
  2. import java.awt.BorderLayout;
  3. import java.awt.GridLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.io.IOException;
  7. import java.text.NumberFormat;
  8. import java.util.ArrayList;
  9. import javax.swing.JFileChooser;
  10. import javax.swing.JFormattedTextField;
  11. import javax.swing.JLabel;
  12. import javax.swing.JOptionPane;
  13. import javax.swing.JPanel;
  14. import javax.swing.filechooser.FileNameExtensionFilter;
  15. import javax.swing.text.NumberFormatter;
  16. import menubar.Menubar;
  17. import windows.Remote;
  18. import customComponents.ComWriter;
  19. import customComponents.Filehandling;
  20. public class MainMenu extends JPanel{
  21. Menubar menubar;
  22. RouteSplitpane routeSplitpane;
  23. Iconbar iconbar;
  24. ComWriter bluetooth;
  25. Remote remote;
  26. Filehandling file;
  27. String currentRouteFile;
  28. boolean startup;
  29. public MainMenu(){
  30. menubar = new Menubar();
  31. routeSplitpane = new RouteSplitpane();
  32. iconbar = new Iconbar();
  33. file = new Filehandling();
  34. bluetooth = new ComWriter();
  35. remote = new Remote(new AfstandbedieningPanel(bluetooth));
  36. setLayout(new BorderLayout(0,0));
  37. add(menubar, BorderLayout.NORTH);
  38. add(routeSplitpane);
  39. add(iconbar, BorderLayout.SOUTH);
  40. menubarMouseListeners();
  41. currentRouteFile = "";
  42. startup = true;
  43. iconbar.currentroute.setText("Geen bestand");
  44. menubar.menu_file.opslaan.setEnabled(false);
  45. menubar.menu_file.opslaanals.setEnabled(false);
  46. Thread bt = new Thread(){
  47. public void run(){
  48. char c;
  49. while(true){
  50. try {
  51. c = (char) bluetooth.getInput().read();
  52. if(c == 'b'){
  53. iconbar.setMessage("Botsing gedetecteerd!", 2000);
  54. }else if(c == 'g'){
  55. iconbar.setMessage("Gat gedetecteerd!", 2000);
  56. }else if(c == 'k');
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. }
  62. };
  63. bt.start();
  64. }
  65. public String getCurrentRouteFile() {
  66. return currentRouteFile;
  67. }
  68. //methode om een route in te laden of om een nieuwe route aan te maken.
  69. public void setCurrentRouteFile(String route, ArrayList<ArrayList<Integer>> tempcorarray ){
  70. int c;
  71. if(startup){
  72. c = 0;
  73. startup = false;
  74. }else{
  75. c = JOptionPane.showConfirmDialog(null, "Weet u zeker dat u de huidige route wilt afsluiten?", "Alert: " + "Weet u het zeker?", JOptionPane.YES_NO_OPTION);
  76. }
  77. if (c == JOptionPane.YES_OPTION) {
  78. if(tempcorarray != null){
  79. // route openen via bestand
  80. int maxx = tempcorarray.get(0).get(0);
  81. int maxy = tempcorarray.get(0).get(1);
  82. iconbar.currentGridSize.setText( maxx + " x " + maxy);
  83. tempcorarray.remove(0);
  84. routeSplitpane.setFieldSize(maxx, maxy, tempcorarray);
  85. currentRouteFile = route;
  86. iconbar.currentroute.setText(currentRouteFile);
  87. menubar.menu_file.opslaan.setEnabled(true);
  88. menubar.menu_file.opslaanals.setEnabled(true);
  89. }else{
  90. // Geen route ingeladen, nieuwe route openen
  91. int[] tempsize = sizePopup();
  92. if(tempsize != null){
  93. routeSplitpane.setFieldSize(tempsize[0], tempsize[1], new ArrayList<ArrayList<Integer>>());
  94. iconbar.currentGridSize.setText(tempsize[0] + " x " + tempsize[1]);
  95. currentRouteFile = "new";
  96. iconbar.currentroute.setText("Nieuw bestand");
  97. menubar.menu_file.opslaan.setEnabled(false);
  98. menubar.menu_file.opslaanals.setEnabled(true);
  99. }
  100. }
  101. }
  102. }
  103. //popup om de grootte van het veld in te voeren.
  104. public int[] sizePopup(){
  105. NumberFormatter formatter = new NumberFormatter(NumberFormat.getInstance());
  106. formatter.setValueClass(Integer.class);
  107. formatter.setMinimum(0);
  108. formatter.setMaximum(40);
  109. formatter.setCommitsOnValidEdit(true);
  110. JFormattedTextField field1 = new JFormattedTextField(formatter);
  111. JFormattedTextField field2 = new JFormattedTextField(formatter);
  112. JPanel panel = new JPanel(new GridLayout(0, 1));
  113. panel.add(new JLabel("Hoogte:"));
  114. panel.add(field1);
  115. panel.add(new JLabel("Breedte:"));
  116. panel.add(field2);
  117. int result = JOptionPane.showConfirmDialog(null, panel, "Veld grootte", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
  118. if (result == JOptionPane.OK_OPTION) {
  119. if(field1.getValue() == null || field2.getValue() == null){
  120. JOptionPane.showMessageDialog(null, "Ongeldige grootte");
  121. return null;
  122. }else{
  123. return new int[]{(int) field1.getValue(),(int) field2.getValue()} ;
  124. }
  125. } else {
  126. return null;
  127. }
  128. }
  129. public void menubarMouseListeners(){
  130. //maakt de mouse listners voor de menubar
  131. menubar.menu_file.openen.addActionListener(new ActionListener() {
  132. @Override
  133. public void actionPerformed(ActionEvent e) {
  134. JFileChooser c = new JFileChooser();
  135. c.setFileFilter(new FileNameExtensionFilter("Route bestanden", "rt"));
  136. int rVal = c.showOpenDialog(MainMenu.this);
  137. if (rVal == JFileChooser.APPROVE_OPTION) {
  138. setCurrentRouteFile(c.getSelectedFile().getAbsolutePath(), file.readRouteFile(c.getSelectedFile().getAbsolutePath()));
  139. }
  140. }
  141. });
  142. menubar.menu_file.opslaan.addActionListener(new ActionListener() {
  143. @Override
  144. public void actionPerformed(ActionEvent arg0) {
  145. file.writeRouteFile(routeSplitpane.getColumns(), routeSplitpane.getRows(), routeSplitpane.leftpanel.coordinaten, currentRouteFile);
  146. }
  147. });
  148. menubar.menu_file.opslaanals.addActionListener(new ActionListener() {
  149. @Override
  150. public void actionPerformed(ActionEvent arg0) {
  151. JFileChooser c = new JFileChooser();
  152. c.setFileFilter(new FileNameExtensionFilter("Route bestanden", "rt"));
  153. int rVal = c.showOpenDialog(MainMenu.this);
  154. if (rVal == JFileChooser.APPROVE_OPTION) {
  155. file.writeRouteFile(routeSplitpane.getColumns(), routeSplitpane.getRows(), routeSplitpane.leftpanel.coordinaten, c.getSelectedFile().getAbsolutePath());
  156. setCurrentRouteFile(c.getSelectedFile().getAbsolutePath(), file.readRouteFile(c.getSelectedFile().getAbsolutePath()));
  157. }
  158. }
  159. });
  160. menubar.menu_file.nieuw.addActionListener(new ActionListener() {
  161. @Override
  162. public void actionPerformed(ActionEvent e) {
  163. setCurrentRouteFile("Nieuwe route", null);
  164. }
  165. });
  166. iconbar.irremote.addActionListener(new ActionListener() {
  167. @Override
  168. public void actionPerformed(ActionEvent e) {
  169. createRemote();
  170. }
  171. });
  172. routeSplitpane.pauze.addActionListener(new ActionListener() {
  173. @Override
  174. public void actionPerformed(ActionEvent arg0) {
  175. bluetooth.writeString("p");
  176. }
  177. });
  178. routeSplitpane.hervatten.addActionListener(new ActionListener() {
  179. @Override
  180. public void actionPerformed(ActionEvent arg0) {
  181. bluetooth.writeString("h");
  182. }
  183. });
  184. routeSplitpane.upload.addActionListener(new ActionListener() {
  185. @Override
  186. public void actionPerformed(ActionEvent arg0) {
  187. bluetooth.sendRoute(routeSplitpane.leftpanel.steps);
  188. }
  189. });
  190. routeSplitpane.automatisch.addActionListener(new ActionListener() {
  191. @Override
  192. public void actionPerformed(ActionEvent arg0) {
  193. routeSplitpane.automatischBerekenen(iconbar);
  194. }
  195. });
  196. }
  197. public void createRemote(){
  198. if(remote.isShowing()){
  199. remote.dispose();
  200. }else{
  201. remote.show(true);
  202. }
  203. }
  204. }