« メモが保存されなかった | トップページ | 病名エディタの左矢印 »

2010年4月12日 (月)

スタンプエディターの右矢印 (2)

スタンプエディターの右矢印機能を少し充実させた。

01

  • 選択されているスタンプ名と同じスタンプ名で右矢印を押すと,上書き確認が出る。「OK」を選択すると上書きされる。
  • スタンプ名を変えてから右矢印を押すと,選択スタンプの下に挿入される。
  • フォルダを選択して右矢印を押すと,フォルダの中の最後に挿入される。

client/StampBoxPlugin.java

class EditorValueListener implements PropertyChangeListener {
  public void propertyChange(PropertyChangeEvent e) {
    Object obj = e.getNewValue();

    if (obj != null && obj instanceof ModuleModel) {
      // 傷病名以外の場合
      ModuleModel stamp = (ModuleModel) obj;
      String entity = stamp.getModuleInfo().getEntity();
      final StampTree tree = userBox.getStampTree(entity);
      // tree.addStamp(stamp, null); // ←オリジナル
//pns^
      StampTreeNode target = tree.getSelectedNode();
      if (target == null) {
        tree.addStamp(stamp, null);
      } else {
        if (target.isLeaf()) {
          // Leaf の場合,上書きするか確認
          String targetName = target.getStampInfo().getStampName();
          String sourceName = stamp.getModuleInfo().getStampName();
          if (targetName.equals(sourceName)) {
            // 名前が同じなら置き換えるかどうか確認
            int confirm = MyJSheet.showConfirmDialog(frame,
              targetName + "を上書きしますか?", "上書き確認",
              JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE );
            if(confirm == JOptionPane.OK_OPTION) {
              ((StampTreeTransferHandler)tree.getTransferHandler()).setPosition (StampTreeTransferHandler.Insert.AFTER);
              tree.replaceStamp(stamp, target);
            }
          } else {
            // 名前が違えば選択された項目の下に入れる
            ((StampTreeTransferHandler)tree.getTransferHandler()).setPosition(StampTreeTransferHandler.Insert.AFTER);
            tree.addStamp(stamp, target);
          }
        } else {
          // Folder ならその中に入れる
          ((StampTreeTransferHandler)tree.getTransferHandler()).setPosition(StampTreeTransferHandler.Insert.INTO_FOLDER);
          tree.addStamp(stamp, target);
        }
      }
      // 終わったら tree にフォーカスを取る
      tree.requestFocusInWindow();
    } else if (obj != null && obj instanceof ArrayList) {
      // 傷病名の場合
      StampTree tree = getStampTree(IInfoModel.ENTITY_DIAGNOSIS);
      tree.addDiagnosis((ArrayList) obj);
    }
  }
//pns$
}

client/StampTree.java

/**
 * KartePaneから drop されたスタンプをツリーに加える。
 * replace 対応 by pns
 */
public boolean addStamp(ModuleModel droppedStamp, StampTreeNode selected) {
  return addStamp(droppedStamp, selected, false);
}

public boolean replaceStamp(ModuleModel droppedStamp, StampTreeNode selected) {
  return addStamp(droppedStamp, selected, true);
}

public boolean addStamp(ModuleModel droppedStamp, final StampTreeNode selected, final boolean isReplace) {
 ・
 ・ 
  @Override
  protected void succeeded(String result) {
    logger.debug("addStamp succeeded");
    if (sdl.isNoError() && result.equals(stampId)) {
//pns    replace 対応
    addInfoToTree(info, selected, isReplace);
  } else {
 ・
 ・
/**
 * StampTree に新しいノードを加える。
 * replace 対応 by pns
 * @param info 追加するノードの情報
 * @param selected カーソルの下にあるノード(Drop 位置のノード)
 */
public void addInfoToTree(ModuleInfoBean info, StampTreeNode selected) {
  addInfoToTree(info, selected, false);
}

public void addInfoToTree(ModuleInfoBean info, StampTreeNode selected, boolean isReplace) {
//pns^ selected = targetNode or null
  StampTreeTransferHandler handler = (StampTreeTransferHandler) this.getTransferHandler();
  StampTreeTransferHandler.Insert insertPosition = handler.getInsertPosition();
//pns$
  //
  // StampInfo から新しい StampTreeNode を生成する
  //
  StampTreeNode node = new StampTreeNode(info);

  // 
  // Drop 位置のノードによって追加する位置を決める
  //
  //pns^
  if (selected != null) {
    StampTreeNode newParent = (StampTreeNode) selected.getParent();
    int index = newParent.getIndex(selected);
    DefaultTreeModel model = (DefaultTreeModel) this.getModel();

    switch(insertPosition) {
      case BEFORE:
        model.insertNodeInto(node, newParent, index);
        break;
      case AFTER:
        model.insertNodeInto(node, newParent, index+1);
        break;
      default: // INTO_FOLDER
        model.insertNodeInto(node, selected, selected.getChildCount());
    }
    // replace
    if (isReplace) deleteNode();

    // 追加したノードを選択する
    TreeNode[] path = model.getPathToRoot(node);
    ((JTree)this).setSelectionPath(new TreePath(path));
//pns$
 ・
 ・
public void addDiagnosis(ArrayList list) {
 ・
 ・
  @Override
  protected void succeeded(List result) {
    logger.debug("addDiagnosis succeeded");
    if (sdl.isNoError()) {
      for(ModuleInfoBean info : infoList) {
        // addInfoToTree(info, null);
//pns^  選択されているとき
        StampTreeNode target = getSelectedNode();
          if (target != null) {
            if (target.isLeaf()) {
              // 葉の時は後ろに挿入する
              ((StampTreeTransferHandler) getTransferHandler()).setPosition(StampTreeTransferHandler.Insert.AFTER);
            } else {
              // フォルダの時は中に挿入する
              ((StampTreeTransferHandler) getTransferHandler()).setPosition(StampTreeTransferHandler.Insert.INTO_FOLDER);
            }
          }
          addInfoToTree(info, getSelectedNode());
//pns$
        }
      } else {

« メモが保存されなかった | トップページ | 病名エディタの左矢印 »

OpenDolphin」カテゴリの記事