|
| 1 | +package com.typescriptdefinitiongenerator.rider |
| 2 | + |
| 3 | +import com.intellij.openapi.options.Configurable |
| 4 | +import com.intellij.openapi.options.SearchableConfigurable |
| 5 | +import com.intellij.ui.components.JBCheckBox |
| 6 | +import com.intellij.ui.components.JBTextField |
| 7 | +import com.intellij.util.ui.JBUI |
| 8 | +import java.awt.BorderLayout |
| 9 | +import java.awt.GridBagConstraints |
| 10 | +import java.awt.GridBagLayout |
| 11 | +import java.awt.Insets |
| 12 | +import javax.swing.JComponent |
| 13 | +import javax.swing.JLabel |
| 14 | +import javax.swing.JPanel |
| 15 | +import javax.swing.JSeparator |
| 16 | +import javax.swing.JSpinner |
| 17 | +import javax.swing.SpinnerNumberModel |
| 18 | + |
| 19 | +class TsDefGenSettingsConfigurable : SearchableConfigurable { |
| 20 | + |
| 21 | + private var mainPanel: JPanel? = null |
| 22 | + private lateinit var camelCaseEnumerationValues: JBCheckBox |
| 23 | + private lateinit var camelCasePropertyNames: JBCheckBox |
| 24 | + private lateinit var camelCaseTypeNames: JBCheckBox |
| 25 | + private lateinit var webEssentials2015: JBCheckBox |
| 26 | + private lateinit var classInsteadOfInterface: JBCheckBox |
| 27 | + private lateinit var defaultModuleName: JBTextField |
| 28 | + private lateinit var useNamespace: JBCheckBox |
| 29 | + private lateinit var declareModule: JBCheckBox |
| 30 | + private lateinit var ignoreIntellisense: JBCheckBox |
| 31 | + private lateinit var eolType: javax.swing.JComboBox<EOLType> |
| 32 | + private lateinit var indentTab: JBCheckBox |
| 33 | + private lateinit var indentTabSize: JSpinner |
| 34 | + |
| 35 | + override fun getId(): String = "com.typescriptdefinitiongenerator.rider.TsDefGenSettingsConfigurable" |
| 36 | + |
| 37 | + override fun getDisplayName(): String = "TypeScript Definition Generator" |
| 38 | + |
| 39 | + override fun createComponent(): JComponent { |
| 40 | + val settings = TsDefGenSettingsService.getInstance().state |
| 41 | + camelCaseEnumerationValues = JBCheckBox("Camel case enum values", settings.camelCaseEnumerationValues) |
| 42 | + camelCasePropertyNames = JBCheckBox("Camel case property names", settings.camelCasePropertyNames) |
| 43 | + camelCaseTypeNames = JBCheckBox("Camel case type names", settings.camelCaseTypeNames) |
| 44 | + webEssentials2015 = JBCheckBox("Web Essentials 2015 file names (<filename>.cs.d.ts)", settings.webEssentials2015) |
| 45 | + classInsteadOfInterface = JBCheckBox("Class instead of Interface", settings.classInsteadOfInterface) |
| 46 | + defaultModuleName = JBTextField(settings.defaultModuleName, 30) |
| 47 | + useNamespace = JBCheckBox("Use Namespace", settings.useNamespace) |
| 48 | + declareModule = JBCheckBox("Declare module", settings.declareModule) |
| 49 | + ignoreIntellisense = JBCheckBox("Ignore intellisense for client side reference names", settings.ignoreIntellisense) |
| 50 | + eolType = javax.swing.JComboBox<EOLType>(EOLType.entries.toTypedArray()).apply { |
| 51 | + selectedItem = EOLType.entries.find { it.name == settings.eolType } ?: EOLType.LF |
| 52 | + } |
| 53 | + indentTab = JBCheckBox("Indent Tab (use Space when unchecked)", settings.indentTab) |
| 54 | + indentTabSize = JSpinner(SpinnerNumberModel(settings.indentTabSize.coerceIn(1, 8), 1, 8, 1)) |
| 55 | + |
| 56 | + defaultModuleName.toolTipText = "Set the top-level module name for the generated .d.ts file. Default is \"Server.Dtos\"" |
| 57 | + useNamespace.toolTipText = "Use Namespace by default, otherwise \"Default Module name\" will be taken." |
| 58 | + classInsteadOfInterface.toolTipText = "Controls whether to generate a class or an interface: default is an Interface" |
| 59 | + declareModule.toolTipText = "Controls whether to generate types in declared module or without one, but with export" |
| 60 | + ignoreIntellisense.toolTipText = "Ignore intellisense for client side reference names" |
| 61 | + indentTab.toolTipText = "Choose indentation to use Tab/Space: default is Tab" |
| 62 | + indentTabSize.toolTipText = "Set amount Spaces to replace the Tab, when Indent Tab is off" |
| 63 | + mainPanel = JPanel(GridBagLayout()).apply { |
| 64 | + val c = GridBagConstraints().apply { fill = GridBagConstraints.HORIZONTAL; weightx = 1.0; insets = Insets(2, 0, 2, 0) } |
| 65 | + fun addRow(comp: JComponent) { c.gridwidth = GridBagConstraints.REMAINDER; add(comp, c) } |
| 66 | + fun addLabeled(label: String, comp: JComponent) { |
| 67 | + c.gridwidth = 1; c.weightx = 0.0; add(JLabel(label), c) |
| 68 | + c.gridwidth = GridBagConstraints.REMAINDER; c.weightx = 1.0; add(comp, c) |
| 69 | + } |
| 70 | + addRow(JLabel("Casing").apply { font = font.deriveFont(java.awt.Font.BOLD) }) |
| 71 | + addRow(camelCaseEnumerationValues) |
| 72 | + addRow(camelCasePropertyNames) |
| 73 | + addRow(camelCaseTypeNames) |
| 74 | + addRow(JSeparator()) |
| 75 | + addRow(JLabel("Compatibility").apply { font = font.deriveFont(java.awt.Font.BOLD) }) |
| 76 | + addRow(webEssentials2015) |
| 77 | + addRow(JSeparator()) |
| 78 | + addRow(JLabel("Settings").apply { font = font.deriveFont(java.awt.Font.BOLD) }) |
| 79 | + addLabeled("Default Module name:", defaultModuleName) |
| 80 | + addRow(useNamespace) |
| 81 | + addRow(classInsteadOfInterface) |
| 82 | + addRow(declareModule) |
| 83 | + addRow(ignoreIntellisense) |
| 84 | + addLabeled("End Of Line (EOL):", eolType) |
| 85 | + addRow(indentTab) |
| 86 | + addLabeled("Indent Tab Size:", indentTabSize) |
| 87 | + border = JBUI.Borders.empty(10, 10, 10, 10) |
| 88 | + } |
| 89 | + return JPanel(BorderLayout()).apply { add(mainPanel, BorderLayout.CENTER) } |
| 90 | + } |
| 91 | + |
| 92 | + override fun isModified(): Boolean { |
| 93 | + val s = TsDefGenSettingsService.getInstance().state |
| 94 | + return camelCaseEnumerationValues.isSelected != s.camelCaseEnumerationValues || |
| 95 | + camelCasePropertyNames.isSelected != s.camelCasePropertyNames || |
| 96 | + camelCaseTypeNames.isSelected != s.camelCaseTypeNames || |
| 97 | + webEssentials2015.isSelected != s.webEssentials2015 || |
| 98 | + classInsteadOfInterface.isSelected != s.classInsteadOfInterface || |
| 99 | + defaultModuleName.text != s.defaultModuleName || |
| 100 | + useNamespace.isSelected != s.useNamespace || |
| 101 | + declareModule.isSelected != s.declareModule || |
| 102 | + ignoreIntellisense.isSelected != s.ignoreIntellisense || |
| 103 | + (eolType.selectedItem as EOLType).name != s.eolType || |
| 104 | + indentTab.isSelected != s.indentTab || |
| 105 | + (indentTabSize.value as Int) != s.indentTabSize |
| 106 | + } |
| 107 | + |
| 108 | + override fun apply() { |
| 109 | + val s = TsDefGenSettingsService.getInstance().state |
| 110 | + s.camelCaseEnumerationValues = camelCaseEnumerationValues.isSelected |
| 111 | + s.camelCasePropertyNames = camelCasePropertyNames.isSelected |
| 112 | + s.camelCaseTypeNames = camelCaseTypeNames.isSelected |
| 113 | + s.webEssentials2015 = webEssentials2015.isSelected |
| 114 | + s.classInsteadOfInterface = classInsteadOfInterface.isSelected |
| 115 | + s.defaultModuleName = defaultModuleName.text.trim().ifEmpty { "Server.Dtos" } |
| 116 | + s.useNamespace = useNamespace.isSelected |
| 117 | + s.declareModule = declareModule.isSelected |
| 118 | + s.ignoreIntellisense = ignoreIntellisense.isSelected |
| 119 | + s.eolType = (eolType.selectedItem as EOLType).name |
| 120 | + s.indentTab = indentTab.isSelected |
| 121 | + s.indentTabSize = (indentTabSize.value as Int).coerceIn(1, 8) |
| 122 | + } |
| 123 | + |
| 124 | + override fun reset() { |
| 125 | + val s = TsDefGenSettingsService.getInstance().state |
| 126 | + camelCaseEnumerationValues.isSelected = s.camelCaseEnumerationValues |
| 127 | + camelCasePropertyNames.isSelected = s.camelCasePropertyNames |
| 128 | + camelCaseTypeNames.isSelected = s.camelCaseTypeNames |
| 129 | + webEssentials2015.isSelected = s.webEssentials2015 |
| 130 | + classInsteadOfInterface.isSelected = s.classInsteadOfInterface |
| 131 | + defaultModuleName.text = s.defaultModuleName |
| 132 | + useNamespace.isSelected = s.useNamespace |
| 133 | + declareModule.isSelected = s.declareModule |
| 134 | + ignoreIntellisense.isSelected = s.ignoreIntellisense |
| 135 | + eolType.selectedItem = EOLType.entries.find { it.name == s.eolType } ?: EOLType.LF |
| 136 | + indentTab.isSelected = s.indentTab |
| 137 | + indentTabSize.value = s.indentTabSize |
| 138 | + } |
| 139 | + |
| 140 | + override fun disposeUIResources() { |
| 141 | + mainPanel = null |
| 142 | + } |
| 143 | +} |
0 commit comments