Author: [EMAIL PROTECTED]
Date: Sun Oct  5 12:59:21 2008
New Revision: 3712

Modified:
    changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/ModulePanel.java
     
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/util/log/SwingLoggerPanel.java
     
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/util/log/SwingTreeLogger.java
    changes/jat/oophm-branch/plugins/common/ByteOrder.h

Log:
Added tree-based copy (Ctrl-C) support in the tree logger, hooks for find
(Ctrl-F) and a few minor cleanups.


Modified:  
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/ModulePanel.java
==============================================================================
---  
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/ModulePanel.java       
 
(original)
+++  
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/ModulePanel.java       
 
Sun Oct  5 12:59:21 2008
@@ -54,6 +54,7 @@
        button.setBorderPainted(false);
        button.setPreferredSize(new Dimension(closeIcon.getIconWidth(),
            closeIcon.getIconHeight()));
+      button.setToolTipText("Close this tab");
        add(button);
        button.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
@@ -111,7 +112,7 @@
      }
      synchronized (tabs) {
        tabs.addTab(shortModuleName, browserIcon, this, moduleName + " from "
-          + remoteSocket);
+          + remoteSocket + " on " + userAgent);
      }
      logger.log(TreeLogger.INFO, "Request for module " + moduleName
          + " by user agent '" + userAgent + "' from " + remoteSocket);

Modified:  
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/util/log/SwingLoggerPanel.java
==============================================================================
---  
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/util/log/SwingLoggerPanel.java
  
(original)
+++  
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/util/log/SwingLoggerPanel.java
  
Sun Oct  5 12:59:21 2008
@@ -23,12 +23,19 @@
  import java.awt.Color;
  import java.awt.Component;
  import java.awt.Dimension;
+import java.awt.HeadlessException;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
  import java.util.Enumeration;

+import javax.swing.AbstractAction;
  import javax.swing.JButton;
  import javax.swing.JComboBox;
+import javax.swing.JComponent;
  import javax.swing.JEditorPane;
  import javax.swing.JLabel;
  import javax.swing.JOptionPane;
@@ -37,11 +44,13 @@
  import javax.swing.JSplitPane;
  import javax.swing.JTextField;
  import javax.swing.JTree;
+import javax.swing.KeyStroke;
  import javax.swing.event.TreeSelectionEvent;
  import javax.swing.event.TreeSelectionListener;
  import javax.swing.tree.DefaultMutableTreeNode;
  import javax.swing.tree.DefaultTreeCellRenderer;
  import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
  import javax.swing.tree.TreePath;
  import javax.swing.tree.TreeSelectionModel;

@@ -50,8 +59,6 @@
   */
  public class SwingLoggerPanel extends JPanel implements  
TreeSelectionListener {

-  private static final Color DISCONNECTED_COLOR = Color.decode("0xFFDDDD");
-
    private static class TreeRenderer extends DefaultTreeCellRenderer {
      @Override
      public Component getTreeCellRendererComponent(JTree tree, Object value,
@@ -68,7 +75,9 @@
        return this;
      }
    }
-
+
+  private static final Color DISCONNECTED_COLOR = Color.decode("0xFFDDDD");
+
    // package protected for SwingTreeLogger to access

    final JTree tree;
@@ -160,6 +169,7 @@
          TreeSelectionModel.SINGLE_TREE_SELECTION);
      tree.addTreeSelectionListener(this);
      JScrollPane treeView = new JScrollPane(tree);
+    // TODO(jat): better way to do this
      details = new JEditorPane() {
        @Override
        public boolean getScrollableTracksViewportWidth() {
@@ -180,11 +190,23 @@
      add(splitter);
      logger = new SwingTreeLogger(this);
      logger.setMaxDetail(maxLevel);
-  }
-
-  protected void alert(String msg) {
-    JOptionPane.showMessageDialog(null, "Alert", msg,
-        JOptionPane.INFORMATION_MESSAGE);
+    KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_F,
+        InputEvent.CTRL_DOWN_MASK);
+    getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(key, "find");
+    getActionMap().put("find", new AbstractAction() {
+      public void actionPerformed(ActionEvent e) {
+        // TODO(jat): popup Chrome-like find box
+        JOptionPane.showMessageDialog(null, "Find not implemented yet",
+            "Alert: Not Implemented", JOptionPane.INFORMATION_MESSAGE);
+      }
+    });
+    key = KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK);
+    tree.getInputMap().put(key, "copy");
+    tree.getActionMap().put("copy", new AbstractAction() {
+      public void actionPerformed(ActionEvent e) {
+        treeCopy();
+      }
+    });
    }

    @SuppressWarnings("unchecked")
