diff --git a/.jules/bolt.md b/.jules/bolt.md index cd7b67b..10b00da 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -11,3 +11,6 @@ **Инсайт:** Простое перечисление заблокированных достижений со статусом "заперто" демотивирует. Отображение прогресс-бара и числовых значений (7/10) внутри списка достижений значительно повышает вовлеченность пользователя. **Действие:** В StatsDialog для каждого заблокированного достижения рассчитывать процент выполнения и отображать QProgressBar. +## 2026-07-05 - [Data-Accuracy and Layout Alignments in StatsDialog] +**Инсайт:** При буферизации очков (например, начисление пачками по 10) или обновлении рекорда скорости KPS, отображаемые в StatsDialog данные могут отставать от реальных, если не учитывать in-memory pending значения из InputManager. Также неиспользуемые контейнеры компоновки (как `stats_row`) приводят к полному исчезновению важных UI-элементов. +**Действие:** Всегда извлекать in-memory буферизированные данные из InputManager при рендеринге StatsDialog, и тщательно проверять добавление всех созданных виджетов в соответствующие QLayout-контейнеры. diff --git a/src/ui/stats_dialog.py b/src/ui/stats_dialog.py index 24852a4..b302782 100644 --- a/src/ui/stats_dialog.py +++ b/src/ui/stats_dialog.py @@ -34,6 +34,10 @@ def setup_progress_tab(self, widget): layout = QVBoxLayout(widget) points = self.db.get_affection_points() + # Учитываем накопленные в памяти, но еще не сброшенные в БД очки привязанности + if self.parent() and hasattr(self.parent(), 'input_manager') and self.parent().input_manager: + points += self.parent().input_manager.pending_points + level, title, points_in_level, points_for_next_level = get_level_info(points) # Заголовок @@ -45,12 +49,18 @@ def setup_progress_tab(self, widget): # Общие очки и KPS в одной строке stats_row = QHBoxLayout() points_label = QLabel(f"Всего: {points} ❤️") + points_label.setStyleSheet("font-weight: bold; font-size: 11px;") + stats_row.addWidget(points_label) max_kps = self.db.get_stat("max_kps") + if self.parent() and hasattr(self.parent(), 'input_manager') and self.parent().input_manager: + max_kps = max(max_kps, self.parent().input_manager.max_kps) + kps_label = QLabel(f"Рекорд скорости: {max_kps} кл/сек ⚡") - kps_label.setAlignment(Qt.AlignCenter) - kps_label.setStyleSheet("color: #555; font-size: 11px; margin-bottom: 5px;") - layout.addWidget(kps_label) + kps_label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) + kps_label.setStyleSheet("color: #555; font-size: 11px;") + stats_row.addWidget(kps_label) + layout.addLayout(stats_row) # Прогресс бар if points_for_next_level > 0: diff --git a/verification/screenshots/stats_history.png b/verification/screenshots/stats_history.png index 962895b..7f3dc94 100644 Binary files a/verification/screenshots/stats_history.png and b/verification/screenshots/stats_history.png differ diff --git a/verification/screenshots/stats_progress.png b/verification/screenshots/stats_progress.png index a048687..fbb8f8e 100644 Binary files a/verification/screenshots/stats_progress.png and b/verification/screenshots/stats_progress.png differ