1
1
package com.github.mohamead.spiderlog.plugin.ui
2
2
3
3
import com.github.mohamead.spiderlog.plugin.setting.SettingState
4
- import com.github.mohamead.spiderlog.plugin.util.getActionGroup
5
4
import com.intellij.icons.AllIcons
6
5
import com.intellij.openapi.actionSystem.ActionManager
7
6
import com.intellij.openapi.actionSystem.ActionToolbar
7
+ import com.intellij.openapi.actionSystem.DefaultActionGroup
8
8
import com.intellij.openapi.ide.CopyPasteManager
9
- import com.intellij.openapi.project.DumbAware
10
9
import com.intellij.openapi.ui.JBMenuItem
11
10
import com.intellij.openapi.ui.JBPopupMenu
12
11
import com.intellij.openapi.ui.SimpleToolWindowPanel
13
- import com.intellij.ui.components.JBScrollPane
14
12
import com.intellij.ui.table.JBTable
15
13
import java.awt.BorderLayout
16
14
import java.awt.Font
17
- import java.awt.Robot
18
15
import java.awt.datatransfer.StringSelection
19
- import java.awt.event.KeyEvent
20
- import javax.swing.JProgressBar
21
16
22
- internal class SpiderlogToolWindowPanel : SimpleToolWindowPanel (false ), DumbAware {
17
+ internal abstract class BaseSpiderlogPanel : SimpleToolWindowPanel (false ) {
23
18
24
- internal val table: JBTable
25
- internal val progressBar: JProgressBar
26
-
27
- init {
28
- this .toolbar = buildToolbar().component
29
- this .table = buildTable()
30
- this .progressBar = JProgressBar ()
31
- val panel = buildPanel().apply {
32
- add(progressBar)
33
- add(JBScrollPane (table))
34
- }
35
- this .add(panel)
36
- }
37
-
38
- private fun buildToolbar (): ActionToolbar {
19
+ protected fun buildToolbar (defaultActionGroup : DefaultActionGroup ): ActionToolbar {
39
20
return ActionManager .getInstance()
40
- .createActionToolbar(" Spiderlog Navigator Toolbar" , getActionGroup( " Spiderlog.NavigatorToolbar " ) , false )
21
+ .createActionToolbar(" Spiderlog Navigator Toolbar" , defaultActionGroup , false )
41
22
.apply {
42
23
layoutPolicy = ActionToolbar .AUTO_LAYOUT_POLICY
43
24
adjustTheSameSize(true )
44
25
setShowSeparatorTitles(true )
45
- targetComponent = this @SpiderlogToolWindowPanel
26
+ targetComponent = this @BaseSpiderlogPanel
46
27
}
47
28
}
48
29
49
- private fun buildPanel (): SimpleToolWindowPanel {
30
+ protected fun buildPanel (): SimpleToolWindowPanel {
50
31
return SimpleToolWindowPanel (true , true ).apply {
51
32
layout = BorderLayout ()
52
33
}
53
34
}
54
35
55
- private fun buildTable (): JBTable {
36
+ protected fun buildTable (): JBTable {
56
37
return JBTable ().apply {
57
38
font = buildFont()
58
- componentPopupMenu = buildPopupMenu()
39
+ componentPopupMenu = buildPopupMenu(this )
59
40
tableHeader.reorderingAllowed = false
60
41
tableHeader.resizingAllowed = false
61
42
inheritsPopupMenu = true
@@ -64,29 +45,28 @@ internal class SpiderlogToolWindowPanel : SimpleToolWindowPanel(false), DumbAwar
64
45
}
65
46
}
66
47
67
- private fun buildFont (): Font {
48
+ protected fun buildFont (): Font {
68
49
val state = SettingState ().getInstance().state
69
50
return Font (state.fontName, state.fontStyle.index, state.fontSize)
70
51
}
71
52
72
- private fun buildPopupMenu (): JBPopupMenu {
53
+ private fun buildPopupMenu (table : JBTable ): JBPopupMenu {
73
54
return JBPopupMenu ().apply {
74
- val popupMenuCopyMenuItem = JBMenuItem (" Copy" , AllIcons .Actions .Copy ).apply {
55
+ val copyMenuItem = JBMenuItem (" Copy" , AllIcons .Actions .Copy ).apply {
75
56
this .addActionListener {
76
- val selectedRow = table.selectedRows
57
+ val selectedRows = table.selectedRows
77
58
val selectedColumns = table.selectedColumns
78
- if (selectedRow.isNotEmpty() && selectedColumns.isNotEmpty()) {
79
-
59
+ if (selectedRows.isNotEmpty() && selectedColumns.isNotEmpty()) {
60
+ var textToCopy = " "
61
+ for (row in selectedRows) {
62
+ textToCopy + = table.getValueAt(row, 0 ).toString() + " \n "
63
+ }
64
+ CopyPasteManager .getInstance().setContents(StringSelection (textToCopy.trim().trimIndent()))
80
65
}
81
66
}
82
67
}
83
- this .add(popupMenuCopyMenuItem )
68
+ this .add(copyMenuItem )
84
69
}
85
70
}
86
71
87
- internal fun updateUi () {
88
- table.font = buildFont()
89
- table.updateUI()
90
- }
91
-
92
- }
72
+ }
0 commit comments