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'] = {
|
||||
'buttons': buttons, 'layout': layout, 'search_edit': search_edit, 'scroll_area': scroll_area
|
||||
}
|
||||
self.install_tabs_data['auto']['test_buttons'] = []
|
||||
|
||||
# Добавляем чекбокс для тестовых версий
|
||||
test_checkbox = QCheckBox("Показать тестовые версии")
|
||||
@@ -2237,43 +2238,63 @@ class WineHelperGUI(QMainWindow):
|
||||
if not data:
|
||||
return
|
||||
|
||||
script_folders = ["autoinstall"]
|
||||
if data['test_checkbox'].isChecked():
|
||||
script_folders.append("testinstall")
|
||||
is_checked = data['test_checkbox'].isChecked()
|
||||
test_buttons = data.get('test_buttons', [])
|
||||
|
||||
# Перед удалением кнопок останавливаем все связанные с ними таймеры анимации
|
||||
for btn in data['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 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 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))
|
||||
self._populate_install_grid(data['layout'], folder_scripts, folder, data['buttons'])
|
||||
scripts.extend(folder_scripts)
|
||||
except OSError as e:
|
||||
print(f"Не удалось прочитать директорию {script_path}: {e}")
|
||||
# Запоминаем, какие кнопки являются тестовыми
|
||||
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.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):
|
||||
"""Создает вкладку для отображения установленных программ в виде кнопок"""
|
||||
|
Reference in New Issue
Block a user