improved display of test versions

This commit is contained in:
Sergey Palcheh
2025-10-22 11:13:55 +06:00
parent c7eddb8b53
commit eb9bef83e2

View File

@@ -2202,6 +2202,7 @@ class WineHelperGUI(QMainWindow):
self.install_tabs_data['auto'] = { self.install_tabs_data['auto'] = {
'buttons': buttons, 'layout': layout, 'search_edit': search_edit, 'scroll_area': scroll_area 'buttons': buttons, 'layout': layout, 'search_edit': search_edit, 'scroll_area': scroll_area
} }
self.install_tabs_data['auto']['test_buttons'] = []
# Добавляем чекбокс для тестовых версий # Добавляем чекбокс для тестовых версий
test_checkbox = QCheckBox("Показать тестовые версии") test_checkbox = QCheckBox("Показать тестовые версии")
@@ -2237,12 +2238,39 @@ class WineHelperGUI(QMainWindow):
if not data: if not data:
return return
script_folders = ["autoinstall"] is_checked = data['test_checkbox'].isChecked()
if data['test_checkbox'].isChecked(): test_buttons = data.get('test_buttons', [])
script_folders.append("testinstall")
# Перед удалением кнопок останавливаем все связанные с ними таймеры анимации # Если нужно показать тестовые версии и они еще не добавлены
for btn in data['buttons']: if is_checked and not test_buttons:
test_script_folder = "testinstall"
script_path = os.path.join(Var.DATA_PATH, test_script_folder)
if os.path.isdir(script_path):
try:
folder_scripts = sorted(os.listdir(script_path))
# Запоминаем, какие кнопки являются тестовыми
new_test_buttons = []
self._populate_install_grid(data['layout'], folder_scripts, test_script_folder, new_test_buttons)
data['test_buttons'] = new_test_buttons
data['buttons'].extend(new_test_buttons)
self.autoinstall_scripts.extend(folder_scripts)
# Применяем фильтр и прокручиваем к первому новому элементу
self.filter_buttons('auto')
if new_test_buttons:
first_new_button = new_test_buttons[0]
frame = first_new_button.parent()
if isinstance(frame, QFrame):
# Даем время на отрисовку перед прокруткой
QTimer.singleShot(100, lambda: data['scroll_area'].ensureWidgetVisible(frame, 50, 50))
except OSError as e:
print(f"Не удалось прочитать директорию {test_script_folder}: {e}")
# Если нужно скрыть тестовые версии и они были добавлены
elif not is_checked and test_buttons:
# Останавливаем анимацию и удаляем виджеты тестовых кнопок
for btn in test_buttons:
if btn in self.icon_animators: if btn in self.icon_animators:
anim_data = self.icon_animators.pop(btn) anim_data = self.icon_animators.pop(btn)
if 'main_timer' in anim_data: if 'main_timer' in anim_data:
@@ -2250,29 +2278,22 @@ class WineHelperGUI(QMainWindow):
if 'animation' in anim_data and anim_data['animation']: if 'animation' in anim_data and anim_data['animation']:
anim_data['animation'].stop() anim_data['animation'].stop()
# Сбрасываем ссылку на активную кнопку, если она была удалена # Удаляем кнопку из основного списка
if self.current_active_button in data['buttons']: if btn in data['buttons']:
self.current_active_button = None data['buttons'].remove(btn)
# Очищаем старые кнопки и layout # Удаляем фрейм кнопки из layout
for btn in data['buttons']: frame = btn.parent()
btn.parent().deleteLater() if frame:
data['buttons'].clear() frame.deleteLater()
# Заполняем layout новыми кнопками # Очищаем список тестовых кнопок
scripts = [] data['test_buttons'].clear()
for folder in script_folders: # Обновляем список скриптов
script_path = os.path.join(Var.DATA_PATH, folder) self.autoinstall_scripts = [s for s in self.autoinstall_scripts if not os.path.exists(os.path.join(Var.DATA_PATH, "testinstall", s))]
if os.path.isdir(script_path):
try:
folder_scripts = sorted(os.listdir(script_path))
self._populate_install_grid(data['layout'], folder_scripts, folder, data['buttons'])
scripts.extend(folder_scripts)
except OSError as e:
print(f"Не удалось прочитать директорию {script_path}: {e}")
self.autoinstall_scripts = scripts # В любом случае применяем фильтр, чтобы скрыть/показать кнопки в соответствии с поиском
# Применяем текущий фильтр поиска к обновленному списку if data['test_checkbox'].isChecked():
self.filter_buttons('auto') self.filter_buttons('auto')
def create_installed_tab(self): def create_installed_tab(self):