Drop position-line factory from lines module, add endpoint getter
parent
23b77fffc6
commit
271bf67e78
|
@ -28,12 +28,11 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
|||
from PyQt5.QtCore import QPointF
|
||||
from PyQt5.QtGui import QGraphicsPathItem
|
||||
|
||||
from ._annotate import mk_marker, qgo_draw_markers
|
||||
from ._annotate import mk_marker_path, qgo_draw_markers
|
||||
from ._anchors import (
|
||||
marker_right_points,
|
||||
vbr_left,
|
||||
right_axis,
|
||||
update_pp_nav,
|
||||
gpath_pin,
|
||||
)
|
||||
from ._label import Label
|
||||
|
@ -121,8 +120,6 @@ class LevelLine(pg.InfiniteLine):
|
|||
self._on_drag_end = lambda l: None
|
||||
|
||||
self._y_incr_mult = 1 / chart._lc._symbol.tick_size
|
||||
self._last_scene_y: float = 0
|
||||
|
||||
self._right_end_sc: float = 0
|
||||
|
||||
def txt_offsets(self) -> Tuple[int, int]:
|
||||
|
@ -351,11 +348,12 @@ class LevelLine(pg.InfiniteLine):
|
|||
# order lines.. not sure wtf is up with that.
|
||||
# for now we're just using it on the position line.
|
||||
elif self._marker:
|
||||
|
||||
# TODO: make this label update part of a scene-aware-marker
|
||||
# composed annotation
|
||||
self._marker.setPos(
|
||||
QPointF(marker_right, self.scene_y())
|
||||
)
|
||||
# TODO: make this label update part of a scene-aware-marker
|
||||
# composed annotation
|
||||
if hasattr(self._marker, 'label'):
|
||||
self._marker.label.update()
|
||||
|
||||
|
@ -379,21 +377,26 @@ class LevelLine(pg.InfiniteLine):
|
|||
super().hide()
|
||||
if self._marker:
|
||||
self._marker.hide()
|
||||
self._marker.label.hide()
|
||||
# self._marker.label.hide()
|
||||
|
||||
def hide(self) -> None:
|
||||
def show(self) -> None:
|
||||
super().show()
|
||||
if self._marker:
|
||||
self._marker.show()
|
||||
self._marker.label.show()
|
||||
|
||||
def scene_right_xy(self) -> QPointF:
|
||||
return self.getViewBox().mapFromView(
|
||||
QPointF(0, self.value())
|
||||
)
|
||||
# self._marker.label.show()
|
||||
|
||||
def scene_y(self) -> float:
|
||||
return self.getViewBox().mapFromView(Point(0, self.value())).y()
|
||||
return self.getViewBox().mapFromView(
|
||||
Point(0, self.value())
|
||||
).y()
|
||||
|
||||
def scene_endpoint(self) -> QPointF:
|
||||
|
||||
if not self._right_end_sc:
|
||||
line_end, _, _ = marker_right_points(self._chart)
|
||||
self._right_end_sc = line_end - 10
|
||||
|
||||
return QPointF(self._right_end_sc, self.scene_y())
|
||||
|
||||
def add_marker(
|
||||
self,
|
||||
|
@ -414,7 +417,6 @@ class LevelLine(pg.InfiniteLine):
|
|||
path.setPos(QPointF(rsc, self.scene_y()))
|
||||
|
||||
return path
|
||||
# self.update()
|
||||
|
||||
def hoverEvent(self, ev):
|
||||
"""Mouse hover callback.
|
||||
|
@ -630,18 +632,25 @@ def order_line(
|
|||
# resetting the graphics item transform intermittently
|
||||
|
||||
# the old way which is still somehow faster?
|
||||
path = mk_marker(
|
||||
marker_style,
|
||||
# the "position" here is now ignored since we modified
|
||||
# internals to pin markers to the right end of the line
|
||||
marker_size,
|
||||
path = QGraphicsPathItem(
|
||||
mk_marker_path(
|
||||
marker_style,
|
||||
# the "position" here is now ignored since we modified
|
||||
# internals to pin markers to the right end of the line
|
||||
# marker_size,
|
||||
|
||||
# uncommment for the old transform / .pain() marker method
|
||||
# use_qgpath=False,
|
||||
# uncommment for the old transform / .paint() marker method
|
||||
# use_qgpath=False,
|
||||
)
|
||||
)
|
||||
path.scale(marker_size, marker_size)
|
||||
|
||||
# XXX: this is our new approach but seems slower?
|
||||
path = line.add_marker(mk_marker(marker_style, marker_size))
|
||||
path = line.add_marker(path)
|
||||
|
||||
# XXX: old
|
||||
# path = line.add_marker(mk_marker(marker_style, marker_size))
|
||||
|
||||
line._marker = path
|
||||
|
||||
assert not line.markers
|
||||
|
@ -717,87 +726,3 @@ def order_line(
|
|||
line.update_labels({'level': level})
|
||||
|
||||
return line
|
||||
|
||||
|
||||
def position_line(
|
||||
|
||||
chart,
|
||||
size: float,
|
||||
level: float,
|
||||
|
||||
orient_v: str = 'bottom',
|
||||
|
||||
) -> LevelLine:
|
||||
'''Convenience routine to add a line graphic representing an order
|
||||
execution submitted to the EMS via the chart's "order mode".
|
||||
|
||||
'''
|
||||
hcolor = 'default_light'
|
||||
|
||||
line = level_line(
|
||||
chart,
|
||||
level,
|
||||
color=hcolor,
|
||||
add_label=False,
|
||||
hl_on_hover=False,
|
||||
movable=False,
|
||||
hide_xhair_on_hover=False,
|
||||
use_marker_margin=True,
|
||||
only_show_markers_on_hover=False,
|
||||
always_show_labels=True,
|
||||
)
|
||||
# hide position marker when out of view (for now)
|
||||
vb = line.getViewBox()
|
||||
|
||||
# arrow marker
|
||||
# scale marker size with dpi-aware font size
|
||||
font_size = _font.font.pixelSize()
|
||||
|
||||
# scale marker size with dpi-aware font size
|
||||
arrow_size = floor(1.375 * font_size)
|
||||
|
||||
if size > 0:
|
||||
style = '|<'
|
||||
elif size < 0:
|
||||
style = '>|'
|
||||
|
||||
arrow_path = mk_marker(style, size=arrow_size)
|
||||
|
||||
path_br = arrow_path.mapToScene(
|
||||
arrow_path.path()
|
||||
).boundingRect()
|
||||
|
||||
# monkey-cache height for sizing on pp nav-hub
|
||||
arrow_path._height = path_br.height()
|
||||
arrow_path._width = path_br.width()
|
||||
|
||||
marker_label = Label(
|
||||
view=vb,
|
||||
fmt_str='pp',
|
||||
color=hcolor,
|
||||
update_on_range_change=False,
|
||||
)
|
||||
|
||||
arrow_path.label = marker_label
|
||||
|
||||
marker_label.scene_anchor = partial(
|
||||
gpath_pin,
|
||||
gpath=arrow_path,
|
||||
label=marker_label,
|
||||
)
|
||||
|
||||
line._labels.append(marker_label)
|
||||
|
||||
marker_label.render()
|
||||
marker_label.show()
|
||||
|
||||
# XXX: uses new marker drawing approach
|
||||
line.add_marker(arrow_path)
|
||||
line.set_level(level)
|
||||
|
||||
# sanity check
|
||||
line.update_labels({'level': level})
|
||||
|
||||
vb.sigRangeChanged.connect(partial(update_pp_nav, chartview=vb, line=line))
|
||||
|
||||
return line
|
||||
|
|
Loading…
Reference in New Issue