/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.dlect.ui.prefs;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.border.MatteBorder;
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.Subject;
import org.dlect.model.Subject.SubjectEventID;
import org.dlect.ui.helper.WrappingUtil;
import org.dlect.ui.subject.settings.AdvancedSubjectPreferencesDialog;
/**
*
* @author lee
*/
public class SubjectRowHandler implements EventListener {
private static final Border LABEL_BORDER = new CompoundBorder(new MatteBorder(0, 0, 1, 0, Color.BLACK), new EmptyBorder(0, 12, 0, 0));
private static final Border CHECK_BORDER = new MatteBorder(0, 1, 1, 0, Color.BLACK);
private static final Border BUTTON_BORDER = new MatteBorder(0, 1, 1, 0, Color.BLACK);
private final Subject s;
private final MainController mc;
private JButton settingsButton;
private JPanel settingsButtonPanel;
private JLabel subjectNameLabel;
private JPanel subjectNamePanel;
private JCheckBox subjectEnabled;
private JPanel subjectEnabledPanel;
private AdvancedSubjectPreferencesDialog aspd;
public SubjectRowHandler(Subject s, MainController mc) {
this.s = s;
this.mc = mc;
Wrappers.addSwingListenerTo(this, s, Subject.class);
Wrappers.addSwingListenerTo(this, mc, Database.class);
}
public void createItems() {
subjectNameLabel = new JLabel(s.getName());
subjectNamePanel = new JPanel();
WrappingUtil.wrap(subjectNamePanel, subjectNameLabel, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, LABEL_BORDER);
subjectEnabled = new JCheckBox();
subjectEnabled.setSelected(mc.getSubjectDisplayHelper().isSubjectDisplayed(s));
subjectEnabled.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
mc.getSubjectDisplayHelper().setSubjectDisplayed(s, subjectEnabled.isSelected());
}
});
subjectEnabledPanel = new JPanel();
WrappingUtil.initRedirectListeners(subjectEnabled, subjectEnabledPanel);
WrappingUtil.wrap(subjectEnabledPanel, subjectEnabled, GridBagConstraints.CENTER, GridBagConstraints.NONE, CHECK_BORDER);
settingsButton = new JButton("Settings");
settingsButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (aspd == null) {
aspd = new AdvancedSubjectPreferencesDialog(SwingUtilities.getWindowAncestor(settingsButton), s, mc);
}
aspd.setVisible(true);
}
});
settingsButtonPanel = new JPanel();
WrappingUtil.wrap(settingsButtonPanel, settingsButton, GridBagConstraints.CENTER, GridBagConstraints.BOTH, BUTTON_BORDER);
}
public void doUpdate() {
subjectNameLabel.setText(s.getName());
subjectEnabled.setSelected(mc.getSubjectDisplayHelper().isSubjectDisplayed(s));
}
public void doLayout(JComponent c, GridBagConstraints gbc) {
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.weightx = 1;
gbc.fill = GridBagConstraints.BOTH;
c.add(subjectNamePanel, gbc);
gbc.weightx = 0;
gbc.gridx = 1;
c.add(subjectEnabledPanel, gbc);
gbc.weightx = 0;
gbc.gridx = 2;
c.add(settingsButtonPanel, gbc);
}
@Override
public void processEvent(Event e) {
if (e.getEventID().equals(SubjectEventID.NAME) || e.getEventID().equals(DatabaseEventID.SETTING)) {
doUpdate();
}
}
public void removeFromLayout(JComponent c) {
c.remove(settingsButtonPanel);
c.remove(subjectEnabledPanel);
c.remove(subjectNamePanel);
}
}