Skip to content

Commit

Permalink
Delegates inheritance was changed to remove duplicated code for grid …
Browse files Browse the repository at this point in the history
…painting in tree views (now delegates are descendants of GridLinesDelegate instead of QStyledItemDelegate)
  • Loading branch information
titov-vv committed Feb 12, 2024
1 parent 8dae1b5 commit dac55f0
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 89 deletions.
33 changes: 16 additions & 17 deletions jal/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1344,83 +1344,82 @@
<context>
<name>HoldingsModel</name>
<message>
<location filename="../db/holdings_model.py" line="107"/>
<location filename="../db/holdings_model.py" line="109"/>
<source>Qty</source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="108"/>
<location filename="../db/holdings_model.py" line="110"/>
<source>Since</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="109"/>
<location filename="../db/holdings_model.py" line="111"/>
<source>Open</source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="110"/>
<location filename="../db/holdings_model.py" line="112"/>
<source>Last</source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="111"/>
<location filename="../db/holdings_model.py" line="113"/>
<source>Share, %</source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="112"/>
<location filename="../db/holdings_model.py" line="114"/>
<source>P/L, %</source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="113"/>
<location filename="../db/holdings_model.py" line="115"/>
<source>P/L</source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="114"/>
<location filename="../db/holdings_model.py" line="116"/>
<source>Paid</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="115"/>
<location filename="../db/holdings_model.py" line="117"/>
<source>Value</source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="116"/>
<location filename="../db/holdings_model.py" line="118"/>
<source>Value, </source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="187"/>
<location filename="../db/holdings_model.py" line="144"/>
<source>Last quote date: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="293"/>
<location filename="../db/holdings_model.py" line="244"/>
<source>N/A</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="320"/>
<location filename="../db/holdings_model.py" line="272"/>
<source>Money</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="105"/>
<location filename="../db/holdings_model.py" line="107"/>
<source>Currency/Account/Asset</source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="106"/>
<location filename="../db/holdings_model.py" line="108"/>
<source>Asset Name</source>
<translation></translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="155"/>
<location filename="../db/holdings_model.py" line="281"/>
<location filename="../db/holdings_model.py" line="232"/>
<source>Exp:</source>
<translation></translation>
</message>
Expand Down
33 changes: 16 additions & 17 deletions jal/languages/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1344,83 +1344,82 @@
<context>
<name>HoldingsModel</name>
<message>
<location filename="../db/holdings_model.py" line="107"/>
<location filename="../db/holdings_model.py" line="109"/>
<source>Qty</source>
<translation>Кол-во</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="108"/>
<location filename="../db/holdings_model.py" line="110"/>
<source>Since</source>
<translation>С</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="109"/>
<location filename="../db/holdings_model.py" line="111"/>
<source>Open</source>
<translation>Цена откр.</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="110"/>
<location filename="../db/holdings_model.py" line="112"/>
<source>Last</source>
<translation>Цена закр.</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="111"/>
<location filename="../db/holdings_model.py" line="113"/>
<source>Share, %</source>
<translation>Доля, %</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="112"/>
<location filename="../db/holdings_model.py" line="114"/>
<source>P/L, %</source>
<translation>ПиУ, %</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="113"/>
<location filename="../db/holdings_model.py" line="115"/>
<source>P/L</source>
<translation>ПиУ</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="114"/>
<location filename="../db/holdings_model.py" line="116"/>
<source>Paid</source>
<translation>Выплачено</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="115"/>
<location filename="../db/holdings_model.py" line="117"/>
<source>Value</source>
<translation>Оценка</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="116"/>
<location filename="../db/holdings_model.py" line="118"/>
<source>Value, </source>
<translation>Оценка, </translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="187"/>
<location filename="../db/holdings_model.py" line="144"/>
<source>Last quote date: </source>
<translation>Дата последней котировки: </translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="293"/>
<location filename="../db/holdings_model.py" line="244"/>
<source>N/A</source>
<translation>N/A</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="320"/>
<location filename="../db/holdings_model.py" line="272"/>
<source>Money</source>
<translation>Деньги</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="105"/>
<location filename="../db/holdings_model.py" line="107"/>
<source>Currency/Account/Asset</source>
<translation>Валюта/Счёт/ЦБ</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="106"/>
<location filename="../db/holdings_model.py" line="108"/>
<source>Asset Name</source>
<translation>Ценная бумага</translation>
</message>
<message>
<location filename="../db/holdings_model.py" line="155"/>
<location filename="../db/holdings_model.py" line="281"/>
<location filename="../db/holdings_model.py" line="232"/>
<source>Exp:</source>
<translation>Эксп:</translation>
</message>
Expand Down
84 changes: 29 additions & 55 deletions jal/widgets/delegates.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,34 @@ def keyPressEvent(self, event: QKeyEvent) -> None:
super().keyPressEvent(event)



# ----------------------------------------------------------------------------------------------------------------------
# QTreeView doesn't draw grid lines and have no normal method to implement it
# So the purpose of this delegate is solely to draw dotted box around report cell
class GridLinesDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
self._parent = parent
super().__init__(parent=parent)

