@@ -43,9 +43,14 @@ import git4idea.repo.GitRepository
4343import git4idea.repo.GitRepositoryChangeListener
4444import git4idea.repo.GitRepositoryManager
4545import java.awt.Component
46+ import java.awt.Cursor
47+ import java.awt.Desktop
4648import java.awt.Dimension
4749import java.awt.event.ActionListener
50+ import java.awt.event.MouseAdapter
51+ import java.awt.event.MouseEvent
4852import java.io.File
53+ import java.net.URI
4954import java.nio.charset.Charset
5055import java.nio.file.Files
5156import java.nio.file.Path
@@ -55,6 +60,7 @@ import javax.swing.event.HyperlinkListener
5560import javax.swing.event.TreeSelectionEvent
5661import javax.swing.event.TreeSelectionListener
5762import javax.swing.filechooser.FileNameExtensionFilter
63+ import javax.swing.table.DefaultTableCellRenderer
5864import javax.swing.table.DefaultTableModel
5965import javax.swing.text.html.HTMLEditorKit
6066import 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 ->
0 commit comments