Skip to content

Commit 62e3aae

Browse files
author
dengzi
committed
create from default module template
1 parent 85faf6f commit 62e3aae

10 files changed

Lines changed: 202 additions & 90 deletions

File tree

resources/META-INF/plugin.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
<extensions defaultExtensionNs="com.intellij">
2626
<fileTemplateGroup implementation="com.dengzii.plugin.template.template.FileTemplateFactory" order="first"/>
2727
<internalFileTemplate name="AndroidManifest" id="com.dengzii.plugin.template.ft.manifest"/>
28-
<applicationConfigurable groupId="tools" displayName="Directory Template Settings"
28+
<applicationConfigurable groupId="tools" displayName="Module Template Settings"
2929
id="preferences.ModuleTemplateConfig"
30-
instance="com.dengzii.plugin.template.ui.ConfigurePanel"/>
30+
instance="com.dengzii.plugin.template.TemplateConfigurable"/>
3131
</extensions>
3232

3333
<actions>

src/com/dengzii/plugin/template/Config.kt

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.dengzii.plugin.template
22

33
import com.dengzii.plugin.template.model.FileTreeNode
44
import com.dengzii.plugin.template.model.Module
5-
import com.dengzii.plugin.template.template.AucTemplate
65
import com.dengzii.plugin.template.template.Template
76
import com.dengzii.plugin.template.utils.Logger
87
import com.google.gson.GsonBuilder
@@ -27,29 +26,23 @@ object Config {
2726
private val GSON by lazy { GsonBuilder().setLenient().create() }
2827
private val STORE by lazy { PropertiesComponent.getInstance() }
2928

30-
private val AUC_MODULE_TEMPLATES = listOf(
31-
Module.create(AucTemplate.MODULE, "Auc Feature Module"),
32-
Module.create(AucTemplate.APP, "Auc App Module"),
33-
Module.create(AucTemplate.PKG, "Auc Pkg Module"),
34-
Module.create(AucTemplate.EXPORT, "Auc Export Module")
35-
)
36-
37-
val TEMPLATE_ANDROID_APPLICATION = Module.create(Template.ANDROID_APP, "Android Application")
38-
3929
fun clear() = STORE.unsetValue(KEY_TEMPLATES)
4030

4131
fun loadModuleTemplates(): MutableList<Module> {
4232
val result = mutableListOf<Module>()
4333
val arr = STORE.getValues(KEY_TEMPLATES)
4434

4535
if (STORE.getBoolean(KEY_INIT)) {
46-
Logger.i(TAG, "INIT...")
47-
result.addAll(AUC_MODULE_TEMPLATES)
36+
Logger.i(TAG, "INIT... load AucFrame template")
37+
result.add(Module.getAucModule())
38+
result.add(Module.getAucApp())
39+
result.add(Module.getAucExport())
40+
result.add(Module.getAucPkg())
4841
}
4942
if (arr.isNullOrEmpty()) {
5043
return result
5144
}
52-
Logger.d(TAG, "loadModuleTemplates")
45+
Logger.i(TAG, "loadModuleTemplates")
5346
arr.forEach {
5447
try {
5548
val module = GSON.fromJson(it, Module::class.java)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.dengzii.plugin.template
2+
3+
import com.dengzii.plugin.template.ui.ConfigurePanel
4+
import com.intellij.openapi.options.SearchableConfigurable
5+
import org.jetbrains.annotations.Nls
6+
import javax.swing.JComponent
7+
8+
/**
9+
* <pre>
10+
* author : dengzi
11+
* e-mail : denua@foxmail.com
12+
* github : https://github.com/MrDenua
13+
* time : 2020/1/16
14+
* desc :
15+
* </pre>
16+
*/
17+
class TemplateConfigurable() : SearchableConfigurable {
18+
19+
private lateinit var panelConfig: ConfigurePanel
20+
private var onApplyListener: OnApplyListener? = null
21+
22+
constructor(onApplyListener: OnApplyListener) : this() {
23+
this.onApplyListener = onApplyListener
24+
}
25+
26+
override fun apply() {
27+
panelConfig.cacheConfig()
28+
panelConfig.saveConfig()
29+
onApplyListener?.onApply()
30+
}
31+
32+
override fun getId(): String {
33+
return "preferences.ModuleTemplateConfig"
34+
}
35+
36+
override fun createComponent(): JComponent? {
37+
panelConfig = ConfigurePanel()
38+
return panelConfig
39+
}
40+
41+
override fun isModified(): Boolean {
42+
return true
43+
}
44+
45+
@Nls(capitalization = Nls.Capitalization.Title)
46+
override fun getDisplayName(): String? {
47+
return "Module Template Settings"
48+
}
49+
50+
interface OnApplyListener {
51+
fun onApply()
52+
}
53+
}
Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.dengzii.plugin.template.model
22

3+
import com.dengzii.plugin.template.template.AucTemplate
4+
import com.dengzii.plugin.template.template.Template
35
import com.dengzii.plugin.template.utils.Logger
46

57
class Module(
@@ -8,20 +10,46 @@ class Module(
810
var templateName: String
911
) {
1012

11-
enum class Language {
12-
JAVA;
13-
}
14-
15-
fun clone(): Module {
16-
return create(template.clone(), templateName)
17-
}
18-
1913
companion object {
14+
2015
fun create(template: FileTreeNode, templateName: String): Module {
2116
Logger.i(Module::class.java.simpleName, "create module. templateName=$templateName")
2217
return Module(template, "java", templateName)
2318
}
2419

20+
fun getAndroidApplication(): Module {
21+
return create(Template.ANDROID_APP.clone(), "AndroidApp")
22+
}
23+
24+
fun getEmpty(): Module {
25+
return create(Template.EMPTY.clone(), "EmptyModule")
26+
}
27+
28+
fun getAucModule(): Module {
29+
return create(AucTemplate.MODULE.clone(), "Auc Module")
30+
}
31+
32+
fun getAucApp(): Module {
33+
return create(AucTemplate.APP.clone(), "Auc App")
34+
}
35+
36+
fun getAucPkg(): Module {
37+
return create(AucTemplate.PKG.clone(), "Auc Pkg")
38+
}
39+
40+
fun getAucExport(): Module {
41+
return create(AucTemplate.EXPORT.clone(), "Auc Export")
42+
}
43+
2544
fun getLangList() = Language.values().map { it.name.toLowerCase() }.toTypedArray()
2645
}
46+
47+
enum class Language {
48+
JAVA;
49+
}
50+
51+
fun clone(): Module {
52+
return create(template.clone(), templateName)
53+
}
54+
2755
}

src/com/dengzii/plugin/template/template/Template.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ object Template {
3232
}
3333
}
3434

35+
val EMPTY = FileTreeNode {
36+
src
37+
}
38+
3539
val ANDROID_APP = FileTreeNode {
3640
placeholder(Placeholder.MODULE_NAME.value("app"))
3741
placeholder(Placeholder.PACKAGE_NAME.value("com.example"))

src/com/dengzii/plugin/template/ui/ConfigurePanel.java

Lines changed: 40 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22

33
import com.dengzii.plugin.template.Config;
44
import com.dengzii.plugin.template.model.Module;
5-
import com.intellij.openapi.options.SearchableConfigurable;
5+
import com.dengzii.plugin.template.utils.PopMenuUtils;
66
import com.intellij.ui.DocumentAdapter;
77
import com.intellij.ui.components.JBList;
88
import com.intellij.ui.components.JBTabbedPane;
9-
import org.jetbrains.annotations.Nls;
109
import org.jetbrains.annotations.NotNull;
11-
import org.jetbrains.annotations.Nullable;
1210

1311
import javax.swing.*;
1412
import javax.swing.event.DocumentEvent;
1513
import java.awt.*;
14+
import java.awt.event.MouseAdapter;
15+
import java.awt.event.MouseEvent;
16+
import java.util.HashMap;
1617
import java.util.List;
18+
import java.util.Map;
1719

1820
/**
1921
* <pre>
@@ -24,7 +26,7 @@
2426
* desc :
2527
* </pre>
2628
*/
27-
public class ConfigurePanel extends JPanel implements SearchableConfigurable {
29+
public class ConfigurePanel extends JPanel {
2830

2931
private JPanel contentPane;
3032

@@ -55,6 +57,16 @@ public ConfigurePanel() {
5557
initData();
5658
}
5759

60+
public void cacheConfig() {
61+
if (currentConfig == null) return;
62+
currentConfig.getTemplate().setFileTemplates(tableFileTemp.getPairResult());
63+
currentConfig.getTemplate().setPlaceholders(tablePlaceholder.getPairResult());
64+
}
65+
66+
public void saveConfig() {
67+
Config.INSTANCE.saveModuleTemplates(configs);
68+
}
69+
5870
private void initComponent() {
5971
setLayout(new BorderLayout());
6072
add(contentPane);
@@ -70,9 +82,11 @@ private void initComponent() {
7082

7183
private void initData() {
7284

73-
actionbar.onAdd(() -> {
74-
onAddConfig();
75-
return null;
85+
actionbar.onAdd(new MouseAdapter() {
86+
@Override
87+
public void mouseClicked(MouseEvent e) {
88+
onAddConfig(e);
89+
}
7690
});
7791
actionbar.onRemove(() -> {
7892
onRemoveConfig();
@@ -114,12 +128,23 @@ private void onChangeTab() {
114128
panelPreview.setModuleConfig(currentConfig);
115129
}
116130

117-
private void onAddConfig() {
118-
Module newConfig = Config.INSTANCE.getTEMPLATE_ANDROID_APPLICATION().clone();
119-
configs.add(newConfig);
120-
templateListModel.addElement(newConfig.getTemplateName());
131+
private void onAddConfig(MouseEvent e) {
132+
133+
Map<String, PopMenuUtils.PopMenuListener> items = new HashMap<>();
134+
items.put("Empty Template", () -> addModuleTemplate(Module.Companion.getEmpty()));
135+
items.put("Android Application", () -> addModuleTemplate(Module.Companion.getAndroidApplication()));
136+
items.put("Auc Module", () -> addModuleTemplate(Module.Companion.getAucModule()));
137+
items.put("Auc app", () -> addModuleTemplate(Module.Companion.getAucApp()));
138+
items.put("Auc Pkg", () -> addModuleTemplate(Module.Companion.getAucPkg()));
139+
items.put("Auc Export", () -> addModuleTemplate(Module.Companion.getAucExport()));
140+
PopMenuUtils.INSTANCE.create(items).show(actionbar, e.getX(), e.getY());
141+
}
142+
143+
private void addModuleTemplate(Module module) {
144+
configs.add(module);
145+
templateListModel.addElement(module.getTemplateName());
121146
listTemplate.doLayout();
122-
listTemplate.setSelectedIndex(configs.indexOf(newConfig));
147+
listTemplate.setSelectedIndex(configs.indexOf(module));
123148
}
124149

125150
private void onRemoveConfig() {
@@ -147,6 +172,9 @@ private void loadConfig() {
147172
configs = Config.INSTANCE.loadModuleTemplates();
148173
templateListModel = new DefaultListModel<>();
149174
configs.forEach(module -> templateListModel.addElement(module.getTemplateName()));
175+
if (templateListModel.size() > 0) {
176+
listTemplate.setSelectedIndex(0);
177+
}
150178
}
151179

152180
private void onConfigSelect(int index) {
@@ -165,55 +193,11 @@ private void onConfigSelect(int index) {
165193
tablePlaceholder.setPairData(currentConfig.getTemplate().getPlaceholders());
166194
}
167195

168-
private void cacheConfig() {
169-
if (currentConfig == null) return;
170-
currentConfig.getTemplate().setFileTemplates(tableFileTemp.getPairResult());
171-
currentConfig.getTemplate().setPlaceholders(tablePlaceholder.getPairResult());
172-
}
173-
174196
private int getSelectedConfigIndex() {
175197
return listTemplate.getSelectedIndex();
176198
}
177199

178200
private boolean noSelectedConfig() {
179201
return getSelectedConfigIndex() == -1;
180202
}
181-
182-
183-
/////////////////////////////////////////////////////////////////////////////////////////
184-
// Implement SearchableConfigurable
185-
186-
@Override
187-
public void apply() {
188-
if (panelConfig != null) {
189-
panelConfig.apply();
190-
return;
191-
}
192-
cacheConfig();
193-
Config.INSTANCE.saveModuleTemplates(configs);
194-
}
195-
196-
@NotNull
197-
@Override
198-
public String getId() {
199-
return "preferences.ModuleTemplateConfig";
200-
}
201-
202-
@Nullable
203-
@Override
204-
public JComponent createComponent() {
205-
panelConfig = new ConfigurePanel();
206-
return panelConfig;
207-
}
208-
209-
@Override
210-
public boolean isModified() {
211-
return true;
212-
}
213-
214-
@Nls(capitalization = Nls.Capitalization.Title)
215-
@Override
216-
public String getDisplayName() {
217-
return "Directory Template";
218-
}
219203
}

src/com/dengzii/plugin/template/ui/CreateModuleDialog.form

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
<properties/>
7373
<border type="none"/>
7474
<children>
75-
<component id="16b27" class="javax.swing.JComboBox" binding="cbModuleType">
75+
<component id="16b27" class="javax.swing.JComboBox" binding="cbModuleTemplate">
7676
<constraints border-constraint="Center"/>
7777
<properties>
7878
<font size="12"/>

0 commit comments

Comments
 (0)