forked from CastroFidel/winehelper
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
d5f337e6b4 | ||
|
904c9c9895 | ||
|
1d4ee1fd70 | ||
|
02a2256c8c | ||
|
cbcdba204e | ||
|
66c56f6ecf | ||
|
221b59eda7 |
@@ -126,6 +126,12 @@ WH_TESTINSTALL_DIR="$DATA_PATH/testinstall"
|
||||
WH_WINETRICKS="$DATA_PATH/winetricks_$WINETRICKS_VERSION"
|
||||
|
||||
WH_MENU_DIR="$HOME/.local/share/applications/WineHelper"
|
||||
|
||||
# TODO: system menu directory
|
||||
# /usr/share/desktop-directories/WineHelper.directory
|
||||
# /etc/xdg/menus/applications-merged/WineHelper.menu
|
||||
|
||||
# user menu directory
|
||||
WH_MENU_CATEGORY="$HOME/.local/share/desktop-directories/WineHelper.directory"
|
||||
WH_MENU_CONFIG="$HOME/.config/menus/applications-merged/WineHelper.menu"
|
||||
|
||||
|
@@ -1210,9 +1210,9 @@ class CreatePrefixDialog(QDialog):
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.parent_gui = parent # Store reference to main window
|
||||
self.parent_gui = parent # Сохранить ссылку на главное окно
|
||||
self.setWindowTitle("Создание нового префикса")
|
||||
self.setMinimumSize(500, 250)
|
||||
self.setMinimumSize(680, 250)
|
||||
self.setModal(True)
|
||||
|
||||
# Attributes to store results
|
||||
@@ -1226,9 +1226,22 @@ class CreatePrefixDialog(QDialog):
|
||||
form_layout = QFormLayout()
|
||||
form_layout.setSpacing(10)
|
||||
|
||||
# Создаем виджет для поля ввода и предупреждения
|
||||
name_input_widget = QWidget()
|
||||
name_input_layout = QVBoxLayout(name_input_widget)
|
||||
name_input_layout.setContentsMargins(0, 0, 0, 0)
|
||||
name_input_layout.setSpacing(2)
|
||||
|
||||
self.prefix_name_edit = QLineEdit()
|
||||
self.prefix_name_edit.setPlaceholderText("Например: my_prefix")
|
||||
form_layout.addRow("<b>Имя нового префикса:</b>", self.prefix_name_edit)
|
||||
name_input_layout.addWidget(self.prefix_name_edit)
|
||||
|
||||
self.name_warning_label = QLabel("Имя может содержать только латинские буквы, цифры, тире и знаки подчеркивания.")
|
||||
self.name_warning_label.setStyleSheet("color: red;")
|
||||
self.name_warning_label.setVisible(False)
|
||||
name_input_layout.addWidget(self.name_warning_label)
|
||||
|
||||
form_layout.addRow("<b>Имя нового префикса:</b>", name_input_widget)
|
||||
|
||||
arch_widget = QWidget()
|
||||
arch_layout = QHBoxLayout(arch_widget)
|
||||
@@ -1285,7 +1298,7 @@ class CreatePrefixDialog(QDialog):
|
||||
|
||||
# Connect signals
|
||||
self.arch_win32_radio.toggled.connect(self.clear_wine_version_selection)
|
||||
self.prefix_name_edit.textChanged.connect(self.update_create_button_state)
|
||||
self.prefix_name_edit.textChanged.connect(self.validate_prefix_name)
|
||||
self.wine_version_edit.textChanged.connect(self.update_create_button_state)
|
||||
|
||||
def open_wine_version_dialog(self):
|
||||
@@ -1301,11 +1314,28 @@ class CreatePrefixDialog(QDialog):
|
||||
self.wine_version_edit.clear()
|
||||
self.selected_wine_version_value = None
|
||||
|
||||
def validate_prefix_name(self, text):
|
||||
"""Проверяет имя префикса в реальном времени и показывает/скрывает предупреждение."""
|
||||
valid_pattern = r'^[a-zA-Z0-9_-]*$'
|
||||
if re.match(valid_pattern, text):
|
||||
self.name_warning_label.setVisible(False)
|
||||
else:
|
||||
# Удаляем недопустимые символы
|
||||
cleaned_text = re.sub(r'[^a-zA-Z0-9_-]', '', text)
|
||||
# Блокируем сигналы, чтобы избежать рекурсии при изменении текста
|
||||
self.prefix_name_edit.blockSignals(True)
|
||||
self.prefix_name_edit.setText(cleaned_text)
|
||||
self.prefix_name_edit.blockSignals(False)
|
||||
self.name_warning_label.setVisible(True)
|
||||
|
||||
self.update_create_button_state()
|
||||
|
||||
def update_create_button_state(self):
|
||||
"""Включает или выключает кнопку 'Создать'."""
|
||||
name_ok = bool(self.prefix_name_edit.text().strip())
|
||||
version_ok = bool(self.wine_version_edit.text().strip())
|
||||
self.create_button.setEnabled(name_ok and version_ok)
|
||||
# Кнопка активна, только если имя валидно и версия выбрана
|
||||
self.create_button.setEnabled(name_ok and version_ok and not self.name_warning_label.isVisible())
|
||||
|
||||
def accept_creation(self):
|
||||
"""Валидирует данные, сохраняет их и закрывает диалог с успехом."""
|
||||
@@ -1315,8 +1345,8 @@ class CreatePrefixDialog(QDialog):
|
||||
QMessageBox.warning(self, "Ошибка", "Имя префикса не может быть пустым.")
|
||||
return
|
||||
|
||||
if not re.match(r'^[a-zA-Z0-9_.-]+$', prefix_name):
|
||||
QMessageBox.warning(self, "Ошибка", "Имя префикса может содержать только латинские буквы, цифры, точки, дефисы и подчеркивания.")
|
||||
if not re.match(r'^[a-zA-Z0-9_-]+$', prefix_name):
|
||||
QMessageBox.warning(self, "Ошибка", "Имя префикса может содержать только латинские буквы, цифры, дефисы и знаки подчеркивания.")
|
||||
return
|
||||
|
||||
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
||||
@@ -2133,7 +2163,7 @@ class WineHelperGUI(QMainWindow):
|
||||
|
||||
# --- Контейнер для выбора и управления созданными префиксами ---
|
||||
self.management_container_groupbox = QGroupBox()
|
||||
self.management_container_groupbox.setVisible(False) # Скрыт, пока нет префиксов
|
||||
self.management_container_groupbox.setVisible(True) # Всегда виден
|
||||
container_layout = QVBoxLayout(self.management_container_groupbox)
|
||||
|
||||
selector_layout = QHBoxLayout()
|
||||
@@ -2313,8 +2343,8 @@ class WineHelperGUI(QMainWindow):
|
||||
def _load_created_prefixes(self):
|
||||
"""Загружает и обновляет список созданных префиксов в выпадающем списке."""
|
||||
prefixes_root_path = os.path.join(Var.USER_WORK_PATH, "prefixes")
|
||||
if not os.path.isdir(prefixes_root_path):
|
||||
self.management_container_groupbox.setVisible(False)
|
||||
has_prefixes_dir = os.path.isdir(prefixes_root_path)
|
||||
if not has_prefixes_dir:
|
||||
return
|
||||
|
||||
try:
|
||||
@@ -2333,12 +2363,9 @@ class WineHelperGUI(QMainWindow):
|
||||
self.created_prefix_selector.blockSignals(False)
|
||||
|
||||
if not prefix_names:
|
||||
self.management_container_groupbox.setVisible(False)
|
||||
self.on_created_prefix_selected(-1) # Убедимся, что панель управления сброшена
|
||||
return
|
||||
|
||||
self.management_container_groupbox.setVisible(True)
|
||||
|
||||
def on_created_prefix_selected(self, index):
|
||||
"""Обрабатывает выбор префикса из выпадающего списка."""
|
||||
if index == -1:
|
||||
@@ -3014,14 +3041,15 @@ class WineHelperGUI(QMainWindow):
|
||||
authors_text = QTextEdit()
|
||||
authors_text.setReadOnly(True)
|
||||
authors_text.setHtml("""
|
||||
<div style="text-align: center;">
|
||||
<h2>Разработчики</h2>
|
||||
<div style="text-align: center; font-size: 10pt;">
|
||||
<p><span style="font-size: 11pt;"><b>Разработчики</b></span><br>
|
||||
Михаил Тергоев (fidel)<br>
|
||||
Сергей Пальчех (minergenon)</p>
|
||||
<p><b>Помощники</b><br>
|
||||
<p><span style="font-size: 11pt;"><b>Помощники</b></span><br>
|
||||
Иван Мажукин (vanomj)</p>
|
||||
<p><b>Идея и поддержка:</b><br>
|
||||
сообщество ALT Linux</p>
|
||||
<p><span style="font-size: 11pt;"><b>Идея и поддержка</b></span><br>
|
||||
ООО "Базальт СПО"<br>
|
||||
ALT Linux Team</p>
|
||||
<br>
|
||||
<p>Отдельная благодарность всем, кто вносит свой вклад в развитие проекта,<br>
|
||||
тестирует и сообщает об ошибках!</p>
|
||||
@@ -3199,9 +3227,6 @@ class WineHelperGUI(QMainWindow):
|
||||
|
||||
self.created_prefix_selector.setCurrentText(prefix_name)
|
||||
|
||||
if not self.management_container_groupbox.isVisible():
|
||||
self.management_container_groupbox.setVisible(True)
|
||||
|
||||
def update_installed_apps(self):
|
||||
"""Обновляет список установленных приложений в виде кнопок"""
|
||||
# Если активная кнопка находится в списке удаляемых, сбрасываем ее
|
||||
|
Reference in New Issue
Block a user