Skip to content

Commit 9b1e992

Browse files
committed
Allow to disable icons preview in ProjectView
1 parent 6875085 commit 9b1e992

File tree

8 files changed

+59
-20
lines changed

8 files changed

+59
-20
lines changed

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/icon/ImageVectorIconProvider.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.intellij.ide.IconProvider
44
import com.intellij.openapi.project.DumbAware
55
import com.intellij.psi.PsiElement
66
import com.intellij.psi.PsiFile
7+
import io.github.composegears.valkyrie.service.PersistentSettings.Companion.persistentSettings
78
import io.github.composegears.valkyrie.util.getOrCreateCachedIcon
89
import io.github.composegears.valkyrie.util.hasImageVectorProperties
910
import javax.swing.Icon
@@ -20,7 +21,11 @@ class ImageVectorIconProvider :
2021
else -> element.containingFile as? KtFile
2122
} ?: return null
2223

23-
if (!ktFile.hasImageVectorProperties()) {
24+
val project = element.project
25+
if (project.isDisposed) return null
26+
val showIconsInProjectView = project.persistentSettings.state.showIconsInProjectView
27+
28+
if (!showIconsInProjectView || !ktFile.hasImageVectorProperties()) {
2429
return null
2530
}
2631

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/service/PersistentSettings.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class PersistentSettings : SimplePersistentStateComponent<ValkyrieState>(Valkyri
4848
var addTrailingComma: Boolean by property(false)
4949

5050
var showImageVectorPreview: Boolean by property(true)
51+
var showIconsInProjectView: Boolean by property(true)
5152
var indentSize: Int by property(4)
5253
}
5354

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/settings/InMemorySettings.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class InMemorySettings(project: Project) {
5454
useExplicitMode = false
5555
addTrailingComma = false
5656
showImageVectorPreview = true
57+
showIconsInProjectView = true
5758
indentSize = 4
5859
}
5960

@@ -68,25 +69,26 @@ class InMemorySettings(project: Project) {
6869
useMaterialPack = useMaterialPack,
6970

7071
packageName = packageName.or("io.github.composegears.valkyrie"),
71-
iconPackPackage = iconPackPackage.or(packageName.or("io.github.composegears.valkyrie")),
7272
iconPackName = iconPackName.or("ValkyrieIcons"),
73+
iconPackPackage = iconPackPackage.or(packageName.or("io.github.composegears.valkyrie")),
7374
iconPackDestination = iconPackDestination.or(""),
7475

7576
nestedPacks = nestedPacks.orEmpty()
7677
.split(",")
7778
.filter { it.isNotEmpty() },
7879

79-
outputFormat = OutputFormat.from(outputFormat),
80-
8180
generatePreview = generatePreview,
8281
previewAnnotationType = PreviewAnnotationType.from(previewAnnotationType),
8382

84-
flatPackage = flatPackage,
83+
outputFormat = OutputFormat.from(outputFormat),
8584
useComposeColors = useComposeColors,
85+
indentSize = indentSize,
86+
flatPackage = flatPackage,
8687
useExplicitMode = useExplicitMode,
8788
addTrailingComma = addTrailingComma,
88-
indentSize = indentSize,
89+
8990
showImageVectorPreview = showImageVectorPreview,
91+
showIconsInProjectView = showIconsInProjectView,
9092
)
9193
}
9294
}
@@ -114,6 +116,7 @@ data class ValkyriesSettings(
114116
val addTrailingComma: Boolean,
115117

116118
val showImageVectorPreview: Boolean,
119+
val showIconsInProjectView: Boolean,
117120
)
118121

