| 186 | } |
| 187 | |
| 188 | QString ImageObject::fullPath(const QString& basePath) const |
| 189 | { |
| 190 | if (imagePath.isEmpty()) { |
| 191 | return QString(); |
| 192 | } |
| 193 | |
| 194 | // Check if path is already absolute (legacy support) |
| 195 | QFileInfo info(imagePath); |
| 196 | if (info.isAbsolute()) { |
| 197 | return imagePath; |
| 198 | } |
| 199 | |
| 200 | // Resolve relative to base path |
| 201 | if (basePath.isEmpty()) { |
| 202 | return imagePath; |
| 203 | } |
| 204 | |
| 205 | // Phase O1.6: Resolve against assets/images/ subdirectory |
| 206 | // New format stores just the filename (e.g., "a1b2c3d4.png") |
| 207 | // Full path becomes: bundlePath/assets/images/filename |
| 208 | return basePath + "/assets/images/" + imagePath; |
| 209 | } |
| 210 | |
| 211 | bool ImageObject::saveToAssets(const QString& bundlePath) |
| 212 | { |