Skip to content

Commit f6f77f6

Browse files
committed
make the link in the table clickable
1 parent d465e37 commit f6f77f6

File tree

2 files changed

+43
-66
lines changed

2 files changed

+43
-66
lines changed

src/main/kotlin/com/github/adrienpessu/sarifviewer/toolWindow/SarifViewerWindowFactory.kt

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,14 @@ import git4idea.repo.GitRepository
4343
import git4idea.repo.GitRepositoryChangeListener
4444
import git4idea.repo.GitRepositoryManager
4545
import java.awt.Component
46+
import java.awt.Cursor
47+
import java.awt.Desktop
4648
import java.awt.Dimension
4749
import java.awt.event.ActionListener
50+
import java.awt.event.MouseAdapter
51+
import java.awt.event.MouseEvent
4852
import java.io.File
53+
import java.net.URI
4954
import java.nio.charset.Charset
5055
import java.nio.file.Files
5156
import java.nio.file.Path
@@ -55,6 +60,7 @@ import javax.swing.event.HyperlinkListener
5560
import javax.swing.event.TreeSelectionEvent
5661
import javax.swing.event.TreeSelectionListener
5762
import javax.swing.filechooser.FileNameExtensionFilter
63+
import javax.swing.table.DefaultTableCellRenderer
5864
import javax.swing.table.DefaultTableModel
5965
import javax.swing.text.html.HTMLEditorKit
6066
import javax.swing.tree.DefaultMutableTreeNode
@@ -105,6 +111,7 @@ class SarifViewerWindowFactory : ToolWindowFactory {
105111
private var myList = com.intellij.ui.treeStructure.Tree()
106112
private var comboBranchPR = ComboBox(arrayOf(BranchItemComboBox(0, "main", "", "")))
107113
private val tableInfos = JBTable(DefaultTableModel(arrayOf<Any>("Property", "Value"), 0))
114+
private val tableSteps = JBTable(DefaultTableModel(arrayOf<Any>("Path"), 0))
108115
private val steps = JEditorPane()
109116
private val errorField = JLabel("Error message here ")
110117
private val errorToolbar = JToolBar("", JToolBar.HORIZONTAL)
@@ -258,14 +265,6 @@ class SarifViewerWindowFactory : ToolWindowFactory {
258265
}
259266

260267
private fun JBPanel<JBPanel<*>>.buildSkeleton() {
261-
262-
// infos.addHyperlinkListener(object : HyperlinkListener {
263-
// override fun hyperlinkUpdate(hle: HyperlinkEvent?) {
264-
// if (HyperlinkEvent.EventType.ACTIVATED == hle?.eventType && hle?.description != null) {
265-
// Desktop.getDesktop().browse(URI(hle.description))
266-
// }
267-
// }
268-
// })
269268
steps.isEditable = false
270269
steps.addHyperlinkListener(object : HyperlinkListener {
271270
override fun hyperlinkUpdate(hle: HyperlinkEvent?) {
@@ -479,8 +478,6 @@ class SarifViewerWindowFactory : ToolWindowFactory {
479478
}
480479
}
481480
tableInfos.model = defaultTableModel
482-
// Set a custom cell renderer for the "Value" column
483-
tableInfos.columnModel.getColumn(1).setCellRenderer(UrlCellRenderer())
484481

485482
// Add some data
486483
defaultTableModel.addRow(arrayOf<Any>("Name", leaf.leafName))
@@ -489,7 +486,42 @@ class SarifViewerWindowFactory : ToolWindowFactory {
489486
defaultTableModel.addRow(arrayOf<Any>("Rule's description", leaf.ruleDescription))
490487
defaultTableModel.addRow(arrayOf<Any>("Location", leaf.location))
491488
defaultTableModel.addRow(arrayOf<Any>("GitHub alert number", leaf.githubAlertNumber))
492-
defaultTableModel.addRow(arrayOf<Any>("GitHub alert url", githubAlertUrl))
489+
defaultTableModel.addRow(arrayOf<Any>("GitHub alert url", "<a href=\"$githubAlertUrl\">$githubAlertUrl</a"))
490+
491+
tableInfos.setDefaultRenderer(Object::class.java, object : DefaultTableCellRenderer() {
492+
override fun getTableCellRendererComponent(
493+
table: JTable?,
494+
value: Any?,
495+
isSelected: Boolean,
496+
hasFocus: Boolean,
497+
row: Int,
498+
column: Int
499+
): Component {
500+
var c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column)
501+
if (row == tableInfos.rowCount - 1 && column == tableInfos.columnCount - 1) {
502+
val url = tableInfos.getValueAt(row, column).toString()
503+
c = JLabel("<html><a href='$url'>$url</a></html>")
504+
c.cursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)
505+
}
506+
return c
507+
}
508+
})
509+
510+
511+
tableInfos.addMouseListener(object : MouseAdapter() {
512+
override fun mouseClicked(e: MouseEvent) {
513+
val row = tableInfos.rowAtPoint(e.point)
514+
val column = tableInfos.columnAtPoint(e.point)
515+
if (row == tableInfos.rowCount - 1) {
516+
if (column == tableInfos.columnCount - 1) {
517+
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
518+
Desktop.getDesktop().browse(URI(githubAlertUrl))
519+
}
520+
}
521+
}
522+
}
523+
})
524+
493525
tableInfos.updateUI()
494526

495527
steps.read(leaf.steps.joinToString(" ", "<ul>", "</ul>") { step ->

src/main/kotlin/com/github/adrienpessu/sarifviewer/toolWindow/UrlCellRenderer.kt

Lines changed: 0 additions & 55 deletions
This file was deleted.

0 commit comments

Comments
 (0)