MoleditPy-linux 2.2.3__tar.gz → 2.2.5__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 (64) hide show
  1. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/PKG-INFO +24 -6
  2. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/README.md +23 -5
  3. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/pyproject.toml +1 -1
  4. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/MoleditPy_linux.egg-info/PKG-INFO +24 -6
  5. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/MoleditPy_linux.egg-info/SOURCES.txt +1 -0
  6. moleditpy_linux-2.2.5/src/moleditpy_linux/modules/assets/file_icon.ico +0 -0
  7. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/constants.py +1 -1
  8. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_app_state.py +13 -6
  9. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_main_init.py +42 -8
  10. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/plugin_interface.py +18 -0
  11. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/LICENSE +0 -0
  12. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/setup.cfg +0 -0
  13. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/MoleditPy_linux.egg-info/dependency_links.txt +0 -0
  14. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/MoleditPy_linux.egg-info/entry_points.txt +0 -0
  15. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/MoleditPy_linux.egg-info/requires.txt +0 -0
  16. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/MoleditPy_linux.egg-info/top_level.txt +0 -0
  17. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/__init__.py +0 -0
  18. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/__main__.py +0 -0
  19. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/main.py +0 -0
  20. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/__init__.py +0 -0
  21. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/about_dialog.py +0 -0
  22. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/align_plane_dialog.py +0 -0
  23. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/alignment_dialog.py +0 -0
  24. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/analysis_window.py +0 -0
  25. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/angle_dialog.py +0 -0
  26. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/assets/icon.icns +0 -0
  27. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/assets/icon.ico +0 -0
  28. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/assets/icon.png +0 -0
  29. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/atom_item.py +0 -0
  30. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/bond_item.py +0 -0
  31. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/bond_length_dialog.py +0 -0
  32. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/calculation_worker.py +0 -0
  33. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/color_settings_dialog.py +0 -0
  34. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/constrained_optimization_dialog.py +0 -0
  35. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/custom_interactor_style.py +0 -0
  36. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/custom_qt_interactor.py +0 -0
  37. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/dialog3_d_picking_mixin.py +0 -0
  38. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/dihedral_dialog.py +0 -0
  39. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window.py +0 -0
  40. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_compute.py +0 -0
  41. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_dialog_manager.py +0 -0
  42. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_edit_3d.py +0 -0
  43. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_edit_actions.py +0 -0
  44. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_export.py +0 -0
  45. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_molecular_parsers.py +0 -0
  46. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_project_io.py +0 -0
  47. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_string_importers.py +0 -0
  48. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_ui_manager.py +0 -0
  49. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_view_3d.py +0 -0
  50. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/main_window_view_loaders.py +0 -0
  51. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/mirror_dialog.py +0 -0
  52. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/molecular_data.py +0 -0
  53. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/molecule_scene.py +0 -0
  54. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/move_group_dialog.py +0 -0
  55. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/periodic_table_dialog.py +0 -0
  56. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/planarize_dialog.py +0 -0
  57. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/plugin_manager.py +0 -0
  58. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/plugin_manager_window.py +0 -0
  59. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/settings_dialog.py +0 -0
  60. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/template_preview_item.py +0 -0
  61. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/template_preview_view.py +0 -0
  62. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/translation_dialog.py +0 -0
  63. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/user_template_dialog.py +0 -0
  64. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.5}/src/moleditpy_linux/modules/zoomable_view.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy-linux
