You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2022/07/13 14:11:08 UTC

[groovy] branch master updated: GROOVY-10686: Additional refactoring - a few more icons and context menus for AstBrowser

This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 23dfc65868 GROOVY-10686: Additional refactoring - a few more icons and context menus for AstBrowser
23dfc65868 is described below

commit 23dfc658680b60f9fa763ed7ffc01bb9e2df265c
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Jul 14 00:10:58 2022 +1000

    GROOVY-10686: Additional refactoring - a few more icons and context menus for AstBrowser
---
 .../groovy/groovy/console/ui/AstBrowser.groovy     |  83 ++++++++++++++++++---
 .../resources/groovy/console/ui/icons/cup_go.png   | Bin 0 -> 780 bytes
 .../groovy/console/ui/icons/folder_add.png         | Bin 0 -> 668 bytes
 .../groovy/console/ui/icons/font_down.png          | Bin 0 -> 637 bytes
 .../resources/groovy/console/ui/icons/font_up.png  | Bin 0 -> 628 bytes
 .../groovy/console/ui/icons/information.png        | Bin 0 -> 778 bytes
 .../groovy/console/ui/icons/package_add.png        | Bin 0 -> 899 bytes
 .../groovy/console/ui/icons/page_refresh.png       | Bin 0 -> 858 bytes
 .../groovy/console/ui/icons/page_white_go.png      | Bin 0 -> 612 bytes
 .../groovy/console/ui/icons/page_white_select.png  | Bin 0 -> 600 bytes
 .../groovy/console/ui/icons/page_white_stack.png   | Bin 0 -> 317 bytes
 .../resources/groovy/console/ui/icons/printer.png  | Bin 0 -> 731 bytes
 .../groovy/console/ui/icons/script_lightning.png   | Bin 0 -> 879 bytes
 13 files changed, 71 insertions(+), 12 deletions(-)

diff --git a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/AstBrowser.groovy b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/AstBrowser.groovy
index a73775fecb..3637f2216b 100644
--- a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/AstBrowser.groovy
+++ b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/AstBrowser.groovy
@@ -44,6 +44,8 @@ import javax.swing.tree.TreeNode
 import javax.swing.tree.TreeSelectionModel
 import java.awt.Cursor
 import java.awt.Font
+import java.awt.Toolkit
+import java.awt.datatransfer.StringSelection
 import java.awt.event.KeyEvent
 import java.awt.event.MouseAdapter
 import java.awt.event.MouseEvent
