reimplement raylines
This commit is contained in:
@ -8,7 +8,7 @@ import pandas as pd
|
|||||||
|
|
||||||
from .table import Table
|
from .table import Table
|
||||||
from .toolbox import ToolBox
|
from .toolbox import ToolBox
|
||||||
from .drawings import Box, HorizontalLine, TrendLine, TwoPointDrawing, VerticalLine, VerticalSpan
|
from .drawings import Box, HorizontalLine, RayLine, TrendLine, TwoPointDrawing, VerticalLine, VerticalSpan
|
||||||
from .topbar import TopBar
|
from .topbar import TopBar
|
||||||
from .util import (
|
from .util import (
|
||||||
BulkRunScript, Pane, Events, IDGen, as_enum, jbool, js_json, TIME, NUM, FLOAT,
|
BulkRunScript, Pane, Events, IDGen, as_enum, jbool, js_json, TIME, NUM, FLOAT,
|
||||||
@ -680,11 +680,9 @@ class AbstractChart(Candlestick, Pane):
|
|||||||
"""
|
"""
|
||||||
Creates and returns a Histogram object.
|
Creates and returns a Histogram object.
|
||||||
"""
|
"""
|
||||||
histogram = Histogram(
|
return Histogram(
|
||||||
self, name, color, price_line, price_label,
|
self, name, color, price_line, price_label,
|
||||||
scale_margin_top, scale_margin_bottom)
|
scale_margin_top, scale_margin_bottom)
|
||||||
# histogram._push_to_legend()
|
|
||||||
return histogram
|
|
||||||
|
|
||||||
def lines(self) -> List[Line]:
|
def lines(self) -> List[Line]:
|
||||||
"""
|
"""
|
||||||
@ -726,11 +724,11 @@ class AbstractChart(Candlestick, Pane):
|
|||||||
round: bool = False,
|
round: bool = False,
|
||||||
color: str = '#1E80F0',
|
color: str = '#1E80F0',
|
||||||
width: int = 2,
|
width: int = 2,
|
||||||
style: LINE_STYLE = 'solid'
|
style: LINE_STYLE = 'solid',
|
||||||
) -> Line:
|
text: str = ''
|
||||||
|
) -> RayLine:
|
||||||
# TODO
|
# TODO
|
||||||
line = RayLine(self, '', color, style, width, False, False, False)
|
return RayLine(*locals().values())
|
||||||
return line
|
|
||||||
|
|
||||||
def vertical_line(
|
def vertical_line(
|
||||||
self,
|
self,
|
||||||
|
|||||||
@ -147,6 +147,36 @@ class VerticalLine(Drawing):
|
|||||||
self.run_script(f'{self.id}.applyOptions({{text: `{text}`}})')
|
self.run_script(f'{self.id}.applyOptions({{text: `{text}`}})')
|
||||||
|
|
||||||
|
|
||||||
|
class RayLine(Drawing):
|
||||||
|
def __init__(self,
|
||||||
|
chart,
|
||||||
|
start_time: TIME,
|
||||||
|
value: NUM,
|
||||||
|
round: bool = False,
|
||||||
|
color: str = '#1E80F0',
|
||||||
|
width: int = 2,
|
||||||
|
style: LINE_STYLE = 'solid',
|
||||||
|
text: str = '',
|
||||||
|
func = None,
|
||||||
|
):
|
||||||
|
super().__init__(chart, func)
|
||||||
|
self.run_script(f'''
|
||||||
|
{self.id} = new Lib.RayLine(
|
||||||
|
{{time: {self.chart._single_datetime_format(start_time)}, price: {value}}},
|
||||||
|
{{
|
||||||
|
lineColor: '{color}',
|
||||||
|
lineStyle: {as_enum(style, LINE_STYLE)},
|
||||||
|
width: {width},
|
||||||
|
text: `{text}`,
|
||||||
|
}},
|
||||||
|
callbackName={f"'{self.id}'" if func else 'null'}
|
||||||
|
)
|
||||||
|
{chart.id}.series.attachPrimitive({self.id})
|
||||||
|
''')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Box(TwoPointDrawing):
|
class Box(TwoPointDrawing):
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
chart,
|
chart,
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -5,4 +5,5 @@ export * from './global-params';
|
|||||||
export * from './legend';
|
export * from './legend';
|
||||||
export * from './table';
|
export * from './table';
|
||||||
export * from './toolbox';
|
export * from './toolbox';
|
||||||
export * from './topbar';
|
export * from './topbar';
|
||||||
|
export * from '../horizontal-line/ray-line';
|
||||||
@ -17,7 +17,7 @@ export class HorizontalLinePaneView extends DrawingPaneView {
|
|||||||
const timeScale = this._source.chart.timeScale()
|
const timeScale = this._source.chart.timeScale()
|
||||||
const series = this._source.series;
|
const series = this._source.series;
|
||||||
if (this._source._type == "RayLine") {
|
if (this._source._type == "RayLine") {
|
||||||
this._point.x = timeScale.logicalToCoordinate(point.logical);
|
this._point.x = point.time ? timeScale.timeToCoordinate(point.time) : timeScale.logicalToCoordinate(point.logical);
|
||||||
}
|
}
|
||||||
this._point.y = series.priceToCoordinate(point.price);
|
this._point.y = series.priceToCoordinate(point.price);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,7 @@ export class RayLine extends HorizontalLine {
|
|||||||
_type = 'RayLine';
|
_type = 'RayLine';
|
||||||
|
|
||||||
constructor(point: Point, options: DeepPartial<DrawingOptions>) {
|
constructor(point: Point, options: DeepPartial<DrawingOptions>) {
|
||||||
super(point, options);
|
super({...point}, options);
|
||||||
this._point.time = point.time;
|
this._point.time = point.time;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user