From 899851e15d61a3e2d68ea824befdde4b99db8430 Mon Sep 17 00:00:00 2001 From: Dron-elektron Date: Sun, 14 May 2023 13:20:22 +0300 Subject: [PATCH 1/4] Add the ability to hide page information in the "ListMenu" and "PagedMenu" --- .../packages/source-python/menus/radio.py | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/addons/source-python/packages/source-python/menus/radio.py b/addons/source-python/packages/source-python/menus/radio.py index 1f2bff303..a926bfea4 100644 --- a/addons/source-python/packages/source-python/menus/radio.py +++ b/addons/source-python/packages/source-python/menus/radio.py @@ -141,7 +141,7 @@ def __init__( self, data=None, select_callback=None, build_callback=None, close_callback=None, description=None, title=None, top_separator='-' * 30, bottom_separator='-' * 30, - fill=True, parent_menu=None): + fill=True, parent_menu=None, show_pages=True): """Initialize the object. :param iterable|None data: See :meth:`menus.base._BaseMenu.__init__`. @@ -172,6 +172,7 @@ def __init__( self.bottom_separator = bottom_separator self.fill = fill self.parent_menu = parent_menu + self.show_pages = show_pages @staticmethod def _get_max_item_count(): @@ -186,11 +187,20 @@ def _format_header(self, player_index, page, slots): :param slots: A set to which slots can be added. :type slots: :class:`set` """ - # Create the page info string - info = '[{0}/{1}]\n'.format(page.index + 1, self.page_count) - buffer = '{0} {1}'.format(_translate_text( - self.title, player_index), info) if self.title else info + translated_title = _translate_text(self.title, player_index) if self.title else '' + page_info = '[{0}/{1}]'.format(page.index + 1, self.page_count) if self.show_pages else '' + + if translated_title and page_info: + buffer = '{0} {1}'.format(translated_title, page_info) + elif translated_title: + buffer = translated_title + elif page_info: + buffer = page_info + else: + buffer = '' + + buffer += '\n' # Set description if present if self.description is not None: @@ -325,7 +335,7 @@ def __init__( self, data=None, select_callback=None, build_callback=None, close_callback=None, description=None, title=None, top_separator='-' * 30, bottom_separator='-' * 30, fill=True, parent_menu=None, - items_per_page=10): + items_per_page=10, show_pages=True): """Initialize the object. :param iterable|None data: See :meth:`menus.base._BaseMenu.__init__`. @@ -345,7 +355,7 @@ def __init__( on a single page. """ super().__init__(data, select_callback, build_callback, close_callback, description, - title, top_separator, bottom_separator, fill, parent_menu) + title, top_separator, bottom_separator, fill, parent_menu, show_pages) self.items_per_page = items_per_page def _get_max_item_count(self): From 85499241f10c44559e58f09bda1b3cfc5db5af73 Mon Sep 17 00:00:00 2001 From: Dron-elektron Date: Tue, 16 May 2023 23:27:00 +0300 Subject: [PATCH 2/4] Simplify the code for showing page information in the menu --- .../packages/source-python/menus/radio.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/addons/source-python/packages/source-python/menus/radio.py b/addons/source-python/packages/source-python/menus/radio.py index a926bfea4..5cd4d0399 100644 --- a/addons/source-python/packages/source-python/menus/radio.py +++ b/addons/source-python/packages/source-python/menus/radio.py @@ -187,20 +187,15 @@ def _format_header(self, player_index, page, slots): :param slots: A set to which slots can be added. :type slots: :class:`set` """ + buffer = '' - translated_title = _translate_text(self.title, player_index) if self.title else '' - page_info = '[{0}/{1}]'.format(page.index + 1, self.page_count) if self.show_pages else '' + if self.title: + buffer += _translate_text(self.title, player_index) - if translated_title and page_info: - buffer = '{0} {1}'.format(translated_title, page_info) - elif translated_title: - buffer = translated_title - elif page_info: - buffer = page_info - else: - buffer = '' + if self.show_pages: + buffer += f' [{page.index + 1}/{self.page_count}]' - buffer += '\n' + buffer = buffer.strip() + '\n' # Set description if present if self.description is not None: From 32dde1a7933e0a02d4427bdc4030e214843852ec Mon Sep 17 00:00:00 2001 From: Dron-elektron Date: Sat, 27 May 2023 16:29:20 +0300 Subject: [PATCH 3/4] Do not append redundant symbols Do not add a leading space if there is no title. Do not add a new line if there is no title and no pagination. --- .../source-python/packages/source-python/menus/radio.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/addons/source-python/packages/source-python/menus/radio.py b/addons/source-python/packages/source-python/menus/radio.py index 5cd4d0399..7c483ad49 100644 --- a/addons/source-python/packages/source-python/menus/radio.py +++ b/addons/source-python/packages/source-python/menus/radio.py @@ -193,9 +193,13 @@ def _format_header(self, player_index, page, slots): buffer += _translate_text(self.title, player_index) if self.show_pages: - buffer += f' [{page.index + 1}/{self.page_count}]' + if buffer: + buffer += ' ' - buffer = buffer.strip() + '\n' + buffer += f'[{page.index + 1}/{self.page_count}]' + + if buffer: + buffer += '\n' # Set description if present if self.description is not None: From 797f1d8ef2d6505e08302966010bacac89040d73 Mon Sep 17 00:00:00 2001 From: Dron-elektron Date: Sat, 27 May 2023 18:57:06 +0300 Subject: [PATCH 4/4] Add the ability to hide page information in the "ListESCMenu" and "PagedESCMenu" --- .../packages/source-python/menus/base.py | 15 ++++++++++++++ .../packages/source-python/menus/esc.py | 20 +++++++------------ .../packages/source-python/menus/radio.py | 12 ++--------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/addons/source-python/packages/source-python/menus/base.py b/addons/source-python/packages/source-python/menus/base.py index 6da8e9492..45e4e5a83 100755 --- a/addons/source-python/packages/source-python/menus/base.py +++ b/addons/source-python/packages/source-python/menus/base.py @@ -421,6 +421,21 @@ def _translate_text(text, player_index): return text +def _format_paged_title(menu, player_index, page): + buffer = '' + + if menu.title: + buffer += _translate_text(menu.title, player_index) + + if menu.show_pages: + if buffer: + buffer += ' ' + + buffer += f'[{page.index + 1}/{menu.page_count}]' + + return buffer + + # ============================================================================= # >> LISTENERS # ============================================================================= diff --git a/addons/source-python/packages/source-python/menus/esc.py b/addons/source-python/packages/source-python/menus/esc.py index 59ea11a62..20dd8e44b 100644 --- a/addons/source-python/packages/source-python/menus/esc.py +++ b/addons/source-python/packages/source-python/menus/esc.py @@ -16,6 +16,7 @@ from menus.base import _BaseMenu from menus.base import _PagedMenuBase from menus.base import _BaseOption +from menus.base import _format_paged_title from menus.base import _translate_text from menus.queue import ESC_SELECTION_CMD from menus.queue import _esc_queues @@ -169,7 +170,7 @@ class PagedESCMenu(SimpleESCMenu, _PagedMenuBase): def __init__( self, data=None, select_callback=None, build_callback=None, close_callback=None, description=None, title=None, title_color=WHITE, fill=True, - parent_menu=None): + parent_menu=None, show_pages=True): """Initialize the object. :param iterable|None data: See :meth:`menus.base._BaseMenu.__init__`. @@ -192,6 +193,7 @@ def __init__( description, title, title_color) self.fill = fill self.parent_menu = parent_menu + self.show_pages = show_pages @staticmethod def _get_max_item_count(): @@ -205,16 +207,8 @@ def _format_header(self, player_index, page, data): :param _PlayerPage page: The player's current page. :param KeyValues data: The current menu data. """ - # Create the page info string - info = '[{0}/{1}]'.format(page.index + 1, self.page_count) - - if self.title is not None: - data.set_string('title', '{0} {1}'.format( - _translate_text(self.title, player_index), info)) - else: - data.set_string('title', info) - - data.set_color('color', self.title_color) + buffer = _format_paged_title(self, player_index, page) + data.set_string('title', buffer) def _format_body(self, player_index, page, data): """Prepare the body for the menu. @@ -316,7 +310,7 @@ class ListESCMenu(PagedESCMenu): def __init__( self, data=None, select_callback=None, build_callback=None, close_callback=None, description=None, title=None, title_color=WHITE, fill=True, - parent_menu=None, items_per_page=5): + parent_menu=None, items_per_page=5, show_pages=True): """Initialize the object. :param iterable|None data: See :meth:`menus.base._BaseMenu.__init__`. @@ -335,7 +329,7 @@ def __init__( on a single page (5 is the maximum). """ super().__init__(data, select_callback, build_callback, close_callback, description, - title, title_color, fill, parent_menu) + title, title_color, fill, parent_menu, show_pages) self.items_per_page = items_per_page def _get_max_item_count(self): diff --git a/addons/source-python/packages/source-python/menus/radio.py b/addons/source-python/packages/source-python/menus/radio.py index 7c483ad49..56f31c309 100644 --- a/addons/source-python/packages/source-python/menus/radio.py +++ b/addons/source-python/packages/source-python/menus/radio.py @@ -13,6 +13,7 @@ from menus.base import _BaseMenu from menus.base import _PagedMenuBase from menus.base import _BaseOption +from menus.base import _format_paged_title from menus.base import _translate_text from menus.queue import _radio_queues # Messages @@ -187,16 +188,7 @@ def _format_header(self, player_index, page, slots): :param slots: A set to which slots can be added. :type slots: :class:`set` """ - buffer = '' - - if self.title: - buffer += _translate_text(self.title, player_index) - - if self.show_pages: - if buffer: - buffer += ' ' - - buffer += f'[{page.index + 1}/{self.page_count}]' + buffer = _format_paged_title(self, player_index, page) if buffer: buffer += '\n'