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:17:08 UTC
[groovy] 03/03: 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 GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 1c75ff59c015288faa26f3fb1e856e1d27c8bf21
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.©Action.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