forked from CastroFidel/winehelper
improved display of test versions
This commit is contained in:
@@ -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,43 +2238,63 @@ 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:
|
||||||
if btn in self.icon_animators:
|
test_script_folder = "testinstall"
|
||||||
anim_data = self.icon_animators.pop(btn)
|
script_path = os.path.join(Var.DATA_PATH, test_script_folder)
|
||||||
if 'main_timer' in anim_data:
|
|
||||||
anim_data['main_timer'].stop()
|
|
||||||
if 'animation' in anim_data and anim_data['animation']:
|
|
||||||
anim_data['animation'].stop()
|
|
||||||
|
|
||||||
# Сбрасываем ссылку на активную кнопку, если она была удалена
|
|
||||||
if self.current_active_button in data['buttons']:
|
|
||||||
self.current_active_button = None
|
|
||||||
|
|
||||||
# Очищаем старые кнопки и layout
|
|
||||||
for btn in data['buttons']:
|
|
||||||
btn.parent().deleteLater()
|
|
||||||
data['buttons'].clear()
|
|
||||||
|
|
||||||
# Заполняем layout новыми кнопками
|
|
||||||
scripts = []
|
|
||||||
for folder in script_folders:
|
|
||||||
script_path = os.path.join(Var.DATA_PATH, folder)
|
|
||||||
if os.path.isdir(script_path):
|
if os.path.isdir(script_path):
|
||||||
try:
|
try:
|
||||||
folder_scripts = sorted(os.listdir(script_path))
|
folder_scripts = sorted(os.listdir(script_path))
|
||||||
self._populate_install_grid(data['layout'], folder_scripts, folder, data['buttons'])
|
# Запоминаем, какие кнопки являются тестовыми
|
||||||
scripts.extend(folder_scripts)
|
new_test_buttons = []
|
||||||
except OSError as e:
|
self._populate_install_grid(data['layout'], folder_scripts, test_script_folder, new_test_buttons)
|
||||||
print(f"Не удалось прочитать директорию {script_path}: {e}")
|
data['test_buttons'] = new_test_buttons
|
||||||
|
data['buttons'].extend(new_test_buttons)
|
||||||
|
self.autoinstall_scripts.extend(folder_scripts)
|
||||||
|
|
||||||
self.autoinstall_scripts = scripts
|
# Применяем фильтр и прокручиваем к первому новому элементу
|
||||||
# Применяем текущий фильтр поиска к обновленному списку
|
self.filter_buttons('auto')
|
||||||
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:
|
||||||
|
anim_data = self.icon_animators.pop(btn)
|
||||||
|
if 'main_timer' in anim_data:
|
||||||
|
anim_data['main_timer'].stop()
|
||||||
|
if 'animation' in anim_data and anim_data['animation']:
|
||||||
|
anim_data['animation'].stop()
|
||||||
|
|
||||||
|
# Удаляем кнопку из основного списка
|
||||||
|
if btn in data['buttons']:
|
||||||
|
data['buttons'].remove(btn)
|
||||||
|
|
||||||
|
# Удаляем фрейм кнопки из layout
|
||||||
|
frame = btn.parent()
|
||||||
|
if frame:
|
||||||
|
frame.deleteLater()
|
||||||
|
|
||||||
|
# Очищаем список тестовых кнопок
|
||||||
|
data['test_buttons'].clear()
|
||||||
|
# Обновляем список скриптов
|
||||||
|
self.autoinstall_scripts = [s for s in self.autoinstall_scripts if not os.path.exists(os.path.join(Var.DATA_PATH, "testinstall", s))]
|
||||||
|
|
||||||
|
# В любом случае применяем фильтр, чтобы скрыть/показать кнопки в соответствии с поиском
|
||||||
|
if data['test_checkbox'].isChecked():
|
||||||
|
self.filter_buttons('auto')
|
||||||
|
|
||||||
def create_installed_tab(self):
|
def create_installed_tab(self):
|
||||||
"""Создает вкладку для отображения установленных программ в виде кнопок"""
|
"""Создает вкладку для отображения установленных программ в виде кнопок"""
|
||||||
|
|||||||
Reference in New Issue
Block a user