Skip to content

Commit bb444a6

Browse files
authored
Merge pull request #768 from AppDevNext/MoreDoubleEntries
Add more Double entries
2 parents 6cd02ce + 3653edf commit bb444a6

8 files changed

Lines changed: 217 additions & 4 deletions

File tree

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package info.appdev.charting.data
2+
3+
import android.annotation.SuppressLint
4+
import android.graphics.drawable.Drawable
5+
import kotlin.math.abs
6+
7+
/**
8+
* High-precision bubble entry that stores x, y and size as Double, extending [BubbleEntryFloat]
9+
* so it works seamlessly in the existing bubble chart rendering pipeline.
10+
* Use [xDouble], [yDouble] and [sizeDouble] for full-precision access.
11+
*/
12+
@SuppressLint("ParcelCreator")
13+
open class BubbleEntryDouble : BubbleEntryFloat {
14+
15+
var xDouble: Double = 0.0
16+
var yDouble: Double = 0.0
17+
var sizeDouble: Double = 0.0
18+
19+
override var x: Float
20+
get() = xDouble.toFloat()
21+
set(value) { xDouble = value.toDouble() }
22+
23+
override var y: Float
24+
get() = yDouble.toFloat()
25+
set(value) { yDouble = value.toDouble() }
26+
27+
constructor(x: Double, y: Double, size: Double) : super(x.toFloat(), y.toFloat(), size.toFloat()) {
28+
xDouble = x; yDouble = y; sizeDouble = size
29+
this.size = size.toFloat()
30+
}
31+
32+
constructor(x: Double, y: Double, size: Double, data: Any?) : super(x.toFloat(), y.toFloat(), size.toFloat(), data) {
33+
xDouble = x; yDouble = y; sizeDouble = size
34+
this.size = size.toFloat()
35+
}
36+
37+
constructor(x: Double, y: Double, size: Double, icon: Drawable?) : super(x.toFloat(), y.toFloat(), size.toFloat(), icon) {
38+
xDouble = x; yDouble = y; sizeDouble = size
39+
this.size = size.toFloat()
40+
}
41+
42+
override fun copy(): BubbleEntryDouble = BubbleEntryDouble(xDouble, yDouble, sizeDouble, data)
43+
44+
override fun toString(): String = "BubbleEntryDouble xDouble=$xDouble yDouble=$yDouble sizeDouble=$sizeDouble"
45+
}
46+

