package open.dolphin.client; import java.awt.BorderLayout; import java.awt.Dimension; import java.util.Date; import java.util.List; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.event.DocumentListener; import open.dolphin.delegater.DocumentDelegater; import open.dolphin.infomodel.IInfoModel; import open.dolphin.infomodel.PatientMemoModel; import open.dolphin.project.Project; /** * 患者のメモを表示し編集するクラス。 * * @author Kazushi Minagawa, Digital Globe, Inc. */ public class MemoInspector { private boolean dirty; private JPanel memoPanel; private JTextArea memoArea; private PatientMemoModel patientMemoModel; private ChartImpl context; /** * MemoInspectorオブジェクトを生成する。 * @param context */ public MemoInspector(ChartImpl context) { this.context = context; initComponents(); update(); memoArea.getDocument().addDocumentListener(new DocumentListener() { @Override public void insertUpdate(javax.swing.event.DocumentEvent e) { dirtySet(); } @Override public void removeUpdate(javax.swing.event.DocumentEvent e) { dirtySet(); } @Override public void changedUpdate(javax.swing.event.DocumentEvent e) { } }); // TransferHandlerを設定する memoArea.setTransferHandler(new BundleTransferHandler(context.getChartMediator(), memoArea)); // 右クリックによる編集メニューを登録する //memoArea.addMouseListener(new CutCopyPasteAdapter(memoArea)); //s.oh^ 2014/04/02 閲覧権限の制御 //memoArea.addMouseListener(CutCopyPasteAdapter.getInstance()); if(!context.isReadOnly()) { memoArea.addMouseListener(CutCopyPasteAdapter.getInstance()); } //s.oh$ } /** * レイアウト用のパネルを返す。 * @return レイアウトパネル */ public JPanel getPanel() { return memoPanel; } /** * GUI コンポーネントを初期化する。 */ private void initComponents() { memoArea = new JTextArea(5, 10); memoArea.putClientProperty("karteCompositor", this); memoArea.setLineWrap(true); memoArea.setMargin(new java.awt.Insets(3, 3, 2, 2)); memoArea.addFocusListener(AutoKanjiListener.getInstance()); //s.oh^ 2014/04/02 閲覧権限の制御 //memoArea.setToolTipText("メモに使用します。内容は自動的に保存されます。"); if(!context.isReadOnly()) { String toolTipText = ClientContext.getMyBundle(MemoInspector.class).getString("toolTipText.memoArea"); memoArea.setToolTipText(toolTipText); } //s.oh$ memoArea.setEnabled(!context.isReadOnly()); memoPanel = new JPanel(new BorderLayout()); //s.oh^ 2013/01/30 メモ欄にスクロールバーを表示 //if (!ClientContext.isMac()) { // memoPanel.add(new JScrollPane(memoArea), BorderLayout.CENTER); //} else { // memoPanel.add(memoArea, BorderLayout.CENTER); //} memoPanel.add(new JScrollPane(memoArea), BorderLayout.CENTER); //s.oh$ Dimension size = memoPanel.getPreferredSize(); int h = size.height; int w = 268; size = new Dimension(w, h); memoPanel.setMinimumSize(size); memoPanel.setMaximumSize(size); } /** * 患者メモを表示する。 */ private void update() { //List list = context.getKarte().getEntryCollection("patientMemo"); List list = context.getKarte().getMemoList(); if (list != null && list.size()>0) { patientMemoModel = (PatientMemoModel) list.get(0); memoArea.setText(patientMemoModel.getMemo()); } } /** * カルテのクローズ時にコールされ、患者メモを更新する。 */ public void save() { if (!dirty) { return; } if (patientMemoModel == null) { patientMemoModel = new PatientMemoModel(); } patientMemoModel.setKarteBean(context.getKarte()); patientMemoModel.setUserModel(Project.getUserModel()); Date confirmed = new Date(); patientMemoModel.setConfirmed(confirmed); patientMemoModel.setRecorded(confirmed); patientMemoModel.setStarted(confirmed); patientMemoModel.setStatus(IInfoModel.STATUS_FINAL); patientMemoModel.setMemo(memoArea.getText().trim()); final DocumentDelegater ddl = new DocumentDelegater(); Runnable r = () -> { try { ddl.updatePatientMemo(patientMemoModel); patientMemoModel = null; context = null; } catch (Exception e) {} }; Thread t = new Thread(r); t.setPriority(Thread.NORM_PRIORITY); t.start(); } /** * メモ内容が変化した時、ボタンを活性化する。 */ private void dirtySet() { dirty = true; } }