Skip to content

Commit 074f35f

Browse files
committed
feat(project setup): K2适配,优化项目配置流程及模块选择
1 parent 0ebda99 commit 074f35f

File tree

10 files changed

+228
-212
lines changed

10 files changed

+228
-212
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
kotlin.stdlib.default.dependency=false
22
pluginSinceBuild=243
3-
version=1.31-SNAPSHOT
3+
version=1.4-SNAPSHOT
44
kotlin.code.style=official
55

66
# 启用 Kotlin 增量编译以提高构建性能

src/main/kotlin/org/tabooproject/development/ProjectBuilder.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,35 @@ class ProjectBuilder : AbstractNewProjectWizardBuilder() {
5959
}
6060

6161
override fun cleanup() {
62+
// 在清理前保存当前配置为默认设置
63+
saveCurrentConfigurationAsDefaults()
64+
6265
super.cleanup()
6366
ConfigurationPropertiesStep.refreshTemporaryData()
6467
OptionalPropertiesStep.refreshTemporaryData()
6568
}
69+
70+
/**
71+
* 保存当前配置为默认设置
72+
*/
73+
private fun saveCurrentConfigurationAsDefaults() {
74+
val settings = org.tabooproject.development.settings.TabooLibProjectSettings.getInstance()
75+
val configProperty = ConfigurationPropertiesStep.property
76+
val optionalProperty = OptionalPropertiesStep.property
77+
78+
// 提取包名前缀
79+
val packagePrefix = if (configProperty.mainClass.contains(".")) {
80+
configProperty.mainClass.substringBeforeLast(".")
81+
.substringBeforeLast(".") // 获取包名前缀,去掉最后两级
82+
} else {
83+
"org.example" // 默认值
84+
}
85+
86+
settings.saveAsDefaults(
87+
packagePrefix = packagePrefix,
88+
author = optionalProperty.authors.firstOrNull() ?: "",
89+
selectedModules = configProperty.modules,
90+
templateMirror = configProperty.mirrorIndex
91+
)
92+
}
6693
}

