forked from CastroFidel/winehelper
fixed the character input in the name of the prefix being created
This commit is contained in:
@@ -1210,9 +1210,9 @@ class CreatePrefixDialog(QDialog):
|
|||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
self.parent_gui = parent # Store reference to main window
|
self.parent_gui = parent # Сохранить ссылку на главное окно
|
||||||
self.setWindowTitle("Создание нового префикса")
|
self.setWindowTitle("Создание нового префикса")
|
||||||
self.setMinimumSize(500, 250)
|
self.setMinimumSize(680, 250)
|
||||||
self.setModal(True)
|
self.setModal(True)
|
||||||
|
|
||||||
# Attributes to store results
|
# Attributes to store results
|
||||||
@@ -1226,9 +1226,22 @@ class CreatePrefixDialog(QDialog):
|
|||||||
form_layout = QFormLayout()
|
form_layout = QFormLayout()
|
||||||
form_layout.setSpacing(10)
|
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 = QLineEdit()
|
||||||
self.prefix_name_edit.setPlaceholderText("Например: my_prefix")
|
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_widget = QWidget()
|
||||||
arch_layout = QHBoxLayout(arch_widget)
|
arch_layout = QHBoxLayout(arch_widget)
|
||||||
@@ -1285,7 +1298,7 @@ class CreatePrefixDialog(QDialog):
|
|||||||
|
|
||||||
# Connect signals
|
# Connect signals
|
||||||
self.arch_win32_radio.toggled.connect(self.clear_wine_version_selection)
|
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)
|
self.wine_version_edit.textChanged.connect(self.update_create_button_state)
|
||||||
|
|
||||||
def open_wine_version_dialog(self):
|
def open_wine_version_dialog(self):
|
||||||
@@ -1301,11 +1314,28 @@ class CreatePrefixDialog(QDialog):
|
|||||||
self.wine_version_edit.clear()
|
self.wine_version_edit.clear()
|
||||||
self.selected_wine_version_value = None
|
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):
|
def update_create_button_state(self):
|
||||||
"""Включает или выключает кнопку 'Создать'."""
|
"""Включает или выключает кнопку 'Создать'."""
|
||||||
name_ok = bool(self.prefix_name_edit.text().strip())
|
name_ok = bool(self.prefix_name_edit.text().strip())
|
||||||
version_ok = bool(self.wine_version_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):
|
def accept_creation(self):
|
||||||
"""Валидирует данные, сохраняет их и закрывает диалог с успехом."""
|
"""Валидирует данные, сохраняет их и закрывает диалог с успехом."""
|
||||||
@@ -1315,8 +1345,8 @@ class CreatePrefixDialog(QDialog):
|
|||||||
QMessageBox.warning(self, "Ошибка", "Имя префикса не может быть пустым.")
|
QMessageBox.warning(self, "Ошибка", "Имя префикса не может быть пустым.")
|
||||||
return
|
return
|
||||||
|
|
||||||
if not re.match(r'^[a-zA-Z0-9_.-]+$', prefix_name):
|
if not re.match(r'^[a-zA-Z0-9_-]+$', prefix_name):
|
||||||
QMessageBox.warning(self, "Ошибка", "Имя префикса может содержать только латинские буквы, цифры, точки, дефисы и подчеркивания.")
|
QMessageBox.warning(self, "Ошибка", "Имя префикса может содержать только латинские буквы, цифры, дефисы и знаки подчеркивания.")
|
||||||
return
|
return
|
||||||
|
|
||||||
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
prefix_path = os.path.join(Var.USER_WORK_PATH, "prefixes", prefix_name)
|
||||||
|
Reference in New Issue
Block a user