tilemap-editor 3.1.1__tar.gz → 3.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. {tilemap_editor-3.1.1/src/tilemap_editor.egg-info → tilemap_editor-3.1.2}/PKG-INFO +1 -1
  2. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/pyproject.toml +1 -1
  3. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap.py +11 -7
  4. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2/src/tilemap_editor.egg-info}/PKG-INFO +1 -1
  5. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor.egg-info/SOURCES.txt +2 -1
  6. tilemap_editor-3.1.2/tests/test_project_paths.py +73 -0
  7. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/LICENSE +0 -0
  8. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/MANIFEST.in +0 -0
  9. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/README.md +0 -0
  10. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
  11. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
  12. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
  13. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
  14. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
  15. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
  16. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
  17. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
  18. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/arrow-down.svg +0 -0
  19. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/check.svg +0 -0
  20. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/checked.svg +0 -0
  21. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/close.svg +0 -0
  22. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/duplicate.svg +0 -0
  23. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/error.svg +0 -0
  24. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/file.svg +0 -0
  25. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/filedead.svg +0 -0
  26. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/fit.svg +0 -0
  27. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/folder.svg +0 -0
  28. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/grid.svg +0 -0
  29. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/image.svg +0 -0
  30. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/info.svg +0 -0
  31. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/load.svg +0 -0
  32. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/loop.svg +0 -0
  33. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/pan.svg +0 -0
  34. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/pause.svg +0 -0
  35. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/pencil.svg +0 -0
  36. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/play.svg +0 -0
  37. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/plus.svg +0 -0
  38. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/radio.svg +0 -0
  39. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/reset.svg +0 -0
  40. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/save.svg +0 -0
  41. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/stop.svg +0 -0
  42. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/tilemap.svg +0 -0
  43. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/tileset.svg +0 -0
  44. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/unchecked.svg +0 -0
  45. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/warning.svg +0 -0
  46. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/zoomin.svg +0 -0
  47. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/assets/icons/zoomout.svg +0 -0
  48. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/setup.cfg +0 -0
  49. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/configs/themes.py +0 -0
  50. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/constants.py +0 -0
  51. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/editor.py +0 -0
  52. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/event_map.py +0 -0
  53. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/layers.py +0 -0
  54. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/main.py +0 -0
  55. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/__init__.py +0 -0
  56. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/character_collision/__init__.py +0 -0
  57. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/character_collision/editor.py +0 -0
  58. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/character_collision/models.py +0 -0
  59. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/character_collision/protocols.py +0 -0
  60. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/character_collision/shape_editor.py +0 -0
  61. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/character_collision/standalone.py +0 -0
  62. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/object_tileset_collision/__init__.py +0 -0
  63. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/object_tileset_collision/editor.py +0 -0
  64. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/object_tileset_collision/models.py +0 -0
  65. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/object_tileset_collision/protocols.py +0 -0
  66. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/object_tileset_collision/standalone.py +0 -0
  67. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/__init__.py +0 -0
  68. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/__main__.py +0 -0
  69. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/clipboard_util.py +0 -0
  70. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/editor.py +0 -0
  71. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/frame_picker.py +0 -0
  72. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/models.py +0 -0
  73. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/preview.py +0 -0
  74. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/protocols.py +0 -0
  75. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/runtime_load.py +0 -0
  76. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/standalone.py +0 -0
  77. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/timeline.py +0 -0
  78. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/sprite_animation/validation.py +0 -0
  79. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/tileset_collision/__init__.py +0 -0
  80. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/tileset_collision/collision_painter.py +0 -0
  81. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/tileset_collision/editor.py +0 -0
  82. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/tileset_collision/models.py +0 -0
  83. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/tileset_collision/protocols.py +0 -0
  84. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/plugins/tileset_collision/standalone.py +0 -0
  85. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/standalone_automap.py +0 -0
  86. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/standalone_error_console.py +0 -0
  87. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/standalone_filemanager.py +0 -0
  88. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/standalone_image_viewer.py +0 -0
  89. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/__init__.py +0 -0
  90. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/__main__.py +0 -0
  91. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/__init__.py +0 -0
  92. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Bold.ttf +0 -0
  93. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-BoldItalic.ttf +0 -0
  94. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Italic.ttf +0 -0
  95. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/fonts/jetbrain-fonts/JetBrainsMono-Regular.ttf +0 -0
  96. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-Bold.ttf +0 -0
  97. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-BoldItalic.ttf +0 -0
  98. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-Italic.ttf +0 -0
  99. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/fonts/noto/NotoSans-Regular.ttf +0 -0
  100. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/ToolMove.svg +0 -0
  101. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/arrow-down.svg +0 -0
  102. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/check.svg +0 -0
  103. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/checked.svg +0 -0
  104. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/close.svg +0 -0
  105. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/duplicate.svg +0 -0
  106. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/error.svg +0 -0
  107. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/file.svg +0 -0
  108. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/filedead.svg +0 -0
  109. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/fit.svg +0 -0
  110. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/folder.svg +0 -0
  111. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/grid.svg +0 -0
  112. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/image.svg +0 -0
  113. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/info.svg +0 -0
  114. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/load.svg +0 -0
  115. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/loop.svg +0 -0
  116. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/pan.svg +0 -0
  117. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/pause.svg +0 -0
  118. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/pencil.svg +0 -0
  119. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/play.svg +0 -0
  120. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/plus.svg +0 -0
  121. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/radio.svg +0 -0
  122. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/reset.svg +0 -0
  123. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/save.svg +0 -0
  124. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/stop.svg +0 -0
  125. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/tilemap.svg +0 -0
  126. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/tileset.svg +0 -0
  127. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/unchecked.svg +0 -0
  128. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/warning.svg +0 -0
  129. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/zoomin.svg +0 -0
  130. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/assets/icons/zoomout.svg +0 -0
  131. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/cli.py +0 -0
  132. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/main.py +0 -0
  133. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor/settings.py +0 -0
  134. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor.egg-info/dependency_links.txt +0 -0
  135. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor.egg-info/entry_points.txt +0 -0
  136. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor.egg-info/requires.txt +0 -0
  137. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/tilemap_editor.egg-info/top_level.txt +0 -0
  138. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/ttypes/__init__.py +0 -0
  139. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/ttypes/tilemap.py +0 -0
  140. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/__init__.py +0 -0
  141. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/editor_preference.py +0 -0
  142. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/error_handler.py +0 -0
  143. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/font_manager.py +0 -0
  144. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/history.py +0 -0
  145. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/icon_manager.py +0 -0
  146. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/icons_cache.py +0 -0
  147. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/log_capture.py +0 -0
  148. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/project_paths.py +0 -0
  149. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/serialization.py +0 -0
  150. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/standalone.py +0 -0
  151. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/utils/validation.py +0 -0
  152. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/__init__.py +0 -0
  153. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/automap_models.py +0 -0
  154. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/autotile_template.py +0 -0
  155. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/autotiler.py +0 -0
  156. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/filemanager.py +0 -0
  157. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/input.py +0 -0
  158. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/layer_selector.py +0 -0
  159. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/mapsetup.py +0 -0
  160. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/regex_automap_designer.py +0 -0
  161. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/tile_grid.py +0 -0
  162. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/tile_selector.py +0 -0
  163. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/collision_layer_mask.py +0 -0
  164. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/collision_layer_sidebar.py +0 -0
  165. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/draw_utils.py +0 -0
  166. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/fileinput.py +0 -0
  167. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/layer_type_dialog.py +0 -0
  168. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/menubar.py +0 -0
  169. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/mode_indicator.py +0 -0
  170. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/notification.py +0 -0
  171. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/property_editor.py +0 -0
  172. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/region_selector.py +0 -0
  173. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/status_bar.py +0 -0
  174. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/theme.py +0 -0
  175. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/tileset_type_dialog.py +0 -0
  176. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/toolbar.py +0 -0
  177. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/src/widgets/ui/tooltip.py +0 -0
  178. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/tests/test_collision_layer_mask.py +0 -0
  179. {tilemap_editor-3.1.1 → tilemap_editor-3.1.2}/tests/test_collision_layer_sidebar.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-editor
