MoleditPy 2.2.0a2__tar.gz → 2.2.0a3__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 (80) hide show
  1. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/PKG-INFO +1 -1
  2. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/pyproject.toml +1 -1
  3. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/MoleditPy.egg-info/PKG-INFO +1 -1
  4. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/MoleditPy.egg-info/SOURCES.txt +1 -18
  5. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/constants.py +1 -1
  6. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_main_init.py +31 -13
  7. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/plugin_interface.py +1 -10
  8. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/plugin_manager.py +0 -3
  9. moleditpy-2.2.0a2/src/moleditpy/plugins/Analysis/ms_spectrum_neo.py +0 -919
  10. moleditpy-2.2.0a2/src/moleditpy/plugins/File/animated_xyz_giffer.py +0 -583
  11. moleditpy-2.2.0a2/src/moleditpy/plugins/File/cube_viewer.py +0 -689
  12. moleditpy-2.2.0a2/src/moleditpy/plugins/File/gaussian_fchk_freq_analyzer.py +0 -1148
  13. moleditpy-2.2.0a2/src/moleditpy/plugins/File/mapped_cube_viewer.py +0 -552
  14. moleditpy-2.2.0a2/src/moleditpy/plugins/File/orca_out_freq_analyzer.py +0 -1226
  15. moleditpy-2.2.0a2/src/moleditpy/plugins/File/paste_xyz.py +0 -336
  16. moleditpy-2.2.0a2/src/moleditpy/plugins/Input Generator/gaussian_input_generator_neo.py +0 -930
  17. moleditpy-2.2.0a2/src/moleditpy/plugins/Input Generator/orca_input_generator_neo.py +0 -1028
  18. moleditpy-2.2.0a2/src/moleditpy/plugins/Input Generator/orca_xyz2inp_gui.py +0 -286
  19. moleditpy-2.2.0a2/src/moleditpy/plugins/Optimization/all-trans_optimizer.py +0 -65
  20. moleditpy-2.2.0a2/src/moleditpy/plugins/Optimization/complex_molecule_untangler.py +0 -268
  21. moleditpy-2.2.0a2/src/moleditpy/plugins/Optimization/conf_search.py +0 -224
  22. moleditpy-2.2.0a2/src/moleditpy/plugins/Utility/atom_colorizer.py +0 -262
  23. moleditpy-2.2.0a2/src/moleditpy/plugins/Utility/console.py +0 -163
  24. moleditpy-2.2.0a2/src/moleditpy/plugins/Utility/pubchem_ressolver.py +0 -244
  25. moleditpy-2.2.0a2/src/moleditpy/plugins/Utility/vdw_radii_overlay.py +0 -432
  26. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/LICENSE +0 -0
  27. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/README.md +0 -0
  28. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/setup.cfg +0 -0
  29. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/MoleditPy.egg-info/dependency_links.txt +0 -0
  30. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/MoleditPy.egg-info/entry_points.txt +0 -0
  31. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/MoleditPy.egg-info/requires.txt +0 -0
  32. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/MoleditPy.egg-info/top_level.txt +0 -0
  33. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/__init__.py +0 -0
  34. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/__main__.py +0 -0
  35. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/main.py +0 -0
  36. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/__init__.py +0 -0
  37. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/about_dialog.py +0 -0
  38. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/align_plane_dialog.py +0 -0
  39. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/alignment_dialog.py +0 -0
  40. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/analysis_window.py +0 -0
  41. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/angle_dialog.py +0 -0
  42. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/assets/icon.icns +0 -0
  43. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/assets/icon.ico +0 -0
  44. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/assets/icon.png +0 -0
  45. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/atom_item.py +0 -0
  46. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/bond_item.py +0 -0
  47. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/bond_length_dialog.py +0 -0
  48. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/calculation_worker.py +0 -0
  49. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/color_settings_dialog.py +0 -0
  50. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/constrained_optimization_dialog.py +0 -0
  51. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/custom_interactor_style.py +0 -0
  52. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/custom_qt_interactor.py +0 -0
  53. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/dialog3_d_picking_mixin.py +0 -0
  54. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/dihedral_dialog.py +0 -0
  55. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window.py +0 -0
  56. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_app_state.py +0 -0
  57. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_compute.py +0 -0
  58. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_dialog_manager.py +0 -0
  59. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_edit_3d.py +0 -0
  60. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_edit_actions.py +0 -0
  61. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_export.py +0 -0
  62. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_molecular_parsers.py +0 -0
  63. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_project_io.py +0 -0
  64. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_string_importers.py +0 -0
  65. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_ui_manager.py +0 -0
  66. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_view_3d.py +0 -0
  67. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/main_window_view_loaders.py +0 -0
  68. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/mirror_dialog.py +0 -0
  69. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/molecular_data.py +0 -0
  70. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/molecule_scene.py +0 -0
  71. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/move_group_dialog.py +0 -0
  72. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/periodic_table_dialog.py +0 -0
  73. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/planarize_dialog.py +0 -0
  74. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/plugin_manager_window.py +0 -0
  75. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/settings_dialog.py +0 -0
  76. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/template_preview_item.py +0 -0
  77. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/template_preview_view.py +0 -0
  78. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/translation_dialog.py +0 -0
  79. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/user_template_dialog.py +0 -0
  80. {moleditpy-2.2.0a2 → moleditpy-2.2.0a3}/src/moleditpy/modules/zoomable_view.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy
