diff --git a/CHANGELOG.md b/CHANGELOG.md index b412ef2..2652ba8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Added - Migrate to Gradle Provider API improving configuration cache compatibility - Example code - `FrameStateListener` application listener +- Example code - `MyToolWindowFactory` tool window basic implementation ### Changed - Update `platformVersion` to `2022.1.4` diff --git a/src/main/kotlin/org/jetbrains/plugins/template/services/MyProjectService.kt b/src/main/kotlin/org/jetbrains/plugins/template/services/MyProjectService.kt index 06779f4..afa770f 100644 --- a/src/main/kotlin/org/jetbrains/plugins/template/services/MyProjectService.kt +++ b/src/main/kotlin/org/jetbrains/plugins/template/services/MyProjectService.kt @@ -10,13 +10,8 @@ class MyProjectService(project: Project) { init { thisLogger().info(MyBundle.message("projectService", project.name)) - - System.getenv("CI") - ?: TODO("Don't forget to remove all non-needed sample code files with their corresponding registration entries in `plugin.xml`.") + thisLogger().warn("Don't forget to remove all non-needed sample code files with their corresponding registration entries in `plugin.xml`.") } - /** - * Chosen by fair dice roll, guaranteed to be random. - */ - fun getRandomNumber() = 4 + fun getRandomNumber() = (1..100).random() } diff --git a/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/MyToolWindowFactory.kt b/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/MyToolWindowFactory.kt new file mode 100644 index 0000000..d5076b5 --- /dev/null +++ b/src/main/kotlin/org/jetbrains/plugins/template/toolWindow/MyToolWindowFactory.kt @@ -0,0 +1,47 @@ +package org.jetbrains.plugins.template.toolWindow + +import com.intellij.openapi.components.service +import com.intellij.openapi.diagnostic.thisLogger +import com.intellij.openapi.project.Project +import com.intellij.openapi.wm.ToolWindow +import com.intellij.openapi.wm.ToolWindowFactory +import com.intellij.ui.components.JBLabel +import com.intellij.ui.components.JBPanel +import com.intellij.ui.content.ContentFactory +import org.jetbrains.plugins.template.MyBundle +import org.jetbrains.plugins.template.services.MyProjectService +import javax.swing.JButton + + +class MyToolWindowFactory : ToolWindowFactory { + + init { + thisLogger().warn("Don't forget to remove all non-needed sample code files with their corresponding registration entries in `plugin.xml`.") + } + + private val contentFactory = ContentFactory.SERVICE.getInstance() + + override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) { + val myToolWindow = MyToolWindow(toolWindow) + val content = contentFactory.createContent(myToolWindow.getContent(), null, false) + toolWindow.contentManager.addContent(content) + } + + override fun shouldBeAvailable(project: Project) = true + + class MyToolWindow(toolWindow: ToolWindow) { + + private val service = toolWindow.project.service() + + fun getContent() = JBPanel>().apply { + val label = JBLabel(MyBundle.message("randomLabel", "?")) + + add(label) + add(JButton(MyBundle.message("shuffle")).apply { + addActionListener { + label.text = MyBundle.message("randomLabel", service.getRandomNumber()) + } + }) + } + } +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 1f0a69e..435701b 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -8,8 +8,11 @@ messages.MyBundle + + + + - + diff --git a/src/main/resources/messages/MyBundle.properties b/src/main/resources/messages/MyBundle.properties index 78dbb24..9fb16d0 100644 --- a/src/main/resources/messages/MyBundle.properties +++ b/src/main/resources/messages/MyBundle.properties @@ -1,3 +1,4 @@ name=My Plugin -applicationService=Application service projectService=Project service: {0} +randomLabel=The random number is: {0} +shuffle=Shuffle diff --git a/src/test/kotlin/org/jetbrains/plugins/template/MyPluginTest.kt b/src/test/kotlin/org/jetbrains/plugins/template/MyPluginTest.kt index ecbab8c..3945372 100644 --- a/src/test/kotlin/org/jetbrains/plugins/template/MyPluginTest.kt +++ b/src/test/kotlin/org/jetbrains/plugins/template/MyPluginTest.kt @@ -32,7 +32,7 @@ class MyPluginTest : BasePlatformTestCase() { fun testProjectService() { val projectService = project.service() - assertEquals(4, projectService.getRandomNumber()) + assertNotSame(projectService.getRandomNumber(), projectService.getRandomNumber()) } override fun getTestDataPath() = "src/test/testData/rename"