Skip to content

Commit

Permalink
feat: update gui (#578)
Browse files Browse the repository at this point in the history
  • Loading branch information
tangcent authored Sep 5, 2021
1 parent 36b3388 commit c4c9c19
Show file tree
Hide file tree
Showing 22 changed files with 1,838 additions and 1,440 deletions.
2 changes: 1 addition & 1 deletion idea-plugin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ intellij {
updateSinceUntilBuild false
sameSinceUntilBuild false

plugins "org.jetbrains.kotlin:1.3.11-release-IJ2017.3-1"
//plugins "org.jetbrains.kotlin:1.3.11-release-IJ2017.3-1"
//plugins "org.jetbrains.kotlin:1.3.11-release-IJ2017.3-1", "org.intellij.scala:2017.3.11"
//plugins 'org.jetbrains.kotlin:1.3.21-release-IJ2018.2-1' //dependency kotlin

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package com.itangcent.idea.plugin.actions
package com.itangcent.idea.plugin.configurable

import com.google.inject.Inject
import com.intellij.openapi.options.SearchableConfigurable
import com.intellij.openapi.project.Project
import com.itangcent.idea.plugin.api.export.core.EasyApiConfigReader
import com.itangcent.idea.plugin.dialog.EasyApiSettingGUI
import com.itangcent.idea.plugin.settings.SettingBinder
import com.itangcent.idea.plugin.settings.helper.MemoryPostmanSettingsHelper
import com.itangcent.idea.plugin.settings.helper.PostmanSettingsHelper
import com.itangcent.intellij.config.ConfigReader
import com.itangcent.intellij.context.ActionContext
import com.itangcent.intellij.extend.guice.singleton
Expand All @@ -20,34 +17,28 @@ import com.itangcent.suv.http.ConfigurableHttpClientProvider
import com.itangcent.suv.http.HttpClientProvider
import javax.swing.JComponent

class EasyApiConfigurable(private var myProject: Project?) : SearchableConfigurable {
abstract class AbstractEasyApiConfigurable(private var myProject: Project?) : SearchableConfigurable {

private var easyApiConfigurableGUI: EasyApiSettingGUI? = null
private lateinit var easyApiConfigurableGUI: EasyApiSettingGUI

@Inject
private lateinit var settingBinder: SettingBinder

override fun isModified(): Boolean {
return settingBinder.read() != easyApiConfigurableGUI?.getSettings()
}

override fun getId(): String {
return "preference.EasyApiConfigurable"
}

override fun getDisplayName(): String {
return "EasyApi"
return settingBinder.read() != easyApiConfigurableGUI.getSettings()
}

override fun apply() {
settingBinder.save(easyApiConfigurableGUI!!.getSettings().copy())
settingBinder.read()
.also { easyApiConfigurableGUI.readSettings(it) }
.let { settingBinder.save(it) }
}

private var context: ActionContext? = null

override fun createComponent(): JComponent? {

LOG.info("create component of EasyApiConfigurable")
LOG.info("create component of ${this::class.qualifiedName}")

val builder = ActionContext.builder()

Expand All @@ -57,28 +48,33 @@ class EasyApiConfigurable(private var myProject: Project?) : SearchableConfigura
builder.bind(HttpClientProvider::class) { it.with(ConfigurableHttpClientProvider::class).singleton() }
builder.bind(ConfigReader::class) { it.with(EasyApiConfigReader::class).singleton() }
builder.bind(LocalFileRepository::class) { it.with(DefaultLocalFileRepository::class).singleton() }
builder.bind(PostmanSettingsHelper::class) { it.with(MemoryPostmanSettingsHelper::class).singleton() }

afterBuildActionContext(builder)

val context = builder.build()

this.context = context

context.init(this)

easyApiConfigurableGUI = EasyApiSettingGUI()
easyApiConfigurableGUI = createGUI()

context.init(easyApiConfigurableGUI!!)
context.init(easyApiConfigurableGUI)
context.runAsync {
context.runInSwingUI {
easyApiConfigurableGUI!!.onCreate()
easyApiConfigurableGUI!!.setSettings(settingBinder.read().copy())
easyApiConfigurableGUI.onCreate()
easyApiConfigurableGUI.setSettings(settingBinder.read().copy())
}
}
return easyApiConfigurableGUI!!.getRootPanel()
return easyApiConfigurableGUI.getRootPanel()
}

open fun afterBuildActionContext(builder: ActionContext.ActionContextBuilder) {}

protected abstract fun createGUI(): EasyApiSettingGUI

override fun reset() {
easyApiConfigurableGUI!!.setSettings(settingBinder.read().copy())
easyApiConfigurableGUI.setSettings(settingBinder.read().copy())
}

override fun disposeUIResources() {
Expand All @@ -87,7 +83,7 @@ class EasyApiConfigurable(private var myProject: Project?) : SearchableConfigura
}

init {
LOG.info("create instance of EasyApiConfigurable")
LOG.info("create instance of ${this::class.qualifiedName}")
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.itangcent.idea.plugin.configurable

import com.itangcent.idea.plugin.settings.Settings
import com.itangcent.intellij.extend.rx.AutoComputer
import javax.swing.JComponent

abstract class AbstractEasyApiSettingGUI : EasyApiSettingGUI {

protected var settingsInstance: Settings? = null

protected var autoComputer: AutoComputer = AutoComputer()

override fun getSettings(): Settings {
return (settingsInstance ?: Settings()).copy()
}

override fun setSettings(settings: Settings) {
autoComputer.value(this::settingsInstance, settings.copy())
}

override fun readSettings(settings: Settings) {
this.settingsInstance?.let { readSettings(settings, it) }

}

protected abstract fun readSettings(settings: Settings, from: Settings)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.itangcent.idea.plugin.configurable

import com.intellij.openapi.project.Project
import com.itangcent.idea.plugin.api.export.core.EasyApiConfigReader
import com.itangcent.idea.plugin.dialog.EasyApiSettingGUI
import com.itangcent.idea.plugin.settings.helper.MemoryPostmanSettingsHelper
import com.itangcent.idea.plugin.settings.helper.PostmanSettingsHelper
import com.itangcent.intellij.config.ConfigReader
import com.itangcent.intellij.context.ActionContext
import com.itangcent.intellij.extend.guice.singleton
import com.itangcent.intellij.extend.guice.with
import com.itangcent.intellij.file.DefaultLocalFileRepository
import com.itangcent.intellij.file.LocalFileRepository
import com.itangcent.suv.http.ConfigurableHttpClientProvider
import com.itangcent.suv.http.HttpClientProvider

class EasyApiConfigurable(myProject: Project?) : AbstractEasyApiConfigurable(myProject) {

override fun getId(): String {
return "preference.EasyApiConfigurable"
}

override fun getDisplayName(): String {
return "EasyApi"
}

override fun createGUI(): com.itangcent.idea.plugin.configurable.EasyApiSettingGUI {
return EasyApiSettingGUI()
}

override fun afterBuildActionContext(builder: ActionContext.ActionContextBuilder) {
super.afterBuildActionContext(builder)
builder.bind(PostmanSettingsHelper::class) { it.with(MemoryPostmanSettingsHelper::class).singleton() }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.itangcent.idea.plugin.configurable

import com.intellij.openapi.project.Project
import com.itangcent.idea.plugin.dialog.EasyApiSettingOtherGUI

class EasyApiOtherConfigurable(myProject: Project?) : AbstractEasyApiConfigurable(myProject) {

override fun getId(): String {
return "preference.EasyApiConfigurable.Other"
}

override fun getDisplayName(): String {
return "Other"
}

override fun createGUI(): EasyApiSettingGUI {
return EasyApiSettingOtherGUI()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.itangcent.idea.plugin.configurable

import com.intellij.openapi.project.Project
import com.itangcent.idea.plugin.dialog.EasyApiSettingRecommendGUI

class EasyApiRecommendConfigurable(myProject: Project?) : AbstractEasyApiConfigurable(myProject) {

override fun getId(): String {
return "preference.EasyApiConfigurable.Recommend"
}

override fun getDisplayName(): String {
return "Recommend"
}

override fun createGUI(): EasyApiSettingGUI {
return EasyApiSettingRecommendGUI()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.itangcent.idea.plugin.configurable

import com.intellij.openapi.project.Project
import com.itangcent.idea.plugin.dialog.EasyApiSettingBuiltInConfigGUI

class EasyApiSettingBuiltInConfigConfigurable(myProject: Project?) : AbstractEasyApiConfigurable(myProject) {

override fun getId(): String {
return "preference.EasyApiConfigurable.BuiltInConfig"
}

override fun getDisplayName(): String {
return "BuiltInConfig"
}

override fun createGUI(): EasyApiSettingGUI {
return EasyApiSettingBuiltInConfigGUI()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.itangcent.idea.plugin.configurable

import com.itangcent.idea.plugin.settings.Settings
import javax.swing.JComponent

interface EasyApiSettingGUI {
fun getRootPanel(): JComponent?

fun onCreate()

fun getSettings(): Settings

fun setSettings(settings: Settings)

fun readSettings(settings: Settings)
}
Loading

0 comments on commit c4c9c19

Please sign in to comment.