mirror of
https://github.com/praktimarc/kst4contest.git
synced 2026-10-19 05:42:58 +02:00
Etappen 3 to 6a of the migration (129 commits). Every window the operator sees is Compose; the JavaFX ones still exist beside them so the two could be compared against a live session, which is the only way the differences came to light. The toolchain first, then the settings window with its eleven tabs and 72 real preferences; then the multi-column table as a component, and with it the rules it needs -- stable row identity, a selection that survives a refresh, column order the operator can drag, and a repaint when the rows change rather than when the list instance does. Then the update and monitor windows, and the main window: 22 station columns, the filter bar, the selected-station panel, the message tabs, the priority bar, the sked controls, the status indicators and the timeline, assembled behind a splitter because Compose has none. The map stops being a WebView. A Compose canvas projects WebMercator tiles itself, with the clustering in core and an asynchronous fetcher in place of the local tile proxy; derive() becomes a pure Kotlin reimplementation instead of a reflection call into com.sun.javafx. Most of the volume here is parity the operator would notice rather than new behaviour: desktop density instead of Material's phone minimums, colours taken from the JavaFX stylesheets instead of Material's palette, row dividers, band columns, grid-square labels and their colours, the home marker and antenna beam, pinch-to-zoom under Wayland, and layouts that survive a window narrower than the chart they stack. Two lessons are worth more than the diff. A control bound to a value Compose cannot observe writes through and never redraws -- that one shipped repeatedly with a green build, because no test drew anything. And a layout that clips instead of wrapping is worse than one that is merely too narrow: half a word is the worst available outcome.
33 lines
1.5 KiB
TOML
33 lines
1.5 KiB
TOML
[versions]
|
|
javafx = "21.0.5"
|
|
javafxPlugin = "0.1.0"
|
|
sqliteJdbc = "3.43.2.2"
|
|
jlayer = "1.0.1"
|
|
junit = "5.10.1"
|
|
mockito = "5.7.0"
|
|
mockitoCompile = "5.17.0"
|
|
jetbrainsAnnotations = "24.0.1"
|
|
kotlin = "2.2.0"
|
|
composeMultiplatform = "1.8.2"
|
|
spotbugsPlugin = "6.0.26"
|
|
spotbugs = "4.9.8"
|
|
pmd = "7.17.0"
|
|
|
|
[libraries]
|
|
sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqliteJdbc" }
|
|
jlayer = { module = "javazoom:jlayer", version.ref = "jlayer" }
|
|
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit" }
|
|
junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junit" }
|
|
mockito-core-compile = { module = "org.mockito:mockito-core", version.ref = "mockitoCompile" }
|
|
jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "jetbrainsAnnotations" }
|
|
mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" }
|
|
mockito-junit-jupiter = { module = "org.mockito:mockito-junit-jupiter", version.ref = "mockito" }
|
|
junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher" }
|
|
|
|
[plugins]
|
|
javafx = { id = "org.openjfx.javafxplugin", version.ref = "javafxPlugin" }
|
|
kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
|
composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
|
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" }
|
|
spotbugs = { id = "com.github.spotbugs", version.ref = "spotbugsPlugin" }
|