package edu.pdx.cs410J.grader.poa.ui;
import com.google.inject.Singleton;
import edu.pdx.cs410J.grader.poa.POAGradeView;
import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
@Singleton
public class POAGradeWidgets implements POAGradeView {
private final JCheckBox isLateCheckbox;
private final JLabel totalPointsLabel;
private final JTextField score;
private final JButton recordGrade;
public POAGradeWidgets() {
isLateCheckbox = new JCheckBox("Late");
totalPointsLabel = new JLabel("out of");
score = new JTextField(4);
recordGrade = new JButton("Save Grade");
}
public JCheckBox getIsLateCheckbox() {
return isLateCheckbox;
}
@Override
public void setIsEnabled(boolean isEnabled) {
this.isLateCheckbox.setEnabled(isEnabled);
this.score.setEnabled(isEnabled);
this.recordGrade.setEnabled(isEnabled);
}
@Override
public void setIsLate(boolean isLate) {
this.isLateCheckbox.setSelected(isLate);
}
@Override
public void addIsLateHandler(IsLateHandler handler) {
this.isLateCheckbox.addItemListener(e -> handler.setIsLate(isLateCheckbox.isSelected()));
}
@Override
public void setTotalPoints(String totalPoints) {
this.totalPointsLabel.setText("out of " + totalPoints);
}
@Override
public void addScoreValueHandler(ScoreValueHandler handler) {
this.score.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
}
@Override
public void focusLost(FocusEvent e) {
handler.scoreValue(score.getText());
}
});
}
@Override
public void setErrorInScore(boolean errorInScore) {
if (errorInScore) {
this.score.setBorder(BorderFactory.createLineBorder(Color.RED, 2));
this.recordGrade.setEnabled(false);
} else {
this.score.setBorder(null);
this.recordGrade.setEnabled(true);
}
}
@Override
public void setScore(String score) {
this.score.setText(score);
this.recordGrade.setEnabled(true);
}
@Override
public void setScoreHasBeenRecorded(boolean hasScoreBeenRecorded) {
if (hasScoreBeenRecorded) {
this.recordGrade.setText("Update Grade");
} else {
this.recordGrade.setText("Save Grade");
}
}
@Override
public void addRecordGradeHandler(RecordGradeHandler handler) {
this.recordGrade.addActionListener(e -> handler.recordGrade());
}
public JComponent getGradeWidget() {
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
panel.add(new JLabel("Grade:"));
panel.add(Box.createHorizontalStrut(3));
panel.add(this.score);
panel.add(Box.createHorizontalStrut(3));
panel.add(this.totalPointsLabel);
panel.add(Box.createHorizontalStrut(6));
panel.add(this.recordGrade);
panel.add(Box.createHorizontalGlue());
return panel;
}
}