Skip to content

Commit e309b12

Browse files
committed
Clean misc
1 parent cbd6d4d commit e309b12

23 files changed

+212
-115
lines changed

Diff for: CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66

77
## [0.0.10] - 2024-10-16
88

9+
### Fixed
10+
- Copy value from table
11+
912
### Changed
13+
- Clean misc
1014
- Repo-name to spiderlog-plugin
1115
- PluginUntilBuild to 242.*
1216
- pluginSinceBuild to 233

Diff for: src/main/kotlin/com/github/mohamead/spiderlog/plugin/action/ClearAction.kt

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package com.github.mohamead.spiderlog.plugin.action
22

3+
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogPanel
34
import com.github.mohamead.spiderlog.plugin.util.clearContent
4-
import com.github.mohamead.spiderlog.plugin.util.getToolWindowPanel
55
import com.intellij.openapi.actionSystem.AnActionEvent
6+
import javax.swing.Icon
67
import javax.swing.table.DefaultTableModel
78

8-
internal class ClearAction : SpiderlogAction() {
9+
internal class ClearAction(val spiderlogPanel: SpiderlogPanel, override val icon: Icon?) : SpiderlogAction(icon) {
910

1011
override fun actionPerformed(e: AnActionEvent) {
11-
val table = getToolWindowPanel(e.project!!).table
12-
table.clearContent()
13-
if (table.model is DefaultTableModel) {
14-
val model = table.model as DefaultTableModel
15-
model.setColumnIdentifiers(arrayOf())
12+
spiderlogPanel.table.apply {
13+
clearContent()
14+
if (model is DefaultTableModel) {
15+
(model as DefaultTableModel).setColumnIdentifiers(arrayOf())
16+
}
1617
}
1718
}
1819

Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package com.github.mohamead.spiderlog.plugin.action
22

3+
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogPanel
34
import com.github.mohamead.spiderlog.plugin.util.LogTracer
4-
import com.github.mohamead.spiderlog.plugin.util.getToolWindowPanel
55
import com.intellij.openapi.actionSystem.AnActionEvent
66
import java.awt.EventQueue
77
import java.io.File
8+
import javax.swing.Icon
89
import javax.swing.table.DefaultTableModel
910

10-
internal class ForceRefreshAction : SpiderlogAction() {
11+
internal class ForceRefreshAction(val spiderlogPanel: SpiderlogPanel, override val icon: Icon?) : SpiderlogAction(icon) {
1112

1213
override fun actionPerformed(e: AnActionEvent) {
13-
val toolWindowPanel = getToolWindowPanel(e.project!!)
14-
val model = toolWindowPanel.table.model ?: return
14+
val model = spiderlogPanel.table.model ?: return
1515
val defaultTableModel = model as DefaultTableModel
1616
val filePath = defaultTableModel.getColumnName(0) ?: return
1717
val file = File(filePath)
18-
EventQueue.invokeLater { LogTracer().display(toolWindowPanel, file) }
18+
EventQueue.invokeLater { LogTracer().display(spiderlogPanel, file) }
1919
}
2020

2121
}
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package com.github.mohamead.spiderlog.plugin.action
22

3+
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogPanel
34
import com.github.mohamead.spiderlog.plugin.util.LogTracer
45
import com.github.mohamead.spiderlog.plugin.util.clearContent
5-
import com.github.mohamead.spiderlog.plugin.util.getToolWindowPanel
66
import com.github.mohamead.spiderlog.plugin.util.openPath
77
import com.github.mohamead.spiderlog.plugin.util.validExtension
88
import com.intellij.openapi.actionSystem.AnActionEvent
99
import java.awt.EventQueue
10+
import javax.swing.Icon
1011

11-
internal class OpenFileAction : SpiderlogAction() {
12+
internal class OpenFileAction(val spiderlogPanel: SpiderlogPanel, override val icon: Icon?) : SpiderlogAction(icon) {
1213

1314
override fun actionPerformed(e: AnActionEvent) {
1415
val extension = validExtension.joinToString("|")
1516
val filePath = openPath(e.project!!, "Open file", "Select a file (${extension})") ?: return
16-
val toolWindowPanel = getToolWindowPanel(e.project!!)
17-
toolWindowPanel.table.clearContent()
18-
EventQueue.invokeLater { LogTracer().display(toolWindowPanel, filePath.toFile()) }
17+
spiderlogPanel.table.clearContent()
18+
EventQueue.invokeLater { LogTracer().display(spiderlogPanel, filePath.toFile()) }
1919
}
2020

2121
}

Diff for: src/main/kotlin/com/github/mohamead/spiderlog/plugin/action/ScrollAction.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.github.mohamead.spiderlog.plugin.action
22

33
import com.github.mohamead.spiderlog.plugin.enum.Direction
4-
import com.github.mohamead.spiderlog.plugin.util.getToolWindowPanel
5-
import com.intellij.openapi.project.Project
4+
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogPanel
5+
import javax.swing.Icon
66

7-
internal abstract class ScrollAction : SpiderlogAction() {
7+
internal abstract class ScrollAction(open val spiderlogPanel: SpiderlogPanel, override val icon: Icon?) : SpiderlogAction(icon) {
88

9-
protected fun scrollTo(project: Project, direction: Direction) {
10-
val table = getToolWindowPanel(project).table
9+
protected fun scrollTo(direction: Direction) {
10+
val table = spiderlogPanel.table
1111
val rowIndex = when (direction) {
1212
Direction.END -> table.rowCount - 1
1313
Direction.TOP -> 0
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.github.mohamead.spiderlog.plugin.action
22

33
import com.github.mohamead.spiderlog.plugin.enum.Direction
4+
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogPanel
45
import com.intellij.openapi.actionSystem.AnActionEvent
6+
import javax.swing.Icon
57

6-
internal class ScrollToEndAction : ScrollAction() {
8+
internal class ScrollToEndAction(spiderlogPanel: SpiderlogPanel, icon: Icon) : ScrollAction(spiderlogPanel, icon) {
79

8-
override fun actionPerformed(e: AnActionEvent) = scrollTo(e.project!!, Direction.END)
10+
override fun actionPerformed(e: AnActionEvent) = scrollTo(Direction.END)
911

1012
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.github.mohamead.spiderlog.plugin.action
22

33
import com.github.mohamead.spiderlog.plugin.enum.Direction
4+
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogPanel
45
import com.intellij.openapi.actionSystem.AnActionEvent
6+
import javax.swing.Icon
57

6-
internal class ScrollToTopAction : ScrollAction() {
8+
internal class ScrollToTopAction(spiderlogPanel: SpiderlogPanel, icon: Icon) : ScrollAction(spiderlogPanel, icon) {
79

8-
override fun actionPerformed(e: AnActionEvent) = scrollTo(e.project!!, Direction.TOP)
10+
override fun actionPerformed(e: AnActionEvent) = scrollTo(Direction.TOP)
911

1012
}

Diff for: src/main/kotlin/com/github/mohamead/spiderlog/plugin/action/SpiderlogAction.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ package com.github.mohamead.spiderlog.plugin.action
33
import com.intellij.openapi.actionSystem.ActionUpdateThread
44
import com.intellij.openapi.actionSystem.AnAction
55
import com.intellij.openapi.project.DumbAware
6+
import javax.swing.Icon
67

7-
internal abstract class SpiderlogAction : AnAction(), DumbAware {
8+
internal abstract class SpiderlogAction(open val icon: Icon? = null) : AnAction(icon), DumbAware {
89

910
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
1011

Diff for: src/main/kotlin/com/github/mohamead/spiderlog/plugin/enum/FontName.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ internal enum class FontName(val value: String, val index: Int) {
88
companion object {
99

1010
internal fun findByIndex(index: Int): FontName {
11-
return values().firstOrNull { it.index == index }
11+
return entries.firstOrNull { it.index == index }
1212
?: throw NoSuchElementException("FontName with index '$index' not found.")
1313
}
1414

Diff for: src/main/kotlin/com/github/mohamead/spiderlog/plugin/enum/FontStyle.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ internal enum class FontStyle(val index: Int) {
88
companion object {
99

1010
internal fun findByIndex(index: Int): FontStyle {
11-
return values().firstOrNull { it.index == index }
11+
return entries.firstOrNull { it.index == index }
1212
?: throw NoSuchElementException("FontStyle with index '$index' not found.")
1313
}
1414

Diff for: src/main/kotlin/com/github/mohamead/spiderlog/plugin/icons/SpiderlogIcons.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ import com.intellij.openapi.util.IconLoader
55
internal object SpiderlogIcons {
66

77
@JvmField
8-
val spiderToolWindowIcon = IconLoader.getIcon("/icons/toolWindowIcon.svg", javaClass)
8+
val spiderlog = IconLoader.getIcon("/icons/spiderlog.svg", javaClass)
99

1010
}
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,42 @@
11
package com.github.mohamead.spiderlog.plugin.ui
22

33
import com.github.mohamead.spiderlog.plugin.setting.SettingState
4-
import com.github.mohamead.spiderlog.plugin.util.getActionGroup
54
import com.intellij.icons.AllIcons
65
import com.intellij.openapi.actionSystem.ActionManager
76
import com.intellij.openapi.actionSystem.ActionToolbar
7+
import com.intellij.openapi.actionSystem.DefaultActionGroup
88
import com.intellij.openapi.ide.CopyPasteManager
9-
import com.intellij.openapi.project.DumbAware
109
import com.intellij.openapi.ui.JBMenuItem
1110
import com.intellij.openapi.ui.JBPopupMenu
1211
import com.intellij.openapi.ui.SimpleToolWindowPanel
13-
import com.intellij.ui.components.JBScrollPane
1412
import com.intellij.ui.table.JBTable
1513
import java.awt.BorderLayout
1614
import java.awt.Font
17-
import java.awt.Robot
1815
import java.awt.datatransfer.StringSelection
19-
import java.awt.event.KeyEvent
20-
import javax.swing.JProgressBar
2116

22-
internal class SpiderlogToolWindowPanel : SimpleToolWindowPanel(false), DumbAware {
17+
internal abstract class BaseSpiderlogPanel : SimpleToolWindowPanel(false) {
2318

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 {
3920
return ActionManager.getInstance()
40-
.createActionToolbar("Spiderlog Navigator Toolbar", getActionGroup("Spiderlog.NavigatorToolbar"), false)
21+
.createActionToolbar("Spiderlog Navigator Toolbar", defaultActionGroup, false)
4122
.apply {
4223
layoutPolicy = ActionToolbar.AUTO_LAYOUT_POLICY
4324
adjustTheSameSize(true)
4425
setShowSeparatorTitles(true)
45-
targetComponent = this@SpiderlogToolWindowPanel
26+
targetComponent = this@BaseSpiderlogPanel
4627
}
4728
}
4829

49-
private fun buildPanel(): SimpleToolWindowPanel {
30+
protected fun buildPanel(): SimpleToolWindowPanel {
5031
return SimpleToolWindowPanel(true, true).apply {
5132
layout = BorderLayout()
5233
}
5334
}
5435

55-
private fun buildTable(): JBTable {
36+
protected fun buildTable(): JBTable {
5637
return JBTable().apply {
5738
font = buildFont()
58-
componentPopupMenu = buildPopupMenu()
39+
componentPopupMenu = buildPopupMenu(this)
5940
tableHeader.reorderingAllowed = false
6041
tableHeader.resizingAllowed = false
6142
inheritsPopupMenu = true
@@ -64,29 +45,28 @@ internal class SpiderlogToolWindowPanel : SimpleToolWindowPanel(false), DumbAwar
6445
}
6546
}
6647

67-
private fun buildFont(): Font {
48+
protected fun buildFont(): Font {
6849
val state = SettingState().getInstance().state
6950
return Font(state.fontName, state.fontStyle.index, state.fontSize)
7051
}
7152

72-
private fun buildPopupMenu(): JBPopupMenu {
53+
private fun buildPopupMenu(table: JBTable): JBPopupMenu {
7354
return JBPopupMenu().apply {
74-
val popupMenuCopyMenuItem = JBMenuItem("Copy", AllIcons.Actions.Copy).apply {
55+
val copyMenuItem = JBMenuItem("Copy", AllIcons.Actions.Copy).apply {
7556
this.addActionListener {
76-
val selectedRow = table.selectedRows
57+
val selectedRows = table.selectedRows
7758
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()))
8065
}
8166
}
8267
}
83-
this.add(popupMenuCopyMenuItem)
68+
this.add(copyMenuItem)
8469
}
8570
}
8671

87-
internal fun updateUi() {
88-
table.font = buildFont()
89-
table.updateUI()
90-
}
91-
92-
}
72+
}

Diff for: src/main/kotlin/com/github/mohamead/spiderlog/plugin/ui/SpiderlogToolWindowFactory.kt renamed to src/main/kotlin/com/github/mohamead/spiderlog/plugin/ui/SpiderlogFactory.kt

+2-3
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@ import com.intellij.openapi.wm.ToolWindowFactory
77
import com.intellij.ui.content.Content
88
import com.intellij.ui.content.ContentFactory
99

10-
internal class SpiderlogToolWindowFactory : ToolWindowFactory, DumbAware {
10+
internal class SpiderlogFactory : ToolWindowFactory, DumbAware {
1111

1212
override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
13-
val spiderlogToolWindowPanel = SpiderlogToolWindowPanel()
1413
val contentFactory: ContentFactory = ContentFactory.getInstance()
15-
val content: Content = contentFactory.createContent(spiderlogToolWindowPanel, "", false)
14+
val content: Content = contentFactory.createContent(SpiderlogPanel(), "", false)
1615
toolWindow.contentManager.addContent(content)
1716
}
1817

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.github.mohamead.spiderlog.plugin.ui
2+
3+
import com.github.mohamead.spiderlog.plugin.action.ClearAction
4+
import com.github.mohamead.spiderlog.plugin.action.ForceRefreshAction
5+
import com.github.mohamead.spiderlog.plugin.action.OpenFileAction
6+
import com.github.mohamead.spiderlog.plugin.action.ScrollToEndAction
7+
import com.github.mohamead.spiderlog.plugin.action.ScrollToTopAction
8+
import com.intellij.icons.AllIcons.Actions.AddFile
9+
import com.intellij.icons.AllIcons.Actions.ForceRefresh
10+
import com.intellij.icons.AllIcons.RunConfigurations.Scroll_down
11+
import com.intellij.icons.AllIcons.RunConfigurations.Scroll_up
12+
import com.intellij.icons.AllIcons.Vcs.Remove
13+
import com.intellij.openapi.actionSystem.DefaultActionGroup
14+
import com.intellij.ui.components.JBScrollPane
15+
import com.intellij.ui.table.JBTable
16+
import javax.swing.JProgressBar
17+
18+
internal class SpiderlogPanel : BaseSpiderlogPanel() {
19+
20+
internal val table: JBTable
21+
internal val progressBar: JProgressBar
22+
23+
init {
24+
val defaultActionGroup = DefaultActionGroup().apply {
25+
add(OpenFileAction(this@SpiderlogPanel, AddFile))
26+
add(ForceRefreshAction(this@SpiderlogPanel, ForceRefresh))
27+
add(ScrollToTopAction(this@SpiderlogPanel, Scroll_up))
28+
add(ScrollToEndAction(this@SpiderlogPanel, Scroll_down))
29+
add(ClearAction(this@SpiderlogPanel, Remove))
30+
}
31+
this.toolbar = buildToolbar(defaultActionGroup).component
32+
this.table = buildTable()
33+
this.progressBar = JProgressBar()
34+
val panel = buildPanel().apply {
35+
add(progressBar)
36+
add(JBScrollPane(table))
37+
}
38+
this.add(panel)
39+
}
40+
41+
internal fun updateUi() {
42+
table.font = buildFont()
43+
table.updateUI()
44+
}
45+
46+
}

Diff for: src/main/kotlin/com/github/mohamead/spiderlog/plugin/util/LogTracer.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
package com.github.mohamead.spiderlog.plugin.util
22

3-
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogToolWindowPanel
3+
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogPanel
44
import java.beans.PropertyChangeEvent
55
import java.io.File
66
import javax.swing.SwingWorker
77
import javax.swing.table.DefaultTableModel
88

99
internal class LogTracer {
1010

11-
internal fun display(toolWindowPanel: SpiderlogToolWindowPanel, file: File) {
11+
internal fun display(spiderlogPanel: SpiderlogPanel, file: File) {
1212
val model = DefaultTableModel()
13-
toolWindowPanel.table.model = model
13+
spiderlogPanel.table.model = model
1414
val worker = LogWorker(file, model)
1515
worker.addPropertyChangeListener { e: PropertyChangeEvent ->
1616
val state: SwingWorker.StateValue = e.newValue as SwingWorker.StateValue
17-
toolWindowPanel.progressBar.isIndeterminate = state == SwingWorker.StateValue.STARTED
17+
spiderlogPanel.progressBar.isIndeterminate = state == SwingWorker.StateValue.STARTED
1818
}
1919
worker.execute()
2020
}

Diff for: src/main/kotlin/com/github/mohamead/spiderlog/plugin/util/Util.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.mohamead.spiderlog.plugin.util
22

3-
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogToolWindowPanel
3+
import com.github.mohamead.spiderlog.plugin.ui.SpiderlogPanel
44
import com.intellij.openapi.actionSystem.ActionManager
55
import com.intellij.openapi.actionSystem.DefaultActionGroup
66
import com.intellij.openapi.fileChooser.FileChooser
@@ -30,8 +30,8 @@ internal fun openPath(project: Project, title: String, description: String): Pat
3030
return file?.toNioPath()
3131
}
3232

33-
internal fun getToolWindowPanel(project: Project): SpiderlogToolWindowPanel {
34-
return getToolWindow(project).contentManager.getContent(0)!!.component as SpiderlogToolWindowPanel
33+
internal fun getToolWindowPanel(project: Project): SpiderlogPanel {
34+
return getToolWindow(project).contentManager.getContent(0)!!.component as SpiderlogPanel
3535
}
3636

3737
internal fun getToolWindow(project: Project): ToolWindow {

0 commit comments

Comments
 (0)