Skip to content

Commit 97746ce

Browse files
committed
Refactor template handling in feature and module dialogs for improved clarity and consistency
1 parent 57bacd8 commit 97746ce

6 files changed

Lines changed: 214 additions & 105 deletions

File tree

src/main/kotlin/com/github/cnrture/quickprojectwizard/common/Constants.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ import freemarker.template.Version
66
object Constants {
77
const val EMPTY = ""
88

9-
const val FEATURE_MAKER_WINDOW_WIDTH = 700
10-
const val FEATURE_MAKER_WINDOW_HEIGHT = 500
11-
129
const val ANDROID = "Android"
1310
const val KOTLIN = "Kotlin / JVM"
1411

src/main/kotlin/com/github/cnrture/quickprojectwizard/data/SettingsService.kt

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,34 @@ import kotlinx.serialization.json.Json
1212
@Service(Service.Level.APP)
1313
class SettingsService : PersistentStateComponent<SettingsState> {
1414
private var myState = SettingsState()
15-
override fun getState(): SettingsState = myState
15+
16+
init {
17+
if (myState.moduleTemplates.isEmpty()) {
18+
myState.moduleTemplates.addAll(getDefaultModuleTemplates())
19+
}
20+
if (myState.featureTemplates.isEmpty()) {
21+
myState.featureTemplates.addAll(getDefaultFeatureTemplates())
22+
}
23+
}
24+
25+
override fun getState(): SettingsState {
26+
if (myState.moduleTemplates.isEmpty()) {
27+
myState.moduleTemplates.addAll(getDefaultModuleTemplates())
28+
}
29+
if (myState.featureTemplates.isEmpty()) {
30+
myState.featureTemplates.addAll(getDefaultFeatureTemplates())
31+
}
32+
return myState
33+
}
34+
1635
override fun loadState(state: SettingsState) {
1736
myState = state
37+
if (myState.moduleTemplates.isEmpty()) {
38+
myState.moduleTemplates.addAll(getDefaultModuleTemplates())
39+
}
40+
if (myState.featureTemplates.isEmpty()) {
41+
myState.featureTemplates.addAll(getDefaultFeatureTemplates())
42+
}
1843
}
1944

2045
fun saveTemplate(template: ModuleTemplate) {
@@ -67,6 +92,12 @@ class SettingsService : PersistentStateComponent<SettingsState> {
6792
return try {
6893
val importedState = Json.decodeFromString(SettingsState.serializer(), jsonString)
6994
myState = importedState
95+
if (myState.moduleTemplates.isEmpty()) {
96+
myState.moduleTemplates.addAll(getDefaultModuleTemplates())
97+
}
98+
if (myState.featureTemplates.isEmpty()) {
99+
myState.featureTemplates.addAll(getDefaultFeatureTemplates())
100+
}
70101
true
71102
} catch (e: Exception) {
72103
false
@@ -91,6 +122,20 @@ class SettingsService : PersistentStateComponent<SettingsState> {
91122
false
92123
}
93124
}
125+
126+
fun getModuleTemplates(): List<ModuleTemplate> {
127+
if (myState.moduleTemplates.isEmpty()) {
128+
myState.moduleTemplates.addAll(getDefaultModuleTemplates())
129+
}
130+
return myState.moduleTemplates
131+
}
132+
133+
fun getFeatureTemplates(): List<FeatureTemplate> {
134+
if (myState.featureTemplates.isEmpty()) {
135+
myState.featureTemplates.addAll(getDefaultFeatureTemplates())
136+
}
137+
return myState.featureTemplates
138+
}
94139
}
95140

96141
@Serializable
@@ -118,8 +163,8 @@ data class SettingsState(
118163

119164
@Serializable
120165
data class ModuleTemplate(
121-
val id: String = "",
122-
val name: String = "",
166+
val id: String,
167+
val name: String,
123168
val fileTemplates: List<FileTemplate> = emptyList(),
124169
val isDefault: Boolean = false,
125170
)
@@ -133,8 +178,8 @@ data class FileTemplate(
133178

134179
@Serializable
135180
data class FeatureTemplate(
136-
val id: String = "",
137-
val name: String = "",
181+
val id: String,
182+
val name: String,
138183
val fileTemplates: List<FileTemplate> = emptyList(),
139184
val isDefault: Boolean = false,
140185
)

src/main/kotlin/com/github/cnrture/quickprojectwizard/dialog/FeatureMakerDialog.kt

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.github.cnrture.quickprojectwizard.dialog
22

3-
import androidx.compose.foundation.BorderStroke
4-
import androidx.compose.foundation.background
5-
import androidx.compose.foundation.clickable
3+
import androidx.compose.foundation.*
64
import androidx.compose.foundation.layout.*
75
import androidx.compose.foundation.shape.RoundedCornerShape
86
import androidx.compose.material.Card
@@ -30,7 +28,6 @@ import com.github.cnrture.quickprojectwizard.common.rootDirectoryStringDropLast
3028
import com.github.cnrture.quickprojectwizard.components.*
3129
import com.github.cnrture.quickprojectwizard.data.FeatureTemplate
3230
import com.github.cnrture.quickprojectwizard.data.SettingsService
33-
import com.github.cnrture.quickprojectwizard.data.getDefaultFeatureTemplates
3431
import com.github.cnrture.quickprojectwizard.theme.QPWTheme
3532
import com.intellij.openapi.application.ApplicationManager
3633
import com.intellij.openapi.components.service
@@ -42,8 +39,8 @@ class FeatureMakerDialog(
4239
private val project: Project,
4340
startingLocation: VirtualFile?,
4441
) : QPWDialogWrapper(
45-
width = Constants.FEATURE_MAKER_WINDOW_WIDTH,
46-
height = Constants.FEATURE_MAKER_WINDOW_HEIGHT,
42+
width = 600,
43+
height = 540,
4744
) {
4845

4946
private val fileWriter = FileWriter()
@@ -100,19 +97,8 @@ class FeatureMakerDialog(
10097
val selectedSrc = remember { selectedSrc }
10198
val featureName = remember { featureName }
10299
val settings = ApplicationManager.getApplication().service<SettingsService>()
103-
val defaultTemplate = remember { settings.getDefaultFeatureTemplate() }
104-
val availableTemplates = remember {
105-
val currentTemplates = settings.state.featureTemplates.toMutableList()
106-
if (currentTemplates.isEmpty()) {
107-
currentTemplates.addAll(getDefaultFeatureTemplates())
108-
}
109-
currentTemplates
110-
}
111-
var selectedTemplate by remember {
112-
mutableStateOf(
113-
defaultTemplate ?: if (availableTemplates.isNotEmpty()) availableTemplates.first() else null
114-
)
115-
}
100+
var selectedTemplate by remember { mutableStateOf(settings.getDefaultFeatureTemplate()) }
101+
val availableTemplates = remember { settings.getFeatureTemplates() }
116102

117103
Scaffold(
118104
modifier = modifier,
@@ -150,7 +136,9 @@ class FeatureMakerDialog(
150136
}
151137
) { padding ->
152138
Column(
153-
modifier = Modifier.fillMaxSize(),
139+
modifier = Modifier
140+
.fillMaxSize()
141+
.verticalScroll(rememberScrollState()),
154142
) {
155143
QPWText(
156144
text = "Selected root: ${selectedSrc.value}",
@@ -167,9 +155,9 @@ class FeatureMakerDialog(
167155
TemplateSelectionContent(
168156
templates = availableTemplates,
169157
selectedTemplate = selectedTemplate,
170-
defaultTemplateId = defaultTemplate?.id ?: "",
158+
defaultTemplateId = settings.getDefaultFeatureTemplate()?.id.orEmpty(),
171159
onTemplateSelected = { template ->
172-
selectedTemplate = template ?: defaultTemplate
160+
selectedTemplate = template ?: settings.getDefaultFeatureTemplate()
173161
}
174162
)
175163
}

0 commit comments

Comments
 (0)