package open.dolphin.client;
import java.awt.Window;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
* チャートドキュメントのルートクラス。
*
* @author Kazushi Minagawa, Digital Globe, Inc.
*/
public abstract class AbstractChartDocument implements ChartDocument {
private static final String[] CHART_MENUS = {
GUIConst.ACTION_NEW_KARTE,
GUIConst.ACTION_NEW_DOCUMENT,
GUIConst.ACTION_OPEN_KARTE,
GUIConst.ACTION_SAVE,
GUIConst.ACTION_DELETE,
GUIConst.ACTION_PRINT,
GUIConst.ACTION_MODIFY_KARTE,
GUIConst.ACTION_CHANGE_NUM_OF_DATES_ALL,
GUIConst.ACTION_CREATE_PRISCRIPTION,
GUIConst.ACTION_SEND_CLAIM,
GUIConst.ACTION_CHECK_INTERACTION,
GUIConst.ACTION_ASCENDING,
GUIConst.ACTION_DESCENDING,
GUIConst.ACTION_SHOW_MODIFIED,
GUIConst.ACTION_INSERT_TEXT,
GUIConst.ACTION_INSERT_SCHEMA,
GUIConst.ACTION_ATTACHMENT,
GUIConst.ACTION_INSERT_STAMP,
GUIConst.ACTION_SELECT_INSURANCE,
GUIConst.ACTION_CUT,
GUIConst.ACTION_COPY,
GUIConst.ACTION_PASTE,
GUIConst.ACTION_UNDO,
GUIConst.ACTION_REDO
};
protected PropertyChangeSupport boundSupport;
private Chart chartContext;
private String title;
private JPanel ui;
private boolean dirty;
private boolean chartDocDidSave;
/** Creates new DefaultChartDocument */
public AbstractChartDocument() {
setUI(new JPanel());
}
@Override
public void addPropertyChangeListener(String prop, PropertyChangeListener l) {
if (boundSupport==null) {
boundSupport = new PropertyChangeSupport(this);
}
boundSupport.addPropertyChangeListener(prop, l);
}
@Override
public void removePropertyChangeListener(String prop, PropertyChangeListener l) {
if (boundSupport!=null) {
boundSupport.removePropertyChangeListener(prop, l);
}
}
@Override
public boolean isChartDocDidSave() {
return chartDocDidSave;
}
@Override
public void setChartDocDidSave(boolean b) {
chartDocDidSave = b;
if (boundSupport!=null) {
boundSupport.firePropertyChange(CHART_DOC_DID_SAVE, !chartDocDidSave, chartDocDidSave);
}
}
@Override
public String getTitle() {
return title;
}
@Override
public void setTitle(String title) {
this.title = title;
}
@Override
public ImageIcon getIconInfo(Chart chart) {
return null;
}
@Override
public Chart getContext() {
return chartContext;
}
@Override
public void setContext(Chart chart) {
this.chartContext = chart;
}
@Override
public abstract void start();
@Override
public abstract void stop();
@Override
public void enter() {
// status パネルの表示内容をクリアする
if (chartContext.getStatusPanel()!=null) {
chartContext.getStatusPanel().setMessage("");
}
// responder chain の先頭になる
getContext().getChartMediator().addChain(this);
// 全てのメニューを disabled にする
disableMenus();
// 新規文書のActionを制御する
getContext().enabledAction(GUIConst.ACTION_NEW_DOCUMENT, !isReadOnly());
}
@Override
public JPanel getUI() {
return ui;
}
public final void setUI(JPanel ui) {
this.ui = ui;
}
@Override
public void save() {}
@Override
public void print() {}
@Override
public boolean isDirty() {
return dirty;
}
@Override
public void setDirty(boolean dirty) {
this.dirty = dirty;
}
public boolean isReadOnly() {
return chartContext.isReadOnly();
}
public void disableMenus() {
// このウインドウに関連する全てのメニューをdisableにする
ChartMediator mediator = getContext().getChartMediator();
mediator.disableMenus(CHART_MENUS);
}
/**
* 共通の警告表示を行う。
* @param title
* @param message
*/
protected void warning(String title, String message) {
Window parent = SwingUtilities.getWindowAncestor(getUI());
JOptionPane.showMessageDialog(parent, message, ClientContext.getFrameTitle(title), JOptionPane.WARNING_MESSAGE);
}
}