feat(plot): configure one or two marker pairs per axis
This commit is contained in:
@@ -10,6 +10,8 @@ enum class TrendMarker(val title: String, val horizontal: Boolean) {
|
||||
data class TrendMarkers(
|
||||
val xEnabled: Boolean = true,
|
||||
val yEnabled: Boolean = false,
|
||||
val xPairs: Int = 1,
|
||||
val yPairs: Int = 1,
|
||||
val selected: TrendMarker = TrendMarker.A,
|
||||
val a: Double? = null,
|
||||
val b: Double? = null,
|
||||
@@ -20,6 +22,9 @@ data class TrendMarkers(
|
||||
val g: Double? = null,
|
||||
val h: Double? = null,
|
||||
) {
|
||||
init {
|
||||
require(xPairs in 1..2 && yPairs in 1..2) { "Количество пар маркеров должно быть от 1 до 2" }
|
||||
}
|
||||
fun value(marker: TrendMarker): Double? = when (marker) {
|
||||
TrendMarker.A -> a; TrendMarker.B -> b; TrendMarker.C -> c; TrendMarker.D -> d
|
||||
TrendMarker.E -> e; TrendMarker.F -> f; TrendMarker.G -> g; TrendMarker.H -> h
|
||||
@@ -49,5 +54,10 @@ data class TrendMarkers(
|
||||
}.sortedWith(compareBy<Pair<TrendMarker, Double>> { it.second }
|
||||
.thenBy { if (it.first == selected) 0 else 1 }).firstOrNull()?.first
|
||||
}
|
||||
fun enabled(marker: TrendMarker): Boolean = if (marker.horizontal) yEnabled else xEnabled
|
||||
fun enabled(marker: TrendMarker): Boolean = when (marker) {
|
||||
TrendMarker.A, TrendMarker.B -> xEnabled
|
||||
TrendMarker.C, TrendMarker.D -> xEnabled && xPairs >= 2
|
||||
TrendMarker.E, TrendMarker.F -> yEnabled
|
||||
TrendMarker.G, TrendMarker.H -> yEnabled && yPairs >= 2
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,9 @@ class PlotContractTest {
|
||||
@Test fun markerCoordinatesSurviveZoomAndDragUsesGestureStart() {
|
||||
val full = PlotBounds(1000.0, 2000.0, -10.0, 10.0)
|
||||
val markers = TrendMarkers().positioned(full)
|
||||
assertTrue(markers.enabled(TrendMarker.A))
|
||||
assertFalse(markers.enabled(TrendMarker.C))
|
||||
assertTrue(markers.copy(xPairs = 2).enabled(TrendMarker.C))
|
||||
val zoomed = PlotBounds(1250.0, 1750.0, -5.0, 5.0)
|
||||
assertEquals(markers, markers.positioned(zoomed))
|
||||
val dragged = markers.drag(TrendMarker.A, 50.0, 500.0, zoomed)
|
||||
|
||||
Reference in New Issue
Block a user