@Override
 public String getToolTipText(MouseEvent e) {
   BddtHistoryItem itm = getItemAtPoint(e.getX(), e.getY());
   if (itm != null) {
     StringBuffer buf = new StringBuffer();
     BumpThreadStack stk = itm.getStack();
     BumpStackFrame frm = stk.getFrame(0);
     if (frm == null) return null;
     buf.append(frm.getMethod() + " at " + frm.getLineNumber());
     return buf.toString();
   }
   GraphObject go = getObjectAtPoint(e.getX(), e.getY());
   if (go != null) {
     return go.getName();
   }
   return null;
 }
    @Override
    public void actionPerformed(ActionEvent e) {
      BumpThreadStack stk = for_item.getStack();
      BumpStackFrame frame = stk.getFrame(0);
      BudaBubble bb = null;
      if (for_control.frameFileExists(frame)) {
        String mid = frame.getMethod() + frame.getSignature();
        bb = BaleFactory.getFactory().createMethodBubble(for_control.getProject(), mid);
      } else {
        bb = new BddtLibraryBubble(frame);
      }

      if (bb != null) {
        BoardMetrics.noteCommand("BDDT", "HistorySource");
        BudaBubbleArea bba = BudaRoot.findBudaBubbleArea(BddtHistoryBubble.this);
        if (bba != null) {
          bba.addBubble(
              bb,
              BddtHistoryBubble.this,
              null,
              PLACEMENT_RIGHT | PLACEMENT_GROUPED | PLACEMENT_LOGICAL | PLACEMENT_MOVETO);
        }
      }
    }
 GotoStackAction(BddtHistoryItem itm) {
   super("Show stack");
   for_stack = itm.getStack();
 }