119122
fun PersistentSettings.ValkyrieState.updateNestedPack(packs: List<String>) {

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/settings/SettingsViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction
1515
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdateAddTrailingComma
1616
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdateExplicitMode
1717
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdateFlatPackage
18+
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdateIconsInProjectView
1819
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdateImageVectorPreview
1920
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdateIndentSize
2021
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdateOutputFormat
@@ -52,6 +53,7 @@ class SettingsViewModel : ViewModel() {
5253
PreviewSettings(
5354
previewType = it.previewType,
5455
showImageVectorPreview = it.showImageVectorPreview,
56+
showIconsInProjectView = it.showIconsInProjectView,
5557
)
5658
}
5759

@@ -61,6 +63,7 @@ class SettingsViewModel : ViewModel() {
6163
is UpdateUseComposeColors -> useComposeColors = settingsAction.useComposeColor
6264
is UpdateOutputFormat -> updateOutputFormat(settingsAction.outputFormat)
6365
is UpdateImageVectorPreview -> showImageVectorPreview = settingsAction.enabled
66+
is UpdateIconsInProjectView -> showIconsInProjectView = settingsAction.enabled
6467
is UpdateFlatPackage -> flatPackage = settingsAction.useFlatPackage
6568
is UpdateExplicitMode -> useExplicitMode = settingsAction.useExplicitMode
6669
is UpdateAddTrailingComma -> addTrailingComma = settingsAction.addTrailingComma
@@ -96,5 +99,6 @@ data class GeneralSettings(
9699

97100
data class PreviewSettings(
98101
val showImageVectorPreview: Boolean,
102+
val showIconsInProjectView: Boolean,
99103
val previewType: PreviewType,
100104
)

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/settings/model/SettingsAction.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ sealed interface SettingsAction {
1515
data class UpdateIndentSize(val indent: Int) : SettingsAction
1616

1717
data class UpdateImageVectorPreview(val enabled: Boolean) : SettingsAction
18+
data class UpdateIconsInProjectView(val enabled: Boolean) : SettingsAction
1819
data class UpdatePreviewType(val previewType: PreviewType) : SettingsAction
1920
}

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/ui/screen/settings/tabs/preview/ImageVectorPreviewSettingsScreen.kt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import io.github.composegears.valkyrie.ui.foundation.theme.PreviewTheme
2929
import io.github.composegears.valkyrie.ui.screen.settings.PreviewSettings
3030
import io.github.composegears.valkyrie.ui.screen.settings.SettingsViewModel
3131
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction
32+
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdateIconsInProjectView
3233
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdateImageVectorPreview
3334
import io.github.composegears.valkyrie.ui.screen.settings.model.SettingsAction.UpdatePreviewType
3435

@@ -76,6 +77,32 @@ private fun ImageVectorPreviewSettingsUi(
7677
)
7778
},
7879
)
80+
ListItem(
81+
modifier = Modifier
82+
.toggleable(
83+
value = previewSettings.showIconsInProjectView,
84+
onValueChange = { onAction(UpdateIconsInProjectView(it)) },
85+
)
86+
.padding(horizontal = 8.dp)
87+
.heightIn(max = 100.dp),
88+
headlineContent = {
89+
Text(text = "Show icons in Project View")
90+
},
91+
supportingContent = {
92+
Text(
93+
text = "Display ImageVector preview as file icons in the project tree. \nTo ensure the icon cache updates fully, it's recommended to restart the IDE.",
94+
style = MaterialTheme.typography.labelSmall.copy(fontSize = 10.sp),
95+
color = LocalContentColor.current.dim(),
96+
)
97+
},
98+
trailingContent = {
99+
Switch(
100+
modifier = Modifier.scale(0.9f),
101+
checked = previewSettings.showIconsInProjectView,
102+
onCheckedChange = { onAction(UpdateIconsInProjectView(it)) },
103+
)
104+
},
105+
)
79106
VerticalSpacer(16.dp)
80107
PreviewBgSection(
81108
previewType = previewSettings.previewType,
@@ -90,6 +117,7 @@ private fun ImageVectorPreviewSettingsPreview() = PreviewTheme(alignment = Align
90117
ImageVectorPreviewSettingsUi(
91118
previewSettings = PreviewSettings(
92119
showImageVectorPreview = true,
120+
showIconsInProjectView = true,
93121
previewType = PreviewType.Auto,
94122
),
95123
onAction = {},

tools/idea-plugin/src/main/kotlin/io/github/composegears/valkyrie/util/ImageVectorPsiUtil.kt

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,16 @@ fun KtFile.hasImageVectorProperties(): Boolean {
3434
}
3535

3636
/**
37-
* Gets or creates a cached icon for a Kotlin file containing an ImageVector.
38-
*
39-
* Uses the PSI caching mechanism to avoid recreating the icon repeatedly
40-
* for the same file, improving performance.
41-
*/
37+
* Gets or creates a cached icon for a Kotlin file containing an ImageVector.
38+
*
39+
* Uses the PSI caching mechanism to avoid recreating the icon repeatedly
40+
* for the same file, improving performance.
41+
*/
4242
fun KtFile.getOrCreateCachedIcon(): Icon? {
43-
return CachedValuesManager
44-
.getManager(project).getCachedValue(this) {
45-
val icon = createImageVectorIcon()
46-
CachedValueProvider.Result.create(icon, this)
47-
}
43+
return CachedValuesManager.getCachedValue(this) {
44+
val icon = createImageVectorIcon()
45+
CachedValueProvider.Result.create(icon, this)
46+
}
4847
}
4948

5049
/**
@@ -54,9 +53,7 @@ fun KtFile.getOrCreateCachedIcon(): Icon? {
5453
* for the same property, improving performance.
5554
*/
5655
fun KtProperty.getOrCreateGutterIcon(): Icon? {
57-
val cachedValuesManager = CachedValuesManager.getManager(project)
58-
59-
return cachedValuesManager.getCachedValue(this) {
56+
return CachedValuesManager.getCachedValue(this) {
6057
val icon = createIcon()
6158

6259
CachedValueProvider.Result.create(icon, this)

tools/idea-plugin/src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ Allows to create organized icon pack with an extension property of you pack obje
6969

7070
<codeInsight.lineMarkerProvider
7171
language="kotlin"
72-
implementationClass="io.github.composegears.valkyrie.gutter.ImageVectorGutterProvider" />
72+
implementationClass="io.github.composegears.valkyrie.gutter.ImageVectorGutterProvider"/>
7373

7474
<completion.contributor
7575
language="kotlin"

0 commit comments

Comments
 (0)