Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .jules/bolt.md
Original file line number Diff line number Diff line change
Expand Up @@ -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-контейнеры.
16 changes: 13 additions & 3 deletions src/ui/stats_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

# Заголовок
Expand All @@ -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:
Expand Down
Binary file modified verification/screenshots/stats_history.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified verification/screenshots/stats_progress.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.