From 2666ee33ad52e2ae792f18ef85a326d4b5e4e25f Mon Sep 17 00:00:00 2001 From: Sergey Palcheh Date: Mon, 11 Aug 2025 16:59:08 +0600 Subject: [PATCH] refactoring the filter_autoinstall_buttons and filter_manual_buttons functions --- winehelper_gui.py | 60 +++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/winehelper_gui.py b/winehelper_gui.py index b343626..7caae3c 100644 --- a/winehelper_gui.py +++ b/winehelper_gui.py @@ -585,6 +585,7 @@ class WineHelperGUI(QMainWindow): self.install_dialog = None self.current_active_button = None self.installed_buttons = [] + self.install_tabs_data = {} self.current_selected_app = None self.icon_animators = {} @@ -1092,20 +1093,28 @@ class WineHelperGUI(QMainWindow): def create_auto_install_tab(self): """Создает вкладку для автоматической установки программ""" ( - self.autoinstall_scripts, self.autoinstall_buttons, self.scroll_layout, - self.search_edit, self.auto_scroll_area + scripts, buttons, layout, + search_edit, scroll_area ) = self._create_and_populate_install_tab( - "Автоматическая установка", "autoinstall", "Поиск скрипта автоматической установки...", self.filter_autoinstall_buttons + "Автоматическая установка", "autoinstall", "Поиск скрипта автоматической установки...", partial(self.filter_buttons, 'auto') ) + self.autoinstall_scripts = scripts + self.install_tabs_data['auto'] = { + 'buttons': buttons, 'layout': layout, 'search_edit': search_edit, 'scroll_area': scroll_area + } def create_manual_install_tab(self): """Создает вкладку для ручной установки программ""" ( - self.manualinstall_scripts, self.manualinstall_buttons, self.manual_scroll_layout, - self.manual_search_edit, self.manual_scroll_area + scripts, buttons, layout, + search_edit, scroll_area ) = self._create_and_populate_install_tab( - "Ручная установка", "manualinstall", "Поиск скрипта ручной установки...", self.filter_manual_buttons + "Ручная установка", "manualinstall", "Поиск скрипта ручной установки...", partial(self.filter_buttons, 'manual') ) + self.manualinstall_scripts = scripts + self.install_tabs_data['manual'] = { + 'buttons': buttons, 'layout': layout, 'search_edit': search_edit, 'scroll_area': scroll_area + } def create_installed_tab(self): """Создает вкладку для отображения установленных программ в виде кнопок""" @@ -1764,35 +1773,36 @@ class WineHelperGUI(QMainWindow): f"Префикс: {prefix_name}\n" f"Путь к префиксу: {prefix_path if 'prefix_path' in locals() else 'не определен'}") def _filter_buttons_in_grid(self, search_text, button_list, grid_layout): - """Общий метод для фильтрации кнопок и перестроения сетки.""" + """Общий метод для фильтрации кнопок и перестроения сетки (helper).""" search_text_lower = search_text.lower() visible_frames = [] for btn in button_list: frame = btn.parent() if isinstance(frame, QFrame): - # Сначала скрываем все, чтобы правильно перестроить сетку frame.setVisible(False) if search_text_lower in btn.text().lower(): visible_frames.append(frame) - # Перестраиваем сетку только с видимыми элементами for i, frame in enumerate(visible_frames): row, column = divmod(i, 2) grid_layout.addWidget(frame, row, column) frame.setVisible(True) + def filter_buttons(self, tab_type): + """Фильтрует кнопки для указанной вкладки установки ('auto' или 'manual').""" + if tab_type not in self.install_tabs_data: + return + data = self.install_tabs_data[tab_type] + self._filter_buttons_in_grid( + data['search_edit'].text(), data['buttons'], data['layout'] + ) + def filter_installed_buttons(self): """Фильтрует кнопки установленных программ.""" self._filter_buttons_in_grid( self.installed_search_edit.text(), self.installed_buttons, self.installed_scroll_layout ) - def filter_manual_buttons(self): - """Фильтрует кнопки ручной установки.""" - self._filter_buttons_in_grid( - self.manual_search_edit.text(), self.manualinstall_buttons, self.manual_scroll_layout - ) - def extract_info_ru(self, script_path): """Извлекает информацию из строки # info_ru: в скрипте""" try: @@ -1812,22 +1822,22 @@ class WineHelperGUI(QMainWindow): # Определяем виджеты и действия в зависимости от типа скрипта if script_name in self.autoinstall_scripts: script_path = os.path.join(Var.DATA_PATH, "autoinstall", script_name) - search_edit = self.search_edit - filter_func = self.filter_autoinstall_buttons - scroll_area = self.auto_scroll_area + tab_type = 'auto' self.manual_install_path_widget.setVisible(False) else: script_path = os.path.join(Var.DATA_PATH, "manualinstall", script_name) - search_edit = self.manual_search_edit - filter_func = self.filter_manual_buttons - scroll_area = self.manual_scroll_area + tab_type = 'manual' self.manual_install_path_widget.setVisible(True) + tab_data = self.install_tabs_data[tab_type] + search_edit = tab_data['search_edit'] + scroll_area = tab_data['scroll_area'] + # Общая логика: очищаем поиск, обновляем список и прокручиваем к элементу search_edit.blockSignals(True) search_edit.clear() search_edit.blockSignals(False) - filter_func() + self.filter_buttons(tab_type) frame = button_widget.parent() if isinstance(frame, QFrame): QTimer.singleShot(0, lambda: scroll_area.ensureWidgetVisible(frame)) @@ -2233,12 +2243,6 @@ class WineHelperGUI(QMainWindow): self.install_process.deleteLater() self.install_process = None - def filter_autoinstall_buttons(self): - """Фильтрует кнопки автоматической установки.""" - self._filter_buttons_in_grid( - self.search_edit.text(), self.autoinstall_buttons, self.scroll_layout - ) - if __name__ == "__main__": app = QApplication(sys.argv)