From c37e6e2440bf1a318b7b31a5c74df3929e6e7c6f Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Tue, 21 Sep 2021 15:25:36 -0400 Subject: [PATCH] Clean up some imports, shift around some commented code --- piker/ui/_chart.py | 82 ++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 39 deletions(-) diff --git a/piker/ui/_chart.py b/piker/ui/_chart.py index ea9eaa8c..e4236aba 100644 --- a/piker/ui/_chart.py +++ b/piker/ui/_chart.py @@ -25,6 +25,9 @@ from PyQt5.QtCore import Qt from PyQt5.QtWidgets import ( QFrame, QWidget, + QHBoxLayout, + QVBoxLayout, + QSplitter, # QSizePolicy, ) import numpy as np @@ -64,11 +67,11 @@ log = get_logger(__name__) class GodWidget(QWidget): ''' "Our lord and savior, the holy child of window-shua, there is no - widget above thee." - 6|6 + widget above thee." - 6||6 The highest level composed widget which contains layouts for - organizing lower level charts as well as other widgets used to - control or modify them. + organizing charts as well as other sub-widgets used to control or + modify them. ''' def __init__( @@ -80,19 +83,19 @@ class GodWidget(QWidget): super().__init__(parent) - self.hbox = QtWidgets.QHBoxLayout(self) + self.hbox = QHBoxLayout(self) self.hbox.setContentsMargins(0, 0, 0, 0) self.hbox.setSpacing(6) self.hbox.setAlignment(Qt.AlignTop) - self.vbox = QtWidgets.QVBoxLayout() + self.vbox = QVBoxLayout() self.vbox.setContentsMargins(0, 0, 0, 0) self.vbox.setSpacing(2) self.vbox.setAlignment(Qt.AlignTop) self.hbox.addLayout(self.vbox) - # self.toolbar_layout = QtWidgets.QHBoxLayout() + # self.toolbar_layout = QHBoxLayout() # self.toolbar_layout.setContentsMargins(0, 0, 0, 0) # self.vbox.addLayout(self.toolbar_layout) @@ -106,25 +109,8 @@ class GodWidget(QWidget): # assigned in the startup func `_async_main()` self._root_n: trio.Nursery = None - def set_chart_symbol( - self, - symbol_key: str, # of form . - linkedsplits: 'LinkedSplits', # type: ignore - - ) -> None: - # re-sort org cache symbol list in LIFO order - cache = self._chart_cache - cache.pop(symbol_key, None) - cache[symbol_key] = linkedsplits - - def get_chart_symbol( - self, - symbol_key: str, - ) -> 'LinkedSplits': # type: ignore - return self._chart_cache.get(symbol_key) - # def init_timeframes_ui(self): - # self.tf_layout = QtWidgets.QHBoxLayout() + # self.tf_layout = QHBoxLayout() # self.tf_layout.setSpacing(0) # self.tf_layout.setContentsMargins(0, 12, 0, 0) # time_frames = ('1M', '5M', '15M', '30M', '1H', '1D', '1W', 'MN') @@ -145,6 +131,23 @@ class GodWidget(QWidget): # self.strategy_box = StrategyBoxWidget(self) # self.toolbar_layout.addWidget(self.strategy_box) + def set_chart_symbol( + self, + symbol_key: str, # of form . + linkedsplits: 'LinkedSplits', # type: ignore + + ) -> None: + # re-sort org cache symbol list in LIFO order + cache = self._chart_cache + cache.pop(symbol_key, None) + cache[symbol_key] = linkedsplits + + def get_chart_symbol( + self, + symbol_key: str, + ) -> 'LinkedSplits': # type: ignore + return self._chart_cache.get(symbol_key) + async def load_symbol( self, @@ -255,7 +258,7 @@ class ChartnPane(QFrame): ''' sidepane: FieldsForm - hbox: QtWidgets.QHBoxLayout + hbox: QHBoxLayout chart: Optional['ChartPlotWidget'] = None def __init__( @@ -271,7 +274,7 @@ class ChartnPane(QFrame): self.sidepane = sidepane self.chart = None - hbox = self.hbox = QtWidgets.QHBoxLayout(self) + hbox = self.hbox = QHBoxLayout(self) hbox.setAlignment(Qt.AlignTop | Qt.AlignLeft) hbox.setContentsMargins(0, 0, 0, 0) hbox.setSpacing(3) @@ -281,21 +284,14 @@ class ChartnPane(QFrame): class LinkedSplits(QWidget): ''' - Widget that holds a central chart plus derived - subcharts computed from the original data set apart - by splitters for resizing. + Composite that holds a central chart plus a set of (derived) + subcharts (usually computed from the original data) arranged in + a splitter for resizing. A single internal references to the data is maintained for each chart and can be updated externally. ''' - long_pen = pg.mkPen('#006000') - long_brush = pg.mkBrush('#00ff00') - short_pen = pg.mkPen('#600000') - short_brush = pg.mkBrush('#ff0000') - - zoomIsDisabled = QtCore.pyqtSignal(bool) - def __init__( self, @@ -325,11 +321,11 @@ class LinkedSplits(QWidget): # self.xaxis_ind.setStyle(showValues=False) # self.xaxis.hide() - self.splitter = QtWidgets.QSplitter(QtCore.Qt.Vertical) + self.splitter = QSplitter(QtCore.Qt.Vertical) self.splitter.setMidLineWidth(0) self.splitter.setHandleWidth(2) - self.layout = QtWidgets.QVBoxLayout(self) + self.layout = QVBoxLayout(self) self.layout.setContentsMargins(0, 0, 0, 0) self.layout.addWidget(self.splitter) @@ -749,6 +745,7 @@ class ChartPlotWidget(pg.PlotWidget): self._vb.setXRange( min=l + 1, max=r + 1, + # TODO: holy shit, wtf dude... why tf would this not be 0 by # default... speechless. padding=0, @@ -817,8 +814,11 @@ class ChartPlotWidget(pg.PlotWidget): data_key = array_key or name + # pg internals for reference. # curve = pg.PlotDataItem( # curve = pg.PlotCurveItem( + + # yah, we wrote our own B) curve = FastAppendCurve( y=data[data_key], x=data['index'], @@ -958,9 +958,11 @@ class ChartPlotWidget(pg.PlotWidget): def _set_yrange( self, *, + yrange: Optional[tuple[float, float]] = None, range_margin: float = 0.06, bars_range: Optional[tuple[int, int, int, int]] = None + ) -> None: '''Set the viewable y-range based on embedded data. @@ -986,11 +988,13 @@ class ChartPlotWidget(pg.PlotWidget): l, lbar, rbar, r = bars_range or self.bars_range() + # TODO: we need a loop for auto-scaled subplots to all + # be triggered by one another if self.name != 'volume': vlm_chart = self.linked.subplots.get('volume') if vlm_chart: vlm_chart._set_yrange(bars_range=(l, lbar, rbar, r)) - curve = vlm_chart._graphics['volume'] + # curve = vlm_chart._graphics['volume'] # if rbar - lbar < 1500: # # print('small range') # curve._fill = True