AddObjectPopUp.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. package holeg.ui.view.dialog;
  2. import holeg.model.AbstractCanvasObject;
  3. import holeg.model.HolonElement;
  4. import holeg.model.HolonObject;
  5. import holeg.preferences.ColorPreference;
  6. import holeg.preferences.ImagePreference;
  7. import holeg.ui.controller.Control;
  8. import holeg.ui.view.category.Category;
  9. import holeg.ui.view.image.Import;
  10. import java.awt.BorderLayout;
  11. import java.awt.Color;
  12. import java.awt.FlowLayout;
  13. import java.awt.event.KeyEvent;
  14. import java.awt.event.KeyListener;
  15. import java.awt.event.MouseAdapter;
  16. import java.awt.event.MouseEvent;
  17. import java.io.File;
  18. import java.io.FileInputStream;
  19. import java.io.FileOutputStream;
  20. import java.io.IOException;
  21. import java.io.InputStream;
  22. import java.io.OutputStream;
  23. import java.nio.file.Files;
  24. import java.util.ArrayList;
  25. import java.util.logging.Logger;
  26. import javax.swing.DefaultListModel;
  27. import javax.swing.ImageIcon;
  28. import javax.swing.JButton;
  29. import javax.swing.JDialog;
  30. import javax.swing.JFileChooser;
  31. import javax.swing.JFrame;
  32. import javax.swing.JLabel;
  33. import javax.swing.JList;
  34. import javax.swing.JPanel;
  35. import javax.swing.JScrollPane;
  36. import javax.swing.JTextField;
  37. import javax.swing.SwingConstants;
  38. import javax.swing.border.EmptyBorder;
  39. import javax.swing.filechooser.FileNameExtensionFilter;
  40. /**
  41. * Popup for adding a Holon Object to a Category.
  42. */
  43. public class AddObjectPopUp extends JDialog {
  44. private static final Logger log = Logger.getLogger(AddObjectPopUp.class.getName());
  45. private final JTextField objectName;
  46. private final JTextField sourcePath;
  47. private final ArrayList<HolonElement> hElements;
  48. private final DefaultListModel<String> listModel;
  49. private final JList<String> list;
  50. // private HolonObject theObject;
  51. private final Control control;
  52. private final JLabel lblImagePreview;
  53. private final AbstractCanvasObject toEdit;
  54. private AddElementPopUp addElement;
  55. private String imagePath;
  56. private File selectedFile = null;
  57. private String filePath = " ";
  58. private boolean imageChanged = false;
  59. /**
  60. * Create the dialog.
  61. *
  62. * @param obj the object
  63. * @param category the categorie
  64. */
  65. public AddObjectPopUp(Control control, HolonObject obj, Category category, JFrame parentFrame) {
  66. this.control = control;
  67. toEdit = obj;
  68. this.setIconImage(Import.loadImage(ImagePreference.Logo, 30, 30));
  69. setBounds(100, 100, 450, 342);
  70. setLocationRelativeTo(parentFrame);
  71. getContentPane().setLayout(new BorderLayout());
  72. JPanel contentPanel = new JPanel();
  73. contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
  74. getContentPane().add(contentPanel, BorderLayout.CENTER);
  75. contentPanel.setLayout(null);
  76. hElements = new ArrayList<>();
  77. this.setTitle("Add Object Menu");
  78. {
  79. JLabel lblName = new JLabel("Name:");
  80. lblName.setHorizontalAlignment(SwingConstants.CENTER);
  81. lblName.setBounds(28, 21, 76, 14);
  82. contentPanel.add(lblName);
  83. }
  84. {
  85. objectName = new JTextField();
  86. objectName.addKeyListener(new KeyListener() {
  87. @Override
  88. public void keyPressed(KeyEvent arg0) {
  89. }
  90. @Override
  91. public void keyReleased(KeyEvent e) {
  92. }
  93. @Override
  94. public void keyTyped(KeyEvent e) {
  95. objectName.setBackground(Color.WHITE);
  96. }
  97. });
  98. objectName.setText(obj.getName());
  99. objectName.setBounds(98, 18, 172, 20);
  100. contentPanel.add(objectName);
  101. objectName.setColumns(10);
  102. }
  103. {
  104. JButton btnBrowseImage = new JButton("Browse Image");
  105. btnBrowseImage.setBounds(10, 75, 134, 23);
  106. contentPanel.add(btnBrowseImage);
  107. btnBrowseImage.addMouseListener(new MouseAdapter() {
  108. public void mouseClicked(MouseEvent e) {
  109. fileChooser();
  110. }
  111. });
  112. }
  113. {
  114. lblImagePreview = new JLabel("");
  115. lblImagePreview.setBounds(295, 3, 50, 50);
  116. contentPanel.add(lblImagePreview);
  117. }
  118. {
  119. sourcePath = new JTextField();
  120. sourcePath.addKeyListener(new KeyListener() {
  121. @Override
  122. public void keyPressed(KeyEvent arg0) {
  123. }
  124. @Override
  125. public void keyReleased(KeyEvent e) {
  126. }
  127. @Override
  128. public void keyTyped(KeyEvent e) {
  129. sourcePath.setBackground(Color.WHITE);
  130. }
  131. });
  132. if (!obj.getImagePath().equals("")) {
  133. log.info("IMAGEPATH:" + obj.getImagePath());
  134. lblImagePreview.setIcon(new ImageIcon(Import.loadImage(obj.getImagePath(), 50, 50)));
  135. this.filePath = obj.getImagePath();
  136. sourcePath.setText(filePath);
  137. }
  138. sourcePath.setBounds(148, 77, 271, 20);
  139. contentPanel.add(sourcePath);
  140. sourcePath.setColumns(10);
  141. }
  142. {
  143. JButton btnAddDefaultElement = new JButton("Add Element");
  144. btnAddDefaultElement.addActionListener(actionEvent -> {
  145. addElement = new AddElementPopUp(parentFrame);
  146. addElement.setActualHolonObject((HolonObject) toEdit);
  147. addElement.setVisible(true);
  148. HolonElement hl = addElement.getElement();
  149. // if (hl != null) {
  150. // hl.setSav(givenCategory);
  151. // }
  152. // hl.setObj(objectName.getText());
  153. addElement(hl);
  154. });
  155. btnAddDefaultElement.setBounds(270, 144, 142, 23);
  156. contentPanel.add(btnAddDefaultElement);
  157. }
  158. {
  159. JScrollPane scrollPane = new JScrollPane();
  160. scrollPane.setBounds(10, 114, 236, 150);
  161. contentPanel.add(scrollPane);
  162. {
  163. listModel = new DefaultListModel<>();
  164. /*
  165. * HolonElement hel = new HolonElement("Test", 100, 5); String name =
  166. * hel.getEleName(); for (int i = 0; i < 11; i++) { hel.setEleName(name + i);
  167. * addElement(hel); }
  168. */
  169. list = new JList<>(listModel);
  170. scrollPane.setViewportView(list);
  171. }
  172. }
  173. obj.elementsStream().forEach(this::addElement);
  174. {
  175. JButton btnNewButton = new JButton("Delete Element");
  176. btnNewButton.addActionListener(actionEvent -> {
  177. int selectedIndex = list.getSelectedIndex();
  178. if (selectedIndex != -1) {
  179. listModel.remove(selectedIndex);
  180. hElements.remove(selectedIndex);
  181. }
  182. });
  183. btnNewButton.setBounds(270, 182, 142, 27);
  184. contentPanel.add(btnNewButton);
  185. }
  186. {
  187. JPanel buttonPane = new JPanel();
  188. buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
  189. getContentPane().add(buttonPane, BorderLayout.SOUTH);
  190. {
  191. JButton okButton = new JButton("OK");
  192. okButton.addMouseListener(new MouseAdapter() {
  193. public void mouseClicked(MouseEvent e) {
  194. // Component frame = null;
  195. if (objectName.getText().length() > 0) {
  196. if (sourcePath.getText().equals(filePath)) {
  197. imagePath = filePath;
  198. if (imageChanged) {
  199. copieFile();
  200. }
  201. imageChanged = false;
  202. if (category != null) {
  203. category.getObjects().remove(toEdit);
  204. AddObjectPopUp.this.control.addObject(category, objectName.getText(), hElements,
  205. imagePath);
  206. }
  207. dispose();
  208. } else {
  209. sourcePath.setBackground(ColorPreference.Dialog.BackgroundColor);
  210. }
  211. } else {
  212. objectName.setBackground(ColorPreference.Dialog.BackgroundColor);
  213. }
  214. }
  215. });
  216. okButton.setActionCommand("OK");
  217. buttonPane.add(okButton);
  218. getRootPane().setDefaultButton(okButton);
  219. }
  220. {
  221. JButton cancelButton = new JButton("Cancel");
  222. cancelButton.setActionCommand("Cancel");
  223. buttonPane.add(cancelButton);
  224. cancelButton.addActionListener(e -> dispose());
  225. }
  226. setVisible(true);
  227. }
  228. }
  229. /**
  230. * adds a Holon Element.
  231. *
  232. * @param hl the HolonElement
  233. */
  234. private void addElement(HolonElement hl) {
  235. hElements.add(hl);
  236. listModel.addElement("x: " + hl.getName() + " " + hl.getEnergy() + "U");
  237. }
  238. /**
  239. * Choose the file.
  240. */
  241. private void fileChooser() {
  242. JFileChooser fileChooser = new JFileChooser();
  243. FileNameExtensionFilter filter = new FileNameExtensionFilter("png, jpg or jpeg", "png", "jpg",
  244. "jpeg");
  245. fileChooser.setFileFilter(filter);
  246. int returnValue = fileChooser.showOpenDialog(null);
  247. if (returnValue == JFileChooser.APPROVE_OPTION) {
  248. selectedFile = fileChooser.getSelectedFile();
  249. filePath = selectedFile.getAbsolutePath();
  250. sourcePath.setText(filePath);
  251. ImageIcon icon = new ImageIcon(Import.loadImage(filePath, 50, 50));
  252. lblImagePreview.setIcon(icon);
  253. imageChanged = true;
  254. } else {
  255. System.out.println("Failed to Load");
  256. }
  257. }
  258. /**
  259. * Copies the File.
  260. */
  261. private void copieFile() {
  262. InputStream inStream;
  263. OutputStream outStream;
  264. try {
  265. File source = new File(filePath);
  266. //TODO: "CopieFile"
  267. File dest = new File(System.getProperty("user.home") + "/.config/HolonGUI/Images/");
  268. Files.createDirectories(dest.toPath());
  269. dest = new File(dest, selectedFile.getName());
  270. imagePath = "" + dest;
  271. inStream = new FileInputStream(source);
  272. outStream = new FileOutputStream(dest);
  273. byte[] buffer = new byte[1024];
  274. int length;
  275. while ((length = inStream.read(buffer)) > 0) {
  276. outStream.write(buffer, 0, length);
  277. }
  278. inStream.close();
  279. outStream.close();
  280. } catch (IOException eex) {
  281. eex.printStackTrace();
  282. }
  283. }
  284. }