CreateTemplatePopUp.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. package ui.view;
  2. import classes.AbstractCanvasObject;
  3. import classes.Category;
  4. import classes.HolonElement;
  5. import classes.HolonObject;
  6. import classes.Pair;
  7. import ui.controller.Control;
  8. import ui.model.Model;
  9. import utility.Util;
  10. import javax.swing.*;
  11. import javax.swing.border.EmptyBorder;
  12. import javax.swing.filechooser.FileNameExtensionFilter;
  13. import java.awt.*;
  14. import java.awt.event.KeyEvent;
  15. import java.awt.event.KeyListener;
  16. import java.awt.event.MouseAdapter;
  17. import java.awt.event.MouseEvent;
  18. import java.io.*;
  19. import java.util.ArrayList;
  20. import java.awt.event.ActionListener;
  21. import java.awt.event.ActionEvent;
  22. /**
  23. * PopUp for creating Holon Object Template.
  24. *
  25. * @author Gruppe 07 (A.T.M-B)
  26. */
  27. public class CreateTemplatePopUp extends JDialog {
  28. private static final long serialVersionUID = 1L;
  29. /**
  30. * Template HolonObject
  31. */
  32. private HolonObject template;
  33. /**
  34. * HolonElementList
  35. */
  36. DefaultListModel<String> listModel;
  37. /**
  38. * HolonElement List
  39. */
  40. JList<String> list;
  41. /**
  42. * Category the Template should be inserted into
  43. */
  44. private String category;
  45. // Template Attributes
  46. // PopUp Parts
  47. private Control controller;
  48. /**
  49. * Category Selection
  50. */
  51. Choice choice;
  52. /**
  53. * name textfield
  54. */
  55. private JTextField textField_name;
  56. /**
  57. * textField for path
  58. */
  59. private JTextField textField_imagePath;
  60. /**
  61. * Image Preview
  62. */
  63. JLabel lblImagePreview;
  64. /**
  65. * parent Frame
  66. */
  67. private Model model;
  68. JFrame parent;
  69. /**
  70. * Create the dialog.
  71. *
  72. * @param edit
  73. * true if edit
  74. * @param obj
  75. * the object
  76. * @param model
  77. * @param cat
  78. * the categorie
  79. */
  80. public CreateTemplatePopUp(HolonObject obj, Model model,
  81. JFrame parentFrame, Control controller) {
  82. setResizable(false);
  83. /*
  84. * use Category Controller an stuff lul
  85. */
  86. /*
  87. * initialize Data
  88. */
  89. template = new HolonObject(obj);
  90. this.parent = parentFrame;
  91. this.controller = controller;
  92. this.model=model;//Thankfully that was in the ctor already.
  93. /*
  94. * create Frame and GUI
  95. */
  96. setIconImage(Util.loadImage("/Images/Holeg.png", 30, 30));
  97. setBounds(100, 100, 476, 344);
  98. setLocationRelativeTo(parentFrame);
  99. getContentPane().setLayout(new BorderLayout());
  100. /**
  101. * Content Panel
  102. */
  103. JPanel contentPanel = new JPanel();
  104. contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
  105. getContentPane().add(contentPanel, BorderLayout.CENTER);
  106. contentPanel.setLayout(null);
  107. /**
  108. * Category Label
  109. */
  110. JLabel lblCategory = new JLabel("Category:");
  111. lblCategory.setBounds(12, 13, 68, 22);
  112. contentPanel.add(lblCategory);
  113. /**
  114. * Category Choice
  115. */
  116. choice = new Choice();
  117. choice.setBounds(86, 13, 172, 22);
  118. contentPanel.add(choice);
  119. // add categories
  120. if (model.getCategories().size() == 0)// if no categorie exist: create
  121. // new Template Category
  122. try {
  123. this.controller.addCategory("Template");
  124. } catch (IOException e1) {
  125. e1.printStackTrace();
  126. }
  127. // add Categories to the choice
  128. for (Category c : model.getCategories())
  129. choice.add(c.getName());
  130. /**
  131. * Name Label
  132. */
  133. JLabel lblName = new JLabel("Name:");
  134. lblName.setBounds(12, 48, 56, 16);
  135. contentPanel.add(lblName);
  136. /**
  137. * Name Textfield
  138. */
  139. textField_name = new JTextField();
  140. textField_name.setBounds(86, 48, 172, 22);
  141. contentPanel.add(textField_name);
  142. textField_name.setColumns(10);
  143. textField_name.setText(template.getName());
  144. /**
  145. * Image Path Lable
  146. */
  147. JLabel lblImage = new JLabel("Image:");
  148. lblImage.setBounds(12, 89, 56, 16);
  149. contentPanel.add(lblImage);
  150. /**
  151. * Image Path Text Field
  152. */
  153. textField_imagePath = new JTextField();
  154. textField_imagePath.setBounds(86, 86, 172, 22);
  155. contentPanel.add(textField_imagePath);
  156. textField_imagePath.setColumns(10);
  157. textField_imagePath.setText(template.getImage());
  158. /**
  159. * Browse Image Button
  160. */
  161. JButton btnBrowseImage = new JButton("BrowseImage");
  162. btnBrowseImage.setBounds(268, 85, 117, 25);
  163. contentPanel.add(btnBrowseImage);
  164. btnBrowseImage.addActionListener(actionevent -> {
  165. fileChooser();
  166. });
  167. /**
  168. * Image Preview
  169. */
  170. lblImagePreview = new JLabel("Image Preview");
  171. lblImagePreview.setIcon(new ImageIcon(Util.loadImage(
  172. template.getImage(), 62, 62)));
  173. lblImagePreview.setBounds(298, 13, 62, 62);
  174. contentPanel.add(lblImagePreview);
  175. /**
  176. * Holon Element List
  177. */
  178. listModel = new DefaultListModel<String>();
  179. /**
  180. * Add Elements to List
  181. */
  182. for (HolonElement he : template.getElements())
  183. listModel.addElement(he.getAmount() + " * " + he.getEleName()
  184. + ": " + he.getMaximumEnergy() + "U");
  185. /**
  186. * Add ScrollPane to List
  187. */
  188. JScrollPane scrollPane = new JScrollPane();
  189. scrollPane.setBounds(22, 118, 236, 150);
  190. contentPanel.add(scrollPane);
  191. list = new JList<String>(listModel);
  192. scrollPane.setViewportView(list);
  193. /**
  194. * Delete Element Button
  195. */
  196. JButton btnDeleteElement = new JButton("Delete Element");
  197. btnDeleteElement.setBounds(268, 228, 140, 25);
  198. contentPanel.add(btnDeleteElement);
  199. btnDeleteElement.addActionListener(e -> removeElement());
  200. /**
  201. * Edit Element Button
  202. */
  203. JButton btnEditElement = new JButton("Edit Element");
  204. btnEditElement.setBounds(268, 190, 140, 25);
  205. contentPanel.add(btnEditElement);
  206. btnEditElement.addActionListener(e -> editElement());
  207. /**
  208. * Add Element Button
  209. */
  210. JButton btnAddElement = new JButton("Add Element");
  211. btnAddElement.setBounds(268, 152, 140, 25);
  212. contentPanel.add(btnAddElement);
  213. btnAddElement.addActionListener(e -> addElement());
  214. /**
  215. * Cancel Button
  216. */
  217. JButton btnCancel = new JButton("Cancel");
  218. btnCancel.setBounds(384, 277, 74, 25);
  219. contentPanel.add(btnCancel);
  220. btnCancel.addActionListener(e -> dispose());
  221. /**
  222. * Add Template Button
  223. */
  224. JButton btnAddTemplate = new JButton("Add Template");
  225. btnAddTemplate.setBounds(75, 271, 113, 25);
  226. contentPanel.add(btnAddTemplate);
  227. btnAddTemplate.addActionListener(e -> createTemplate());
  228. /**
  229. * Title
  230. */
  231. setTitle("Create Template Menu");
  232. }
  233. /**
  234. * Choose the file.
  235. */
  236. private void fileChooser() {
  237. JFileChooser fileChooser = new JFileChooser();
  238. FileNameExtensionFilter filter = new FileNameExtensionFilter(
  239. "png, jpg or jpeg", "png", "jpg", "jpeg");
  240. fileChooser.setFileFilter(filter);
  241. int returnValue = fileChooser.showOpenDialog(null);
  242. if (returnValue == JFileChooser.APPROVE_OPTION) {
  243. File selectedFile = fileChooser.getSelectedFile();
  244. String filePath = selectedFile.getAbsolutePath();
  245. textField_imagePath.setText(filePath);
  246. ImageIcon icon = new ImageIcon(Util.loadImage(filePath, 62,
  247. 62));
  248. lblImagePreview.setIcon(icon);
  249. } else {
  250. System.out.println("Failed to Load");
  251. }
  252. }
  253. /**
  254. * create the template and add it to the category
  255. */
  256. private void createTemplate() {
  257. try {
  258. template.setName(textField_name.getText());
  259. template.setImage(textField_imagePath.getText());
  260. template.getElements().forEach(
  261. ele -> ele.setSaving(new Pair<String, String>(choice
  262. .getSelectedItem(), template.getName())));
  263. controller.addObject(controller.searchCategory(choice
  264. .getItem(choice.getSelectedIndex())), template.getName(),
  265. template.getElements(), template.getImage());
  266. this.dispose();
  267. } catch (IOException e) {
  268. System.out
  269. .println("Could not create Template: Category not found!");
  270. e.printStackTrace();
  271. }
  272. }
  273. /**
  274. * Add an Holon Element to the template
  275. */
  276. private void addElement() {
  277. AddElementPopUp popUp = new AddElementPopUp(parent, model);
  278. popUp.setActualCps(template);
  279. popUp.setVisible(true);
  280. HolonElement he = popUp.getElement();
  281. if (he != null) {
  282. listModel.addElement(he.getAmount() + " * " + he.getEleName()
  283. + ": " + he.getMaximumEnergy() + "U");
  284. template.addElement(he);
  285. he.setSaving(new Pair<>(category, textField_name.getText()));
  286. }
  287. }
  288. /**
  289. * Removes the Selected Element from the template
  290. */
  291. private void removeElement() {
  292. int index = list.getSelectedIndex();
  293. if (index == -1)
  294. return;
  295. template.deleteElement(index);
  296. listModel.remove(index);
  297. }
  298. /**
  299. * Edits the selected HolonElement
  300. */
  301. private void editElement() {
  302. int index = list.getSelectedIndex();
  303. if (index == -1)
  304. return;
  305. AddElementPopUp popUp = new AddElementPopUp(parent, model);
  306. popUp.setActualCps(template);
  307. popUp.setElement(template.getElements().get(index));
  308. popUp.setVisible(true);
  309. HolonElement he = popUp.getElement();
  310. if (he != null) {
  311. listModel.remove(index);
  312. listModel.addElement(he.getAmount() + " * " + he.getEleName()
  313. + ": " + he.getMaximumEnergy() + "U");
  314. template.deleteElement(index);
  315. template.addElement(he);
  316. he.setSaving(new Pair<>(category, textField_name.getText()));
  317. }
  318. }
  319. }