3
- Version: 2.2.0a2
3
+ Version: 2.2.0a3
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
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "MoleditPy"
7
7
 
8
- version = "2.2.0a2"
8
+ version = "2.2.0a3"
9
9
 
10
10
  license = {file = "LICENSE"}
11
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy
3
- Version: 2.2.0a2
3
+ Version: 2.2.0a3
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
@@ -64,21 +64,4 @@ src/moleditpy/modules/user_template_dialog.py
64
64
  src/moleditpy/modules/zoomable_view.py
65
65
  src/moleditpy/modules/assets/icon.icns
66
66
  src/moleditpy/modules/assets/icon.ico
67
- src/moleditpy/modules/assets/icon.png
68
- src/moleditpy/plugins/Analysis/ms_spectrum_neo.py
69
- src/moleditpy/plugins/File/animated_xyz_giffer.py
70
- src/moleditpy/plugins/File/cube_viewer.py
71
- src/moleditpy/plugins/File/gaussian_fchk_freq_analyzer.py
72
- src/moleditpy/plugins/File/mapped_cube_viewer.py
73
- src/moleditpy/plugins/File/orca_out_freq_analyzer.py
74
- src/moleditpy/plugins/File/paste_xyz.py
75
- src/moleditpy/plugins/Input Generator/gaussian_input_generator_neo.py
76
- src/moleditpy/plugins/Input Generator/orca_input_generator_neo.py
77
- src/moleditpy/plugins/Input Generator/orca_xyz2inp_gui.py
78
- src/moleditpy/plugins/Optimization/all-trans_optimizer.py
79
- src/moleditpy/plugins/Optimization/complex_molecule_untangler.py
80
- src/moleditpy/plugins/Optimization/conf_search.py
81
- src/moleditpy/plugins/Utility/atom_colorizer.py
82
- src/moleditpy/plugins/Utility/console.py
83
- src/moleditpy/plugins/Utility/pubchem_ressolver.py
84
- src/moleditpy/plugins/Utility/vdw_radii_overlay.py
67
+ src/moleditpy/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.0a2'
19
+ VERSION = '2.2.0a3'
20
20
 
21
21
  ATOM_RADIUS = 18
22
22
  BOND_OFFSET = 3.5
@@ -32,7 +32,7 @@ except Exception:
32
32
  # PyQt6 Modules
33
33
  from PyQt6.QtWidgets import (
34
34
  QApplication, QWidget, QVBoxLayout, QHBoxLayout,
35
- QPushButton, QSplitter, QToolBar, QSizePolicy, QLabel, QToolButton, QMenu, QMessageBox
35
+ QPushButton, QSplitter, QToolBar, QSizePolicy, QLabel, QToolButton, QMenu, QMessageBox, QFileDialog
36
36
  )
37
37
 
