devel #49
| @@ -585,6 +585,7 @@ class WineHelperGUI(QMainWindow): | |||||||
|         self.install_dialog = None |         self.install_dialog = None | ||||||
|         self.current_active_button = None |         self.current_active_button = None | ||||||
|         self.installed_buttons = [] |         self.installed_buttons = [] | ||||||
|  |         self.install_tabs_data = {} | ||||||
|         self.current_selected_app = None |         self.current_selected_app = None | ||||||
|         self.icon_animators = {} |         self.icon_animators = {} | ||||||
|  |  | ||||||
| @@ -1092,20 +1093,28 @@ class WineHelperGUI(QMainWindow): | |||||||
|     def create_auto_install_tab(self): |     def create_auto_install_tab(self): | ||||||
|         """Создает вкладку для автоматической установки программ""" |         """Создает вкладку для автоматической установки программ""" | ||||||
|         ( |         ( | ||||||
|             self.autoinstall_scripts, self.autoinstall_buttons, self.scroll_layout, |             scripts, buttons, layout, | ||||||
|             self.search_edit, self.auto_scroll_area |             search_edit, scroll_area | ||||||
|         ) = self._create_and_populate_install_tab( |         ) = 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): |     def create_manual_install_tab(self): | ||||||
|         """Создает вкладку для ручной установки программ""" |         """Создает вкладку для ручной установки программ""" | ||||||
|         ( |         ( | ||||||
|             self.manualinstall_scripts, self.manualinstall_buttons, self.manual_scroll_layout, |             scripts, buttons, layout, | ||||||
|             self.manual_search_edit, self.manual_scroll_area |             search_edit, scroll_area | ||||||
|         ) = self._create_and_populate_install_tab( |         ) = 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): |     def create_installed_tab(self): | ||||||
|         """Создает вкладку для отображения установленных программ в виде кнопок""" |         """Создает вкладку для отображения установленных программ в виде кнопок""" | ||||||
| @@ -1764,35 +1773,36 @@ class WineHelperGUI(QMainWindow): | |||||||
|                                      f"Префикс: {prefix_name}\n" |                                      f"Префикс: {prefix_name}\n" | ||||||
|                                      f"Путь к префиксу: {prefix_path if 'prefix_path' in locals() else 'не определен'}") |                                      f"Путь к префиксу: {prefix_path if 'prefix_path' in locals() else 'не определен'}") | ||||||
|     def _filter_buttons_in_grid(self, search_text, button_list, grid_layout): |     def _filter_buttons_in_grid(self, search_text, button_list, grid_layout): | ||||||
|         """Общий метод для фильтрации кнопок и перестроения сетки.""" |         """Общий метод для фильтрации кнопок и перестроения сетки (helper).""" | ||||||
|         search_text_lower = search_text.lower() |         search_text_lower = search_text.lower() | ||||||
|         visible_frames = [] |         visible_frames = [] | ||||||
|         for btn in button_list: |         for btn in button_list: | ||||||
|             frame = btn.parent() |             frame = btn.parent() | ||||||
|             if isinstance(frame, QFrame): |             if isinstance(frame, QFrame): | ||||||
|                 # Сначала скрываем все, чтобы правильно перестроить сетку |  | ||||||
|                 frame.setVisible(False) |                 frame.setVisible(False) | ||||||
|                 if search_text_lower in btn.text().lower(): |                 if search_text_lower in btn.text().lower(): | ||||||
|                     visible_frames.append(frame) |                     visible_frames.append(frame) | ||||||
|  |  | ||||||
|         # Перестраиваем сетку только с видимыми элементами |  | ||||||
|         for i, frame in enumerate(visible_frames): |         for i, frame in enumerate(visible_frames): | ||||||
|             row, column = divmod(i, 2) |             row, column = divmod(i, 2) | ||||||
|             grid_layout.addWidget(frame, row, column) |             grid_layout.addWidget(frame, row, column) | ||||||
|             frame.setVisible(True) |             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): |     def filter_installed_buttons(self): | ||||||
|         """Фильтрует кнопки установленных программ.""" |         """Фильтрует кнопки установленных программ.""" | ||||||
|         self._filter_buttons_in_grid( |         self._filter_buttons_in_grid( | ||||||
|             self.installed_search_edit.text(), self.installed_buttons, self.installed_scroll_layout |             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): |     def extract_info_ru(self, script_path): | ||||||
|         """Извлекает информацию из строки # info_ru: в скрипте""" |         """Извлекает информацию из строки # info_ru: в скрипте""" | ||||||
|         try: |         try: | ||||||
| @@ -1812,22 +1822,22 @@ class WineHelperGUI(QMainWindow): | |||||||
|         # Определяем виджеты и действия в зависимости от типа скрипта |         # Определяем виджеты и действия в зависимости от типа скрипта | ||||||
|         if script_name in self.autoinstall_scripts: |         if script_name in self.autoinstall_scripts: | ||||||
|             script_path = os.path.join(Var.DATA_PATH, "autoinstall", script_name) |             script_path = os.path.join(Var.DATA_PATH, "autoinstall", script_name) | ||||||
|             search_edit = self.search_edit |             tab_type = 'auto' | ||||||
|             filter_func = self.filter_autoinstall_buttons |  | ||||||
|             scroll_area = self.auto_scroll_area |  | ||||||
|             self.manual_install_path_widget.setVisible(False) |             self.manual_install_path_widget.setVisible(False) | ||||||
|         else: |         else: | ||||||
|             script_path = os.path.join(Var.DATA_PATH, "manualinstall", script_name) |             script_path = os.path.join(Var.DATA_PATH, "manualinstall", script_name) | ||||||
|             search_edit = self.manual_search_edit |             tab_type = 'manual' | ||||||
|             filter_func = self.filter_manual_buttons |  | ||||||
|             scroll_area = self.manual_scroll_area |  | ||||||
|             self.manual_install_path_widget.setVisible(True) |             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.blockSignals(True) | ||||||
|         search_edit.clear() |         search_edit.clear() | ||||||
|         search_edit.blockSignals(False) |         search_edit.blockSignals(False) | ||||||
|         filter_func() |         self.filter_buttons(tab_type) | ||||||
|         frame = button_widget.parent() |         frame = button_widget.parent() | ||||||
|         if isinstance(frame, QFrame): |         if isinstance(frame, QFrame): | ||||||
|             QTimer.singleShot(0, lambda: scroll_area.ensureWidgetVisible(frame)) |             QTimer.singleShot(0, lambda: scroll_area.ensureWidgetVisible(frame)) | ||||||
| @@ -2233,12 +2243,6 @@ class WineHelperGUI(QMainWindow): | |||||||
|             self.install_process.deleteLater() |             self.install_process.deleteLater() | ||||||
|             self.install_process = None |             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__": | if __name__ == "__main__": | ||||||
|     app = QApplication(sys.argv) |     app = QApplication(sys.argv) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user