From 0ee704e8d4f4666e3329cc29673a9d931f53cfb1 Mon Sep 17 00:00:00 2001 From: "nboyd%atg.com" Date: Mon, 1 Apr 2002 22:12:11 +0000 Subject: [PATCH] Patch from Chris Oliver: Hi Norris, Can you check in the attached Main.java which works around a problem with using JTreeTable in JDK 1.4. Thanks, Chris git-svn-id: svn://10.0.0.236/trunk@117878 18797224-902f-48f8-a5cc-f745e15eee43 --- .../javascript/tools/debugger/Main.java | 113 +++++++++++++----- 1 file changed, 81 insertions(+), 32 deletions(-) diff --git a/mozilla/js/rhino/toolsrc/org/mozilla/javascript/tools/debugger/Main.java b/mozilla/js/rhino/toolsrc/org/mozilla/javascript/tools/debugger/Main.java index a7a430231d5..4fb69a2e3d4 100644 --- a/mozilla/js/rhino/toolsrc/org/mozilla/javascript/tools/debugger/Main.java +++ b/mozilla/js/rhino/toolsrc/org/mozilla/javascript/tools/debugger/Main.java @@ -1143,41 +1143,90 @@ class Evaluator extends JTable { class MyTreeTable extends JTreeTable { - public MyTreeTable(TreeTableModel model) { - super(model); - } + public MyTreeTable(TreeTableModel model) { + super(model); + } + + public JTree resetTree(TreeTableModel treeTableModel) { + tree = new TreeTableCellRenderer(treeTableModel); + + // Install a tableModel representing the visible rows in the tree. + super.setModel(new TreeTableModelAdapter(treeTableModel, tree)); + + // Force the JTable and JTree to share their row selection models. + ListToTreeSelectionModelWrapper selectionWrapper = new + ListToTreeSelectionModelWrapper(); + tree.setSelectionModel(selectionWrapper); + setSelectionModel(selectionWrapper.getListSelectionModel()); + + // Make the tree and table row heights the same. + if (tree.getRowHeight() < 1) { + // Metal looks better like this. + setRowHeight(18); + } - public JTree resetTree(TreeTableModel treeTableModel) { - tree = new TreeTableCellRenderer(treeTableModel); - - // Install a tableModel representing the visible rows in the tree. - super.setModel(new TreeTableModelAdapter(treeTableModel, tree)); - - // Force the JTable and JTree to share their row selection models. - ListToTreeSelectionModelWrapper selectionWrapper = new - ListToTreeSelectionModelWrapper(); - tree.setSelectionModel(selectionWrapper); - setSelectionModel(selectionWrapper.getListSelectionModel()); - - // Make the tree and table row heights the same. - if (tree.getRowHeight() < 1) { - // Metal looks better like this. - setRowHeight(18); + // Install the tree editor renderer and editor. + setDefaultRenderer(TreeTableModel.class, tree); + setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor()); + setShowGrid(true); + setIntercellSpacing(new Dimension(1,1)); + tree.setRootVisible(false); + tree.setShowsRootHandles(true); + DefaultTreeCellRenderer r = (DefaultTreeCellRenderer)tree.getCellRenderer(); + r.setOpenIcon(null); + r.setClosedIcon(null); + r.setLeafIcon(null); + return tree; } - // Install the tree editor renderer and editor. - setDefaultRenderer(TreeTableModel.class, tree); - setDefaultEditor(TreeTableModel.class, new TreeTableCellEditor()); - setShowGrid(true); - setIntercellSpacing(new Dimension(1,1)); - tree.setRootVisible(false); - tree.setShowsRootHandles(true); - DefaultTreeCellRenderer r = (DefaultTreeCellRenderer)tree.getCellRenderer(); - r.setOpenIcon(null); - r.setClosedIcon(null); - r.setLeafIcon(null); - return tree; - } + public boolean isCellEditable(EventObject e) { + if (e instanceof MouseEvent) { + MouseEvent me = (MouseEvent)e; + // If the modifiers are not 0 (or the left mouse button), + // tree may try and toggle the selection, and table + // will then try and toggle, resulting in the + // selection remaining the same. To avoid this, we + // only dispatch when the modifiers are 0 (or the left mouse + // button). + if (me.getModifiers() == 0 || + ((me.getModifiers() & (InputEvent.BUTTON1_MASK|1024)) != 0 && + (me.getModifiers() & + (InputEvent.SHIFT_MASK | + InputEvent.CTRL_MASK | + InputEvent.ALT_MASK | + InputEvent.BUTTON2_MASK | + InputEvent.BUTTON3_MASK | + 64 | //SHIFT_DOWN_MASK + 128 | //CTRL_DOWN_MASK + 512 | // ALT_DOWN_MASK + 2048 | //BUTTON2_DOWN_MASK + 4096 //BUTTON3_DOWN_MASK + )) == 0)) { + int row = rowAtPoint(me.getPoint()); + for (int counter = getColumnCount() - 1; counter >= 0; + counter--) { + if (TreeTableModel.class == getColumnClass(counter)) { + MouseEvent newME = new MouseEvent + (MyTreeTable.this.tree, me.getID(), + me.getWhen(), me.getModifiers(), + me.getX() - getCellRect(row, counter, true).x, + me.getY(), me.getClickCount(), + me.isPopupTrigger()); + MyTreeTable.this.tree.dispatchEvent(newME); + break; + } + } + } + if (me.getClickCount() >= 3) { + return true; + } + return false; + } + if (e == null) { + return true; + } + return false; + } }; class ContextWindow extends JPanel implements ActionListener {