3
- Version: 2.2.3
3
+ Version: 2.2.5
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
@@ -706,7 +706,9 @@ This is the Linux version of MoleditPy. The Open Babel fallback is disabled due
706
706
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17268532.svg)](https://doi.org/10.5281/zenodo.17268532)
707
707
  [![Powered by RDKit](https://img.shields.io/badge/Powered%20by-RDKit-3838ff.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAFVBMVEXc3NwUFP8UPP9kZP+MjP+0tP////9ZXZotAAAAAXRSTlMAQObYZgAAAAFiS0dEBmFmuH0AAAAHdElNRQfmAwsPGi+MyC9RAAAAQElEQVQI12NgQABGQUEBMENISUkRLKBsbGwEEhIyBgJFsICLC0iIUdnExcUZwnANQWfApKCK4doRBsKtQFgKAQC5Ww1JEHSEkAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wMy0xMVQxNToyNjo0NyswMDowMDzr2J4AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDMtMTFUMTU6MjY6NDcrMDA6MDBNtmAiAAAAAElFTkSuQmCC)](https://www.rdkit.org/)
708
708
 
709
- **MoleditPy** is a cross-platform, intuitive molecular editor built in Python. It provides a seamless workflow for drawing 2D molecular structures, visualizing them in 3D, and performing interactive geometric manipulations. Its powerful editing and export capabilities make it an ideal tool for preparing input files for DFT calculation software.
709
+ [🇯🇵 日本語 (Japanese)](#japanese)
710
+
711
+ **MoleditPy** is a **programmable** and cross-platform molecular editor built in Python. It streamlines the workflow from 2D drawing to 3D visualization, making it an **ideal tool for rapidly preparing input files for DFT calculations**. Designed as an **open platform**, it also allows users to freely extend its capabilities, writing custom Python scripts to manipulate molecular data, automate tasks, or integrate new cheminformatics algorithms seamlessly.
710
712
 
711
713
  **Author**: HiroYokoyama
712
714
  **License**: GPL-v3
@@ -715,7 +717,7 @@ This is the Linux version of MoleditPy. The Open Babel fallback is disabled due
715
717
  -----
716
718
  ![](img/icon.png)
717
719
  ![](img/screenshot.png)
718
- -----
720
+
719
721
 
720
722
  ## Overview
721
723
 
@@ -760,7 +762,14 @@ This application combines a modern GUI built with **PyQt6**, powerful cheminform
760
762
  * Import structures from **MOL/SDF** files or **SMILES** strings.
761
763
  * Export 3D structures to **MOL** or **XYZ** formats, which are compatible with most DFT calculation software.
762
764
  * Export 2D and 3D views as high-resolution PNG images.
763
- * **Plugin System:** Extend functionality with Python scripts. Place custom scripts in `~/.moleditpy/plugins` to add new features to the "Plugin" menu.
765
+ * Export 2D and 3D views as high-resolution PNG images.
766
+
767
+ ### 4. Programmable & Extensible
768
+
769
+ * **Python Plugin System:** Drop your Python scripts into the plugin folder, and they instantly become part of the application menu.
770
+ * **Downloadable Plugins:** Explore and download specialized plugins from the [Plugin Explorer](https://hiroyokoyama.github.io/moleditpy-plugins/explorer/).
771
+ * **Full API Access:** Plugins have direct access to the `MainWindow`, `RDKit` molecule objects, and `PyGraphics` items, allowing for limitless customization.
772
+ * **Rapid Prototyping:** Ideal for researchers who need to test new algorithms or workflow automations on the fly.
764
773
 
765
774
  ## Installation and Execution
766
775
 
@@ -822,9 +831,11 @@ This project is licensed under the **GNU General Public License v3.0 (GPL-v3)**.
822
831
 
823
832
  -----
824
833
 
834
+ <div id="japanese"></div>
835
+
825
836
  # MoleditPy — A Python Molecular Editor
826
837
 
827
- **MoleditPy**は、Pythonで構築されたクロスプラットフォームかつ直感的な分子エディターです。2Dでの分子描画から3D構造の可視化・編集、さらにはインタラクティブな幾何学的操作まで、シームレスなワークフローを提供します。その強力な編集機能とエクスポート機能により、**DFT計算ソフトウェアのインプット作成に最適なツール**です。
838
+ **MoleditPy**は、Pythonで構築された**機能拡張が自由自在な**分子エディタープラットフォームです。2D描画から3Dへの変換により、**DFT計算用インプットの迅速な作成に最適なツール**であると同時に、**Pythonスクリプトを用いて必要な機能をユーザー自身が手軽に追加・開発できる**柔軟な環境を提供します。
828
839
 
829
840
  **作者**: HiroYokoyama
830
841
  **ライセンス**: GPL-v3
@@ -875,7 +886,14 @@ This project is licensed under the **GNU General Public License v3.0 (GPL-v3)**.
875
886
  * **MOL/SDF**ファイルや**SMILES**文字列から構造をインポートできます。
876
887
  * 3D構造を**MOL**または**XYZ**形式でエクスポートでき、これらは多くのDFT計算ソフトウェアと互換性があります。
877
888
  * 2Dおよび3Dビューを高解像度のPNG画像としてエクスポートできます。
878
- * **プラグインシステム:** Pythonスクリプトで機能を拡張できます。`~/.moleditpy/plugins` にスクリプトを配置することで、「Plugin」メニューに独自の機能を追加できます。
889
+ * 2Dおよび3Dビューを高解像度のPNG画像としてエクスポートできます。
890
+
891
+ ### 4. プログラマブルで拡張可能
892
+
893
+ * **Pythonプラグインシステム:** Pythonスクリプトをプラグインフォルダに入れるだけで、即座にアプリケーションメニューの一部として機能します。
894
+ * **プラグインのダウンロード:** [Plugin Explorer](https://hiroyokoyama.github.io/moleditpy-plugins/explorer/) から特化したプラグインを探索・ダウンロードできます。
895
+ * **フルAPIアクセス:** プラグインは `MainWindow`、`RDKit` 分子オブジェクト、`PyGraphics` アイテムに直接アクセスでき、無限のカスタマイズが可能です。
896
+ * **迅速なプロトタイピング:** 新しいアルゴリズムやワークフローの自動化をその場でテストしたい研究者に最適です。
879
897
 
880
898
  ## インストールと実行
881
899
 
@@ -5,7 +5,9 @@ This is the Linux version of MoleditPy. The Open Babel fallback is disabled due
5
5
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17268532.svg)](https://doi.org/10.5281/zenodo.17268532)
6
6
  [![Powered by RDKit](https://img.shields.io/badge/Powered%20by-RDKit-3838ff.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAFVBMVEXc3NwUFP8UPP9kZP+MjP+0tP////9ZXZotAAAAAXRSTlMAQObYZgAAAAFiS0dEBmFmuH0AAAAHdElNRQfmAwsPGi+MyC9RAAAAQElEQVQI12NgQABGQUEBMENISUkRLKBsbGwEEhIyBgJFsICLC0iIUdnExcUZwnANQWfApKCK4doRBsKtQFgKAQC5Ww1JEHSEkAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wMy0xMVQxNToyNjo0NyswMDowMDzr2J4AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDMtMTFUMTU6MjY6NDcrMDA6MDBNtmAiAAAAAElFTkSuQmCC)](https://www.rdkit.org/)
7
7
 
8
- **MoleditPy** is a cross-platform, intuitive molecular editor built in Python. It provides a seamless workflow for drawing 2D molecular structures, visualizing them in 3D, and performing interactive geometric manipulations. Its powerful editing and export capabilities make it an ideal tool for preparing input files for DFT calculation software.
8
+ [🇯🇵 日本語 (Japanese)](#japanese)
9
+
10
+ **MoleditPy** is a **programmable** and cross-platform molecular editor built in Python. It streamlines the workflow from 2D drawing to 3D visualization, making it an **ideal tool for rapidly preparing input files for DFT calculations**. Designed as an **open platform**, it also allows users to freely extend its capabilities, writing custom Python scripts to manipulate molecular data, automate tasks, or integrate new cheminformatics algorithms seamlessly.
9
11
 
10
12
  **Author**: HiroYokoyama
11
13
  **License**: GPL-v3
@@ -14,7 +16,7 @@ This is the Linux version of MoleditPy. The Open Babel fallback is disabled due
14
16
  -----
15
17
  ![](img/icon.png)
16
18
  ![](img/screenshot.png)
17
- -----
19
+
18
20
 
19
21
  ## Overview
20
22
 
@@ -59,7 +61,14 @@ This application combines a modern GUI built with **PyQt6**, powerful cheminform
59
61
  * Import structures from **MOL/SDF** files or **SMILES** strings.
60
62
  * Export 3D structures to **MOL** or **XYZ** formats, which are compatible with most DFT calculation software.
61
63
  * Export 2D and 3D views as high-resolution PNG images.
62
- * **Plugin System:** Extend functionality with Python scripts. Place custom scripts in `~/.moleditpy/plugins` to add new features to the "Plugin" menu.
64
+ * Export 2D and 3D views as high-resolution PNG images.
65
+
66
+ ### 4. Programmable & Extensible
67
+
68
+ * **Python Plugin System:** Drop your Python scripts into the plugin folder, and they instantly become part of the application menu.
69
+ * **Downloadable Plugins:** Explore and download specialized plugins from the [Plugin Explorer](https://hiroyokoyama.github.io/moleditpy-plugins/explorer/).
70
+ * **Full API Access:** Plugins have direct access to the `MainWindow`, `RDKit` molecule objects, and `PyGraphics` items, allowing for limitless customization.
71
+ * **Rapid Prototyping:** Ideal for researchers who need to test new algorithms or workflow automations on the fly.
63
72
 
64
73
  ## Installation and Execution
65
74
 
@@ -121,9 +130,11 @@ This project is licensed under the **GNU General Public License v3.0 (GPL-v3)**.
121
130
 
122
131
  -----
123
132
 
133
+ <div id="japanese"></div>
134
+
124
135
  # MoleditPy — A Python Molecular Editor
125
136
 
126
- **MoleditPy**は、Pythonで構築されたクロスプラットフォームかつ直感的な分子エディターです。2Dでの分子描画から3D構造の可視化・編集、さらにはインタラクティブな幾何学的操作まで、シームレスなワークフローを提供します。その強力な編集機能とエクスポート機能により、**DFT計算ソフトウェアのインプット作成に最適なツール**です。
137
+ **MoleditPy**は、Pythonで構築された**機能拡張が自由自在な**分子エディタープラットフォームです。2D描画から3Dへの変換により、**DFT計算用インプットの迅速な作成に最適なツール**であると同時に、**Pythonスクリプトを用いて必要な機能をユーザー自身が手軽に追加・開発できる**柔軟な環境を提供します。
127
138
 
128
139
  **作者**: HiroYokoyama
129
140
  **ライセンス**: GPL-v3
@@ -174,7 +185,14 @@ This project is licensed under the **GNU General Public License v3.0 (GPL-v3)**.
174
185
  * **MOL/SDF**ファイルや**SMILES**文字列から構造をインポートできます。
175
186
  * 3D構造を**MOL**または**XYZ**形式でエクスポートでき、これらは多くのDFT計算ソフトウェアと互換性があります。
176
187
  * 2Dおよび3Dビューを高解像度のPNG画像としてエクスポートできます。
177
- * **プラグインシステム:** Pythonスクリプトで機能を拡張できます。`~/.moleditpy/plugins` にスクリプトを配置することで、「Plugin」メニューに独自の機能を追加できます。
188
+ * 2Dおよび3Dビューを高解像度のPNG画像としてエクスポートできます。
189
+
190
+ ### 4. プログラマブルで拡張可能
191
+
192
+ * **Pythonプラグインシステム:** Pythonスクリプトをプラグインフォルダに入れるだけで、即座にアプリケーションメニューの一部として機能します。
193
+ * **プラグインのダウンロード:** [Plugin Explorer](https://hiroyokoyama.github.io/moleditpy-plugins/explorer/) から特化したプラグインを探索・ダウンロードできます。
194
+ * **フルAPIアクセス:** プラグインは `MainWindow`、`RDKit` 分子オブジェクト、`PyGraphics` アイテムに直接アクセスでき、無限のカスタマイズが可能です。
195
+ * **迅速なプロトタイピング:** 新しいアルゴリズムやワークフローの自動化をその場でテストしたい研究者に最適です。
178
196
 
179
197
  ## インストールと実行
180
198
 
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "MoleditPy-linux"
7
7
 
8
- version = "2.2.3"
8
+ version = "2.2.5"
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: 2.2.3
3
+ Version: 2.2.5
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
@@ -706,7 +706,9 @@ This is the Linux version of MoleditPy. The Open Babel fallback is disabled due
706
706
  [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.17268532.svg)](https://doi.org/10.5281/zenodo.17268532)
707
707
  [![Powered by RDKit](https://img.shields.io/badge/Powered%20by-RDKit-3838ff.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAFVBMVEXc3NwUFP8UPP9kZP+MjP+0tP////9ZXZotAAAAAXRSTlMAQObYZgAAAAFiS0dEBmFmuH0AAAAHdElNRQfmAwsPGi+MyC9RAAAAQElEQVQI12NgQABGQUEBMENISUkRLKBsbGwEEhIyBgJFsICLC0iIUdnExcUZwnANQWfApKCK4doRBsKtQFgKAQC5Ww1JEHSEkAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wMy0xMVQxNToyNjo0NyswMDowMDzr2J4AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDMtMTFUMTU6MjY6NDcrMDA6MDBNtmAiAAAAAElFTkSuQmCC)](https://www.rdkit.org/)
708
708
 
709
- **MoleditPy** is a cross-platform, intuitive molecular editor built in Python. It provides a seamless workflow for drawing 2D molecular structures, visualizing them in 3D, and performing interactive geometric manipulations. Its powerful editing and export capabilities make it an ideal tool for preparing input files for DFT calculation software.
709
+ [🇯🇵 日本語 (Japanese)](#japanese)
710
+
711
+ **MoleditPy** is a **programmable** and cross-platform molecular editor built in Python. It streamlines the workflow from 2D drawing to 3D visualization, making it an **ideal tool for rapidly preparing input files for DFT calculations**. Designed as an **open platform**, it also allows users to freely extend its capabilities, writing custom Python scripts to manipulate molecular data, automate tasks, or integrate new cheminformatics algorithms seamlessly.
710
712
 
711
713
  **Author**: HiroYokoyama
712
714
  **License**: GPL-v3
@@ -715,7 +717,7 @@ This is the Linux version of MoleditPy. The Open Babel fallback is disabled due
715
717
  -----
716
718
  ![](img/icon.png)
717
719
  ![](img/screenshot.png)
718
- -----
720
+
719
721
 
720
722
  ## Overview
721
723
 
@@ -760,7 +762,14 @@ This application combines a modern GUI built with **PyQt6**, powerful cheminform
760
762
  * Import structures from **MOL/SDF** files or **SMILES** strings.
761
763
  * Export 3D structures to **MOL** or **XYZ** formats, which are compatible with most DFT calculation software.
762
764
  * Export 2D and 3D views as high-resolution PNG images.
763
- * **Plugin System:** Extend functionality with Python scripts. Place custom scripts in `~/.moleditpy/plugins` to add new features to the "Plugin" menu.
765
+ * Export 2D and 3D views as high-resolution PNG images.
766
+
767
+ ### 4. Programmable & Extensible
768
+
769
+ * **Python Plugin System:** Drop your Python scripts into the plugin folder, and they instantly become part of the application menu.
770
+ * **Downloadable Plugins:** Explore and download specialized plugins from the [Plugin Explorer](https://hiroyokoyama.github.io/moleditpy-plugins/explorer/).
771
+ * **Full API Access:** Plugins have direct access to the `MainWindow`, `RDKit` molecule objects, and `PyGraphics` items, allowing for limitless customization.
772
+ * **Rapid Prototyping:** Ideal for researchers who need to test new algorithms or workflow automations on the fly.
764
773
 
765
774
  ## Installation and Execution
766
775
 
@@ -822,9 +831,11 @@ This project is licensed under the **GNU General Public License v3.0 (GPL-v3)**.
822
831
 
823
832
  -----
824
833
 
834
+ <div id="japanese"></div>
835
+
825
836
  # MoleditPy — A Python Molecular Editor
826
837
 
827
- **MoleditPy**は、Pythonで構築されたクロスプラットフォームかつ直感的な分子エディターです。2Dでの分子描画から3D構造の可視化・編集、さらにはインタラクティブな幾何学的操作まで、シームレスなワークフローを提供します。その強力な編集機能とエクスポート機能により、**DFT計算ソフトウェアのインプット作成に最適なツール**です。
838
+ **MoleditPy**は、Pythonで構築された**機能拡張が自由自在な**分子エディタープラットフォームです。2D描画から3Dへの変換により、**DFT計算用インプットの迅速な作成に最適なツール**であると同時に、**Pythonスクリプトを用いて必要な機能をユーザー自身が手軽に追加・開発できる**柔軟な環境を提供します。
828
839
 
829
840
  **作者**: HiroYokoyama
830
841
  **ライセンス**: GPL-v3
@@ -875,7 +886,14 @@ This project is licensed under the **GNU General Public License v3.0 (GPL-v3)**.
875
886
  * **MOL/SDF**ファイルや**SMILES**文字列から構造をインポートできます。
876
887
  * 3D構造を**MOL**または**XYZ**形式でエクスポートでき、これらは多くのDFT計算ソフトウェアと互換性があります。
877
888
  * 2Dおよび3Dビューを高解像度のPNG画像としてエクスポートできます。
878
- * **プラグインシステム:** Pythonスクリプトで機能を拡張できます。`~/.moleditpy/plugins` にスクリプトを配置することで、「Plugin」メニューに独自の機能を追加できます。
889
+ * 2Dおよび3Dビューを高解像度のPNG画像としてエクスポートできます。
890
+
891
+ ### 4. プログラマブルで拡張可能
892
+
893
+ * **Pythonプラグインシステム:** Pythonスクリプトをプラグインフォルダに入れるだけで、即座にアプリケーションメニューの一部として機能します。
894
+ * **プラグインのダウンロード:** [Plugin Explorer](https://hiroyokoyama.github.io/moleditpy-plugins/explorer/) から特化したプラグインを探索・ダウンロードできます。
895
+ * **フルAPIアクセス:** プラグインは `MainWindow`、`RDKit` 分子オブジェクト、`PyGraphics` アイテムに直接アクセスでき、無限のカスタマイズが可能です。
896
+ * **迅速なプロトタイピング:** 新しいアルゴリズムやワークフローの自動化をその場でテストしたい研究者に最適です。
879
897
 
880
898
  ## インストールと実行
881
899
 
@@ -56,6 +56,7 @@ src/moleditpy_linux/modules/template_preview_view.py
56
56
  src/moleditpy_linux/modules/translation_dialog.py
57
57
  src/moleditpy_linux/modules/user_template_dialog.py
58
58
  src/moleditpy_linux/modules/zoomable_view.py
59
+ src/moleditpy_linux/modules/assets/file_icon.ico
59
60
  src/moleditpy_linux/modules/assets/icon.icns
60
61
  src/moleditpy_linux/modules/assets/icon.ico
61
62
  src/moleditpy_linux/modules/assets/icon.png
@@ -16,7 +16,7 @@ from PyQt6.QtGui import QFont, QColor
16
16
  from rdkit import Chem
17
17
 
18
18
  #Version
19
- VERSION = '2.2.3'
19
+ VERSION = '2.2.5'
20
20
 
21
21
  ATOM_RADIUS = 18
22
22
  BOND_OFFSET = 3.5
@@ -596,8 +596,10 @@ class MainWindowAppState(object):
596
596
  json_data["last_successful_optimization_method"] = None
597
597
 
598
598
  # Plugin State Persistence (Phase 3)
599
+ # Start with preserved data from missing plugins
600
+ plugin_data = self._preserved_plugin_data.copy() if self._preserved_plugin_data else {}
601
+
599
602
  if self.plugin_manager and self.plugin_manager.save_handlers:
600
- plugin_data = {}
601
603
  for name, callback in self.plugin_manager.save_handlers.items():
602
604
  try:
603
605
  p_state = callback()
@@ -606,8 +608,8 @@ class MainWindowAppState(object):
606
608
  except Exception as e:
607
609
  print(f"Error saving state for plugin {name}: {e}")
608
610
 
609
- if plugin_data:
610
- json_data['plugins'] = plugin_data
611
+ if plugin_data:
612
+ json_data['plugins'] = plugin_data
611
613
 
612
614
  return json_data
613
615
 
@@ -629,14 +631,19 @@ class MainWindowAppState(object):
629
631
  self.last_successful_optimization_method = None
630
632
 
631
633
  # Plugin State Restoration (Phase 3)
632
- if "plugins" in json_data and self.plugin_manager and self.plugin_manager.load_handlers:
634
+ self._preserved_plugin_data = {} # Reset preserved data on new load
635
+ if "plugins" in json_data:
633
636
  plugin_data = json_data["plugins"]
634
637
  for name, p_state in plugin_data.items():
635
- if name in self.plugin_manager.load_handlers:
638
+ if self.plugin_manager and name in self.plugin_manager.load_handlers:
636
639
  try:
637
640
  self.plugin_manager.load_handlers[name](p_state)
638
641
  except Exception as e:
639
642
  print(f"Error loading state for plugin {name}: {e}")
643
+ else:
644
+ # No handler found (plugin disabled or missing)
645
+ # Preserve data so it's not lost on next save
646
+ self._preserved_plugin_data[name] = p_state
640
647
 
641
648
 
642
649
  # 2D構造データの復元
@@ -697,7 +704,7 @@ class MainWindowAppState(object):
697
704
  for atom in self.data.atoms.values():
698
705
  atom['item'].update_style()
699
706
  # 3D構造データの復元
700
- if "3d_structure" in json_data:
707
+ if "3d_structure" in json_data and json_data["3d_structure"] is not None:
701
708
  structure_3d = json_data["3d_structure"]
702
709
 
703
710
  # 制約データの復元 (JSONはタプルをリストとして保存するので、タプルに再変換)
@@ -264,6 +264,9 @@ class MainWindowMainInit(object):
264
264
  except Exception as e:
265
265
  print(f"Failed to initialize PluginManager: {e}")
266
266
  self.plugin_manager = None
267
+
268
+ # ロードされていないプラグインのデータを保持する辞書
269
+ self._preserved_plugin_data = {}
267
270
 
268
271
  self.init_ui()
269
272
  self.init_worker_thread()
@@ -1832,6 +1835,14 @@ class MainWindowMainInit(object):
1832
1835
  if not found_sub:
1833
1836
  current_menu = current_menu.addMenu(part)
1834
1837
 
1838
+ # If last action was NOT from a plugin, insert a separator
1839
+ actions = current_menu.actions()
1840
+ if actions:
1841
+ last_action = actions[-1]
1842
+ if not last_action.isSeparator() and last_action.data() != PLUGIN_ACTION_TAG:
1843
+ sep = current_menu.addSeparator()
1844
+ sep.setData(PLUGIN_ACTION_TAG)
1845
+
1835
1846
  # Add action
1836
1847
  action_text = text if text else parts[-1]
1837
1848
  action = QAction(action_text, self)
@@ -1934,29 +1945,52 @@ class MainWindowMainInit(object):
1934
1945
  a.setData(PLUGIN_ACTION_TAG)
1935
1946
  menu.addAction(a)
1936
1947
 
1948
+ # 5. Integrate File Openers into Import Menu
1937
1949
  # 5. Integrate File Openers into Import Menu
1938
1950
  if hasattr(self, 'import_menu') and self.plugin_manager.file_openers:
1939
1951
  # Add separator
1940
1952
  sep = self.import_menu.addSeparator()
1941
1953
  sep.setData(PLUGIN_ACTION_TAG)
1942
1954
 
1955
+ # Group by Plugin Name
1956
+ plugin_map = {}
1943
1957
  for ext, info in self.plugin_manager.file_openers.items():
1944
- label = f"Import {ext} ({info.get('plugin', 'Plugin')})..."
1958
+ p_name = info.get('plugin', 'Plugin')
1959
+ if p_name not in plugin_map:
1960
+ plugin_map[p_name] = {}
1961
+ plugin_map[p_name][ext] = info['callback']
1962
+
1963
+ for p_name, ext_map in plugin_map.items():
1964
+ # Create combined label: "Import .ext1/.ext2 (PluginName)..."
1965
+ extensions = sorted(ext_map.keys())
1966
+ ext_str = "/".join(extensions)
1967
+ label = f"Import {ext_str} ({p_name})..."
1968
+
1969
+ # Create combined filter: "PluginName Files (*.ext1 *.ext2)"
1970
+ filter_exts = " ".join([f"*{e}" for e in extensions])
1971
+ filter_str = f"{p_name} Files ({filter_exts});;All Files (*)"
1945
1972
 
1946
- def make_cb(callback):
1973
+ # Factory for callback to fix closure capture
1974
+ def make_unified_cb(extensions_map, dialog_filter, plugin_nm):
1947
1975
  def _cb():
1948
1976
  fpath, _ = QFileDialog.getOpenFileName(
1949
- self, f"Import {ext}", "",
1950
- f"{info.get('plugin', 'Plugin')} File (*{ext});;All Files (*)"
1977
+ self, f"Import {plugin_nm} Files", "",
1978
+ dialog_filter
1951
1979
  )
1952
1980
  if fpath:
1953
- callback(fpath)
1954
- self.current_file_path = fpath
1955
- self.update_window_title()
1981
+ _, extension = os.path.splitext(fpath)
1982
+ extension = extension.lower()
1983
+ # Dispatch to specific callback
1984
+ if extension in extensions_map:
1985
+ extensions_map[extension](fpath)
1986
+ self.current_file_path = fpath
1987
+ self.update_window_title()
1988
+ else:
1989
+ self.statusBar().showMessage(f"No handler for extension {extension}")
1956
1990
  return _cb
1957
1991
 
1958
1992
  a = QAction(label, self)
1959
- a.triggered.connect(make_cb(info['callback']))
1993
+ a.triggered.connect(make_unified_cb(ext_map, filter_str, p_name))
1960
1994
  a.setData(PLUGIN_ACTION_TAG)
1961
1995
  self.import_menu.addAction(a)
1962
1996
 
@@ -65,6 +65,24 @@ class PluginContext:
65
65
  """
66
66
  return self._manager.get_main_window()
67
67
 
68
+ @property
69
+ def current_molecule(self) -> Any:
70
+ """
71
+ Get or set the current molecule (RDKit Mol object).
72
+ """
73
+ mw = self._manager.get_main_window()
74
+ if mw:
75
+ return mw.current_mol
76
+ return None
77
+
78
+ @current_molecule.setter
79
+ def current_molecule(self, mol: Any):
80
+ mw = self._manager.get_main_window()
81
+ if mw:
82
+ mw.current_mol = mol
83
+ if hasattr(mw, 'draw_molecule_3d'):
84
+ mw.draw_molecule_3d(mol)
85
+
68
86
  def add_export_action(self, label: str, callback: Callable):
69
87
  """
70
88
  Register a custom export action.
File without changes