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