« jconsole による解析 | トップページ | OpenDolphin-1.3.0.2 ソース公開 »

2009年9月19日 (土)

StampHolder の隠しコマンド作成

処方スタンプを選択してシフト+コマンド+C を押すと,テキストとして処方がクリップボードにコピーされる隠しコマンドを作った。

 

client/StampHolder.java

public void enter(ActionMap map) {
 ・
 ・
  map.get(GUIConst.ACTION_PASTE).setEnabled(false);
        
  setSelected(true);
  ////    隠しコマンドセット
  addHiddenCommand();
}
    
public void exit(ActionMap map) {
  setSelected(false);
  ////    隠しコマンド除去
  removeHiddenCommand();
}
 ・
 ・
////↓ 隠しコマンド
private void addHiddenCommand() {

  // Shift+command C で,処方をテキストとしてクリップボードにコピー
  InputMap im = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
  im.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.META_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK), "copyAsText");
  this.getActionMap().put("copyAsText", new AbstractAction(){
    public void actionPerformed(ActionEvent e) {
      if (getStamp().getModel().getClass().getName().equals("open.dolphin.infomodel.BundleMed")) {
        try {
          IInfoModel model = getStamp().getModel();
          VelocityContext context = ClientContext.getVelocityContext();
          context.put("model", model);
          context.put("hints", getHints());
          context.put("stampName", getStamp().getModuleInfo().getStampName());
          String templateFile = "open.dolphin.infomodel.BundleMed-text.vm";
          StringWriter sw = new StringWriter();
          BufferedWriter bw = new BufferedWriter(sw);
          InputStream instream = ClientContext.getTemplateAsStream(templateFile);
          BufferedReader reader = new BufferedReader(new InputStreamReader(instream, "SHIFT_JIS"));
          Velocity.evaluate(context, bw, "stmpHolder", reader);
          bw.flush();
          bw.close();
          reader.close();
          // 全角数字とスペースを直す
          String text = sw.toString();
          for (int i = 0; i < MATCHIES.length; i++) {
            text = text.replace(MATCHIES[i], REPLACES[i]);
          }

          Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
          clipboard.setContents(new StringSelection(text), null);

        } catch (Exception ex) {
          ex.printStackTrace();
        }
      }
    }
  });
}

private void removeHiddenCommand() {

  // Shift+command C
  InputMap im = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
  im.remove(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.META_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
}

resources/template/open.dolphin.infomodel.BundleMed-text.java

##-------------------------------------
##         RP Template    
##-------------------------------------
#foreach ($item in $model.getClaimItem())
#if (!$item.getCode().matches("0085[0-9]{5}") && !$item.getCode().matches("001000[0-9]{3}") && !$item.getCode().matches("810000001"))
${item.getName()}	$!{item.getNumber()} $!{item.getUnit()} 
#else
${item.getName()} 
#end
#end
${model.getAdminDisplayString()}

« jconsole による解析 | トップページ | OpenDolphin-1.3.0.2 ソース公開 »

OpenDolphin」カテゴリの記事