Skip to content

Commit cf6883a

Browse files
committed
boxes/themes: Set recipient bars to be thick colored lines.
Following recipient names, eg. stream/topic or PM recipients, we previously had a full-height bar covering the width of the message-list. This shrinks the height of that bar to be a thick line, also now colored if associated with a stream. For non-stream narrows which use the 'general_narrow' style, this adds a new 'general_bar' style for styling the lines adjacent to this text. Tests amended.
1 parent faba3f7 commit cf6883a

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

tests/ui/test_ui_tools.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import pytest
66
from bs4 import BeautifulSoup
7-
from urwid import AttrWrap, Columns, Padding, Text
7+
from urwid import Columns, Divider, Padding, Text
88

99
from zulipterminal.config.keys import is_command_key, keys_for_command
1010
from zulipterminal.helper import powerset
@@ -1703,7 +1703,6 @@ def test_main_view_renders_slash_me(self, mocker, message, content,
17031703
], ids=['different_stream_before', 'different_topic_before', 'PM_before'])
17041704
def test_main_view_generates_stream_header(self, mocker, message,
17051705
to_vary_in_last_message):
1706-
mocker.patch(VIEWS + ".urwid.Text")
17071706
self.model.stream_dict = {
17081707
5: {
17091708
'color': '#bd6',
@@ -1713,10 +1712,11 @@ def test_main_view_generates_stream_header(self, mocker, message,
17131712
msg_box = MessageBox(message, self.model, last_message)
17141713
view_components = msg_box.main_view()
17151714
assert len(view_components) == 3
1716-
assert isinstance(view_components[0], AttrWrap)
1717-
assert view_components[0].get_attr() == 'bar'
1718-
assert isinstance(view_components[1], Columns)
1719-
assert isinstance(view_components[2], Padding)
1715+
1716+
assert isinstance(view_components[0], Columns)
1717+
1718+
assert isinstance(view_components[0][0], Text)
1719+
assert isinstance(view_components[0][1], Divider)
17201720

17211721
@pytest.mark.parametrize('message', [
17221722
{
@@ -1761,15 +1761,16 @@ def test_main_view_generates_stream_header(self, mocker, message,
17611761
], ids=['larger_pm_group', 'stream_before'])
17621762
def test_main_view_generates_PM_header(self, mocker, message,
17631763
to_vary_in_last_message):
1764-
mocker.patch(VIEWS + ".urwid.Text")
17651764
last_message = dict(message, **to_vary_in_last_message)
17661765
msg_box = MessageBox(message, self.model, last_message)
17671766
view_components = msg_box.main_view()
17681767
assert len(view_components) == 3
1769-
assert isinstance(view_components[0], AttrWrap)
1770-
assert view_components[0].get_attr() == 'bar'
1771-
assert isinstance(view_components[1], Columns)
1772-
assert isinstance(view_components[2], Padding)
1768+
1769+
assert isinstance(view_components[0], Columns)
1770+
1771+
assert isinstance(view_components[0][0], Text)
1772+
assert isinstance(view_components[0][1], Text)
1773+
assert isinstance(view_components[0][2], Divider)
17731774

17741775
@pytest.mark.parametrize(['msg_narrow', 'msg_type', 'assert_header_bar',
17751776
'assert_search_bar'], [
@@ -1814,7 +1815,7 @@ def test_msg_generates_search_and_header_bar(self, mocker,
18141815
search_bar = msg_box.top_search_bar()
18151816
header_bar = msg_box.top_header_bar(msg_box)
18161817

1817-
assert header_bar.text.startswith(assert_header_bar)
1818+
assert header_bar[0].text.startswith(assert_header_bar)
18181819
assert search_bar.text_to_fill == assert_search_bar
18191820

18201821
# Assume recipient (PM/stream/topic) header is unchanged below

zulipterminal/config/themes.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
'msg_selected': 'standout',
1414
'header': 'bold',
1515
'general_narrow': 'standout',
16+
'general_bar': '',
1617
'name': '',
1718
'unread': 'strikethrough',
1819
'user_active': 'bold',
@@ -96,6 +97,8 @@
9697
None, DEF['dark_cyan'], DEF['dark_blue']),
9798
('general_narrow', 'white', 'dark blue',
9899
None, DEF['white'], DEF['dark_blue']),
100+
('general_bar', 'white', 'black',
101+
None, DEF['white'], DEF['black']),
99102
('name', 'yellow, bold', 'black',
100103
None, DEF['yellow:bold'], DEF['black']),
101104
('unread', 'dark blue', 'black',
@@ -158,6 +161,8 @@
158161
None, 'dark cyan', DARKBLUE),
159162
('general_narrow', 'white', 'dark blue',
160163
None, WHITE, DARKBLUE),
164+
('general_bar', 'white', 'black',
165+
None, WHITE, BLACK),
161166
('name', 'yellow, bold', 'black',
162167
None, YELLOWBOLD, BLACK),
163168
('unread', 'light magenta', 'black',
@@ -213,6 +218,7 @@
213218
('msg_selected', 'black', 'light green'),
214219
('header', 'white', 'dark blue'),
215220
('general_narrow', 'white', 'dark blue'),
221+
('general_bar', 'dark blue', 'white'),
216222
('name', 'dark green', 'white'),
217223
('unread', 'dark gray', 'light gray'),
218224
('user_active', 'dark green', 'white'),
@@ -244,6 +250,7 @@
244250
('msg_selected', 'black', 'light gray'),
245251
('header', 'black', 'dark blue'),
246252
('general_narrow', 'white', 'dark blue'),
253+
('general_bar', 'dark blue', 'light blue'),
247254
('name', 'dark red', 'light blue'),
248255
('unread', 'light gray', 'light blue'),
249256
('user_active', 'light green, bold', 'light blue'),

zulipterminal/ui_tools/boxes.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -282,15 +282,18 @@ def _is_private_message_to_self(self) -> bool:
282282

283283
def stream_header(self) -> Any:
284284
stream_topic_separator = '▶'
285-
bar_color = self.model.stream_dict[self.stream_id]['color']
286-
bar_color = 's' + bar_color
285+
color = self.model.stream_dict[self.stream_id]['color']
286+
bar_color = 's' + color
287287
stream_title_markup = ('bar', [
288288
(bar_color, '{} {} '.format(self.stream_name,
289289
stream_topic_separator)),
290290
('title', ' {} '.format(self.topic_name))
291291
])
292292
stream_title = urwid.Text(stream_title_markup)
293-
header = urwid.AttrWrap(stream_title, 'bar')
293+
header = urwid.Columns([
294+
(len(stream_title.text), stream_title),
295+
urwid.AttrWrap(urwid.Divider('━'), color),
296+
])
294297
header.markup = stream_title_markup
295298
return header
296299

@@ -300,7 +303,11 @@ def private_header(self) -> Any:
300303
('general_narrow', self.recipients_names)
301304
])
302305
title = urwid.Text(title_markup)
303-
header = urwid.AttrWrap(title, 'bar')
306+
header = urwid.Columns([
307+
(len(title.text), title),
308+
(1, urwid.Text(' ')),
309+
urwid.AttrWrap(urwid.Divider('━'), 'general_bar'),
310+
])
304311
header.markup = title_markup
305312
return header
306313

0 commit comments

Comments
 (0)