diff --git a/screens/setting/bluetooth_screen.py b/screens/setting/bluetooth_screen.py index 38dedaa..4802031 100644 --- a/screens/setting/bluetooth_screen.py +++ b/screens/setting/bluetooth_screen.py @@ -98,20 +98,6 @@ class BluetoothDeviceCard(QFrame): self._connected = connected self._update_status_indicator() - def set_busy(self, busy: bool, action_text: str = ""): - """Установить состояние выполнения действия.""" - self._busy = busy - if busy: - self.setCursor(Qt.WaitCursor) - self.status_label.setText(action_text) - self.status_label.setStyleSheet("color: #fbbf24;") # янтарный для процесса - else: - self.setCursor(Qt.PointingHandCursor) - self._update_status_indicator() - # Обновляем стиль карточки - self.style().unpolish(self) - self.style().polish(self) - def is_busy(self) -> bool: """Проверить, выполняется ли действие.""" return self._busy @@ -254,9 +240,10 @@ class BluetoothScreen(QWidget): if card.is_busy(): return - # Сначала обновляем UI (через таймер чтобы Qt успел отрисовать) + # Блокируем все карточки (только клики) self._set_all_cards_busy(True) - card.set_busy(True, "Подключение...") + # Выделяем только активную карточку + self._set_card_active(mac, True, "Подключение...") def do_connect(): success = self._bt_service.connect_device(mac) @@ -275,9 +262,10 @@ class BluetoothScreen(QWidget): if card.is_busy(): return - # Сначала обновляем UI (через таймер чтобы Qt успел отрисовать) + # Блокируем все карточки (только клики) self._set_all_cards_busy(True) - card.set_busy(True, "Отключение...") + # Выделяем только активную карточку + self._set_card_active(mac, True, "Отключение...") def do_disconnect(): success = self._bt_service.disconnect_device(mac) @@ -303,9 +291,10 @@ class BluetoothScreen(QWidget): ok_object_name="ConfirmOkDanger", ) if dialog.exec() == ConfirmDialog.Accepted: - # Блокируем все карточки + # Блокируем все карточки (только клики) self._set_all_cards_busy(True) - device.set_busy(True, "Удаление...") + # Выделяем только активную карточку + self._set_card_active(mac, True, "Удаление...") success = self._bt_service.remove_device(mac) if success: @@ -314,21 +303,37 @@ class BluetoothScreen(QWidget): else: self.status.setText(f"Статус: ошибка удаления ({self._bt_service.last_error})") self._set_all_cards_busy(False) + self._set_card_active(mac, False) def _finish_action(self, mac: str): """Завершить действие и обновить статус.""" self._set_all_cards_busy(False) + self._set_card_active(mac, False) self.refresh_list() def _set_all_cards_busy(self, busy: bool): - """Установить состояние busy для всех карточек.""" + """Установить состояние busy для всех карточек (только блокировка кликов).""" for card in self._cards.values(): + card._busy = busy if busy: - card.setProperty("selected", True) + card.setCursor(Qt.WaitCursor) else: - card.setProperty("selected", False) - card.style().unpolish(card) - card.style().polish(card) + card.setCursor(Qt.PointingHandCursor) + + def _set_card_active(self, mac: str, active: bool, action_text: str = ""): + """Установить активное состояние для конкретной карточки (визуальное выделение).""" + if mac not in self._cards: + return + card = self._cards[mac] + card.setProperty("selected", active) + card.style().unpolish(card) + card.style().polish(card) + + if active and action_text: + card.status_label.setText(action_text) + card.status_label.setStyleSheet("color: #fbbf24;") + elif not active: + card._update_status_indicator() def _update_card_status(self, mac: str): """Обновить статус на карточке устройства."""