refactoring the filter_autoinstall_buttons and filter_manual_buttons functions

This commit is contained in:
Sergey Palcheh
2025-08-11 16:59:08 +06:00
parent 100ffa22ba
commit 2666ee33ad

View File

@@ -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)