/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.dlect.ui.prefs;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.awt.GridBagConstraints;
import java.util.Set;
import java.util.TreeMap;
import org.dlect.controller.MainController;
import org.dlect.events.Event;
import org.dlect.events.EventListener;
import org.dlect.events.wrapper.Wrappers;
import org.dlect.model.Database;
import org.dlect.model.Database.DatabaseEventID;
import org.dlect.model.Semester;
import org.dlect.model.Semester.SemesterEventID;
/**
*
* @author lee
*/
public class CoursePreferencePanel extends PreferencePanel implements EventListener {
private static final long serialVersionUID = 1L;
private final TreeMap<Semester, SemesterRowGroupHandler> semesterCtls = Maps.newTreeMap();
public CoursePreferencePanel(MainController ctl) {
super(ctl);
initComponents();
Wrappers.addSwingListenerTo(this, ctl, Database.class, Semester.class);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
shownLabel = new javax.swing.JLabel();
paddingPanel = new javax.swing.JPanel();
endPaddingPanel = new javax.swing.JPanel();
setLayout(new java.awt.GridBagLayout());
shownLabel.setText("Shown");
shownLabel.setBorder(javax.swing.BorderFactory.createCompoundBorder(javax.swing.BorderFactory.createMatteBorder(0, 1, 1, 0, new java.awt.Color(0, 0, 0)), javax.swing.BorderFactory.createEmptyBorder(2, 2, 2, 2)));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
add(shownLabel, gridBagConstraints);
paddingPanel.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 0, 1, 0, new java.awt.Color(0, 0, 0)));
paddingPanel.setLayout(new java.awt.GridLayout(1, 0));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
add(paddingPanel, gridBagConstraints);
endPaddingPanel.setBorder(javax.swing.BorderFactory.createMatteBorder(0, 1, 1, 0, new java.awt.Color(0, 0, 0)));
endPaddingPanel.setPreferredSize(new java.awt.Dimension(0, 0));
endPaddingPanel.setLayout(new java.awt.GridLayout(1, 0));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
add(endPaddingPanel, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel endPaddingPanel;
private javax.swing.JPanel paddingPanel;
private javax.swing.JLabel shownLabel;
// End of variables declaration//GEN-END:variables
public void doRefresh() {
MainController mc = getController();
ImmutableSortedSet<Semester> semesters = mc.getDatabaseHandler().getDatabase().getSemesters();
Set<Semester> toRemove = Sets.newHashSet(semesterCtls.keySet());
toRemove.removeAll(semesters);
for (Semester s : toRemove) {
semesterCtls.remove(s).removeFromLayout(this);
}
int row = 1;
for (Semester s : semesters) {
SemesterRowGroupHandler get = semesterCtls.get(s);
if (get == null) {
get = new SemesterRowGroupHandler(s, mc);
semesterCtls.put(s, get);
get.createItems();
}
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridy = row;
int change = get.doLayout(this, gbc);
row += change;
}
}
@Override
public void doSave() {
}
@Override
public void doPreShow() {
doRefresh();
}
@Override
public String getTabName() {
return "Courses";
}
@Override
public String getTabTooltip() {
return "Choose which courses you would like displayed on the main screen";
}
@Override
public boolean isModified() {
return false;
}
@Override
public void processEvent(Event e) {
if (e.getEventID().equals(DatabaseEventID.SEMESTER) || e.getEventID().equals(SemesterEventID.SUBJECT)) {
doRefresh();
}
}
}