MoleditPy-linux 4.7.0__tar.gz → 4.7.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 (83) hide show
  1. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/PKG-INFO +3 -3
  2. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/README.md +2 -2
  3. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/pyproject.toml +1 -1
  4. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/MoleditPy_linux.egg-info/PKG-INFO +3 -3
  5. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/plugins/plugin_interface.py +37 -0
  6. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/export_logic.py +6 -4
  7. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/LICENSE +0 -0
  8. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/setup.cfg +0 -0
  9. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/MoleditPy_linux.egg-info/SOURCES.txt +0 -0
  10. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/MoleditPy_linux.egg-info/dependency_links.txt +0 -0
  11. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/MoleditPy_linux.egg-info/entry_points.txt +0 -0
  12. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/MoleditPy_linux.egg-info/requires.txt +0 -0
  13. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/MoleditPy_linux.egg-info/top_level.txt +0 -0
  14. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/__init__.py +0 -0
  15. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/__main__.py +0 -0
  16. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/assets/file_icon.ico +0 -0
  17. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/assets/icon.icns +0 -0
  18. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/assets/icon.ico +0 -0
  19. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/assets/icon.png +0 -0
  20. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/core/__init__.py +0 -0
  21. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/core/mol_geometry.py +0 -0
  22. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/core/molecular_data.py +0 -0
  23. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/main.py +0 -0
  24. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/plugins/__init__.py +0 -0
  25. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/plugins/plugin_manager.py +0 -0
  26. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/plugins/plugin_manager_window.py +0 -0
  27. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/__init__.py +0 -0
  28. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/about_dialog.py +0 -0
  29. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/align_plane_dialog.py +0 -0
  30. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/alignment_dialog.py +0 -0
  31. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/analysis_window.py +0 -0
  32. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/angle_dialog.py +0 -0
  33. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/app_state.py +0 -0
  34. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/atom_item.py +0 -0
  35. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/atom_picking.py +0 -0
  36. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/base_picking_dialog.py +0 -0
  37. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/bond_item.py +0 -0
  38. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/bond_length_dialog.py +0 -0
  39. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/calculation_worker.py +0 -0
  40. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/chain_mixin.py +0 -0
  41. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/color_settings_dialog.py +0 -0
  42. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/compute_logic.py +0 -0
  43. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/constrained_optimization_dialog.py +0 -0
  44. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/custom_interactor_style.py +0 -0
  45. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/custom_qt_interactor.py +0 -0
  46. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/dialog_3d_picking_mixin.py +0 -0
  47. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/dialog_logic.py +0 -0
  48. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/dihedral_dialog.py +0 -0
  49. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/edit_3d_logic.py +0 -0
  50. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/edit_actions_logic.py +0 -0
  51. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/geometry_base_dialog.py +0 -0
  52. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/io_logic.py +0 -0
  53. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/main_window.py +0 -0
  54. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/main_window_init.py +0 -0
  55. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/mirror_dialog.py +0 -0
  56. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/molecular_scene_handler.py +0 -0
  57. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/molecule_scene.py +0 -0
  58. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/move_group_dialog.py +0 -0
  59. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/move_selected_atoms_dialog.py +0 -0
  60. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/periodic_table_dialog.py +0 -0
  61. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/planarize_dialog.py +0 -0
  62. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/plugin_menu_manager.py +0 -0
  63. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/settings_dialog.py +0 -0
  64. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/settings_tabs/__init__.py +0 -0
  65. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/settings_tabs/settings_2d_tab.py +0 -0
  66. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/settings_tabs/settings_3d_tabs.py +0 -0
  67. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/settings_tabs/settings_other_tab.py +0 -0
  68. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/settings_tabs/settings_tab_base.py +0 -0
  69. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/string_importers.py +0 -0
  70. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/template_preview_item.py +0 -0
  71. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/template_preview_view.py +0 -0
  72. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/translation_dialog.py +0 -0
  73. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/ui_manager.py +0 -0
  74. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/user_template_dialog.py +0 -0
  75. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/view_3d_logic.py +0 -0
  76. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/ui/zoomable_view.py +0 -0
  77. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/utils/__init__.py +0 -0
  78. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/utils/constants.py +0 -0
  79. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/utils/default_settings.py +0 -0
  80. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/utils/hit_radius.py +0 -0
  81. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/utils/sip_isdeleted_safe.py +0 -0
  82. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/utils/suppress_log.py +0 -0
  83. {moleditpy_linux-4.7.0 → moleditpy_linux-4.7.2}/src/moleditpy_linux/utils/system_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy-linux