3
- Version: 3.1.1
3
+ Version: 3.1.2
4
4
  Summary: Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools
5
5
  Author: tilemap editor contributors
6
6
  License: Proprietary
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tilemap-editor"
7
- version = "3.1.1"
7
+ version = "3.1.2"
8
8
  description = "Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -226,11 +226,13 @@ class Tilemap:
226
226
  if path_obj.is_absolute():
227
227
  target_path = path_obj
228
228
  else:
229
- data_root = getattr(getattr(self, 'editor', None), 'data_root', None)
229
+ data_root = getattr(getattr(self, "editor", None), "data_root", None)
230
230
  if data_root:
231
231
  target_path = data_root / path_obj
232
232
  else:
233
- raise RuntimeError("Cannot determine data_root - Editor not initialized with settings.json")
233
+ raise RuntimeError(
234
+ "Cannot determine data_root - Editor not initialized with settings.json"
235
+ )
234
236
 
235
237
  self.active_project_path = target_path
236
238
  elif self.active_project_path:
@@ -241,7 +243,7 @@ class Tilemap:
241
243
  if not target_path.parent.exists():
242
244
  target_path.parent.mkdir(parents=True, exist_ok=True)
243
245
 
244
- base_path = self._project_base_path()
246
+ map_dir = target_path.parent
245
247
 
