CreateTemplatePopUp.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. package holeg.ui.view.dialog;
  2. import holeg.model.HolonElement;
  3. import holeg.model.HolonObject;
  4. import holeg.preferences.ImagePreference;
  5. import holeg.ui.controller.Control;
  6. import holeg.ui.model.GuiSettings;
  7. import holeg.ui.view.category.Category;
  8. import holeg.ui.view.image.Import;
  9. import javax.swing.*;
  10. import javax.swing.border.EmptyBorder;
  11. import javax.swing.filechooser.FileNameExtensionFilter;
  12. import java.awt.*;
  13. import java.io.File;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. /**
  17. * PopUp for creating Holon Object Template.
  18. */
  19. public class CreateTemplatePopUp extends JDialog {
  20. /**
  21. * Template HolonObject
  22. */
  23. private final HolonObject template;
  24. /**
  25. * HolonElementList
  26. */
  27. private final DefaultListModel<String> listModel;
  28. private final List<HolonElement> holonElementList = new ArrayList<>();
  29. /**
  30. * HolonElement List
  31. */
  32. private final JList<String> list;
  33. // Template Attributes
  34. // PopUp Parts
  35. private final Control controller;
  36. /**
  37. * Category Selection
  38. */
  39. Choice choice;
  40. /**
  41. * name textfield
  42. */
  43. private final JTextField textField_name;
  44. /**
  45. * textField for path
  46. */
  47. private final JTextField textField_imagePath;
  48. /**
  49. * Image Preview
  50. */
  51. JLabel lblImagePreview;
  52. /**
  53. * parent Frame
  54. */
  55. JFrame parent;
  56. /**
  57. * Create the dialog.
  58. *
  59. * true if edit
  60. * @param obj
  61. * the object
  62. */
  63. public CreateTemplatePopUp(HolonObject obj,
  64. JFrame parentFrame, Control controller) {
  65. setResizable(false);
  66. /*
  67. * use Category Controller an stuff lul
  68. */
  69. /*
  70. * initialize Data
  71. */
  72. template = new HolonObject(obj);
  73. this.parent = parentFrame;
  74. this.controller = controller;
  75. /*
  76. * create Frame and GUI
  77. */
  78. setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
  79. setBounds(100, 100, 476, 344);
  80. setLocationRelativeTo(parentFrame);
  81. getContentPane().setLayout(new BorderLayout());
  82. JPanel contentPanel = new JPanel();
  83. contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
  84. getContentPane().add(contentPanel, BorderLayout.CENTER);
  85. contentPanel.setLayout(null);
  86. JLabel lblCategory = new JLabel("Category:");
  87. lblCategory.setBounds(12, 13, 68, 22);
  88. contentPanel.add(lblCategory);
  89. choice = new Choice();
  90. choice.setBounds(86, 13, 172, 22);
  91. contentPanel.add(choice);
  92. // add categories
  93. if (GuiSettings.getCategories().isEmpty()){
  94. this.controller.createCategoryWithName("Template");
  95. }
  96. // add Categories to the choice
  97. for (Category c : GuiSettings.getCategories())
  98. choice.add(c.getName());
  99. JLabel lblName = new JLabel("Name:");
  100. lblName.setBounds(12, 48, 56, 16);
  101. contentPanel.add(lblName);
  102. textField_name = new JTextField();
  103. textField_name.setBounds(86, 48, 172, 22);
  104. contentPanel.add(textField_name);
  105. textField_name.setColumns(10);
  106. textField_name.setText(template.getName());
  107. JLabel lblImage = new JLabel("Image:");
  108. lblImage.setBounds(12, 89, 56, 16);
  109. contentPanel.add(lblImage);
  110. textField_imagePath = new JTextField();
  111. textField_imagePath.setBounds(86, 86, 172, 22);
  112. contentPanel.add(textField_imagePath);
  113. textField_imagePath.setColumns(10);
  114. textField_imagePath.setText(template.getImagePath());
  115. JButton btnBrowseImage = new JButton("BrowseImage");
  116. btnBrowseImage.setBounds(268, 85, 117, 25);
  117. contentPanel.add(btnBrowseImage);
  118. btnBrowseImage.addActionListener(clicked -> fileChooser());
  119. lblImagePreview = new JLabel("Image Preview");
  120. lblImagePreview.setIcon(new ImageIcon(Import.loadImage(
  121. template.getImagePath(), 62, 62)));
  122. lblImagePreview.setBounds(298, 13, 62, 62);
  123. contentPanel.add(lblImagePreview);
  124. listModel = new DefaultListModel<>();
  125. template.elementsStream().forEach(hE -> {
  126. listModel.addElement(hE.getName()
  127. + ": " + hE.getEnergy() + "U");
  128. holonElementList.add(hE);
  129. });
  130. template.clearElements();
  131. JScrollPane scrollPane = new JScrollPane();
  132. scrollPane.setBounds(22, 118, 236, 150);
  133. contentPanel.add(scrollPane);
  134. list = new JList<>(listModel);
  135. scrollPane.setViewportView(list);
  136. JButton btnDeleteElement = new JButton("Delete Element");
  137. btnDeleteElement.setBounds(268, 228, 140, 25);
  138. contentPanel.add(btnDeleteElement);
  139. btnDeleteElement.addActionListener(e -> removeElement());
  140. JButton btnEditElement = new JButton("Edit Element");
  141. btnEditElement.setBounds(268, 190, 140, 25);
  142. contentPanel.add(btnEditElement);
  143. btnEditElement.addActionListener(e -> editElement());
  144. JButton btnAddElement = new JButton("Add Element");
  145. btnAddElement.setBounds(268, 152, 140, 25);
  146. contentPanel.add(btnAddElement);
  147. btnAddElement.addActionListener(e -> addElement());
  148. JButton btnCancel = new JButton("Cancel");
  149. btnCancel.setBounds(384, 277, 74, 25);
  150. contentPanel.add(btnCancel);
  151. btnCancel.addActionListener(e -> dispose());
  152. /*
  153. * Add Template Button
  154. */
  155. JButton btnAddTemplate = new JButton("Add Template");
  156. btnAddTemplate.setBounds(75, 271, 113, 25);
  157. contentPanel.add(btnAddTemplate);
  158. btnAddTemplate.addActionListener(e -> createTemplate());
  159. /*
  160. * Title
  161. */
  162. setTitle("Create Template Menu");
  163. this.setVisible(true);
  164. }
  165. /**
  166. * Choose the file.
  167. */
  168. private void fileChooser() {
  169. JFileChooser fileChooser = new JFileChooser();
  170. FileNameExtensionFilter filter = new FileNameExtensionFilter(
  171. "png, jpg or jpeg", "png", "jpg", "jpeg");
  172. fileChooser.setFileFilter(filter);
  173. int returnValue = fileChooser.showOpenDialog(null);
  174. if (returnValue == JFileChooser.APPROVE_OPTION) {
  175. File selectedFile = fileChooser.getSelectedFile();
  176. String filePath = selectedFile.getAbsolutePath();
  177. textField_imagePath.setText(filePath);
  178. ImageIcon icon = new ImageIcon(Import.loadImage(filePath, 62,
  179. 62));
  180. lblImagePreview.setIcon(icon);
  181. } else {
  182. System.out.println("Failed to Load");
  183. }
  184. }
  185. /**
  186. * create the template and add it to the category
  187. */
  188. private void createTemplate() {
  189. template.setName(textField_name.getText());
  190. template.setImagePath(textField_imagePath.getText());
  191. template.clearElements();
  192. template.add(holonElementList);
  193. controller.findCategoryWithName(choice
  194. .getItem(choice.getSelectedIndex())).ifPresent(cat -> controller.addObject(cat, template.getName(),
  195. template.elementsStream().toList(), template.getImagePath()));
  196. this.dispose();
  197. }
  198. /**
  199. * Add an Holon Element to the template
  200. */
  201. private void addElement() {
  202. AddElementPopUp popUp = new AddElementPopUp(parent);
  203. popUp.setActualHolonObject(template);
  204. popUp.setVisible(true);
  205. HolonElement he = popUp.getElement();
  206. if (he != null) {
  207. listModel.addElement(he.getName()
  208. + ": " + he.getEnergy() + "U");
  209. holonElementList.add(he);
  210. }
  211. }
  212. /**
  213. * Removes the Selected Element from the template
  214. */
  215. private void removeElement() {
  216. int index = list.getSelectedIndex();
  217. if (index == -1)
  218. return;
  219. listModel.remove(index);
  220. holonElementList.remove(index);
  221. }
  222. /**
  223. * Edits the selected HolonElement
  224. */
  225. private void editElement() {
  226. int index = list.getSelectedIndex();
  227. if (index == -1)
  228. return;
  229. AddElementPopUp popUp = new AddElementPopUp(parent);
  230. popUp.setActualHolonObject(template);
  231. popUp.setElement(template.elementsStream().toList().get(index));
  232. popUp.setVisible(true);
  233. HolonElement he = popUp.getElement();
  234. if (he != null) {
  235. listModel.remove(index);
  236. holonElementList.remove(index);
  237. listModel.addElement(he.getName()
  238. + ": " + he.getEnergy() + "U");
  239. holonElementList.add(he);
  240. }
  241. }
  242. }