chartLib/src/main/kotlin/info/appdev/charting/data/BubbleEntryFloat.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import android.graphics.drawable.Drawable
88
* chart implementation: Copyright 2015 Pierre-Marc Airoldi Licensed under Apache License 2.0
99
*/
1010
@SuppressLint("ParcelCreator")
11-
class BubbleEntryFloat : EntryFloat {
11+
open class BubbleEntryFloat : EntryFloat {
1212
/**
1313
* Returns the size of this entry (the size of the bubble).
1414
*/
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package info.appdev.charting.data
2+
3+
import android.annotation.SuppressLint
4+
import android.graphics.drawable.Drawable
5+
import kotlin.math.abs
6+
7+
/**
8+
* High-precision candle entry that stores all OHLC values as Double, extending [CandleEntryFloat]
9+
* so it works seamlessly in the existing candlestick chart rendering pipeline.
10+
* Use [xDouble], [highDouble], [lowDouble], [openDouble], [closeDouble] for full-precision access.
11+
*/
12+
@SuppressLint("ParcelCreator")
13+
open class CandleEntryDouble : CandleEntryFloat {
14+
15+
var xDouble: Double = 0.0
16+
var highDouble: Double = 0.0
17+
var lowDouble: Double = 0.0
18+
var openDouble: Double = 0.0
19+
var closeDouble: Double = 0.0
20+
21+
override var x: Float
22+
get() = xDouble.toFloat()
23+
set(value) { xDouble = value.toDouble() }
24+
25+
constructor(
26+
x: Double, shadowH: Double, shadowL: Double, open: Double, close: Double
27+
) : super(x.toFloat(), shadowH.toFloat(), shadowL.toFloat(), open.toFloat(), close.toFloat()) {
28+
xDouble = x; highDouble = shadowH; lowDouble = shadowL; openDouble = open; closeDouble = close
29+
this.high = shadowH.toFloat(); this.low = shadowL.toFloat()
30+
this.open = open.toFloat(); this.close = close.toFloat()
31+
}
32+
33+
constructor(
34+
x: Double, shadowH: Double, shadowL: Double, open: Double, close: Double, data: Any?
35+
) : super(x.toFloat(), shadowH.toFloat(), shadowL.toFloat(), open.toFloat(), close.toFloat(), data) {
36+
xDouble = x; highDouble = shadowH; lowDouble = shadowL; openDouble = open; closeDouble = close
37+
this.high = shadowH.toFloat(); this.low = shadowL.toFloat()
38+
this.open = open.toFloat(); this.close = close.toFloat()
39+
}
40+
41+
constructor(
42+
x: Double, shadowH: Double, shadowL: Double, open: Double, close: Double, icon: Drawable?
43+
) : super(x.toFloat(), shadowH.toFloat(), shadowL.toFloat(), open.toFloat(), close.toFloat(), icon) {
44+
xDouble = x; highDouble = shadowH; lowDouble = shadowL; openDouble = open; closeDouble = close
45+
this.high = shadowH.toFloat(); this.low = shadowL.toFloat()
46+
this.open = open.toFloat(); this.close = close.toFloat()
47+
}
48+
49+
constructor(
50+
x: Double, shadowH: Double, shadowL: Double, open: Double, close: Double, icon: Drawable?, data: Any?
51+
) : super(x.toFloat(), shadowH.toFloat(), shadowL.toFloat(), open.toFloat(), close.toFloat(), icon, data) {
52+
xDouble = x; highDouble = shadowH; lowDouble = shadowL; openDouble = open; closeDouble = close
53+
this.high = shadowH.toFloat(); this.low = shadowL.toFloat()
54+
this.open = open.toFloat(); this.close = close.toFloat()
55+
}
56+
57+
/** Overall range between shadow-high and shadow-low at full precision. */
58+
val shadowRangeDouble: Double get() = abs(highDouble - lowDouble)
59+
60+
/** Body size at full precision. */
61+
val bodyRangeDouble: Double get() = abs(openDouble - closeDouble)
62+
63+
override fun copy(): CandleEntryDouble =
64+
CandleEntryDouble(xDouble, highDouble, lowDouble, openDouble, closeDouble, data)
65+
66+
override fun toString(): String =
67+
"CandleEntryDouble xDouble=$xDouble highDouble=$highDouble lowDouble=$lowDouble openDouble=$openDouble closeDouble=$closeDouble"
68+
}
69+

chartLib/src/main/kotlin/info/appdev/charting/data/CandleEntryFloat.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import kotlin.math.abs
88
* Subclass of Entry that holds all values for one entry in a CandleStickChart.
99
*/
1010
@SuppressLint("ParcelCreator")
11-
class CandleEntryFloat : EntryFloat {
11+
open class CandleEntryFloat : EntryFloat {
1212
/**
1313
* Returns the upper shadows highest value.
1414
*/
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package info.appdev.charting.data
2+
3+
import android.annotation.SuppressLint
4+
import android.graphics.drawable.Drawable
5+
import timber.log.Timber
6+
7+
/**
8+
* High-precision pie entry that stores the value as Double, extending [PieEntryFloat]
9+
* so it works seamlessly in the existing pie chart rendering pipeline.
10+
* Use [valueDouble] for full-precision access.
11+
* Pie entries have no meaningful x-axis value.
12+
*/
13+
@SuppressLint("ParcelCreator")
14+
open class PieEntryDouble : PieEntryFloat {
15+
16+
var valueDouble: Double = 0.0
17+
18+
override var y: Float
19+
get() = valueDouble.toFloat()
20+
set(value) { valueDouble = value.toDouble() }
21+
22+
@get:Deprecated("")
23+
@set:Deprecated("")
24+
@Suppress("DEPRECATION")
25+
override var x: Float
26+
get() {
27+
Timber.i("Pie entries do not have x values")
28+
return super.x
29+
}
30+
set(x) {
31+
super.x = x
32+
Timber.i("Pie entries do not have x values")
33+
}
34+
35+
constructor(value: Double) : super(value.toFloat()) { valueDouble = value }
36+
37+
constructor(value: Double, data: Any?) : super(value.toFloat(), data) { valueDouble = value }
38+
39+
constructor(value: Double, icon: Drawable?) : super(value.toFloat(), icon) { valueDouble = value }
40+
41+
constructor(value: Double, icon: Drawable?, data: Any?) : super(value.toFloat(), icon, data) { valueDouble = value }
42+
43+
constructor(value: Double, label: String?) : super(value.toFloat(), label) { valueDouble = value }
44+
45+
constructor(value: Double, label: String?, data: Any?) : super(value.toFloat(), label, data) { valueDouble = value }
46+
47+
constructor(value: Double, label: String?, icon: Drawable?) : super(value.toFloat(), label, icon) { valueDouble = value }
48+
49+
constructor(value: Double, label: String?, icon: Drawable?, data: Any?) : super(value.toFloat(), label, icon, data) { valueDouble = value }
50+
51+
/** Full-precision value (same as [valueDouble]). */
52+
val valuePrecise: Double get() = valueDouble
53+
54+
override fun copy(): PieEntryDouble = PieEntryDouble(valueDouble, label, data)
55+
56+
override fun toString(): String = "PieEntryDouble valueDouble=$valueDouble label=$label"
57+
}
58+
59+

chartLib/src/main/kotlin/info/appdev/charting/data/PieEntryFloat.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import android.graphics.drawable.Drawable
55
import timber.log.Timber
66

77
@SuppressLint("ParcelCreator")
8-
class PieEntryFloat : EntryFloat {
8+
open class PieEntryFloat : EntryFloat {
99
var label: String? = null
1010

1111
constructor(value: Float) : super(0f, value)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package info.appdev.charting.data
2+
3+
import android.annotation.SuppressLint
4+
5+
/**
6+
* High-precision radar entry that stores the value as Double, extending [RadarEntryFloat]
7+
* so it works seamlessly in the existing radar chart rendering pipeline.
8+
* Use [valueDouble] for full-precision access.
9+
* Radar entries have no meaningful x-axis value.
10+
*/
11+
@SuppressLint("ParcelCreator")
12+
open class RadarEntryDouble : RadarEntryFloat {
13+
14+
var valueDouble: Double = 0.0
15+
16+
override var y: Float
17+
get() = valueDouble.toFloat()
18+
set(value) { valueDouble = value.toDouble() }
19+
20+
@get:Deprecated("")
21+
@set:Deprecated("")
22+
@Suppress("DEPRECATION")
23+
override var x: Float
24+
get() = super.x
25+
set(x) { super.x = x }
26+
27+
constructor(value: Double) : super(value.toFloat()) { valueDouble = value }
28+
29+
constructor(value: Double, data: Any?) : super(value.toFloat(), data) { valueDouble = value }
30+
31+
/** Full-precision value (same as [valueDouble]). */
32+
val valuePrecise: Double get() = valueDouble
33+
34+
override fun copy(): RadarEntryDouble = RadarEntryDouble(valueDouble, data)
35+
36+
override fun toString(): String = "RadarEntryDouble valueDouble=$valueDouble"
37+
}
38+
39+

chartLib/src/main/kotlin/info/appdev/charting/data/RadarEntryFloat.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package info.appdev.charting.data
33
import android.annotation.SuppressLint
44

55
@SuppressLint("ParcelCreator")
6-
class RadarEntryFloat : EntryFloat {
6+
open class RadarEntryFloat : EntryFloat {
77
constructor(value: Float) : super(0f, value)
88

99
constructor(value: Float, data: Any?) : super(0f, value, data)

0 commit comments

Comments
 (0)