Skip to content

Commit

Permalink
Merge pull request #1020 from nstelter-slac/enable_rich_text
Browse files Browse the repository at this point in the history
STY: Enable rich text for PyDMLabels
  • Loading branch information
jbellister-slac committed Aug 15, 2023
2 parents fc1830a + 8b09cb0 commit ede5b21
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 2 deletions.
56 changes: 54 additions & 2 deletions examples/label/label.ui
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
<rect>
<x>60</x>
<y>80</y>
<width>69</width>
<height>16</height>
<width>71</width>
<height>41</height>
</rect>
</property>
<property name="focusPolicy">
Expand All @@ -41,6 +41,58 @@
<enum>PyDMLabel::String</enum>
</property>
</widget>
<widget class="PyDMLabel" name="PyDMLabel_2">
<property name="geometry">
<rect>
<x>230</x>
<y>80</y>
<width>71</width>
<height>41</height>
</rect>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="toolTip">
<string/>
</property>
<property name="whatsThis">
<string/>
</property>
<property name="text">
<string>&lt;b&gt;Rich&lt;b&gt; &lt;i&gt;text!&lt;i&gt;</string>
</property>
<property name="rules" stdset="0">
<string>[]</string>
</property>
<property name="precision" stdset="0">
<number>0</number>
</property>
<property name="showUnits" stdset="0">
<bool>false</bool>
</property>
<property name="precisionFromPV" stdset="0">
<bool>true</bool>
</property>
<property name="alarmSensitiveContent" stdset="0">
<bool>true</bool>
</property>
<property name="alarmSensitiveBorder" stdset="0">
<bool>true</bool>
</property>
<property name="PyDMToolTip" stdset="0">
<string/>
</property>
<property name="channel" stdset="0">
<string/>
</property>
<property name="enableRichText" stdset="0">
<bool>true</bool>
</property>
<property name="displayFormat" stdset="0">
<enum>PyDMLabel::String</enum>
</property>
</widget>
</widget>
<customwidgets>
<customwidget>
Expand Down
20 changes: 20 additions & 0 deletions pydm/tests/widgets/test_label.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from ...widgets.display_format import parse_value_for_display, DisplayFormat

from qtpy.QtWidgets import QApplication, QStyleOption
from qtpy.QtCore import Qt

# --------------------
# POSITIVE TEST CASES
Expand All @@ -37,6 +38,25 @@ def test_construct(qtbot):
assert display_format_type == pydm_label.DisplayFormat.Default
assert pydm_label._string_encoding == pydm_label.app.get_string_encoding() if is_pydm_app() else "utf_8"

def test_enable_rich_text(qtbot):
"""
Test the widget's option for enabling rich text.
Expectations:
1. The label has plain text as default text format
2. The label allows rich text to be enabled using its "enableRichText" setters
Parameters
----------
qtbot : fixture
Window for widget testing
"""
pydm_label = PyDMLabel()
assert pydm_label.textFormat() == Qt.PlainText

pydm_label.enableRichText = True #invoke setter
qtbot.addWidget(pydm_label)
assert pydm_label.textFormat() == Qt.RichText

@pytest.mark.parametrize("value, display_format", [
("abc", DisplayFormat.Default),
Expand Down
16 changes: 16 additions & 0 deletions pydm/widgets/label.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,25 @@ def __init__(self, parent=None, init_channel=None):
self.setText("######")
self._display_format_type = self.DisplayFormat.Default
self._string_encoding = "utf_8"
self._enable_rich_text = False
if is_pydm_app():
self._string_encoding = self.app.get_string_encoding()

@Property(bool)
def enableRichText(self):
return self._enable_rich_text

@enableRichText.setter
def enableRichText(self, new_value):
if self._enable_rich_text == new_value:
return
self._enable_rich_text = new_value

if self._enable_rich_text:
self.setTextFormat(Qt.RichText)
else:
self.setTextFormat(Qt.PlainText)

@Property(DisplayFormat)
def displayFormat(self):
return self._display_format_type
Expand Down

0 comments on commit ede5b21

Please sign in to comment.