def paint_grid(self, painter, option, index):
if issubclass(type(self._parent), QTreeView): # Extra code for tree views - to draw grid lines
painter.save()
pen = painter.pen()
pen.setWidth(1)
pen.setStyle(Qt.DotLine)
pen.setColor(Qt.GlobalColor.lightGray)
painter.setPen(pen)
painter.drawRect(option.rect)
painter.restore()

def paint(self, painter, option, index):
self.paint_grid(painter, option, index)
super().paint(painter, option, index)


# ----------------------------------------------------------------------------------------------------------------------
# Delegate to convert timestamp from unix-time to QDateTime and display it according to the given format
class TimestampDelegate(QStyledItemDelegate):
class TimestampDelegate(GridLinesDelegate):
def __init__(self, display_format='%d/%m/%Y %H:%M:%S', parent=None):
super().__init__(parent=parent)
self._parent = parent
Expand Down Expand Up @@ -98,18 +123,6 @@ def setModelData(self, editor, model, index):
timestamp = editor.dateTime().toSecsSinceEpoch()
model.setData(index, timestamp)

def paint(self, painter, option, index):
super().paint(painter, option, index)
if issubclass(type(self._parent), QTreeView): # Extra code for tree views - to draw grid lines
painter.save()
pen = painter.pen()
pen.setWidth(1)
pen.setStyle(Qt.DotLine)
pen.setColor(Qt.GlobalColor.lightGray)
painter.setPen(pen)
painter.drawRect(option.rect)
painter.restore()


# -----------------------------------------------------------------------------------------------------------------------
# Delegate for float numbers formatting
Expand All @@ -119,7 +132,7 @@ def paint(self, painter, option, index):
# 'colors' - make Green/Red background for positive/negative values
# 'percent' - multiply values by 100 in order to display percents
# 'empty_zero' - display nothing instead of number 0
class FloatDelegate(QStyledItemDelegate):
class FloatDelegate(GridLinesDelegate):
DEFAULT_TOLERANCE = 6

def __init__(self, tolerance=None, allow_tail=True, colors=False, percent=False, empty_zero=False, parent=None):
Expand Down Expand Up @@ -185,18 +198,6 @@ def initStyleOption(self, option, index):
if self._colors and self._color is not None:
option.backgroundBrush = QBrush(self._color)

def paint(self, painter, option, index):
super().paint(painter, option, index)
if issubclass(type(self._parent), QTreeView): # Extra code for tree views - to draw grid lines
painter.save()
pen = painter.pen()
pen.setWidth(1)
pen.setStyle(Qt.DotLine)
pen.setColor(Qt.GlobalColor.lightGray)
painter.setPen(pen)
painter.drawRect(option.rect)
painter.restore()


# ----------------------------------------------------------------------------------------------------------------------
# Delegate to apply currency filter for AssetSelector widgets based on current account
Expand All @@ -211,7 +212,7 @@ def setEditorData(self, editor, index):

# ----------------------------------------------------------------------------------------------------------------------
# Toggle True/False by mouse click and display status by relevant icon
class BoolDelegate(QStyledItemDelegate):
class BoolDelegate(GridLinesDelegate):
def __init__(self, parent=None):
self._parent = parent
super().__init__(parent=parent)
Expand All @@ -229,15 +230,7 @@ def paint(self, painter, option, index):
icon = JalIcon[JalIcon.CANCEL]
icon.paint(painter, option.rect, Qt.AlignVCenter | Qt.AlignCenter)
painter.restore()
if issubclass(type(self._parent), QTreeView): # Extra code for tree views - to draw grid lines
painter.save()
pen = painter.pen()
pen.setWidth(1)
pen.setStyle(Qt.DotLine)
pen.setColor(Qt.GlobalColor.lightGray)
painter.setPen(pen)
painter.drawRect(option.rect)
painter.restore()
self.paint_grid(painter, option, index)

def editorEvent(self, event, model, option, index):
if event.type() == QEvent.MouseButtonPress:
Expand Down Expand Up @@ -275,25 +268,6 @@ def setModelData(self, editor, model, index):
model.setData(index, editor.currentData())


# ----------------------------------------------------------------------------------------------------------------------
# QTreeView doesn't draw grid lines and have no normal method to implement it
# So the purpose of this delegate is solely to draw dotted box around report cell
class GridLinesDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
super().__init__(parent=parent)

def paint(self, painter, option, index):
painter.save()
pen = painter.pen()
pen.setWidth(1)
pen.setStyle(Qt.DotLine)
pen.setColor(Qt.GlobalColor.lightGray)
painter.setPen(pen)
painter.drawRect(option.rect)
painter.restore()
super().paint(painter, option, index)


# -----------------------------------------------------------------------------------------------------------------------
# Base class for lookup delegate that allows Asset, Peer, Category and Tag selection
class LookupSelectorDelegate(QStyledItemDelegate):
Expand Down

0 comments on commit dac55f0

Please sign in to comment.