スタンプエディターの右矢印機能を少し充実させた。
|
- 選択されているスタンプ名と同じスタンプ名で右矢印を押すと,上書き確認が出る。「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 {