246
248
  save_data = {
247
249
  "meta": {
@@ -279,7 +281,7 @@ class Tilemap:
279
281
 
280
282
  if hasattr(self.editor, "tileset_widget") and self.editor.tileset_widget:
281
283
  for ts in self.editor.tileset_widget.tilesets:
282
- path_str = to_project_path(ts.path, base_path)
284
+ path_str = to_project_path(ts.path, map_dir)
283
285
 
284
286
  ts_data: Dict[str, Any] = {"path": path_str, "type": ts.tileset_type}
285
287
  if ts.properties:
@@ -301,7 +303,7 @@ class Tilemap:
301
303
  {
302
304
  "name": group.name,
303
305
  "rules": [
304
- self._serialize_autotile_rule(rule, base_path)
306
+ self._serialize_autotile_rule(rule, map_dir)
305
307
  for rule in group.rules
306
308
  ],
307
309
  }
@@ -407,14 +409,16 @@ class Tilemap:
407
409
  return data
408
410
 
409
411
  def _path_matches_project_path(self, stored_path: str, actual_path: Path) -> bool:
410
- base_path = self._project_base_path()
412
+ map_dir = (
413
+ self.active_project_path.parent if self.active_project_path else Path()
414
+ )
411
415
  stored = Path(stored_path).expanduser()
412
416
  actual = Path(actual_path).expanduser()
413
417
 
414
418
  if stored.is_absolute():
415
419
  return stored.resolve() == actual.resolve()
416
420
 
417
- return stored.as_posix() == to_project_path(actual, base_path)
421
+ return stored.as_posix() == to_project_path(actual, map_dir)
418
422
 
419
423
  def _resolve_rule_resources(self, rule: "AutotileRule", ts_widget):
420
424
  resolved_ts = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-editor
3
- Version: 3.1.1
3
+ Version: 3.1.2
4
4
  Summary: Pygame tilemap editor with SVG icons, professional UI, and sprite animation tools
5
5
  Author: tilemap editor contributors
6
6
  License: Proprietary
@@ -173,4 +173,5 @@ src/widgets/ui/tileset_type_dialog.py
173
173
  src/widgets/ui/toolbar.py
174
174
  src/widgets/ui/tooltip.py
175
175
  tests/test_collision_layer_mask.py
176
- tests/test_collision_layer_sidebar.py
176
+ tests/test_collision_layer_sidebar.py
177
+ tests/test_project_paths.py
@@ -0,0 +1,73 @@
1
+ import tempfile
2
+ from pathlib import Path
3
+
4
+ import sys
5
+ sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
6
+
7
+ from utils.project_paths import to_project_path, resolve_project_path
8
+
9
+
10
+ class TestToProjectPath:
11
+ def test_relative_to_base(self):
12
+ with tempfile.TemporaryDirectory() as tmp:
13
+ base = Path(tmp)
14
+ target = base / "subdir" / "file.png"
15
+ target.parent.mkdir(parents=True)
16
+ target.touch()
17
+
18
+ result = to_project_path(target, base)
19
+ assert result == "subdir/file.png"
20
+
21
+ def test_absolute_input(self):
22
+ with tempfile.TemporaryDirectory() as tmp:
23
+ base = Path(tmp)
24
+ target = base / "file.png"
25
+ target.touch()
26
+
27
+ result = to_project_path(str(target), base)
28
+ assert result == "file.png"
29
+
30
+ def test_outside_base_directory(self):
31
+ with tempfile.TemporaryDirectory() as tmp:
32
+ base = Path(tmp) / "project"
33
+ base.mkdir()
34
+ outside = Path(tmp) / "outside" / "file.png"
35
+ outside.parent.mkdir(parents=True)
36
+ outside.touch()
37
+
38
+ result = to_project_path(outside, base)
39
+ assert ".." in result
40
+
41
+
42
+ class TestResolveProjectPath:
43
+ def test_resolves_relative_to_base(self):
44
+ with tempfile.TemporaryDirectory() as tmp:
45
+ base = Path(tmp)
46
+ target = base / "subdir" / "file.png"
47
+ target.parent.mkdir(parents=True)
48
+ target.touch()
49
+
50
+ stored = "subdir/file.png"
51
+ result = resolve_project_path(stored, base, must_exist=True)
52
+ assert result == target.resolve()
53
+
54
+ def test_resolves_via_fallback(self):
55
+ with tempfile.TemporaryDirectory() as tmp:
56
+ base = Path(tmp) / "project"
57
+ base.mkdir()
58
+ fallback = Path(tmp) / "maps"
59
+ fallback.mkdir()
60
+ target = fallback / "assets" / "file.png"
61
+ target.parent.mkdir(parents=True)
62
+ target.touch()
63
+
64
+ stored = "assets/file.png"
65
+ result = resolve_project_path(stored, base, fallback_roots=[fallback], must_exist=True)
66
+ assert result == target.resolve()
67
+
68
+ def test_returns_first_candidate_when_not_exist(self):
69
+ with tempfile.TemporaryDirectory() as tmp:
70
+ base = Path(tmp)
71
+ stored = "nonexistent/file.png"
72
+ result = resolve_project_path(stored, base)
73
+ assert result == (base / stored).resolve()
File without changes
File without changes
File without changes