@@ -243,6 +265,11 @@
      if (e.isAddedPath()) {
        TreePath path = e.getPath();
        Object treeNode = path.getLastPathComponent();
+      if (treeNode == null) {
+        // handle the case of no selection
+        details.setText("");
+        return;
+      }
        Object userObject = ((DefaultMutableTreeNode)  
treeNode).getUserObject();
        String text = userObject.toString();
        if (userObject instanceof LogEvent) {
@@ -253,6 +280,11 @@
      }
    }

+  protected void alert(String msg) {
+    JOptionPane.showMessageDialog(null, "Alert", msg,
+        JOptionPane.INFORMATION_MESSAGE);
+  }
+
    protected void setLevelFilter(Type selectedLevel) {
      levelFilter = selectedLevel;
      // TODO(jat): filter current tree
@@ -265,5 +297,60 @@
      // TODO(jat): filter current tree
      JOptionPane.showMessageDialog(null, "Regex filtering not implemented  
yet",
          "Alert: Not Implemented", JOptionPane.INFORMATION_MESSAGE);
+  }
+
+  protected void treeCopy() {
+    DefaultMutableTreeNode node = (DefaultMutableTreeNode)  
tree.getLastSelectedPathComponent();
+    if (node == null) {
+      return;
+    }
+    // is it better to use SwingUtilities2.canAccessSystemClipboard() here?
+    Clipboard clipboard;
+    try {
+      clipboard = tree.getToolkit().getSystemClipboard();
+    } catch (SecurityException e) {
+      return;
+    } catch (HeadlessException e) {
+      return;
+    }
+    if (clipboard == null) {
+      return;
+    }
+    StringBuilder text = new StringBuilder();
+    treeLogTraverse(text, node, 0);
+    StringSelection selection = new StringSelection(text.toString());
+    clipboard.setContents(selection, selection);
+  }
+
+  private String htmlUnescape(String str) {
+    // TODO(jat): real implementation, needs to correspond to
+    // SwingTreeLogger.htmlEscape()
+    return  
str.replace("&lt;", "<").replace("&gt;", ">").replace("&amp;", "&").replace(
+        "<br>", "\n");
+  }
+
+  private void treeLogTraverse(StringBuilder buf, TreeNode node, int  
indent) {
+    for (int i = 0; i < indent; ++i) {
+      buf.append(' ');
+    }
+    if (node instanceof DefaultMutableTreeNode) {
+      DefaultMutableTreeNode mutableNode = (DefaultMutableTreeNode) node;
+      Object userObject = mutableNode.getUserObject();
+      if (userObject instanceof LogEvent) {
+        LogEvent event = (LogEvent) userObject;
+        buf.append(htmlUnescape(event.getFullText()));
+        if (event.isBranchCommit) {
+          SwingTreeLogger childLogger = event.childLogger;
+          DefaultMutableTreeNode parent = childLogger.treeNode;
+          for (int i = 0; i < parent.getChildCount(); ++i) {
+            treeLogTraverse(buf, parent.getChildAt(i), indent + 2);
+          }
+        }
+      } else {
+        buf.append(userObject.toString());
+      }
+    } else {
+      buf.append(node.toString());
+    }
    }
  }

Modified:  
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/util/log/SwingTreeLogger.java
==============================================================================
---  
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/util/log/SwingTreeLogger.java
   
(original)
+++  
changes/jat/oophm-branch/dev/core/src/com/google/gwt/dev/util/log/SwingTreeLogger.java
   
Sun Oct  5 12:59:21 2008
@@ -235,9 +235,10 @@
      }
    }

+  // package protected so SwingLoggerPanel can access
+  DefaultMutableTreeNode treeNode;
+
    private SwingLoggerPanel panel;
-  // Highest level of log message we or our children have seen
-  private DefaultMutableTreeNode treeNode;

    /**
     * Constructs the top-level TreeItemLogger.

Modified: changes/jat/oophm-branch/plugins/common/ByteOrder.h
==============================================================================
--- changes/jat/oophm-branch/plugins/common/ByteOrder.h (original)
+++ changes/jat/oophm-branch/plugins/common/ByteOrder.h Sun Oct  5 12:59:21  
2008
@@ -46,6 +46,10 @@
      char b[sizeof(double)];
    } DoubleUnion;

+  /**
+   * Copy src to dest, reversing the order of the bytes.
+   * Assumes src and dest do not overlap.
+   */
    void memcpyrev(char* dest, const char* src, size_t n) {
      src += n;
      while (n-- > 0) {

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to