]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/gui/GroupFrame.java
Basic Group GUI implementation
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / gui / GroupFrame.java
1 package at.ac.tuwien.sbc.valesriegler.group.gui;
2
3 import java.awt.GridLayout;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.util.ArrayList;
7 import java.util.List;
8 import java.util.concurrent.atomic.AtomicInteger;
9
10 import javax.swing.JButton;
11 import javax.swing.JFrame;
12 import javax.swing.JLabel;
13 import javax.swing.JOptionPane;
14 import javax.swing.JPanel;
15 import javax.swing.JScrollPane;
16 import javax.swing.JSpinner;
17 import javax.swing.JTable;
18 import javax.swing.SpinnerNumberModel;
19 import javax.swing.border.TitledBorder;
20
21 import at.ac.tuwien.sbc.valesriegler.group.Group;
22
23 /**
24  * Base Frame of the Group UI
25  * 
26  * @author Gregor Riegler <gregor DOT riegler AT gmail DOT com>
27  *
28  */
29 public class GroupFrame extends JFrame {
30         private AtomicInteger idSource = new AtomicInteger(1);
31         
32         private GroupOverviewModel groupModel;
33         protected GroupCreationPanel groupCreationPanel;
34         private static JPanel creationPanel;
35         private static JPanel chooseGroupSizePanel;
36
37         public GroupFrame() {
38                 super("Group Creator");
39                 JPanel wrapper = new JPanel();
40                 GridLayout wrapperLayout = new GridLayout(2, 1);
41                 wrapper.setLayout(wrapperLayout);
42                 
43                 initGroupCreation(wrapper);
44                 initGroupOverview(wrapper);
45                 
46                 setContentPane(wrapper);
47                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
48         }
49
50         private void initGroupCreation(JPanel wrapper) {
51                 creationPanel = new JPanel();
52                 chooseGroupSizePanel = new JPanel();
53                 JLabel creationLabel = new JLabel("How many members should the group have?");
54                 JButton next = new JButton("Next");
55                 SpinnerNumberModel model = new SpinnerNumberModel(1,1,4,1);
56             final JSpinner spinner = new JSpinner(model);
57                 
58                 next.addActionListener(new ActionListener() {
59                         
60                         @Override
61                         public void actionPerformed(ActionEvent e) {
62                                 int numberMembers = (int) spinner.getValue();
63                                 
64                                 groupCreationPanel = new GroupCreationPanel(numberMembers);
65                                 groupCreationPanel.setCreateAndCancelHandler(new GroupCreationHandler());
66                                 
67                                 chooseGroupSizePanel.setVisible(false);
68                                 creationPanel.add(groupCreationPanel);
69                         }
70                 });
71         
72             GridLayout creationPanelLayout = new GridLayout(3,1);
73             chooseGroupSizePanel.setLayout(creationPanelLayout);
74             creationPanel.setBorder(new TitledBorder("Create Groups"));
75             
76             creationPanel.add(chooseGroupSizePanel);
77                 chooseGroupSizePanel.add(creationLabel);
78                 chooseGroupSizePanel.add(spinner);
79                 chooseGroupSizePanel.add(next);
80                 
81                 wrapper.add(creationPanel);
82         }
83
84         private void initGroupOverview(JPanel wrapper) {
85                 JPanel overviewPanel = new JPanel();
86                 groupModel = new GroupOverviewModel();
87                 JTable overviewTable = new JTable(groupModel);
88                 JScrollPane scrollPane = new JScrollPane(overviewTable);
89                 
90                 overviewPanel.setBorder(new TitledBorder("Group Overview"));
91                 scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
92                 
93                 overviewPanel.add(scrollPane);
94                 wrapper.add(overviewPanel);
95         }
96         
97          
98         class GroupCreationHandler {
99                 public void handleGroupCreation(GroupCreationRequest gc) {
100                         chooseGroupSizePanel.setVisible(true);
101                         creationPanel.remove(groupCreationPanel);
102                         creationPanel.repaint();
103                         
104                         createGroups(gc);
105                         
106                         JOptionPane.showMessageDialog(null,"Groups were created!");
107                 }
108                 
109                 private void createGroups(GroupCreationRequest gc) {
110                         List<Group> newGroups = new ArrayList<>();
111                         for(int i=0; i<gc.numberOfGroups; i++) {
112                                 Group group = new Group();
113                                 group.setId(idSource.getAndIncrement());
114                                 group.setSize(gc.size);
115                                 group.setPizzas(gc.pizzaTypes);
116                                 
117                                 groupModel.addGroup(group);
118                         }
119                         
120                 }
121
122                 public void handleCancel() {
123                         chooseGroupSizePanel.setVisible(true);
124                         creationPanel.remove(groupCreationPanel);
125                         creationPanel.repaint();
126                 }
127         }
128
129 }