src/main/kotlin/org/tabooproject/development/component/AddDeleteStringListPanel.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,35 @@ import com.intellij.ui.AddDeleteListPanel
1111
*/
1212
class AddDeleteStringListPanel(
1313
title: String,
14-
initial: List<String>,
14+
private val initialData: MutableList<String>,
1515
defaultHeight: Int = 175,
16-
) : AddDeleteListPanel<String>(title, initial), Disposable {
16+
) : AddDeleteListPanel<String>(title, initialData.toList()), Disposable {
1717

1818
init {
1919
preferredSize = preferredSize.apply {
2020
width += 300
2121
height += defaultHeight
2222
}
23+
24+
// 初始化时加载已有数据
25+
refreshData()
2326
}
2427

2528
override fun findItemToAdd(): String? {
2629
// 简单实现,可以扩展为输入对话框
2730
return null
2831
}
2932

33+
/**
34+
* 刷新面板数据以反映initialData的变化
35+
*/
36+
fun refreshData() {
37+
myListModel.clear()
38+
initialData.forEach { item ->
39+
myListModel.addElement(item)
40+
}
41+
}
42+
3043
fun export(): List<String> = listItems.map { it as String }
3144

3245
/**

src/main/kotlin/org/tabooproject/development/component/CheckModuleList.kt

Lines changed: 76 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class CheckModuleList : JScrollPane(), Disposable {
2121
isFocusable = false
2222
}
2323

24-
private val treeNode = TreeModel(root)
24+
private val treeNode: TreeModel? = TreeModel(root)
2525
var onModuleSelectionChanged: ((List<Module>) -> Unit)? = null
2626

2727
private val checkBoxList = CheckboxTreeBase(object : CheckboxTreeCellRenderer() {
@@ -82,22 +82,89 @@ class CheckModuleList : JScrollPane(), Disposable {
8282
setFocusable(false)
8383
autoscrolls = true
8484
setViewportView(checkBoxList)
85+
86+
updateUI()
8587
}
8688

8789
/**
8890
* 设置模块数据
8991
*/
9092
fun setModules(modules: Map<String, List<Module>>) {
9193
root.removeAllChildren()
92-
modules.forEach { (category, moduleList) ->
93-
val categoryNode = CheckedTreeNode(category)
94-
moduleList.forEach { module ->
95-
val moduleNode = CheckedTreeNode(module)
96-
categoryNode.add(moduleNode)
94+
modules.map {
95+
DefaultMutableTreeNode(it.key).apply {
96+
it.value.forEach {
97+
add(CheckedTreeNode(it).apply {
98+
isChecked = false
99+
isFocusable = false
100+
})
101+
}
102+
isFocusable = false
97103
}
98-
root.add(categoryNode)
104+
}.forEach {
105+
root.add(it)
106+
}
107+
108+
updateUI()
109+
}
110+
111+
/**
112+
* 设置指定模块的选中状态
113+
*/
114+
fun setModuleSelected(moduleId: String, selected: Boolean) {
115+
// 遍历树节点,找到对应的模块并设置选中状态
116+
findAndSetModuleSelection(root, moduleId, selected)
117+
treeNode?.reload()
118+
}
119+
120+
/**
121+
* 批量设置模块选中状态
122+
*/
123+
fun setSelectedModules(moduleIds: List<String>) {
124+
// 先清除所有选择
125+
clearAllSelections(root)
126+
127+
// 然后设置指定的模块为选中
128+
moduleIds.forEach { moduleId ->
129+
findAndSetModuleSelection(root, moduleId, true)
130+
}
131+
treeNode?.reload()
132+
133+
// 通知选择变更
134+
onModuleSelectionChanged?.invoke(export())
135+
}
136+
137+
/**
138+
* 递归查找并设置模块选中状态
139+
*/
140+
private fun findAndSetModuleSelection(node: CheckedTreeNode, moduleId: String, selected: Boolean) {
141+
// 检查当前节点
142+
if (node.userObject is Module && (node.userObject as Module).id == moduleId) {
143+
node.isChecked = selected
144+
return
145+
}
146+
147+
// 递归检查子节点
148+
for (i in 0 until node.childCount) {
149+
val child = node.getChildAt(i) as? DefaultMutableTreeNode ?: continue
150+
for (j in 0 until child.childCount) {
151+
val treeNode = child.getChildAt(j) as? CheckedTreeNode ?: continue
152+
if ((treeNode.userObject as? Module)?.id == moduleId) {
153+
treeNode.isChecked = selected
154+
}
155+
}
156+
}
157+
}
158+
159+
/**
160+
* 清除所有选择
161+
*/
162+
private fun clearAllSelections(node: CheckedTreeNode) {
163+
node.isChecked = false
164+
for (i in 0 until node.childCount) {
165+
val child = node.getChildAt(i) as? CheckedTreeNode ?: continue
166+
clearAllSelections(child)
99167
}
100-
treeNode.reload()
101168
}
102169

103170
/**
@@ -114,6 +181,7 @@ class CheckModuleList : JScrollPane(), Disposable {
114181
*/
115182
override fun updateUI() {
116183
super.updateUI()
184+
treeNode?.reload()
117185
}
118186

119187
override fun dispose() {

src/main/kotlin/org/tabooproject/development/component/CheckModulePanel.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.tabooproject.development.component
22

33
import com.intellij.openapi.Disposable
4+
import com.intellij.openapi.observable.util.whenSizeChanged
45
import com.intellij.openapi.util.Disposer
56
import com.intellij.ui.components.JBList
67
import com.intellij.ui.components.JBPanel
@@ -19,12 +20,11 @@ import javax.swing.JPanel
1920
* @since 1.31
2021
*/
2122
class CheckModulePanel(
22-
displayModuleList: DisplayModuleList = DisplayModuleList()
23+
private val displayModuleList: DisplayModuleList = DisplayModuleList()
2324
) : JBPanel<CheckModulePanel>(), Disposable {
2425

2526
private val checkModuleList = CheckModuleList()
26-
private val displayModuleList = displayModuleList
27-
27+
2828
private val checkModuleScrollPane = JBScrollPane(checkModuleList)
2929
private val displayModuleScrollPane = JBScrollPane(displayModuleList)
3030

@@ -68,6 +68,15 @@ class CheckModulePanel(
6868
*/
6969
fun setModules(modules: Map<String, List<Module>>) {
7070
checkModuleList.setModules(modules)
71+
72+
checkModuleScrollPane.size = checkModuleScrollPane.preferredSize
73+
}
74+
75+
/**
76+
* 设置选中的模块
77+
*/
78+
fun setSelectedModules(moduleIds: List<String>) {
79+
checkModuleList.setSelectedModules(moduleIds)
7180
}
7281

7382
/**

src/main/kotlin/org/tabooproject/development/settings/TabooLibProjectSettingsConfigurable.kt

Lines changed: 0 additions & 118 deletions
This file was deleted.

0 commit comments

Comments
 (0)