|
| 1 | + |
| 2 | +### TODO for Thursday, August 7, 2025 |
| 3 | + |
| 4 | +1. **Create Unit Tests for `RegimeManager`:** |
| 5 | + * Write tests for `loadDefaultRegimes`, `importRegimes`, `exportRegimes`, and `saveRegimes`. |
| 6 | + * This will likely involve creating temporary JSON files within the test suite to verify that files are read and written correctly. |
| 7 | +2. **Implement Regime "State" Property:** |
| 8 | + * Add a `state` property to the `Regime` struct in C++. |
| 9 | + * Update JSON serialization/deserialization to handle the new `state` field. |
| 10 | + * Expose the `state` property to QML and add a UI control (e.g., a ComboBox) in the `TableView` delegate to allow viewing and editing it. |
| 11 | +3. **Define and Implement Table Module API:** |
| 12 | + * Once the above tasks are complete, design and implement a more formal API for the table module (`RegimeManager` and `ProtoTableModel`) to improve modularity and prepare for future external interactions. |
| 13 | + |
| 14 | +### План работ на четверг, 7 августа 2025 г. |
| 15 | + |
| 16 | +1. **Создать юнит-тесты для `RegimeManager`:** |
| 17 | + * Написать тесты для `loadDefaultRegimes`, `importRegimes`, `exportRegimes` и `saveRegimes`. |
| 18 | + * Вероятно, для этого потребуется создавать временные файлы JSON в наборе тестов для проверки правильности чтения и записи файлов. |
| 19 | +2. **Реализовать свойство "state" для режимов:** |
| 20 | + * Добавить свойство `state` в структуру `Regime` в C++. |
| 21 | + * Обновить сериализацию/десериализацию JSON для обработки нового поля `state`. |
| 22 | + * Предоставить свойство `state` в QML и добавить элемент управления (например, ComboBox) в делегат `TableView` для его просмотра и редактирования. |
| 23 | +3. **Спроектировать и реализовать API для модуля таблицы:** |
| 24 | + * После завершения вышеуказанных задач, спроектировать и реализовать более формальный API для модуля таблицы (`RegimeManager` и `ProtoTableModel`), чтобы улучшить модульность и подготовиться к будущим внешним взаимодействиям. |
| 25 | + |
| 26 | +## Daily Report for 2025-08-06 |
| 27 | + |
| 28 | +Today's session focused on completing the refactoring of the QML delegates and implementing a robust "unsaved changes" tracking system. |
| 29 | + |
| 30 | +**1. QML Delegate Refactoring (`ControlDelegate.qml` and `Main.qml`):** |
| 31 | + |
| 32 | +* **Centralized Control Logic**: The `controlsView` was successfully refactored by moving all the action buttons ("Up", "Down", "Delete", "Group", "Ungroup") out of the `ControlDelegate` and into `Main.qml`. This centralizes the application's logic, making it easier to manage and debug. The `ControlDelegate` is now a much simpler and more reusable component, responsible only for displaying the selection state and the `cycle_repeat` value. |
| 33 | +* **Dynamic Button Visibility**: The visibility of the action buttons is now dynamically controlled by the selection state, which provides a much cleaner and more intuitive user experience. |
| 34 | +* **Simplified `ControlDelegate`**: The `ControlDelegate` is now a simple component that only contains a `CheckBox` and a `SpinBox`. This makes it much easier to understand and maintain. |
| 35 | + |
| 36 | +**2. "Unsaved Changes" Tracking (`RegimeManager`):** |
| 37 | + |
| 38 | +* **"Dirty" Flag**: A "dirty" flag was implemented in the `RegimeManager` to track whether there are unsaved changes. This is a crucial feature for any application that allows users to edit data. |
| 39 | +* **Application Title Indicator**: The application title now displays an asterisk (`*`) when there are unsaved changes, which provides a clear visual cue to the user. |
| 40 | +* **Confirmation Dialog**: A confirmation dialog is now displayed when the user tries to close the application or import a new file with unsaved changes. This prevents accidental data loss and is a standard feature in most data-driven applications. |
| 41 | + |
| 42 | +--- |
| 43 | + |
| 44 | +## Ежедневный отчет за 2025-08-06 |
| 45 | + |
| 46 | +Сегодняшняя сессия была посвящена завершению рефакторинга делегатов QML и реализации надежной системы отслеживания несохраненных изменений. |
| 47 | + |
| 48 | +**1. Рефакторинг делегатов QML (`ControlDelegate.qml` и `Main.qml`):** |
| 49 | + |
| 50 | +* **Централизованная логика управления**: `controlsView` был успешно отрефакторен путем перемещения всех кнопок действий («Вверх», «Вниз», «Удалить», «Сгруппировать», «Разгруппировать») из `ControlDelegate` в `Main.qml`. Это централизует логику приложения, облегчая управление и отладку. `ControlDelegate` теперь является гораздо более простым и переиспользуемым компонентом, отвечающим только за отображение состояния выбора и значения `cycle_repeat`. |
| 51 | +* **Динамическая видимость кнопок**: Видимость кнопок действий теперь динамически контролируется состоянием выбора, что обеспечивает более чистый и интуитивно понятный пользовательский интерфейс. |
| 52 | +* **Упрощенный `ControlDelegate`**: `ControlDelegate` теперь представляет собой простой компонент, содержащий только `CheckBox` и `SpinBox`. Это значительно упрощает его понимание и обслуживание. |
| 53 | + |
| 54 | +**2. Отслеживание несохраненных изменений (`RegimeManager`):** |
| 55 | + |
| 56 | +* **Флаг "dirty"**: В `RegimeManager` был реализован флаг «dirty» для отслеживания наличия несохраненных изменений. Это важная функция для любого приложения, позволяющего пользователям редактировать данные. |
| 57 | +* **Индикатор в заголовке приложения**: В заголовке приложения теперь отображается звездочка (`*`), когда есть несохраненные изменения, что служит четким визуальным сигналом для пользователя. |
| 58 | +* **Диалог подтверждения**: Теперь при попытке закрыть приложение или импортировать новый файл с несохраненными изменениями отображается диалоговое окно подтверждения. Это предотвращает случайную потерю данных и является стандартной функцией в большинстве приложений, работающих с данными. |
| 59 | + |
1 | 60 | ### TODO for Wednesday, August 6, 2025 |
2 | 61 |
|
3 | 62 | 1. **Create Unit Tests for `RegimeManager`:** |
|
0 commit comments