package no.ntnu.fp.gui;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import javax.swing.AbstractAction;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.JButton;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import no.ntnu.fp.model.Meeting;
import no.ntnu.fp.model.User;
import no.ntnu.fp.model.Meeting.State;
import no.ntnu.fp.net.network.client.CommunicationController;
public class SelectParticipantsFrame implements ListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
JPanel panel = new JPanel();
User user = (User)list.getModel().getElementAt(index);
panel.add(new JLabel(user.getName()));
panel.add(new JCheckBox("", isSelected));
return panel;
}
@SuppressWarnings("deprecation")
public static void main(String[] args) {
Meeting m = new Meeting();
m.addParticipant(new User("havard"), State.Pending);
m.addParticipant(new User("andy"), State.Pending);
JFrame frame = new ListRenderingFrame(m);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.show();
}
}
class ListRenderingFrame extends JFrame implements ListSelectionListener {
/**
*
*/
private Meeting model;
private ListModel listModel;
private ListSelectionModel selectionModel;
private CancelAction cAction;
public ListRenderingFrame(Meeting meeting) {
this.model = meeting;
JLabel labelUsers = new JLabel("Brukere", JLabel.CENTER);
labelUsers.setFont(new Font("sansserif", Font.BOLD, 26));
JButton saveButton = new JButton(new SaveAction("Lagre"));
cAction = new CancelAction("Avbryt", meeting);
JButton cancelButton = new JButton(cAction);
JPanel participantButtons = new JPanel();
participantButtons.add(saveButton);
participantButtons.add(cancelButton);
setTitle("Oversikt over brukere");
setSize(380,360);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
cAction.actionPerformed(null);
}
});
JList list = new JList(getListOfAllUsers());
list.setSelectionModel(new DefaultListSelectionModel() {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void setSelectionInterval(int index0, int index1) {
if(super.isSelectedIndex(index0)) {
super.removeSelectionInterval(index0, index1);
}
else {
super.addSelectionInterval(index0, index1);
}
}
});
listModel = list.getModel();
selectionModel = list.getSelectionModel();
for(int i = 0; i < list.getModel().getSize(); i++) {
User user = (User)list.getModel().getElementAt(i);
if (meeting.getParticipants().contains(user)) {
list.setSelectedIndex(i);
}
}
list.setCellRenderer(new SelectParticipantsFrame());
JScrollPane scrollPane = new JScrollPane(list);
JPanel p = new JPanel();
p.add(scrollPane);
list.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent arg0) {
if (!arg0.getValueIsAdjusting()) {
int index = selectionModel.getAnchorSelectionIndex();
if (selectionModel.isSelectedIndex(index)) {
User user = (User)listModel.getElementAt(index);
model.addParticipant(user, State.Pending);
}
else if (!selectionModel.isSelectedIndex(index)) {
User user = (User)listModel.getElementAt(index);
model.removeParticipant(user);
}
System.out.println(model);
System.out.println("------------------------------");
}
}
});
getContentPane().add(labelUsers, "North");
getContentPane().add(p, "Center");
getContentPane().add(participantButtons, "South");
setLocationRelativeTo(null);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
private Vector getListOfAllUsers() {
/*Vector users = new Vector();
User user = new User("havard");
user.setName("Håvard Wormdal Høiby");
User p1 = new User("bjorn");
p1.setName("Bjørn Åge Tungesvik");
User p2 = new User("odd");
p2.setName("Odd Magnus Trondrud");
User p3 = new User("andy");
p3.setName("Andre Philipp");
User p4 = new User("eivind");
p4.setName("Eivind Kvissel");
User p5 = new User("tina");
p5.setName("Tina Syversen");
users.add(user);
users.add(p1);
users.add(p2);
users.add(p3);
users.add(p4);
users.add(p5);*/
CommunicationController c = CommunicationController.getInstance();
List<User> users = c.getListOfUsers();
return new Vector(users);
}
//Action for lagring av skjema
private class SaveAction extends AbstractAction {
private static final long serialVersionUID = 1L;
public SaveAction(String text) {
super(text, null);
}
@Override
public void actionPerformed(ActionEvent arg0) {
System.out.println("Lagre");
dispose();
}
}
//Action for � avbryte skjema
private class CancelAction extends AbstractAction {
private static final long serialVersionUID = 1L;
private Meeting model;
private Map<User, State> savedState = new HashMap<User, State>();
public CancelAction(String text, Meeting model) {
super(text, null);
this.model = model;
for(User user :model.getParticipants()) {
savedState.put(user, model.getState(user));
}
}
@Override
public void actionPerformed(ActionEvent arg0) {
this.model.removeAllParticipants();
for(User user : savedState.keySet()) {
this.model.addParticipant(user, State.Pending);
}
System.out.println("Avbryt");
System.out.println(model);
dispose();
}
}
@Override
public void valueChanged(ListSelectionEvent arg0) {
// TODO Auto-generated method stub
}
}