package open.dolphin.stampbox; import java.io.BufferedReader; import java.io.StringReader; import java.util.List; import java.util.ResourceBundle; import javax.swing.DropMode; import open.dolphin.client.ClientContext; import open.dolphin.infomodel.IInfoModel; /** * UserStampBox * * @author Kazushi Minagawa, Digital Globe, Inc. */ public class UserStampBox extends AbstractStampBox { /** テキストスタンプのタブ番号 */ private int textIndex; /** パススタンプのタブ番号 */ private int pathIndex; /** ORCA セットのタブ番号 */ private int orcaIndex; /** * StampBox を構築する。 */ @Override protected void buildStampBox() { try { List<StampTree> userTrees; try ( // Build stampTree BufferedReader reader = new BufferedReader(new StringReader(stampTreeModel.getTreeXml()))) { DefaultStampTreeBuilder builder = new DefaultStampTreeBuilder(); StampTreeDirector director = new StampTreeDirector(builder); userTrees = director.build(reader); } stampTreeModel.setTreeXml(null); stampTreeModel.setTreeBytes(null); // StampTreeへ設定するPopupMenuとTransferHandlerを生成する StampTreePopupAdapter popAdapter = new StampTreePopupAdapter(); StampTreeTransferHandler transferHandler = new StampTreeTransferHandler(); // StampBox(TabbedPane) へリスト順に格納する // 一つのtabへ一つのtreeが対応 int index = 0; ResourceBundle bundle = ResourceBundle.getBundle("open.dolphin.stampbox.StampBoxResource"); for (StampTree stampTree : userTrees) { stampTree.setUserTree(true); stampTree.setTransferHandler(transferHandler); stampTree.setDropMode(DropMode.INSERT); // INSERT stampTree.setStampBox(getContext()); StampTreePanel treePanel = new StampTreePanel(stampTree); //minagawa^ IN8 TreeInfo ti = stampTree.getTreeInfo(); ti.setName(bundle.getString(ti.getEntity())); this.addTab(stampTree.getTreeName(), treePanel); //minagawa$ // Text、Path、ORCA のタブ番号を保存する if (stampTree.getEntity().equals(IInfoModel.ENTITY_TEXT)) { textIndex = index; stampTree.addMouseListener(popAdapter); } else if (stampTree.getEntity().equals(IInfoModel.ENTITY_PATH)) { pathIndex = index; stampTree.addMouseListener(popAdapter); } else if (stampTree.getEntity().equals(IInfoModel.ENTITY_ORCA)) { orcaIndex = index; } else { stampTree.addMouseListener(popAdapter); } index++; } } catch (Exception e) { e.printStackTrace(System.err); } } /** * 引数のタブ番号に対応するStampTreeにエディタから発行があるかどうかを返す。 * @param index タブ番号 * @return エディタから発行がある場合に true */ @Override public boolean isHasEditor(int index) { return (index != textIndex && index != pathIndex && index != orcaIndex); } @Override public void setHasNoEditorEnabled(boolean b) { this.setEnabledAt(textIndex, b); this.setEnabledAt(pathIndex, b); this.setEnabledAt(orcaIndex, b); } @Override public String getInfo() { return ClientContext.getMyBundle(UserStampBox.class).getString("text.info"); } }