1 22 23 package org.aspectj.debugger.gui; 24 25 import org.aspectj.debugger.base.*; 26 27 import com.sun.jdi.*; 28 import java.awt.event.ActionEvent ; 29 import java.awt.event.ActionListener ; 30 import javax.swing.JMenuItem ; 31 32 public class AJValueNodeMenu extends AJTreeNodeMenu { 33 34 private AJValueNode valueNode; 35 private JMenuItem menuItemChange = new JMenuItem ("Change value"); 36 private JMenuItem menuItemWatch = new JMenuItem ("Set watchpoint"); 37 private JMenuItem menuItemHex = new JMenuItem (); 38 39 public AJValueNodeMenu() { 40 this(null); 41 } 42 43 public AJValueNodeMenu(AJValueNode valueNode) { 44 super(); 45 setValueNode(valueNode); 46 add(menuItemWatch()); 47 add(menuItemChange()); 48 if (valueNode instanceof HexableAJValueNode) add(menuItemHex()); 49 } 50 51 52 public void setValueNode(AJValueNode valueNode) { 53 this.valueNode = valueNode; 54 if (valueNode == null) { 55 menuItemWatch.setEnabled(false); 56 menuItemChange.setEnabled(false); 57 } else if (!valueNode.canSetWatchPoint()) { 58 menuItemWatch.setEnabled(false); 59 menuItemChange.setEnabled(true); 60 } else { 61 boolean canSetWatchPoint = true; 62 try { 63 VirtualMachine vm = ComponentRepository.vm(); 64 canSetWatchPoint = vm.canWatchFieldAccess() && 65 vm.canWatchFieldModification(); 66 } catch (NoVMException e) {} 67 menuItemWatch.setEnabled(canSetWatchPoint); 68 menuItemChange.setEnabled(true); 69 } 70 } 71 72 private JMenuItem menuItemChange() { 73 menuItemChange.addActionListener( new ActionListener () { 74 public void actionPerformed(ActionEvent e) { 75 setValue(); 76 }}); 77 return menuItemChange; 78 } 79 80 private JMenuItem menuItemWatch() { 81 menuItemWatch.addActionListener( new ActionListener () { 82 public void actionPerformed(ActionEvent e) { 83 setWatchPoint(); 84 }}); 85 return menuItemWatch; 86 } 87 88 private JMenuItem menuItemHex() { 89 menuItemHex.setText("To " + (((HexableAJValueNode) valueNode).isHex() 90 ? "decimal" : "hex")); 91 menuItemHex.addActionListener( new ActionListener () { 92 public void actionPerformed(ActionEvent e) { 93 toHex(); 94 }}); 95 return menuItemHex; 96 } 97 98 private void setWatchPoint() { 99 if (valueNode == null) return; 100 if (!valueNode.canSetWatchPoint()) return; 101 valueNode.setWatchPoint(); 102 } 103 104 private void setValue() { 105 if (valueNode == null) return; 106 valueNode.setValue(); 107 } 108 109 private void toHex() { 110 if (valueNode == null) return; 111 if (!(valueNode instanceof HexableAJValueNode)) return; 112 ((HexableAJValueNode) valueNode).toggle(); 113 } 114 } | Popular Tags |