Skip to content

Commit 4fb3fd1

Browse files
committed
feat: Add language and theme selection dropdowns in settings window
1 parent 44b61b6 commit 4fb3fd1

3 files changed

Lines changed: 44 additions & 4 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ coroutines.version=1.10.2
1212

1313
api.version=1.10.0
1414
core.version=1.13.0
15-
ui.version=1.13.4
15+
ui.version=1.13.5
1616
app.version=1.3.4

ui/src/main/kotlin/dev/paulee/ui/components/DropDown.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ fun ButtonDropDown(
7373
trigger = { openMenu ->
7474
Button(
7575
onClick = openMenu,
76-
modifier = Modifier.padding(16.dp)
7776
) {
7877
Text(selected)
7978
}

ui/src/main/kotlin/dev/paulee/ui/windows/SettingsWindow.kt

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import androidx.compose.material.MaterialTheme
77
import androidx.compose.material.Switch
88
import androidx.compose.material.SwitchDefaults
99
import androidx.compose.material.Text
10-
import androidx.compose.runtime.Composable
10+
import androidx.compose.runtime.*
1111
import androidx.compose.ui.Alignment
1212
import androidx.compose.ui.Modifier
1313
import androidx.compose.ui.graphics.Color
1414
import androidx.compose.ui.text.font.FontWeight
15+
import androidx.compose.ui.unit.DpOffset
1516
import androidx.compose.ui.unit.DpSize
1617
import androidx.compose.ui.unit.dp
1718
import androidx.compose.ui.unit.sp
@@ -20,6 +21,7 @@ import androidx.compose.ui.window.WindowPosition
2021
import androidx.compose.ui.window.rememberWindowState
2122
import dev.paulee.ui.App
2223
import dev.paulee.ui.Config
24+
import dev.paulee.ui.components.ButtonDropDown
2325

2426
@Composable
2527
fun SettingsWindow(onClose: () -> Unit) {
@@ -28,6 +30,12 @@ fun SettingsWindow(onClose: () -> Unit) {
2830
size = DpSize(600.dp, 500.dp)
2931
)
3032

33+
val colorModes = App.ThemeMode.entries.map { it.name }
34+
var selectedTheme by remember { mutableStateOf(App.Theme.mode) }
35+
36+
val supportedLanguages = App.SupportedLanguage.entries.map { it.name }
37+
var selectedLanguage by remember { mutableStateOf(App.Language.current) }
38+
3139
Window(
3240
state = windowState,
3341
onCloseRequest = {
@@ -55,6 +63,22 @@ fun SettingsWindow(onClose: () -> Unit) {
5563
.verticalScroll(rememberScrollState()),
5664
verticalArrangement = Arrangement.spacedBy(24.dp)
5765
) {
66+
SettingRow(
67+
label = "Language",
68+
description = "Select language"
69+
) {
70+
ButtonDropDown(
71+
items = supportedLanguages,
72+
selected = selectedLanguage.name,
73+
menuOffset = DpOffset(x = (-10).dp, y = 0.dp)
74+
) {
75+
val lang = App.SupportedLanguage.valueOf(it)
76+
77+
selectedLanguage = lang
78+
App.Language.set(lang)
79+
}
80+
}
81+
5882
SettingRow(
5983
label = "Width Limit",
6084
description = "Disable table column width restrictions"
@@ -80,6 +104,23 @@ fun SettingsWindow(onClose: () -> Unit) {
80104
)
81105
)
82106
}
107+
108+
SettingRow(
109+
label = "Theme",
110+
description = "Select theme"
111+
) {
112+
ButtonDropDown(
113+
items = colorModes,
114+
selected = selectedTheme.name,
115+
menuOffset = DpOffset(x = (-10).dp, y = 0.dp)
116+
117+
) {
118+
val mode = App.ThemeMode.valueOf(it)
119+
120+
selectedTheme = mode
121+
App.Theme.set(mode)
122+
}
123+
}
83124
}
84125
}
85126
}
@@ -90,7 +131,7 @@ fun SettingsWindow(onClose: () -> Unit) {
90131
private fun SettingRow(
91132
label: String,
92133
description: String,
93-
content: @Composable () -> Unit
134+
content: @Composable () -> Unit,
94135
) {
95136
Row(
96137
modifier = Modifier.fillMaxWidth(),

0 commit comments

Comments
 (0)