refactoring the filter_autoinstall_buttons and filter_manual_buttons functions
This commit is contained in:
@@ -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)
|
||||
|
Reference in New Issue
Block a user