From 90c5f43113e425c9552db0d13ebd6a9cd5de903a Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Fri, 8 Nov 2024 00:12:05 +0800 Subject: [PATCH 01/15] [Feat] right click the mouse and the toolbar will display the corresponding icon --- .../codesnapidea/actions/PopupDialogAction.kt | 54 +++++++++++++++++++ src/main/kotlin/icons/SdkIcons.kt | 17 ++++++ src/main/resources/META-INF/plugin.xml | 30 +++++++++-- src/main/resources/icons/sdk_16.svg | 7 +++ 4 files changed, 103 insertions(+), 5 deletions(-) create mode 100644 src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt create mode 100644 src/main/kotlin/icons/SdkIcons.kt create mode 100644 src/main/resources/icons/sdk_16.svg diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt b/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt new file mode 100644 index 0000000..d1bcf86 --- /dev/null +++ b/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt @@ -0,0 +1,54 @@ +package com.github.raoe.codesnapidea.actions + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.Messages +import javax.swing.Icon + +/** + * ClassName:PopupDialogAction +Package:com.github.raoe.codesnapidea.actions +@DATE:06/11/2024 10:34 pm +@Author:XuYuanFeng +TODO: + */ + +class PopupDialogAction: AnAction { + constructor() : super() { + // This default constructor is used by the IntelliJ Platform framework to instantiate this class based on plugin.xml + // declarations. Only needed in `PopupDialogAction` class because a second constructor is overridden. + } + + constructor(text: String?, description: String?, icon: Icon?) : super(text, description, icon) { + // This constructor is used to support dynamically added menu actions. + // It sets the text, description to be displayed for the menu item. + // Otherwise, the default AnAction constructor is used by the IntelliJ Platform. + } + + override fun actionPerformed(event: AnActionEvent) { + // Using the event, create and show a dialog + val currentProject: Project? = event.project + val message = StringBuilder(event.presentation.text + " Selected123!") + // If an element is selected in the editor, add info about it. + val selectedElement = event.getData(CommonDataKeys.NAVIGATABLE) + if (selectedElement != null) { + message.append("\nSelected Element: ").append(selectedElement) + } + val title = event.presentation.description + Messages.showMessageDialog( + currentProject, + message.toString(), + title, + Messages.getInformationIcon() + ) + } + + override fun update(event: AnActionEvent) { + // Set the availability based on whether a project is open + val project: Project? = event.project + event.presentation.isEnabledAndVisible = project != null + } + +} \ No newline at end of file diff --git a/src/main/kotlin/icons/SdkIcons.kt b/src/main/kotlin/icons/SdkIcons.kt new file mode 100644 index 0000000..d2bfe96 --- /dev/null +++ b/src/main/kotlin/icons/SdkIcons.kt @@ -0,0 +1,17 @@ +package icons + +import com.intellij.openapi.util.IconLoader +import javax.swing.Icon + +/** +* ClassName:SdkIcons + Package:com.github.raoe.codesnapidea.icons + @DATE:06/11/2024 10:33 pm + @Author:XuYuanFeng + TODO: + */ + +object SdkIcons { + @JvmField + val Sdk_default_icon: Icon = IconLoader.getIcon("/icons/sdk_16.svg", SdkIcons::class.java) +} \ No newline at end of file diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index a8a4acb..871f8cf 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -2,17 +2,37 @@ com.github.raoe.codesnapidea CodeSnap.idea - raoe - + + xuyuanfeng + com.intellij.modules.platform - messages.MyBundle - - + + + + + + + + + + + + + + + + diff --git a/src/main/resources/icons/sdk_16.svg b/src/main/resources/icons/sdk_16.svg new file mode 100644 index 0000000..011462b --- /dev/null +++ b/src/main/resources/icons/sdk_16.svg @@ -0,0 +1,7 @@ + + + + + + + From 3c304bdff41d51ef8d37fa839c05835924b1a77c Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Fri, 8 Nov 2024 00:21:13 +0800 Subject: [PATCH 02/15] [Feat] right click and get code Text --- .../codesnapidea/actions/PopupDialogAction.kt | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt b/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt index d1bcf86..a4ec0a8 100644 --- a/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt +++ b/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt @@ -3,6 +3,7 @@ package com.github.raoe.codesnapidea.actions import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.openapi.ui.Messages import javax.swing.Icon @@ -28,20 +29,22 @@ class PopupDialogAction: AnAction { } override fun actionPerformed(event: AnActionEvent) { - // Using the event, create and show a dialog - val currentProject: Project? = event.project - val message = StringBuilder(event.presentation.text + " Selected123!") - // If an element is selected in the editor, add info about it. - val selectedElement = event.getData(CommonDataKeys.NAVIGATABLE) - if (selectedElement != null) { - message.append("\nSelected Element: ").append(selectedElement) + val editor: Editor? = event.getData(CommonDataKeys.EDITOR) + val project: Project? = event.getData(CommonDataKeys.PROJECT) + val selectedText: String? = editor?.selectionModel?.selectedText + val message = StringBuilder() + if (!selectedText.isNullOrEmpty()) { + message.append(selectedText).append(" Selected123!") + } else { + message.append("No text selected123!") } - val title = event.presentation.description + val title = "Selection Info" + val icon: Icon = Messages.getInformationIcon() Messages.showMessageDialog( - currentProject, + project, message.toString(), title, - Messages.getInformationIcon() + icon ) } From c3b579caab09b5cb51eea602fb573887c9a43290 Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Sun, 10 Nov 2024 15:47:20 +0800 Subject: [PATCH 03/15] [Feat] Code Snap Drop-down tab option feature development --- .../com/github/raoe/codesnapidea/MyBundle.kt | 1 - .../actions/DefaultCodeSnapAction.kt | 41 +++++++++++++++++++ .../codesnapidea/actions/JpgCodeSnapAction.kt | 40 ++++++++++++++++++ .../codesnapidea/actions/PopupDialogAction.kt | 5 ++- .../codesnapidea/actions/SvgCodeSnapAction.kt | 40 ++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 14 ++++--- 6 files changed, 132 insertions(+), 9 deletions(-) create mode 100644 src/main/kotlin/com/github/raoe/codesnapidea/actions/DefaultCodeSnapAction.kt create mode 100644 src/main/kotlin/com/github/raoe/codesnapidea/actions/JpgCodeSnapAction.kt create mode 100644 src/main/kotlin/com/github/raoe/codesnapidea/actions/SvgCodeSnapAction.kt diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/MyBundle.kt b/src/main/kotlin/com/github/raoe/codesnapidea/MyBundle.kt index 5603d17..0d7ec2f 100644 --- a/src/main/kotlin/com/github/raoe/codesnapidea/MyBundle.kt +++ b/src/main/kotlin/com/github/raoe/codesnapidea/MyBundle.kt @@ -6,7 +6,6 @@ import org.jetbrains.annotations.PropertyKey @NonNls private const val BUNDLE = "messages.MyBundle" -//just a test object MyBundle : DynamicBundle(BUNDLE) { @JvmStatic diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/actions/DefaultCodeSnapAction.kt b/src/main/kotlin/com/github/raoe/codesnapidea/actions/DefaultCodeSnapAction.kt new file mode 100644 index 0000000..4bad577 --- /dev/null +++ b/src/main/kotlin/com/github/raoe/codesnapidea/actions/DefaultCodeSnapAction.kt @@ -0,0 +1,41 @@ +package com.github.raoe.codesnapidea.actions +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.Messages +import javax.swing.Icon + +/** + * ClassName:DefaultCodeSnapAction +Package:com.github.raoe.codesnapidea.actions +@DATE:10/11/2024 3:13 pm +@Author:XuYuanFeng +TODO: + */ +class DefaultCodeSnapAction: AnAction() { + /** + * default codeSnap + */ + override fun actionPerformed(event: AnActionEvent) { + val editor: Editor? = event.getData(CommonDataKeys.EDITOR) + val project: Project? = event.getData(CommonDataKeys.PROJECT) + val selectedText: String? = editor?.selectionModel?.selectedText + val message = StringBuilder() + if (!selectedText.isNullOrEmpty()) { + message.append(selectedText).append(" Selected!Default") + // call the native function + } else { + message.append("No text selected!") + } + val title = "Selection Info" + val icon: Icon = Messages.getInformationIcon() + Messages.showMessageDialog( + project, + message.toString(), + title, + icon + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/actions/JpgCodeSnapAction.kt b/src/main/kotlin/com/github/raoe/codesnapidea/actions/JpgCodeSnapAction.kt new file mode 100644 index 0000000..ca30fd2 --- /dev/null +++ b/src/main/kotlin/com/github/raoe/codesnapidea/actions/JpgCodeSnapAction.kt @@ -0,0 +1,40 @@ +package com.github.raoe.codesnapidea.actions + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.Messages +import javax.swing.Icon + +/** + * ClassName:JpgCodeSnapAction +Package:com.github.raoe.codesnapidea.actions +@DATE:10/11/2024 3:15 pm +@Author:XuYuanFeng +TODO: + */ + +class JpgCodeSnapAction: AnAction() { + override fun actionPerformed(event: AnActionEvent) { + val editor: Editor? = event.getData(CommonDataKeys.EDITOR) + val project: Project? = event.getData(CommonDataKeys.PROJECT) + val selectedText: String? = editor?.selectionModel?.selectedText + val message = StringBuilder() + if (!selectedText.isNullOrEmpty()) { + message.append(selectedText).append(" Selected!JPG") + // call the native function + } else { + message.append("No text selected!") + } + val title = "Selection Info" + val icon: Icon = Messages.getInformationIcon() + Messages.showMessageDialog( + project, + message.toString(), + title, + icon + ) + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt b/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt index a4ec0a8..01cd6b6 100644 --- a/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt +++ b/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt @@ -34,9 +34,10 @@ class PopupDialogAction: AnAction { val selectedText: String? = editor?.selectionModel?.selectedText val message = StringBuilder() if (!selectedText.isNullOrEmpty()) { - message.append(selectedText).append(" Selected123!") + message.append(selectedText).append(" Selected!") + // call the native function } else { - message.append("No text selected123!") + message.append("No text selected!") } val title = "Selection Info" val icon: Icon = Messages.getInformationIcon() diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/actions/SvgCodeSnapAction.kt b/src/main/kotlin/com/github/raoe/codesnapidea/actions/SvgCodeSnapAction.kt new file mode 100644 index 0000000..efa6e79 --- /dev/null +++ b/src/main/kotlin/com/github/raoe/codesnapidea/actions/SvgCodeSnapAction.kt @@ -0,0 +1,40 @@ +package com.github.raoe.codesnapidea.actions + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.Messages +import javax.swing.Icon + +/** + * ClassName:SvgCodeSnapAction +Package:com.github.raoe.codesnapidea.actions +@DATE:10/11/2024 3:14 pm +@Author:XuYuanFeng +TODO: + */ + +class SvgCodeSnapAction: AnAction() { + override fun actionPerformed(event: AnActionEvent) { + val editor: Editor? = event.getData(CommonDataKeys.EDITOR) + val project: Project? = event.getData(CommonDataKeys.PROJECT) + val selectedText: String? = editor?.selectionModel?.selectedText + val message = StringBuilder() + if (!selectedText.isNullOrEmpty()) { + message.append(selectedText).append(" Selected!SVG") + // call the native function + } else { + message.append("No text selected!") + } + val title = "Selection Info" + val icon: Icon = Messages.getInformationIcon() + Messages.showMessageDialog( + project, + message.toString(), + title, + icon + ) + } +} \ No newline at end of file diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 871f8cf..0a4baab 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -2,10 +2,8 @@ com.github.raoe.codesnapidea CodeSnap.idea - - xuyuanfeng + + xuyuanfeng com.intellij.modules.platform messages.MyBundle @@ -30,9 +28,13 @@ - - + + + + + + From 5a491a484afe69de34640ba1ce0706af004315fa Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Sun, 10 Nov 2024 16:14:13 +0800 Subject: [PATCH 04/15] [Feat] Code Snap Drop-down tab option feature development --- .../actions/AsciiCodeSnapAction.kt | 39 +++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 7 ++-- 2 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/com/github/raoe/codesnapidea/actions/AsciiCodeSnapAction.kt diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/actions/AsciiCodeSnapAction.kt b/src/main/kotlin/com/github/raoe/codesnapidea/actions/AsciiCodeSnapAction.kt new file mode 100644 index 0000000..7df525f --- /dev/null +++ b/src/main/kotlin/com/github/raoe/codesnapidea/actions/AsciiCodeSnapAction.kt @@ -0,0 +1,39 @@ +package com.github.raoe.codesnapidea.actions + +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.editor.Editor +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.Messages +import javax.swing.Icon + +/** + * ClassName:AsciiCodeSnapAction +Package:com.github.raoe.codesnapidea.actions +@DATE:10/11/2024 4:02 pm +@Author:XuYuanFeng +TODO: ASCII CodeSnap + */ +class AsciiCodeSnapAction: AnAction() { + override fun actionPerformed(event: AnActionEvent) { + val editor: Editor? = event.getData(CommonDataKeys.EDITOR) + val project: Project? = event.getData(CommonDataKeys.PROJECT) + val selectedText: String? = editor?.selectionModel?.selectedText + val message = StringBuilder() + if (!selectedText.isNullOrEmpty()) { + message.append(selectedText).append(" Selected!JPG") + // call the native function + } else { + message.append("No text selected!") + } + val title = "Selection Info" + val icon: Icon = Messages.getInformationIcon() + Messages.showMessageDialog( + project, + message.toString(), + title, + icon + ) + } +} \ No newline at end of file diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 0a4baab..8d2bce5 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -32,9 +32,10 @@ - - - + + + + From 294ba6193a3e4d050b1e4eca2b5751e206b3c08e Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Sun, 10 Nov 2024 16:38:40 +0800 Subject: [PATCH 05/15] [Feat] Code Snap Drop-down tab option feature development --- src/main/resources/META-INF/plugin.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 8d2bce5..f1383f7 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -32,10 +32,10 @@ - - - - + + + + From b107cf34ff64d67e3b239df573f6600fed3a9b08 Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Sun, 10 Nov 2024 16:51:36 +0800 Subject: [PATCH 06/15] [Feat] Code Snap Drop-down tab option feature development --- .../codesnapidea/actions/PopupDialogAction.kt | 20 ++----------------- src/main/resources/META-INF/plugin.xml | 4 ++++ 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt b/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt index 01cd6b6..7c0c6b4 100644 --- a/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt +++ b/src/main/kotlin/com/github/raoe/codesnapidea/actions/PopupDialogAction.kt @@ -4,6 +4,7 @@ import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.editor.Editor +import com.intellij.openapi.options.ShowSettingsUtil import com.intellij.openapi.project.Project import com.intellij.openapi.ui.Messages import javax.swing.Icon @@ -29,24 +30,7 @@ class PopupDialogAction: AnAction { } override fun actionPerformed(event: AnActionEvent) { - val editor: Editor? = event.getData(CommonDataKeys.EDITOR) - val project: Project? = event.getData(CommonDataKeys.PROJECT) - val selectedText: String? = editor?.selectionModel?.selectedText - val message = StringBuilder() - if (!selectedText.isNullOrEmpty()) { - message.append(selectedText).append(" Selected!") - // call the native function - } else { - message.append("No text selected!") - } - val title = "Selection Info" - val icon: Icon = Messages.getInformationIcon() - Messages.showMessageDialog( - project, - message.toString(), - title, - icon - ) + ShowSettingsUtil.getInstance().showSettingsDialog(event.getProject(), "OtherSettings"); } override fun update(event: AnActionEvent) { diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index f1383f7..93eec2d 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -38,4 +38,8 @@ + + + + From cf3c9ba39e28844b56aca754ff7765cbfb77aaa7 Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Wed, 13 Nov 2024 20:59:57 +0800 Subject: [PATCH 07/15] [UPDATE] DOC update --- README.md | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/README.md b/README.md index 3295bc9..be9536e 100644 --- a/README.md +++ b/README.md @@ -4,26 +4,6 @@ [![Version](https://img.shields.io/jetbrains/plugin/v/MARKETPLACE_ID.svg)](https://plugins.jetbrains.com/plugin/MARKETPLACE_ID) [![Downloads](https://img.shields.io/jetbrains/plugin/d/MARKETPLACE_ID.svg)](https://plugins.jetbrains.com/plugin/MARKETPLACE_ID) -## Template ToDo list -- [x] Create a new [IntelliJ Platform Plugin Template][template] project. -- [ ] Get familiar with the [template documentation][template]. -- [ ] Adjust the [pluginGroup](./gradle.properties) and [pluginName](./gradle.properties), as well as the [id](./src/main/resources/META-INF/plugin.xml) and [sources package](./src/main/kotlin). -- [ ] Adjust the plugin description in `README` (see [Tips][docs:plugin-description]) -- [ ] Review the [Legal Agreements](https://plugins.jetbrains.com/docs/marketplace/legal-agreements.html?from=IJPluginTemplate). -- [ ] [Publish a plugin manually](https://plugins.jetbrains.com/docs/intellij/publishing-plugin.html?from=IJPluginTemplate) for the first time. -- [ ] Set the `MARKETPLACE_ID` in the above README badges. You can obtain it once the plugin is published to JetBrains Marketplace. -- [ ] Set the [Plugin Signing](https://plugins.jetbrains.com/docs/intellij/plugin-signing.html?from=IJPluginTemplate) related [secrets](https://github.com/JetBrains/intellij-platform-plugin-template#environment-variables). -- [ ] Set the [Deployment Token](https://plugins.jetbrains.com/docs/marketplace/plugin-upload.html?from=IJPluginTemplate). -- [ ] Click the Watch button on the top of the [IntelliJ Platform Plugin Template][template] to be notified about releases containing new features and fixes. - - -This Fancy IntelliJ Platform Plugin is going to be your implementation of the brilliant ideas that you have. - -This specific section is a source for the [plugin.xml](/src/main/resources/META-INF/plugin.xml) file which will be extracted by the [Gradle](/build.gradle.kts) during the build process. - -To keep everything working, do not remove `` sections. - - ## Installation - Using the IDE built-in plugin system: From 990db10b98f7341e504b368d172a0d76f9e6aa88 Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Wed, 13 Nov 2024 21:20:37 +0800 Subject: [PATCH 08/15] Revert "[UPDATE] DOC update" This reverts commit cf3c9ba39e28844b56aca754ff7765cbfb77aaa7. --- README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.md b/README.md index be9536e..3295bc9 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,26 @@ [![Version](https://img.shields.io/jetbrains/plugin/v/MARKETPLACE_ID.svg)](https://plugins.jetbrains.com/plugin/MARKETPLACE_ID) [![Downloads](https://img.shields.io/jetbrains/plugin/d/MARKETPLACE_ID.svg)](https://plugins.jetbrains.com/plugin/MARKETPLACE_ID) +## Template ToDo list +- [x] Create a new [IntelliJ Platform Plugin Template][template] project. +- [ ] Get familiar with the [template documentation][template]. +- [ ] Adjust the [pluginGroup](./gradle.properties) and [pluginName](./gradle.properties), as well as the [id](./src/main/resources/META-INF/plugin.xml) and [sources package](./src/main/kotlin). +- [ ] Adjust the plugin description in `README` (see [Tips][docs:plugin-description]) +- [ ] Review the [Legal Agreements](https://plugins.jetbrains.com/docs/marketplace/legal-agreements.html?from=IJPluginTemplate). +- [ ] [Publish a plugin manually](https://plugins.jetbrains.com/docs/intellij/publishing-plugin.html?from=IJPluginTemplate) for the first time. +- [ ] Set the `MARKETPLACE_ID` in the above README badges. You can obtain it once the plugin is published to JetBrains Marketplace. +- [ ] Set the [Plugin Signing](https://plugins.jetbrains.com/docs/intellij/plugin-signing.html?from=IJPluginTemplate) related [secrets](https://github.com/JetBrains/intellij-platform-plugin-template#environment-variables). +- [ ] Set the [Deployment Token](https://plugins.jetbrains.com/docs/marketplace/plugin-upload.html?from=IJPluginTemplate). +- [ ] Click the Watch button on the top of the [IntelliJ Platform Plugin Template][template] to be notified about releases containing new features and fixes. + + +This Fancy IntelliJ Platform Plugin is going to be your implementation of the brilliant ideas that you have. + +This specific section is a source for the [plugin.xml](/src/main/resources/META-INF/plugin.xml) file which will be extracted by the [Gradle](/build.gradle.kts) during the build process. + +To keep everything working, do not remove `` sections. + + ## Installation - Using the IDE built-in plugin system: From 19c04706db217ad015ad7dbd2faf9a49264f5810 Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Wed, 13 Nov 2024 22:14:44 +0800 Subject: [PATCH 09/15] [feature_dev_0.1] CodeSnap Configuration Setting function develop --- .run/Run Plugin.run.xml | 6 +- .../configuration/CodeSnapConfiguration.kt | 54 +++++++++++ .../raoe/codesnapidea/ui/CodeSnapSettings.kt | 39 ++++++++ .../codesnapidea/ui/CodeSnapSettingsUI.kt | 92 +++++++++++++++++++ src/main/resources/META-INF/plugin.xml | 2 +- 5 files changed, 189 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/com/github/raoe/codesnapidea/configuration/CodeSnapConfiguration.kt create mode 100644 src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettings.kt create mode 100644 src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt diff --git a/.run/Run Plugin.run.xml b/.run/Run Plugin.run.xml index 00a760e..fe579fb 100644 --- a/.run/Run Plugin.run.xml +++ b/.run/Run Plugin.run.xml @@ -5,7 +5,7 @@ @@ -19,7 +19,7 @@ true true false - false + false - + \ No newline at end of file diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/configuration/CodeSnapConfiguration.kt b/src/main/kotlin/com/github/raoe/codesnapidea/configuration/CodeSnapConfiguration.kt new file mode 100644 index 0000000..b6151e0 --- /dev/null +++ b/src/main/kotlin/com/github/raoe/codesnapidea/configuration/CodeSnapConfiguration.kt @@ -0,0 +1,54 @@ +package com.github.raoe.codesnapidea.configuration; + +import com.github.raoe.codesnapidea.ui.CodeSnapSettingsUI +import com.intellij.openapi.components.BaseState +import com.intellij.openapi.options.Configurable +import com.intellij.openapi.options.ConfigurationException +import org.jetbrains.annotations.Nls +import org.jetbrains.annotations.Nullable +import javax.swing.JComponent + + +/** + * ClassName:CodeSnapConfiguration + * Package:com.github.raoe.codesnapidea.configuration + * + * @DATE:13/11/2024 9:34 pm + * @Author:XuYuanFeng TODO: + */ +class CodeSnapConfiguration: Configurable { + private var mySettingsUI: CodeSnapSettingsUI? = null + @Nls + override fun getDisplayName(): String { + return "CodeSnap Configuration" // 配置页面的显示名称 + } + + @Nullable + override fun getHelpTopic(): String? { + return "help-topic-id" // 配置页面的帮助主题ID + } + + @Nullable + override fun createComponent(): JComponent? { + mySettingsUI = CodeSnapSettingsUI() + return mySettingsUI?.getPanel() // 返回配置界面的组件 + } + + override fun isModified(): Boolean { + return mySettingsUI?.isModified() ?: false // 检查设置是否被修改 + } + + @Throws(ConfigurationException::class) + override fun apply() { + mySettingsUI?.apply() // 应用设置 + } + + override fun reset() { + mySettingsUI?.reset() // 重置设置 + } + + override fun disposeUIResources() { + mySettingsUI = null // 释放UI资源 + } + +} diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettings.kt b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettings.kt new file mode 100644 index 0000000..45e62f3 --- /dev/null +++ b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettings.kt @@ -0,0 +1,39 @@ +package com.github.raoe.codesnapidea.ui + +import com.intellij.openapi.components.PersistentStateComponent +import com.intellij.openapi.components.State +import com.intellij.openapi.components.Storage + +/** + * ClassName:CodeSnapSettings +Package:com.github.raoe.codesnapidea.ui +@DATE:13/11/2024 10:11 pm +@Author:XuYuanFeng +TODO: + */ +@State(name = "CodeSnapSettings", storages = [Storage("codeSnapSettings.xml")]) +class CodeSnapSettings : PersistentStateComponent { + class State(var shortcutEnabled: Boolean = false, var shortcut: String = "defaultShortcut", var defaultSavePath: String = "/default/path") + + private var state = State() + + override fun getState(): State { + return state + } + + override fun loadState(state: State) { + this.state = state + } + + var shortcutEnabled: Boolean + get() = state.shortcutEnabled + set(value) { state.shortcutEnabled = value } + + var shortcut: String + get() = state.shortcut + set(value) { state.shortcut = value } + + var defaultSavePath: String + get() = state.defaultSavePath + set(value) { state.defaultSavePath = value } +} \ No newline at end of file diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt new file mode 100644 index 0000000..884d5fa --- /dev/null +++ b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt @@ -0,0 +1,92 @@ +package com.github.raoe.codesnapidea.ui; + +import com.intellij.ide.util.PropertiesComponent +import com.intellij.openapi.components.ServiceManager +import com.intellij.openapi.diagnostic.thisLogger +import java.awt.FlowLayout +import java.io.File +import java.util.* +import javax.swing.* + +/** + * ClassName:CodeSnapSettingsUI + * Package:com.github.raoe.codesnapidea.ui + * + * @DATE:13/11/2024 9:38 pm + * @Author:XuYuanFeng TODO: + */ +class CodeSnapSettingsUI { + private val properties: PropertiesComponent = ServiceManager.getService(PropertiesComponent::class.java) + var shortcutEnabled: Boolean + get() = properties.getBoolean("codeSnap.shortcutEnabled", false) + set(value) = properties.setValue("codeSnap.shortcutEnabled", value) + + var shortcut: String + get() = properties.getValue("codeSnap.shortcut", "defaultShortcut") + set(value) = properties.setValue("codeSnap.shortcut", value) + + var defaultSavePath: String + get() = properties.getValue("codeSnap.defaultSavePath", "/default/path") + set(value) = properties.setValue("codeSnap.defaultSavePath", value) + + + private val myPanel: JPanel = JPanel(FlowLayout()) + private val myShortcutField: JCheckBox = JCheckBox("Enable Shortcut") + private val myShortcutTextField: JTextField = JTextField(20) + private val mySavePathField: JTextField = JTextField(20) + private val mySavePathButton: JButton = JButton("Browse...") + init { +// myPanel.add(myShortcutField) +// myPanel.add(myShortcutTextField) + myPanel.add(mySavePathField) + myPanel.add(mySavePathButton) + mySavePathButton.addActionListener { + val fileChooser = JFileChooser() + fileChooser.selectedFile = File(mySavePathField.text) + if (fileChooser.showOpenDialog(myPanel) == JFileChooser.APPROVE_OPTION) { + mySavePathField.text = fileChooser.selectedFile.absolutePath + } + } + } + + fun getPanel(): JPanel { + return myPanel + } + + fun isModified(): Boolean { + // 检查是否修改了设置 + return myShortcutField.isSelected != shortcutEnabled || + myShortcutTextField.text != shortcut || + mySavePathField.text != defaultSavePath + } + + fun apply() { + // 应用设置的逻辑 + // 这里需要具体实现 + shortcutEnabled = myShortcutField.isSelected + shortcut = myShortcutTextField.text + defaultSavePath = mySavePathField.text + thisLogger().info("app apply>>>>>>>>>>>>>>>>>>>>>>>") + } + + fun reset() { + // 重置设置的逻辑 + // 这里需要具体实现 + myShortcutField.isSelected = shortcutEnabled + myShortcutTextField.text = shortcut + mySavePathField.text = defaultSavePath + thisLogger().info("app reset>>>>>>>>>>>>>>>>>>>>>>>") + } + + fun saveSettings() { + val properties = ServiceManager.getService(PropertiesComponent::class.java) + properties.setValue("codeSnapShortcut", myShortcutTextField.text) + properties.setValue("codeSnapSavePath", mySavePathField.text) + } + + fun loadSettings() { + val properties = ServiceManager.getService(PropertiesComponent::class.java) + myShortcutTextField.text = properties.getValue("codeSnapShortcut", "defaultShortcut") + mySavePathField.text = properties.getValue("codeSnapSavePath", "defaultSavePath") + } +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 93eec2d..ac98899 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -40,6 +40,6 @@ - + From bb20a8ef48c7b6b1d037de1abc59b78c15c7b5c7 Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Wed, 13 Nov 2024 22:34:59 +0800 Subject: [PATCH 10/15] [feature_dev_0.1] CodeSnap Configuration Setting function develop --- .../github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt index 884d5fa..9ddeb79 100644 --- a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt +++ b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt @@ -31,13 +31,11 @@ class CodeSnapSettingsUI { private val myPanel: JPanel = JPanel(FlowLayout()) - private val myShortcutField: JCheckBox = JCheckBox("Enable Shortcut") - private val myShortcutTextField: JTextField = JTextField(20) + private val myShortcutField: JCheckBox = JCheckBox("Default Save Path:") private val mySavePathField: JTextField = JTextField(20) private val mySavePathButton: JButton = JButton("Browse...") init { -// myPanel.add(myShortcutField) -// myPanel.add(myShortcutTextField) + myPanel.add(myShortcutField) myPanel.add(mySavePathField) myPanel.add(mySavePathButton) mySavePathButton.addActionListener { @@ -56,7 +54,6 @@ class CodeSnapSettingsUI { fun isModified(): Boolean { // 检查是否修改了设置 return myShortcutField.isSelected != shortcutEnabled || - myShortcutTextField.text != shortcut || mySavePathField.text != defaultSavePath } @@ -64,7 +61,6 @@ class CodeSnapSettingsUI { // 应用设置的逻辑 // 这里需要具体实现 shortcutEnabled = myShortcutField.isSelected - shortcut = myShortcutTextField.text defaultSavePath = mySavePathField.text thisLogger().info("app apply>>>>>>>>>>>>>>>>>>>>>>>") } @@ -73,20 +69,17 @@ class CodeSnapSettingsUI { // 重置设置的逻辑 // 这里需要具体实现 myShortcutField.isSelected = shortcutEnabled - myShortcutTextField.text = shortcut mySavePathField.text = defaultSavePath thisLogger().info("app reset>>>>>>>>>>>>>>>>>>>>>>>") } fun saveSettings() { val properties = ServiceManager.getService(PropertiesComponent::class.java) - properties.setValue("codeSnapShortcut", myShortcutTextField.text) properties.setValue("codeSnapSavePath", mySavePathField.text) } fun loadSettings() { val properties = ServiceManager.getService(PropertiesComponent::class.java) - myShortcutTextField.text = properties.getValue("codeSnapShortcut", "defaultShortcut") mySavePathField.text = properties.getValue("codeSnapSavePath", "defaultSavePath") } } From 3c6c9f12ea47ce3e9c533ee4765dea2a7ff89b7a Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Sun, 17 Nov 2024 15:35:31 +0800 Subject: [PATCH 11/15] [feature_dev_0.1] develop the Default Save Path Text --- .../codesnapidea/ui/CodeSnapSettingsUI.kt | 28 +++++++------------ src/main/resources/META-INF/plugin.xml | 2 +- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt index 9ddeb79..805d31a 100644 --- a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt +++ b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt @@ -3,6 +3,7 @@ package com.github.raoe.codesnapidea.ui; import com.intellij.ide.util.PropertiesComponent import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.diagnostic.thisLogger +import org.jdesktop.swingx.JXTextField import java.awt.FlowLayout import java.io.File import java.util.* @@ -17,25 +18,17 @@ import javax.swing.* */ class CodeSnapSettingsUI { private val properties: PropertiesComponent = ServiceManager.getService(PropertiesComponent::class.java) - var shortcutEnabled: Boolean - get() = properties.getBoolean("codeSnap.shortcutEnabled", false) - set(value) = properties.setValue("codeSnap.shortcutEnabled", value) - - var shortcut: String - get() = properties.getValue("codeSnap.shortcut", "defaultShortcut") - set(value) = properties.setValue("codeSnap.shortcut", value) - - var defaultSavePath: String + private var defaultSavePath: String get() = properties.getValue("codeSnap.defaultSavePath", "/default/path") set(value) = properties.setValue("codeSnap.defaultSavePath", value) - - - private val myPanel: JPanel = JPanel(FlowLayout()) - private val myShortcutField: JCheckBox = JCheckBox("Default Save Path:") + private val myPanel: JPanel = JPanel(FlowLayout(FlowLayout.LEFT)) private val mySavePathField: JTextField = JTextField(20) private val mySavePathButton: JButton = JButton("Browse...") + private val mySavePathLabel: JLabel = JLabel("默认保存路径:") init { - myPanel.add(myShortcutField) + // 使用 defaultSavePath 属性来设置 JTextField 的值 + defaultSavePath = "/default/path" + myPanel.add(mySavePathLabel) myPanel.add(mySavePathField) myPanel.add(mySavePathButton) mySavePathButton.addActionListener { @@ -43,6 +36,8 @@ class CodeSnapSettingsUI { fileChooser.selectedFile = File(mySavePathField.text) if (fileChooser.showOpenDialog(myPanel) == JFileChooser.APPROVE_OPTION) { mySavePathField.text = fileChooser.selectedFile.absolutePath + // 更新 defaultSavePath 属性 + defaultSavePath = fileChooser.selectedFile.absolutePath } } } @@ -53,14 +48,12 @@ class CodeSnapSettingsUI { fun isModified(): Boolean { // 检查是否修改了设置 - return myShortcutField.isSelected != shortcutEnabled || - mySavePathField.text != defaultSavePath + return mySavePathField.text != defaultSavePath } fun apply() { // 应用设置的逻辑 // 这里需要具体实现 - shortcutEnabled = myShortcutField.isSelected defaultSavePath = mySavePathField.text thisLogger().info("app apply>>>>>>>>>>>>>>>>>>>>>>>") } @@ -68,7 +61,6 @@ class CodeSnapSettingsUI { fun reset() { // 重置设置的逻辑 // 这里需要具体实现 - myShortcutField.isSelected = shortcutEnabled mySavePathField.text = defaultSavePath thisLogger().info("app reset>>>>>>>>>>>>>>>>>>>>>>>") } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index ac98899..d6a4569 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -17,7 +17,7 @@ - From 7499b72ace84f5d6476244858a8317978dfbd8c5 Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Sun, 17 Nov 2024 19:48:50 +0800 Subject: [PATCH 12/15] [feature_dev_0.1] UI design --- ...5\216\237\345\236\213\345\233\276V0.1.png" | Bin 0 -> 84713 bytes .../{CodeSnapConfiguration.kt => CodeSnap.kt} | 6 +- .../codesnapidea/ui/CodeSnapSettingsUI.kt | 100 ++++++++++-------- src/main/resources/META-INF/plugin.xml | 2 +- 4 files changed, 62 insertions(+), 46 deletions(-) create mode 100644 "images/CodeSnap.idea\345\216\237\345\236\213\345\233\276V0.1.png" rename src/main/kotlin/com/github/raoe/codesnapidea/configuration/{CodeSnapConfiguration.kt => CodeSnap.kt} (90%) diff --git "a/images/CodeSnap.idea\345\216\237\345\236\213\345\233\276V0.1.png" "b/images/CodeSnap.idea\345\216\237\345\236\213\345\233\276V0.1.png" new file mode 100644 index 0000000000000000000000000000000000000000..4efe23a07f281c73778a105523f4a424889d4fef GIT binary patch literal 84713 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 = JComboBox(arrayOf("jpg", "png", "ascii", "jpeg", "svg")) + private val defaultJsonConfiguration: JLabel = JLabel("Default JSON configuration:") + private val optionConfig: JLabel = JLabel("Option configuration") + //1、默认剪贴板快捷键: + // 2、默认快照快捷键: + // 3、默认快照格式设置 + // 4、config 自定义配置支持外部导入 + // 5、默认生成的背景颜色选择 + // 6、水印名称配置 + // 7、命令行能力? + private val listData:List = listOf("Default clipboard shortcuts","Default snapshot shortcut","Default snapshot format settings","Watermark name configuration","Command-line capabilities") + init{ + val firstRowPanel = JPanel(FlowLayout(FlowLayout.LEFT,5,5)).apply { + add(defaultSavePathLabel) + add(mySavePathArea) + add(mySavePathButton) + } + val secondRowPanel = JPanel(FlowLayout(FlowLayout.LEFT,5,5)).apply { + add(defaultJLabel) + add(defaultJComboBox) + } + val thirdRowPanel = JPanel(FlowLayout(FlowLayout.LEFT,5,5)).apply { + add(defaultJsonConfiguration) + } + val fourthRowPanel = JPanel(FlowLayout(FlowLayout.LEFT,5,5)).apply { + add(optionConfig) + for (ele in listData) { + val box:JCheckBox = JCheckBox(ele); + add(box) + } + } + defaultPanel.add(firstRowPanel) + defaultPanel.add(secondRowPanel) + defaultPanel.add(thirdRowPanel) + defaultPanel.add(fourthRowPanel) mySavePathButton.addActionListener { val fileChooser = JFileChooser() - fileChooser.selectedFile = File(mySavePathField.text) - if (fileChooser.showOpenDialog(myPanel) == JFileChooser.APPROVE_OPTION) { - mySavePathField.text = fileChooser.selectedFile.absolutePath - // 更新 defaultSavePath 属性 + fileChooser.selectedFile = File(mySavePathArea.text.trim()) + if (fileChooser.showOpenDialog(defaultPanel) == JFileChooser.APPROVE_OPTION) { + mySavePathArea.text = fileChooser.selectedFile.absolutePath defaultSavePath = fileChooser.selectedFile.absolutePath } } } fun getPanel(): JPanel { - return myPanel + return defaultPanel } fun isModified(): Boolean { - // 检查是否修改了设置 - return mySavePathField.text != defaultSavePath + return mySavePathArea.text.trim() != defaultSavePath } fun apply() { - // 应用设置的逻辑 - // 这里需要具体实现 - defaultSavePath = mySavePathField.text - thisLogger().info("app apply>>>>>>>>>>>>>>>>>>>>>>>") + defaultSavePath = mySavePathArea.text.trim() + // 日志记录 } fun reset() { - // 重置设置的逻辑 - // 这里需要具体实现 - mySavePathField.text = defaultSavePath - thisLogger().info("app reset>>>>>>>>>>>>>>>>>>>>>>>") + mySavePathArea.text = defaultSavePath + // 日志记录 } fun saveSettings() { - val properties = ServiceManager.getService(PropertiesComponent::class.java) - properties.setValue("codeSnapSavePath", mySavePathField.text) + properties.setValue("codeSnapSavePath", mySavePathArea.text.trim()) } fun loadSettings() { - val properties = ServiceManager.getService(PropertiesComponent::class.java) - mySavePathField.text = properties.getValue("codeSnapSavePath", "defaultSavePath") + mySavePathArea.text = properties.getValue("codeSnapSavePath", defaultSavePath) } -} +} \ No newline at end of file diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index d6a4569..2e86c34 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -40,6 +40,6 @@ - + From 8ffd53974619eb770703b42ea95ed7b938f35f83 Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Wed, 13 Nov 2024 22:34:59 +0800 Subject: [PATCH 13/15] [Feat] CodeSnap Configuration Setting function develop --- .../github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt index 884d5fa..9ddeb79 100644 --- a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt +++ b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt @@ -31,13 +31,11 @@ class CodeSnapSettingsUI { private val myPanel: JPanel = JPanel(FlowLayout()) - private val myShortcutField: JCheckBox = JCheckBox("Enable Shortcut") - private val myShortcutTextField: JTextField = JTextField(20) + private val myShortcutField: JCheckBox = JCheckBox("Default Save Path:") private val mySavePathField: JTextField = JTextField(20) private val mySavePathButton: JButton = JButton("Browse...") init { -// myPanel.add(myShortcutField) -// myPanel.add(myShortcutTextField) + myPanel.add(myShortcutField) myPanel.add(mySavePathField) myPanel.add(mySavePathButton) mySavePathButton.addActionListener { @@ -56,7 +54,6 @@ class CodeSnapSettingsUI { fun isModified(): Boolean { // 检查是否修改了设置 return myShortcutField.isSelected != shortcutEnabled || - myShortcutTextField.text != shortcut || mySavePathField.text != defaultSavePath } @@ -64,7 +61,6 @@ class CodeSnapSettingsUI { // 应用设置的逻辑 // 这里需要具体实现 shortcutEnabled = myShortcutField.isSelected - shortcut = myShortcutTextField.text defaultSavePath = mySavePathField.text thisLogger().info("app apply>>>>>>>>>>>>>>>>>>>>>>>") } @@ -73,20 +69,17 @@ class CodeSnapSettingsUI { // 重置设置的逻辑 // 这里需要具体实现 myShortcutField.isSelected = shortcutEnabled - myShortcutTextField.text = shortcut mySavePathField.text = defaultSavePath thisLogger().info("app reset>>>>>>>>>>>>>>>>>>>>>>>") } fun saveSettings() { val properties = ServiceManager.getService(PropertiesComponent::class.java) - properties.setValue("codeSnapShortcut", myShortcutTextField.text) properties.setValue("codeSnapSavePath", mySavePathField.text) } fun loadSettings() { val properties = ServiceManager.getService(PropertiesComponent::class.java) - myShortcutTextField.text = properties.getValue("codeSnapShortcut", "defaultShortcut") mySavePathField.text = properties.getValue("codeSnapSavePath", "defaultSavePath") } } From fa826d5611efeea6b1552f0e66ad049b975d3ffc Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Sun, 17 Nov 2024 15:35:31 +0800 Subject: [PATCH 14/15] [Feat] develop the Default Save Path Text --- .../codesnapidea/ui/CodeSnapSettingsUI.kt | 28 +++++++------------ src/main/resources/META-INF/plugin.xml | 2 +- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt index 9ddeb79..805d31a 100644 --- a/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt +++ b/src/main/kotlin/com/github/raoe/codesnapidea/ui/CodeSnapSettingsUI.kt @@ -3,6 +3,7 @@ package com.github.raoe.codesnapidea.ui; import com.intellij.ide.util.PropertiesComponent import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.diagnostic.thisLogger +import org.jdesktop.swingx.JXTextField import java.awt.FlowLayout import java.io.File import java.util.* @@ -17,25 +18,17 @@ import javax.swing.* */ class CodeSnapSettingsUI { private val properties: PropertiesComponent = ServiceManager.getService(PropertiesComponent::class.java) - var shortcutEnabled: Boolean - get() = properties.getBoolean("codeSnap.shortcutEnabled", false) - set(value) = properties.setValue("codeSnap.shortcutEnabled", value) - - var shortcut: String - get() = properties.getValue("codeSnap.shortcut", "defaultShortcut") - set(value) = properties.setValue("codeSnap.shortcut", value) - - var defaultSavePath: String + private var defaultSavePath: String get() = properties.getValue("codeSnap.defaultSavePath", "/default/path") set(value) = properties.setValue("codeSnap.defaultSavePath", value) - - - private val myPanel: JPanel = JPanel(FlowLayout()) - private val myShortcutField: JCheckBox = JCheckBox("Default Save Path:") + private val myPanel: JPanel = JPanel(FlowLayout(FlowLayout.LEFT)) private val mySavePathField: JTextField = JTextField(20) private val mySavePathButton: JButton = JButton("Browse...") + private val mySavePathLabel: JLabel = JLabel("默认保存路径:") init { - myPanel.add(myShortcutField) + // 使用 defaultSavePath 属性来设置 JTextField 的值 + defaultSavePath = "/default/path" + myPanel.add(mySavePathLabel) myPanel.add(mySavePathField) myPanel.add(mySavePathButton) mySavePathButton.addActionListener { @@ -43,6 +36,8 @@ class CodeSnapSettingsUI { fileChooser.selectedFile = File(mySavePathField.text) if (fileChooser.showOpenDialog(myPanel) == JFileChooser.APPROVE_OPTION) { mySavePathField.text = fileChooser.selectedFile.absolutePath + // 更新 defaultSavePath 属性 + defaultSavePath = fileChooser.selectedFile.absolutePath } } } @@ -53,14 +48,12 @@ class CodeSnapSettingsUI { fun isModified(): Boolean { // 检查是否修改了设置 - return myShortcutField.isSelected != shortcutEnabled || - mySavePathField.text != defaultSavePath + return mySavePathField.text != defaultSavePath } fun apply() { // 应用设置的逻辑 // 这里需要具体实现 - shortcutEnabled = myShortcutField.isSelected defaultSavePath = mySavePathField.text thisLogger().info("app apply>>>>>>>>>>>>>>>>>>>>>>>") } @@ -68,7 +61,6 @@ class CodeSnapSettingsUI { fun reset() { // 重置设置的逻辑 // 这里需要具体实现 - myShortcutField.isSelected = shortcutEnabled mySavePathField.text = defaultSavePath thisLogger().info("app reset>>>>>>>>>>>>>>>>>>>>>>>") } diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index ac98899..d6a4569 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -17,7 +17,7 @@ - From 420d604548c158851d12410130c4d3bbb52a8e78 Mon Sep 17 00:00:00 2001 From: xuyuanfeng <986771570@qq.com> Date: Sun, 17 Nov 2024 19:48:50 +0800 Subject: [PATCH 15/15] [Feat] UI design --- ...5\216\237\345\236\213\345\233\276V0.1.png" | Bin 0 -> 84713 bytes .../{CodeSnapConfiguration.kt => CodeSnap.kt} | 6 +- .../codesnapidea/ui/CodeSnapSettingsUI.kt | 100 ++++++++++-------- src/main/resources/META-INF/plugin.xml | 2 +- 4 files changed, 62 insertions(+), 46 deletions(-) create mode 100644 "images/CodeSnap.idea\345\216\237\345\236\213\345\233\276V0.1.png" rename src/main/kotlin/com/github/raoe/codesnapidea/configuration/{CodeSnapConfiguration.kt => CodeSnap.kt} (90%) diff --git "a/images/CodeSnap.idea\345\216\237\345\236\213\345\233\276V0.1.png" "b/images/CodeSnap.idea\345\216\237\345\236\213\345\233\276V0.1.png" new file mode 100644 index 0000000000000000000000000000000000000000..4efe23a07f281c73778a105523f4a424889d4fef GIT binary patch literal 84713 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 = JComboBox(arrayOf("jpg", "png", "ascii", "jpeg", "svg")) + private val defaultJsonConfiguration: JLabel = JLabel("Default JSON configuration:") + private val optionConfig: JLabel = JLabel("Option configuration") + //1、默认剪贴板快捷键: + // 2、默认快照快捷键: + // 3、默认快照格式设置 + // 4、config 自定义配置支持外部导入 + // 5、默认生成的背景颜色选择 + // 6、水印名称配置 + // 7、命令行能力? + private val listData:List = listOf("Default clipboard shortcuts","Default snapshot shortcut","Default snapshot format settings","Watermark name configuration","Command-line capabilities") + init{ + val firstRowPanel = JPanel(FlowLayout(FlowLayout.LEFT,5,5)).apply { + add(defaultSavePathLabel) + add(mySavePathArea) + add(mySavePathButton) + } + val secondRowPanel = JPanel(FlowLayout(FlowLayout.LEFT,5,5)).apply { + add(defaultJLabel) + add(defaultJComboBox) + } + val thirdRowPanel = JPanel(FlowLayout(FlowLayout.LEFT,5,5)).apply { + add(defaultJsonConfiguration) + } + val fourthRowPanel = JPanel(FlowLayout(FlowLayout.LEFT,5,5)).apply { + add(optionConfig) + for (ele in listData) { + val box:JCheckBox = JCheckBox(ele); + add(box) + } + } + defaultPanel.add(firstRowPanel) + defaultPanel.add(secondRowPanel) + defaultPanel.add(thirdRowPanel) + defaultPanel.add(fourthRowPanel) mySavePathButton.addActionListener { val fileChooser = JFileChooser() - fileChooser.selectedFile = File(mySavePathField.text) - if (fileChooser.showOpenDialog(myPanel) == JFileChooser.APPROVE_OPTION) { - mySavePathField.text = fileChooser.selectedFile.absolutePath - // 更新 defaultSavePath 属性 + fileChooser.selectedFile = File(mySavePathArea.text.trim()) + if (fileChooser.showOpenDialog(defaultPanel) == JFileChooser.APPROVE_OPTION) { + mySavePathArea.text = fileChooser.selectedFile.absolutePath defaultSavePath = fileChooser.selectedFile.absolutePath } } } fun getPanel(): JPanel { - return myPanel + return defaultPanel } fun isModified(): Boolean { - // 检查是否修改了设置 - return mySavePathField.text != defaultSavePath + return mySavePathArea.text.trim() != defaultSavePath } fun apply() { - // 应用设置的逻辑 - // 这里需要具体实现 - defaultSavePath = mySavePathField.text - thisLogger().info("app apply>>>>>>>>>>>>>>>>>>>>>>>") + defaultSavePath = mySavePathArea.text.trim() + // 日志记录 } fun reset() { - // 重置设置的逻辑 - // 这里需要具体实现 - mySavePathField.text = defaultSavePath - thisLogger().info("app reset>>>>>>>>>>>>>>>>>>>>>>>") + mySavePathArea.text = defaultSavePath + // 日志记录 } fun saveSettings() { - val properties = ServiceManager.getService(PropertiesComponent::class.java) - properties.setValue("codeSnapSavePath", mySavePathField.text) + properties.setValue("codeSnapSavePath", mySavePathArea.text.trim()) } fun loadSettings() { - val properties = ServiceManager.getService(PropertiesComponent::class.java) - mySavePathField.text = properties.getValue("codeSnapSavePath", "defaultSavePath") + mySavePathArea.text = properties.getValue("codeSnapSavePath", defaultSavePath) } -} +} \ No newline at end of file diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index d6a4569..2e86c34 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -40,6 +40,6 @@ - +