package open.dolphin.client;
import java.awt.event.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import open.dolphin.infomodel.AllergyModel;
import open.dolphin.infomodel.IInfoModel;
import open.dolphin.infomodel.SimpleDate;
/**
* アレルギデータを編集するエディタクラス。
*
* @author Kazushi Minagawa, Digital Globe, Inc.
*/
public class AllergyEditor {
private final AllergyInspector inspector;
private AllergyEditorView view;
private JDialog dialog;
private final JButton addBtn;
private final JButton clearBtn;
private boolean ok;
private void checkBtn() {
String factor = view.getFactorFld().getText().trim();
String date = view.getIdentifiedFld().getText().trim();
boolean newOk = true;
if (factor.equals("") || date.equals("")) {
newOk = false;
}
if (ok != newOk) {
ok = newOk;
addBtn.setEnabled(ok);
clearBtn.setEnabled(ok);
}
}
private void add() {
final AllergyModel model = new AllergyModel();
model.setFactor(view.getFactorFld().getText().trim());
model.setSeverity((String) view.getReactionCombo().getSelectedItem());
String memo = view.getMemoFld().getText().trim();
if (!memo.equals("")) {
model.setMemo(memo);
}
String dateStr = view.getIdentifiedFld().getText().trim();
//if (!dateStr.equals("")) {
if(dateStr != null) {
String[] tmp = dateStr.split("-");
if(dateStr.length() != 10 || tmp.length != 3) {
String warning = ClientContext.getMyBundle(AllergyEditor.class).getString("warning.identifiedDate");
JOptionPane.showMessageDialog(null, warning, ClientContext.getString("productString"), JOptionPane.INFORMATION_MESSAGE);
return;
}
model.setIdentifiedDate(dateStr);
}
addBtn.setEnabled(false);
clearBtn.setEnabled(false);
inspector.add(model);
}
private void clear() {
view.getFactorFld().setText("");
view.getMemoFld().setText("");
}
class PopupListener extends MouseAdapter implements PropertyChangeListener {
private JPopupMenu popup;
private final JTextField tf;
// private LiteCalendarPanel calendar;
public PopupListener(JTextField tf) {
this.tf = tf;
tf.addMouseListener(PopupListener.this);
}
@Override
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
private void maybeShowPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
popup = new JPopupMenu();
CalendarCardPanel cc = new CalendarCardPanel(ClientContext.getEventColorTable());
cc.addPropertyChangeListener(CalendarCardPanel.PICKED_DATE, this);
cc.setCalendarRange(new int[]{-12, 0});
popup.insert(cc, 0);
popup.show(e.getComponent(), e.getX(), e.getY());
}
}
@Override
public void propertyChange(PropertyChangeEvent e) {
if (e.getPropertyName().equals(CalendarCardPanel.PICKED_DATE)) {
SimpleDate sd = (SimpleDate) e.getNewValue();
tf.setText(SimpleDate.simpleDateToMmldate(sd));
popup.setVisible(false);
popup = null;
//s.oh^ 不具合修正
checkBtn();
//s.oh$
}
}
}
public AllergyEditor(AllergyInspector inspector) {
this.inspector = inspector;
view = new AllergyEditorView();
view.getFactorFld().addFocusListener(AutoKanjiListener.getInstance());
view.getFactorFld().getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
//s.oh^ 不具合修正
//checkBtn();
SwingUtilities.invokeLater(() -> {
checkBtn();
});
//s.oh$
}
@Override
public void removeUpdate(DocumentEvent e) {
//s.oh^ 不具合修正
//checkBtn();
SwingUtilities.invokeLater(() -> {
checkBtn();
});
//s.oh$
}
@Override
public void changedUpdate(DocumentEvent e) {
//s.oh^ 不具合修正
//checkBtn();
SwingUtilities.invokeLater(() -> {
checkBtn();
});
//s.oh$
}
});
//s.oh^ 不具合修正
view.getIdentifiedFld().getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
SwingUtilities.invokeLater(() -> {
checkBtn();
});
}
@Override
public void removeUpdate(DocumentEvent e) {
SwingUtilities.invokeLater(() -> {
checkBtn();
});
}
@Override
public void changedUpdate(DocumentEvent e) {
SwingUtilities.invokeLater(() -> {
checkBtn();
});
}
});
//s.oh$
view.getMemoFld().addFocusListener(AutoKanjiListener.getInstance());
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(IInfoModel.DATE_WITHOUT_TIME);
String todayString = sdf.format(date);
view.getIdentifiedFld().setText(todayString);
PopupListener pl = new PopupListener(view.getIdentifiedFld());
view.getIdentifiedFld().addFocusListener(AutoRomanListener.getInstance());
java.util.ResourceBundle bundle = ClientContext.getMyBundle(AllergyEditor.class);
String addText = bundle.getString("actionText.add");
addBtn = new JButton(addText);
addBtn.addActionListener((ActionEvent e) -> {
add();
dialog.setVisible(false);
});
addBtn.setEnabled(false);
String clearText = bundle.getString("actionText.clear");
clearBtn = new JButton(clearText);
clearBtn.addActionListener((ActionEvent e) -> {
clear();
});
clearBtn.setEnabled(false);
Object[] options = new Object[]{addBtn,clearBtn};
String title = bundle.getString("title.optionPane.addAllergy");
JOptionPane pane = new JOptionPane(view,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.DEFAULT_OPTION,
null,
options, addBtn);
dialog = pane.createDialog(inspector.getContext().getFrame(), ClientContext.getFrameTitle(title));
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
view.getFactorFld().requestFocus();
}
});
dialog.setVisible(true);
}
}