devel #49

Open
minergenon wants to merge 11 commits from minergenon/winehelper:devel into master
Showing only changes of commit 2666ee33ad - Show all commits

View File

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