38
38
  from PyQt6.QtGui import (
@@ -1901,20 +1901,38 @@ class MainWindowMainInit(object):
1901
1901
  parent_menu.addAction(action)
1902
1902
 
1903
1903
  # 4. Integrate Export Actions into Export Button and Menu
1904
+ # 4. Integrate Export Actions into Export Button AND Main File->Export Menu
1904
1905
  if self.plugin_manager.export_actions:
1906
+ # Find Main File -> Export menu
1907
+ main_export_menu = None
1908
+ for top_action in self.menuBar().actions():
1909
+ if top_action.text().replace('&', '') == 'File' and top_action.menu():
1910
+ for sub_action in top_action.menu().actions():
1911
+ if sub_action.text().replace('&', '') == 'Export' and sub_action.menu():
1912
+ main_export_menu = sub_action.menu()
1913
+ break
1914
+ if main_export_menu: break
1915
+
1916
+ # List of menus to populate
1917
+ target_menus = []
1905
1918
  if hasattr(self, 'export_button') and self.export_button.menu():
1906
- # Add separator
1907
- sep = self.export_button.menu().addSeparator()
1908
- sep.setData(PLUGIN_ACTION_TAG)
1909
-
1910
- for exp in self.plugin_manager.export_actions:
1911
- label = exp['label']
1912
- callback = exp['callback']
1913
-
1914
- a = QAction(label, self)
1915
- a.triggered.connect(callback)
1916
- a.setData(PLUGIN_ACTION_TAG)
1917
- self.export_button.menu().addAction(a)
1919
+ target_menus.append(self.export_button.menu())
1920
+ if main_export_menu:
1921
+ target_menus.append(main_export_menu)
1922
+
1923
+ for menu in target_menus:
1924
+ # Add separator
1925
+ sep = menu.addSeparator()
1926
+ sep.setData(PLUGIN_ACTION_TAG)
1927
+
1928
+ for exp in self.plugin_manager.export_actions:
1929
+ label = exp['label']
1930
+ callback = exp['callback']
1931
+
1932
+ a = QAction(label, self)
1933
+ a.triggered.connect(callback)
1934
+ a.setData(PLUGIN_ACTION_TAG)
1935
+ menu.addAction(a)
1918
1936
 
1919
1937
  # 5. Integrate File Openers into Import Menu
1920
1938
  if hasattr(self, 'import_menu') and self.plugin_manager.file_openers:
@@ -159,16 +159,7 @@ class PluginContext:
159
159
  self._manager.register_3d_style(self._plugin_name, style_name, callback)
160
160
 
161
161
 
162
- def add_panel_button(self, text: str, callback: Callable, panel: str = "right"):
163
- """
164
- Add a button to the bottom control panel.
165
-
166
- Args:
167
- text: Label on the button.
168
- callback: Function to call on click.
169
- panel: "left" (2D Editor) or "right" (3D Viewer). Default "right".
170
- """
171
- self._manager.register_panel_button(self._plugin_name, text, callback, panel)
162
+
172
163
 
173
164
 
174
165
 
@@ -40,7 +40,6 @@ class PluginManager:
40
40
  # Registries for actions
41
41
  self.menu_actions = [] # List of (plugin_name, path, callback, text, icon, shortcut)
42
42
  self.toolbar_actions = []
43
- self.context_menu_3d_actions = []
44
43
  self.drop_handlers = [] # List of (priority, plugin_name, callback)
45
44
 
46
45
  # Extended Registries (Added to prevent lazy initialization "monkey patching")
@@ -49,7 +48,6 @@ class PluginManager:
49
48
  self.file_openers = {}
50
49
  self.analysis_tools = []
51
50
  self.save_handlers = {}
52
- self.save_handlers = {}
53
51
  self.load_handlers = {}
54
52
  self.custom_3d_styles = {} # style_name -> {'plugin': name, 'callback': func}
55
53
 
@@ -98,7 +96,6 @@ class PluginManager:
98
96
  self.plugins = []
99
97
  self.menu_actions = []
100
98
  self.toolbar_actions = []
101
- self.context_menu_3d_actions = []
102
99
  self.drop_handlers = []
103
100
 
104
101
  # Clear extended registries