3
- Version: 4.7.0
3
+ Version: 4.7.2
4
4
  Summary: A cross-platform, simple, and intuitive molecular structure editor built in Python. It allows 2D molecular drawing and 3D structure visualization. It supports exporting structure files for input to DFT calculation software.
5
5
  Author-email: HiroYokoyama <titech.yoko.hiro@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -786,7 +786,7 @@ This application combines a modern GUI built with **PyQt6**, powerful cheminform
786
786
 
787
787
  ## Installation and Execution
788
788
 
789
- For detailed instructions, please refer to the project [Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki). A [Docker version](https://github.com/HiroYokoyama/python_molecular_editor_docker) is also available. A [Windows installer](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer) is also distributed.
789
+ For detailed instructions, please refer to the project [Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki). A [Docker version](https://github.com/HiroYokoyama/python_molecular_editor_docker) is also available. A [Windows installer](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer) and a [macOS app bundle](https://hiroyokoyama.github.io/python_molecular_editor/macos-installer/macos_installer) are also distributed.
790
790
 
791
791
  #### Requirements
792
792
 
@@ -922,7 +922,7 @@ Additionally, please cite the plugins you used.
922
922
 
923
923
  ## インストールと実行
924
924
 
925
- 詳細な手順については、プロジェクトの[Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki)を参照してください。[Docker版](https://github.com/HiroYokoyama/python_molecular_editor_docker)も利用可能です。[Windows向けインストーラー](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer-jp)も使用できます。
925
+ 詳細な手順については、プロジェクトの[Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki)を参照してください。[Docker版](https://github.com/HiroYokoyama/python_molecular_editor_docker)も利用可能です。[Windows向けインストーラー](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer-jp)や[macOSアプリバンドル](https://hiroyokoyama.github.io/python_molecular_editor/macos-installer/macos_installer-jp)も使用できます。
926
926
 
927
927
  #### 必要ライブラリ
928
928
 
@@ -83,7 +83,7 @@ This application combines a modern GUI built with **PyQt6**, powerful cheminform
83
83
 
84
84
  ## Installation and Execution
85
85
 
86
- For detailed instructions, please refer to the project [Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki). A [Docker version](https://github.com/HiroYokoyama/python_molecular_editor_docker) is also available. A [Windows installer](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer) is also distributed.
86
+ For detailed instructions, please refer to the project [Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki). A [Docker version](https://github.com/HiroYokoyama/python_molecular_editor_docker) is also available. A [Windows installer](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer) and a [macOS app bundle](https://hiroyokoyama.github.io/python_molecular_editor/macos-installer/macos_installer) are also distributed.
87
87
 
88
88
  #### Requirements
89
89
 
@@ -219,7 +219,7 @@ Additionally, please cite the plugins you used.
219
219
 
220
220
  ## インストールと実行
221
221
 
222
- 詳細な手順については、プロジェクトの[Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki)を参照してください。[Docker版](https://github.com/HiroYokoyama/python_molecular_editor_docker)も利用可能です。[Windows向けインストーラー](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer-jp)も使用できます。
222
+ 詳細な手順については、プロジェクトの[Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki)を参照してください。[Docker版](https://github.com/HiroYokoyama/python_molecular_editor_docker)も利用可能です。[Windows向けインストーラー](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer-jp)や[macOSアプリバンドル](https://hiroyokoyama.github.io/python_molecular_editor/macos-installer/macos_installer-jp)も使用できます。
223
223
 
224
224
  #### 必要ライブラリ
225
225
 
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "MoleditPy-linux"
7
7
 
8
- version = "4.7.0"
8
+ version = "4.7.2"
9
9
 
10
10
  license = {file = "LICENSE"}
11
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy-linux
3
- Version: 4.7.0
3
+ Version: 4.7.2
4
4
  Summary: A cross-platform, simple, and intuitive molecular structure editor built in Python. It allows 2D molecular drawing and 3D structure visualization. It supports exporting structure files for input to DFT calculation software.
5
5
  Author-email: HiroYokoyama <titech.yoko.hiro@gmail.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -786,7 +786,7 @@ This application combines a modern GUI built with **PyQt6**, powerful cheminform
786
786
 
787
787
  ## Installation and Execution
788
788
 
789
- For detailed instructions, please refer to the project [Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki). A [Docker version](https://github.com/HiroYokoyama/python_molecular_editor_docker) is also available. A [Windows installer](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer) is also distributed.
789
+ For detailed instructions, please refer to the project [Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki). A [Docker version](https://github.com/HiroYokoyama/python_molecular_editor_docker) is also available. A [Windows installer](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer) and a [macOS app bundle](https://hiroyokoyama.github.io/python_molecular_editor/macos-installer/macos_installer) are also distributed.
790
790
 
791
791
  #### Requirements
792
792
 
@@ -922,7 +922,7 @@ Additionally, please cite the plugins you used.
922
922
 
923
923
  ## インストールと実行
924
924
 
925
- 詳細な手順については、プロジェクトの[Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki)を参照してください。[Docker版](https://github.com/HiroYokoyama/python_molecular_editor_docker)も利用可能です。[Windows向けインストーラー](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer-jp)も使用できます。
925
+ 詳細な手順については、プロジェクトの[Wiki](https://github.com/HiroYokoyama/python_molecular_editor/wiki)を参照してください。[Docker版](https://github.com/HiroYokoyama/python_molecular_editor_docker)も利用可能です。[Windows向けインストーラー](https://hiroyokoyama.github.io/python_molecular_editor/windows-installer/windows_installer-jp)や[macOSアプリバンドル](https://hiroyokoyama.github.io/python_molecular_editor/macos-installer/macos_installer-jp)も使用できます。
926
926
 
927
927
  #### 必要ライブラリ
928
928
 
@@ -409,6 +409,43 @@ class PluginContext:
409
409
  mw.init_manager.settings[namespaced] = value
410
410
  mw.init_manager.settings_dirty = True
411
411
 
412
+ def get_current_file(self) -> Optional[str]:
413
+ """
414
+ Path of the file the application currently has open, or None.
415
+
416
+ Returns:
417
+ The path, or None when nothing is open.
418
+ """
419
+ mw = self.get_main_window()
420
+ if mw and hasattr(mw, "init_manager"):
421
+ path = mw.init_manager.current_file_path
422
+ return str(path) if path else None
423
+ return None
424
+
425
+ def set_current_file(self, path: Optional[str]) -> None:
426
+ """
427
+ Record *path* as the file the application has open and retitle its window.
428
+
429
+ Use this after a plugin file opener loads a file, so the window names it
430
+ the way it names a project. Assigning ``init_manager.current_file_path``
431
+ directly leaves the title showing the previous file: it is only rebuilt
432
+ on demand.
433
+
434
+ Args:
435
+ path: File path to show, or None for "Untitled".
436
+ """
437
+ mw = self.get_main_window()
438
+ if mw is None or not hasattr(mw, "init_manager"):
439
+ return
440
+ try:
441
+ mw.init_manager.current_file_path = path
442
+ if hasattr(mw, "state_manager"):
443
+ fn = getattr(mw.state_manager, "update_window_title", None)
444
+ if fn:
445
+ fn()
446
+ except (AttributeError, RuntimeError):
447
+ logging.debug("set_current_file failed", exc_info=True)
448
+
412
449
  def mark_project_modified(self) -> None:
413
450
  """Mark the current project as having unsaved changes and update the window title."""
414
451
  mw = self.get_main_window()
@@ -136,7 +136,7 @@ class ExportManager:
136
136
  """
137
137
  try:
138
138
  # Create MTL file
139
- with open(mtl_path, "w") as mtl_file:
139
+ with open(mtl_path, "w", encoding="utf-8") as mtl_file:
140
140
  mtl_file.write(f"# Material file for {os.path.basename(obj_path)}\n")
141
141
  mtl_file.write("# Generated with individual object colors\n\n")
142
142
 
@@ -157,7 +157,7 @@ class ExportManager:
157
157
  mtl_file.write("\n")
158
158
 
159
159
  # Create OBJ file
160
- with open(obj_path, "w") as obj_file:
160
+ with open(obj_path, "w", encoding="utf-8") as obj_file:
161
161
  obj_file.write("# OBJ file with multiple materials\n")
162
162
  obj_file.write("# Generated with individual object colors\n")
163
163
  obj_file.write(f"mtllib {os.path.basename(mtl_path)}\n\n")
@@ -225,8 +225,10 @@ class ExportManager:
225
225
  vertex_offset += mesh.n_points
226
226
  obj_file.write("\n")
227
227
 
228
- except (AttributeError, RuntimeError, ValueError) as e:
229
- raise Exception(f"Failed to create multi-material OBJ: {e}")
228
+ except (AttributeError, OSError, RuntimeError, ValueError) as e:
229
+ # ValueError, not Exception: export_obj_mtl catches this to report
230
+ # the failure in the status bar.
231
+ raise ValueError(f"Failed to create multi-material OBJ: {e}") from e
230
232
 
231
233
  def export_color_stl(self) -> None:
232
234
  """Export as Color STL."""
File without changes