mirror of
https://github.com/praktimarc/kst4contest.git
synced 2026-10-19 13:53:01 +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.
49 lines
1.3 KiB
Kotlin
49 lines
1.3 KiB
Kotlin
plugins {
|
|
java
|
|
alias(libs.plugins.spotbugs) apply false
|
|
}
|
|
|
|
allprojects {
|
|
group = providers.gradleProperty("group").get()
|
|
version = providers.gradleProperty("version").get()
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
// Compose Multiplatform pulls its androidx.lifecycle and androidx.annotation
|
|
// artifacts from Google's repository; they are not on Maven Central.
|
|
google()
|
|
}
|
|
}
|
|
|
|
val pmdVersion = libs.versions.pmd.get()
|
|
val spotbugsVersion = libs.versions.spotbugs.get()
|
|
|
|
subprojects {
|
|
apply(plugin = "java")
|
|
apply(plugin = "com.github.spotbugs")
|
|
apply(plugin = "pmd")
|
|
|
|
// Both tools report only; the Maven build had the failing goals commented out.
|
|
extensions.configure<PmdExtension> {
|
|
toolVersion = pmdVersion
|
|
ruleSetFiles = files(rootProject.file("pmd-ruleset.xml"))
|
|
ruleSets = emptyList()
|
|
isIgnoreFailures = true
|
|
}
|
|
|
|
extensions.configure<com.github.spotbugs.snom.SpotBugsExtension> {
|
|
toolVersion.set(spotbugsVersion)
|
|
ignoreFailures.set(true)
|
|
}
|
|
|
|
extensions.configure<JavaPluginExtension> {
|
|
toolchain {
|
|
languageVersion.set(JavaLanguageVersion.of(21))
|
|
}
|
|
}
|
|
|
|
tasks.withType<Test>().configureEach {
|
|
useJUnitPlatform()
|
|
}
|
|
}
|