Skip to content

Commit 7f5c2cc

Browse files
committed
v1.0.12
1 parent c8a4811 commit 7f5c2cc

File tree

7 files changed

+172
-49
lines changed

7 files changed

+172
-49
lines changed

.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,7 @@ bin/
3939
.vscode/
4040

4141
### Mac OS ###
42-
.DS_Store
42+
.DS_Store
43+
44+
.logs
45+
.kotlin

.idea/kotlinc.xml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build.gradle.kts

+11-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
2+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
23
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
34
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
45

56
plugins {
67
alias(libs.plugins.kotlinJvm)
78
alias(libs.plugins.jetbrainsCompose)
9+
alias(libs.plugins.compose.compiler)
810
// https://conveyor.hydraulic.dev/14.0/configs/maven-gradle/#gradle
911
//id("dev.hydraulic.conveyor") version "1.9"
1012
idea
@@ -14,7 +16,7 @@ val appName = "StopBonus"
1416
val appPackage = "love.forte.bonus"
1517
val appMenuGroup = "forteApp"
1618
val appNameWithPackage = "$appPackage.$appName"
17-
val appVersion = "1.0.11"
19+
val appVersion = "1.0.12"
1820

1921
group = appPackage
2022
version = appVersion
@@ -26,18 +28,19 @@ repositories {
2628
}
2729

2830
java {
29-
//toolchain.languageVersion.set(JavaLanguageVersion.of(17))
30-
sourceCompatibility = JavaVersion.VERSION_17
31-
targetCompatibility = JavaVersion.VERSION_17
31+
toolchain {
32+
this.languageVersion.set(JavaLanguageVersion.of(17))
33+
}
3234
}
3335

34-
tasks.withType<KotlinCompile> {
35-
kotlinOptions {
36-
jvmTarget = "17"
37-
freeCompilerArgs = freeCompilerArgs + listOf("-Xopt-in=kotlin.RequiresOptIn")
36+
kotlin {
37+
jvmToolchain(17)
38+
compilerOptions {
39+
jvmTarget.set(JvmTarget.JVM_17)
3840
}
3941
}
4042

43+
4144
dependencies {
4245
// Note, if you develop a library, you should use compose.desktop.common.
4346
// compose.desktop.currentOs should be used in launcher-sourceSet

gradle.properties

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
kotlin.code.style=official
22
#org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
3-
#org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M"
4-
#org.gradle.parallel=true
5-
#org.gradle.daemon=true
6-
org.gradle.jvmargs=-Xms1g -Xmx4g -Dfile.encoding=UTF-8
3+
org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M"
4+
#org.gradle.jvmargs=-Xms1g -Xmx4g -Dfile.encoding=UTF-8
75
org.gradle.parallel=true
86
org.gradle.daemon=true

gradle/libs.versions.toml

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
[versions]
22
compose = "1.6.3"
3-
compose-plugin = "1.6.1"
3+
compose-plugin = "1.6.10"
44
# Kotlin
5-
kotlin = "1.9.23"
6-
kotlinx-coroutines = "1.8.0"
5+
kotlin = "2.0.0"
6+
kotlinx-coroutines = "1.8.1"
77
kotlinx-serialization = "1.6.3"
88
# logback
99
logback = "1.4.14"
1010
# https://github.com/h2database/h2database
1111
h2 = "2.2.224"
1212
# https://github.com/JetBrains/Exposed
13-
exposed = "0.49.0"
13+
exposed = "0.51.1"
1414
# https://github.com/KoalaPlot/koalaplot-core
1515
# https://koalaplot.github.io/
16-
koalaPlot = "0.5.3"
16+
#koalaPlot = "0.5.3"
17+
koalaPlot = "0.6.0"
1718

1819

1920
[libraries]
@@ -46,6 +47,7 @@ exposed = ["exposed-core", "exposed-dao", "exposed-jdbc", "exposed-javaTime"]
4647

4748
[plugins]
4849
jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" }
50+
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
4951
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
5052
kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
5153
kotlinKapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }

src/main/kotlin/view/account/home/AccountHomeView.kt

+146-30
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,52 @@ import FontBTTFamily
44
import FontLXGWNeoXiHeiScreenFamily
55
import androidx.compose.animation.AnimatedVisibility
66
import androidx.compose.animation.Crossfade
7-
import androidx.compose.foundation.*
7+
import androidx.compose.foundation.background
8+
import androidx.compose.foundation.clickable
9+
import androidx.compose.foundation.focusable
10+
import androidx.compose.foundation.hoverable
811
import androidx.compose.foundation.interaction.MutableInteractionSource
9-
import androidx.compose.foundation.layout.*
12+
import androidx.compose.foundation.layout.Arrangement
13+
import androidx.compose.foundation.layout.Column
14+
import androidx.compose.foundation.layout.PaddingValues
15+
import androidx.compose.foundation.layout.Row
16+
import androidx.compose.foundation.layout.fillMaxWidth
17+
import androidx.compose.foundation.layout.padding
18+
import androidx.compose.foundation.rememberScrollState
19+
import androidx.compose.foundation.verticalScroll
1020
import androidx.compose.material.icons.Icons
1121
import androidx.compose.material.icons.filled.Clear
1222
import androidx.compose.material.icons.filled.Home
13-
import androidx.compose.material3.*
14-
import androidx.compose.runtime.*
23+
import androidx.compose.material3.DatePicker
24+
import androidx.compose.material3.DatePickerDialog
25+
import androidx.compose.material3.DisplayMode
26+
import androidx.compose.material3.DropdownMenu
27+
import androidx.compose.material3.DropdownMenuItem
28+
import androidx.compose.material3.ElevatedButton
29+
import androidx.compose.material3.ExperimentalMaterial3Api
30+
import androidx.compose.material3.ExposedDropdownMenuBox
31+
import androidx.compose.material3.ExposedDropdownMenuDefaults
32+
import androidx.compose.material3.Icon
33+
import androidx.compose.material3.LocalTextStyle
34+
import androidx.compose.material3.MaterialTheme
35+
import androidx.compose.material3.NavigationDrawerItem
36+
import androidx.compose.material3.OutlinedTextField
37+
import androidx.compose.material3.SelectableDates
38+
import androidx.compose.material3.Slider
39+
import androidx.compose.material3.SliderState
40+
import androidx.compose.material3.Text
41+
import androidx.compose.material3.TextButton
42+
import androidx.compose.material3.TimeInput
43+
import androidx.compose.material3.rememberDatePickerState
44+
import androidx.compose.material3.rememberTimePickerState
45+
import androidx.compose.runtime.Composable
46+
import androidx.compose.runtime.LaunchedEffect
47+
import androidx.compose.runtime.getValue
48+
import androidx.compose.runtime.mutableStateListOf
49+
import androidx.compose.runtime.mutableStateOf
50+
import androidx.compose.runtime.remember
51+
import androidx.compose.runtime.rememberCoroutineScope
52+
import androidx.compose.runtime.setValue
1553
import androidx.compose.ui.Alignment
1654
import androidx.compose.ui.Modifier
1755
import androidx.compose.ui.graphics.Color
@@ -20,16 +58,29 @@ import androidx.compose.ui.unit.TextUnit
2058
import androidx.compose.ui.unit.TextUnitType
2159
import androidx.compose.ui.unit.dp
2260
import androidx.compose.ui.window.PopupProperties
23-
import database.entity.*
61+
import database.entity.Account
62+
import database.entity.BonusRecord
63+
import database.entity.Weapon
64+
import database.entity.WeaponView
65+
import database.entity.Weapons
66+
import database.entity.toView
2467
import kotlinx.coroutines.launch
2568
import org.jetbrains.exposed.sql.SizedCollection
2669
import view.account.AccountViewPage
2770
import view.account.AccountViewPageSelector
2871
import view.account.PageViewState
29-
import java.time.*
72+
import java.time.Duration
73+
import java.time.Instant
74+
import java.time.LocalDateTime
75+
import java.time.LocalTime
76+
import java.time.Year
77+
import java.time.ZoneId
78+
import java.time.ZoneOffset
79+
import java.time.ZonedDateTime
3080
import java.time.format.DateTimeFormatter
3181

3282
private const val EMOJI_ANGRY = "\uD83D\uDE21"
83+
private const val EMOJI_CLOCK = "\u23F1"
3384

3485
/**
3586
*
@@ -136,18 +187,29 @@ private fun AccountHome(state: PageViewState) {
136187
}
137188
)
138189

139-
val startTimePickerState = rememberTimePickerState(is24Hour = true)
140-
141190
val selectedStartDateMillis = startDatePickerState.selectedDateMillis
142191
val selectedStartDateInstant = selectedStartDateMillis?.let { Instant.ofEpochMilli(it) }
143-
val selectedStartDateTime = selectedStartDateInstant?.atZone(ZoneId.systemDefault())
144-
?.toLocalDate()
145-
?.atTime(startTimePickerState.hour, startTimePickerState.minute)
192+
193+
var startTimePickerValue by remember { mutableStateOf<LocalTime?>(null) }
194+
195+
fun selectedStartDateTime(): LocalDateTime? {
196+
val selectedStartDateInstantValue = selectedStartDateInstant
197+
?: return null
198+
val timeValue = startTimePickerValue
199+
?: return null
200+
201+
return selectedStartDateInstantValue.atZone(ZoneId.systemDefault())
202+
.toLocalDate()
203+
.atTime(timeValue)
204+
}
205+
206+
val selectedStartDateTime = selectedStartDateTime()
207+
146208

147209
val endDatePickerState = rememberDatePickerState(
148210
initialSelectedDateMillis = null,
149211
initialDisplayedMonthMillis = selectedStartDateMillis ?: System.currentTimeMillis(),
150-
yearRange = selectedStartDateTime?.let {
212+
yearRange = selectedStartDateTime()?.let {
151213
it.year..nowYear.value
152214
} ?: nowYear.value..nowYear.value,
153215
initialDisplayMode = DisplayMode.Input,
@@ -158,19 +220,41 @@ private fun AccountHome(state: PageViewState) {
158220
}
159221
)
160222

161-
val endTimePickerState = rememberTimePickerState(
162-
initialHour = nowTime.hour,
163-
initialMinute = nowTime.minute
164-
)
223+
val selectedEndDateMillis = endDatePickerState.selectedDateMillis
224+
val selectedEndDateInstant = selectedEndDateMillis?.let { Instant.ofEpochMilli(it) }
225+
// val selectedEndDateTime = selectedEndDateInstant?.atZone(ZoneId.systemDefault())
226+
// ?.toLocalDate()
227+
// ?.atTime(endTimePickerState.hour, endTimePickerState.minute)
228+
229+
var endTimePickerValue by remember { mutableStateOf<LocalTime?>(null) }
230+
231+
fun selectedEndDateTime(): LocalDateTime? {
232+
val selectedEndDateInstantValue = selectedEndDateInstant
233+
?: return null
234+
val timeValue = endTimePickerValue
235+
?: return null
236+
237+
return selectedEndDateInstantValue.atZone(ZoneId.systemDefault())
238+
.toLocalDate()
239+
.atTime(timeValue)
240+
}
241+
242+
val selectedEndDateTime = selectedEndDateTime()
243+
244+
// val endTimePickerState = rememberTimePickerState(
245+
// is24Hour = true,
246+
// initialHour = nowTime.hour,
247+
// initialMinute = nowTime.minute
248+
// )
165249

166250
var weapon by remember { mutableStateOf<WeaponView?>(null) }
167251
val score = remember { SliderState(value = 10f, steps = 8, valueRange = 1f..10f) }
168252

169-
suspend fun clearStates() {
253+
fun clearStates() {
170254
startDatePickerState.selectedDateMillis = null
171-
startTimePickerState.settle()
255+
// startTimePickerState.settle()
172256
endDatePickerState.selectedDateMillis = null
173-
endTimePickerState.settle()
257+
// endTimePickerState.settle()
174258
weapon = null
175259
score.value = 10f
176260
}
@@ -183,10 +267,30 @@ private fun AccountHome(state: PageViewState) {
183267
// start date
184268
var showSelectStartDate by remember { mutableStateOf(false) }
185269
if (showSelectStartDate) {
270+
val nowTime0 = LocalTime.now()
271+
val startTimePickerState = rememberTimePickerState(
272+
is24Hour = true,
273+
initialHour = nowTime0.hour,
274+
initialMinute = nowTime0.minute
275+
)
276+
186277
DatePickerDialog(
187278
onDismissRequest = { showSelectStartDate = false },
279+
dismissButton = {
280+
TextButton(onClick = {
281+
startDatePickerState.selectedDateMillis = System.currentTimeMillis()
282+
}) {
283+
Text(
284+
"现在$EMOJI_CLOCK",
285+
fontFamily = FontLXGWNeoXiHeiScreenFamily,
286+
)
287+
}
288+
},
188289
confirmButton = {
189-
TextButton(onClick = { showSelectStartDate = false }) {
290+
TextButton(onClick = {
291+
startTimePickerValue = LocalTime.of(startTimePickerState.hour, startTimePickerState.minute)
292+
showSelectStartDate = false
293+
}) {
190294
Text(
191295
"就是这时$EMOJI_ANGRY",
192296
fontFamily = FontLXGWNeoXiHeiScreenFamily,
@@ -195,7 +299,6 @@ private fun AccountHome(state: PageViewState) {
195299
},
196300
) {
197301
DatePicker(
198-
modifier = Modifier.padding(20.dp),
199302
state = startDatePickerState,
200303
title = {
201304
Text(
@@ -219,7 +322,7 @@ private fun AccountHome(state: PageViewState) {
219322
onClick = { showSelectStartDate = true }
220323
) {
221324
Text(
222-
"什么时候开始打的\uD83D\uDE21",
325+
"什么时候开始打的$EMOJI_ANGRY$EMOJI_ANGRY",
223326
fontFamily = FontLXGWNeoXiHeiScreenFamily,
224327
fontSize = TextUnit(50f, TextUnitType.Sp),
225328
modifier = Modifier
@@ -240,10 +343,30 @@ private fun AccountHome(state: PageViewState) {
240343
// end date & time
241344
var showEndDateTime by remember { mutableStateOf(false) }
242345
if (showEndDateTime) {
346+
val nowTime0 = LocalTime.now()
347+
val endTimePickerState = rememberTimePickerState(
348+
is24Hour = true,
349+
initialHour = nowTime0.hour,
350+
initialMinute = nowTime0.minute
351+
)
352+
243353
DatePickerDialog(
244354
onDismissRequest = { showEndDateTime = false },
355+
dismissButton = {
356+
TextButton(onClick = {
357+
endDatePickerState.selectedDateMillis = System.currentTimeMillis()
358+
}) {
359+
Text(
360+
"现在$EMOJI_CLOCK",
361+
fontFamily = FontLXGWNeoXiHeiScreenFamily,
362+
)
363+
}
364+
},
245365
confirmButton = {
246-
TextButton(onClick = { showEndDateTime = false }) {
366+
TextButton(onClick = {
367+
endTimePickerValue = LocalTime.of(endTimePickerState.hour, endTimePickerState.minute)
368+
showEndDateTime = false
369+
}) {
247370
Text(
248371
"就是这时$EMOJI_ANGRY",
249372
fontFamily = FontLXGWNeoXiHeiScreenFamily,
@@ -252,7 +375,6 @@ private fun AccountHome(state: PageViewState) {
252375
},
253376
) {
254377
DatePicker(
255-
modifier = Modifier.padding(20.dp),
256378
state = endDatePickerState,
257379
title = {
258380
Text(
@@ -284,12 +406,6 @@ private fun AccountHome(state: PageViewState) {
284406
}
285407
}
286408

287-
val selectedEndDateMillis = endDatePickerState.selectedDateMillis
288-
val selectedEndDateInstant = selectedEndDateMillis?.let { Instant.ofEpochMilli(it) }
289-
val selectedEndDateTime = selectedEndDateInstant?.atZone(ZoneId.systemDefault())
290-
?.toLocalDate()
291-
?.atTime(endTimePickerState.hour, endTimePickerState.minute)
292-
293409
AnimatedVisibility(selectedEndDateTime != null) {
294410
Text(
295411
text = selectedEndDateTime?.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) ?: "",

0 commit comments

Comments
 (0)