File: /Users/shatabdi/Education/GitHub/se450_project/src/view/GuiWindow.java
1 package view;
2
3 import java.awt.BorderLayout;
4 import java.awt.Color;
5 import java.awt.FlowLayout;
6 import java.awt.Frame;
7 import java.awt.Insets;
8 import java.util.HashMap;
9 import java.util.Map;
10 import java.util.NoSuchElementException;
11
12 import javax.swing.JButton;
13 import javax.swing.JComponent;
14 import javax.swing.JFrame;
15 import javax.swing.JPanel;
16 import javax.swing.WindowConstants;
17 import javax.swing.border.Border;
18 import javax.swing.border.CompoundBorder;
19 import javax.swing.border.EmptyBorder;
20 import javax.swing.border.LineBorder;
21
22 import view.Enum.EventName;
23 import view.interfaces.IGuiWindow;
24
25 public class GuiWindow extends JFrame implements IGuiWindow {
26
27 private static final int defaultHeight = 800;
28 private static final String defaultTitle = "Shatabdi Choudhury JPaint";
29 private static final int defaultWidth = 1250;
30 private static final long serialVersionUID = 1L;
31
32 private final Insets defaultButtonDimensions = new Insets(5, 8, 5, 8);
33 private final Map<EventName, JButton> eventButtons = new HashMap<>();
34
35 public GuiWindow(JComponent canvas) {
36 setVisible(true);
37 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
38 setTitle(defaultTitle);
39 setSize(defaultWidth, defaultHeight);
40 setExtendedState(Frame.MAXIMIZED_BOTH);
41 JPanel window = createWindow();
42 window.add(canvas, BorderLayout.CENTER);
43 validate();
44
45 System.out.println("Gui window appears.");
46 }
47
48 private void addButtonToPanel(EventName eventName, JPanel panel) {
49 JButton newButton = createButton(eventName);
50 eventButtons.put(eventName, newButton);
51 panel.add(newButton);
52 }
53
54 private JPanel createBackgroundPanel() {
55 JPanel contentPane = new JPanel();
56 contentPane.setBorder(new EmptyBorder(0, 0, 0, 0));
57 contentPane.setLayout(new BorderLayout(0, 0));
58 contentPane.setBackground(Color.WHITE);
59 setContentPane(contentPane);
60 return contentPane;
61 }
62
63 private JButton createButton(EventName eventName) {
64 JButton newButton = new JButton(eventName.toString());
65 newButton.setForeground(Color.BLACK);
66 newButton.setBackground(Color.WHITE);
67 newButton.setBorder(createButtonBorder());
68 return newButton;
69 }
70
71 private Border createButtonBorder() {
72 Border line = new LineBorder(Color.BLACK);
73 Border margin = new EmptyBorder(defaultButtonDimensions);
74 return new CompoundBorder(line, margin);
75 }
76
77 private JPanel createButtonPanel() {
78 JPanel panel = new JPanel();
79 FlowLayout flowLayout = (FlowLayout) panel.getLayout();
80 flowLayout.setAlignment(FlowLayout.LEFT);
81 panel.setBackground(new Color(156, 156, 156));
82 return panel;
83 }
84
85 private JPanel createMenu() {
86 JPanel buttonPanel = createButtonPanel();
87
88 for (EventName eventName : EventName.values()) {
89 addButtonToPanel(eventName, buttonPanel);
90 }
91
92 return buttonPanel;
93 }
94
95 private JPanel createWindow() {
96 JPanel contentPane = createBackgroundPanel();
97 JPanel buttonPanel = createMenu();
98 contentPane.add(buttonPanel, BorderLayout.NORTH);
99 return contentPane;
100 }
101
102 public JButton getButton(EventName eventName) {
103 if (!eventButtons.containsKey(eventName))
104 throw new NoSuchElementException("Button does not exists for action " + eventName.toString());
105
106 return eventButtons.get(eventName);
107 }
108 }
109