@@ -148,10 +150,19 @@ class AstBrowser {
                 }
                 menu(text: 'View', mnemonic: 'V') {
                     menuItem {
-                        action(name: 'Larger Font', closure: this.&largerFont, mnemonic: 'L', accelerator: shortcut('shift L'))
+                        action(
+                                name: 'Larger Font',
+                                closure: this.&largerFont,
+                                mnemonic: 'L',
+                                smallIcon: imageIcon(resource: 'icons/font_up.png', class: this),
+                                accelerator: shortcut('shift L'))
                     }
                     menuItem {
-                        action(name: 'Smaller Font', closure: this.&smallerFont, mnemonic: 'S', accelerator: shortcut('shift S'))
+                        action(name: 'Smaller Font',
+                                closure: this.&smallerFont,
+                                mnemonic: 'S',
+                                smallIcon: imageIcon(resource: 'icons/font_down.png', class: this),
+                                accelerator: shortcut('shift S'))
                     }
                     menuItem {
                         refreshAction = action(
@@ -169,7 +180,7 @@ class AstBrowser {
                 menu(text: 'Help', mnemonic: 'H') {
                     menuItem { action(
                             name: 'About',
-                            closure: this.&showAbout,
+                            closure: this.&aboutAction,
                             smallIcon: imageIcon(resource: 'icons/information.png', class: this),
                             mnemonic: 'A')
                     }
@@ -225,7 +236,7 @@ class AstBrowser {
                                 getColumn(1).preferredWidth = 400
                                 getColumn(2).preferredWidth = 100
                             }
-                            propertyTable.addMouseListener(makeClickAdapter(propertyTable, 3) { row ->
+                            propertyTable.addMouseListener(mouseListener(3) { row ->
                                 'Browsing ' + jTree.lastSelectedPathComponent.userObject + ": " + propertyTable.model.getValueAt(row, 0)
                             })
                             propertyTable.setDefaultEditor(Object, null)
@@ -345,17 +356,44 @@ class AstBrowser {
         return sw.toString()
     }
 
-    def makeClickAdapter(table, int valueCol, Closure pathClosure) {
+    def mouseListener(int valueCol, Closure pathClosure) {
+        def outer = this
         new MouseAdapter() {
             void mouseClicked(MouseEvent e) {
+                def table = e.source
                 if (e.clickCount == 2) {
-                    def selectedRow = table.selectedRow
-                    if (selectedRow != -1) {
-                        def value = table.model.getValueAt(selectedRow, valueCol)
-                        if (value != null) {
-                            ObjectBrowser.inspect(value, pathClosure(selectedRow))
-                        }
+                    launch(table, valueCol, pathClosure)
+                }
+            }
+
+            void mouseReleased(MouseEvent e) {
+                def table = e.source
+                int r = table.rowAtPoint(e.point)
+                if (r >= 0 && r < table.rowCount) {
+                    table.setRowSelectionInterval(r, r)
+                } else {
+                    table.clearSelection()
+                }
+
+                if (table.selectedRow < 0) return
+                if (e.isPopupTrigger()) {
+                    def popup = swing.popupMenu {
+                        menuItem(action(
+                                name: 'Copy',
+                                closure: outer.&copyAction.curry(table, e),
+                                mnemonic: 'C',
+                                accelerator: shortcut('C'),
+                                smallIcon: imageIcon(resource: 'icons/page_copy.png', class: this),
+                                shortDescription: 'Copy'
+                        ))
+                        menuItem(action(
+                                name: 'Browse',
+                                closure: outer.&launchAction.curry(table, valueCol, pathClosure),
+                                smallIcon: imageIcon(resource: 'icons/page_white_go.png', class: this),
+                                shortDescription: 'Browse'
+                        ))
                     }
+                    popup.show(e.component, e.x, e.y)
                 }
             }
         }
@@ -404,7 +442,28 @@ class AstBrowser {
         propertyTable.rowHeight = newFontSize + 2
     }
 
-    void showAbout(EventObject evt) {
+    void launch(table, valueCol, pathClosure) {
+        def selectedRow = table.selectedRow
+        if (selectedRow != -1) {
+            def value = table.model.getValueAt(selectedRow, valueCol)
+            if (value != null) {
+                ObjectBrowser.inspect(value, pathClosure(selectedRow))
+            }
+        }
+    }
+
+    void launchAction(table, valueCol, pathClosure, EventObject evt) {
+        launch(table, valueCol, pathClosure)
+    }
+
+    void copyAction(table, MouseEvent me, EventObject evt) {
+        def toolTipText = table.getToolTipText(me)
+        if (toolTipText) {
+            Toolkit.defaultToolkit.systemClipboard.setContents(new StringSelection(toolTipText), null)
+        }
+    }
+
+    void aboutAction(EventObject evt) {
         def pane = swing.optionPane()
         def version = GroovySystem.version
         pane.setMessage('An interactive GUI to explore AST capabilities\nVersion ' + version)
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/cup_go.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/cup_go.png
new file mode 100644
index 0000000000..9527efbe40
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/cup_go.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/folder_add.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/folder_add.png
new file mode 100644
index 0000000000..529fe8fe04
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/folder_add.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/font_down.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/font_down.png
new file mode 100644
index 0000000000..fcafd5e0f8
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/font_down.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/font_up.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/font_up.png
new file mode 100644
index 0000000000..16e7b81fec
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/font_up.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/information.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/information.png
new file mode 100644
index 0000000000..12cd1aef90
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/information.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/package_add.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/package_add.png
new file mode 100644
index 0000000000..9c8a9da4ae
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/package_add.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_refresh.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_refresh.png
new file mode 100644
index 0000000000..cf347c7d46
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_refresh.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_white_go.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_white_go.png
new file mode 100644
index 0000000000..7e62a924bc
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_white_go.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_white_select.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_white_select.png
new file mode 100644
index 0000000000..9c95a33a62
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_white_select.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_white_stack.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_white_stack.png
new file mode 100644
index 0000000000..44084add79
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/page_white_stack.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/printer.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/printer.png
new file mode 100644
index 0000000000..a350d18715
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/printer.png differ
diff --git a/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/script_lightning.png b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/script_lightning.png
new file mode 100644
index 0000000000..b3fa18ce29
Binary files /dev/null and b/subprojects/groovy-console/src/main/resources/groovy/console/ui/icons/script_lightning.png differ