MoleditPy-linux 2.2.1__py3-none-any.whl → 2.2.3__py3-none-any.whl

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.
@@ -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.1'
19
+ VERSION = '2.2.3'
20
20
 
21
21
  ATOM_RADIUS = 18
22
22
  BOND_OFFSET = 3.5
@@ -84,10 +84,6 @@ except Exception:
84
84
  class MainWindowCompute(object):
85
85
  """ main_window.py から分離された機能クラス """
86
86
 
87
- def __init__(self, main_window):
88
- """ クラスの初期化 """
89
- self.mw = main_window
90
-
91
87
 
92
88
  def set_optimization_method(self, method_name):
93
89
  """Set preferred 3D optimization method and persist to settings.
@@ -209,8 +205,8 @@ class MainWindowCompute(object):
209
205
  menu.addAction(a)
210
206
 
211
207
  # Add Plugin Optimization Methods
212
- if hasattr(self.mw, 'plugin_manager') and self.mw.plugin_manager.optimization_methods:
213
- methods = self.mw.plugin_manager.optimization_methods
208
+ if hasattr(self, 'plugin_manager') and self.plugin_manager.optimization_methods:
209
+ methods = self.plugin_manager.optimization_methods
214
210
  if methods:
215
211
  menu.addSeparator()
216
212
  for method_name, info in methods.items():
@@ -781,8 +777,9 @@ class MainWindowCompute(object):
781
777
  self.statusBar().showMessage(f"UFF (RDKit) optimization error: {e}")
782
778
  return
783
779
  # Plugin method dispatch
784
- elif hasattr(self.mw, 'plugin_manager') and hasattr(self.mw.plugin_manager, 'optimization_methods') and method in self.mw.plugin_manager.optimization_methods:
785
- info = self.mw.plugin_manager.optimization_methods[method]
780
+ # Plugin method dispatch
781
+ elif hasattr(self, 'plugin_manager') and hasattr(self.plugin_manager, 'optimization_methods') and method in self.plugin_manager.optimization_methods:
782
+ info = self.plugin_manager.optimization_methods[method]
786
783
  callback = info['callback']
787
784
  try:
788
785
  success = callback(self.current_mol)
@@ -111,10 +111,6 @@ except Exception:
111
111
  class MainWindowDialogManager(object):
112
112
  """ main_window.py から分離された機能クラス """
113
113
 
114
- def __init__(self, main_window):
115
- """ クラスの初期化 """
116
- self.mw = main_window
117
-
118
114
 
119
115
  def show_about_dialog(self):
120
116
  """Show the custom About dialog with Easter egg functionality"""
@@ -84,10 +84,6 @@ except Exception:
84
84
  class MainWindowEdit3d(object):
85
85
  """ main_window.py から分離された機能クラス """
86
86
 
87
- def __init__(self, main_window):
88
- """ クラスの初期化 """
89
- self.mw = main_window
90
-
91
87
 
92
88
  def toggle_measurement_mode(self, checked):
93
89
  """測定モードのオン/オフを切り替える"""
@@ -102,10 +102,6 @@ except Exception:
102
102
  class MainWindowEditActions(object):
103
103
  """ main_window.py から分離された機能クラス """
104
104
 
105
- def __init__(self, main_window):
106
- """ クラスの初期化 """
107
- self.mw = main_window
108
-
109
105
 
110
106
  def copy_selection(self):
111
107
  """選択された原子と結合をクリップボードにコピーする"""
@@ -88,10 +88,6 @@ except Exception:
88
88
  class MainWindowExport(object):
89
89
  """ main_window.py から分離された機能クラス """
90
90
 
91
- def __init__(self, main_window):
92
- """ クラスの初期化 """
93
- self.mw = main_window
94
-
95
91
 
96
92
  def export_stl(self):
97
93
  """STLファイルとしてエクスポート(色なし)"""
@@ -1897,7 +1897,7 @@ class MainWindowMainInit(object):
1897
1897
 
1898
1898
  # Add action to the resolved parent_menu
1899
1899
  action = QAction(p['name'], self)
1900
- action.triggered.connect(lambda checked, mod=p['module']: self.plugin_manager.run_plugin(mod, self.mw if hasattr(self, 'mw') else self))
1900
+ action.triggered.connect(lambda checked, mod=p['module']: self.plugin_manager.run_plugin(mod, self))
1901
1901
  parent_menu.addAction(action)
1902
1902
 
1903
1903
  # 4. Integrate Export Actions into Export Button and Menu
@@ -88,10 +88,6 @@ except Exception:
88
88
  class MainWindowMolecularParsers(object):
89
89
  """ main_window.py から分離された機能クラス """
90
90
 
91
- def __init__(self, main_window):
92
- """ クラスの初期化 """
93
- self.mw = main_window
94
-
95
91
 
96
92
  def load_mol_file(self, file_path=None):
97
93
  if not self.check_unsaved_changes():
@@ -83,10 +83,6 @@ except Exception:
83
83
  class MainWindowProjectIo(object):
84
84
  """ main_window.py から分離された機能クラス """
85
85
 
86
- def __init__(self, main_window):
87
- """ クラスの初期化 """
88
- self.mw = main_window
89
-
90
86
 
91
87
  def save_project(self):
92
88
  """上書き保存(Ctrl+S)- デフォルトでPMEPRJ形式"""
@@ -82,10 +82,6 @@ except Exception:
82
82
  class MainWindowStringImporters(object):
83
83
  """ main_window.py から分離された機能クラス """
84
84
 
85
- def __init__(self, main_window):
86
- """ クラスの初期化 """
87
- self.mw = main_window
88
-
89
85
 
90
86
  def import_smiles_dialog(self):
91
87
  """ユーザーにSMILES文字列の入力を促すダイアログを表示する"""
@@ -88,10 +88,6 @@ except Exception:
88
88
  class MainWindowView3d(object):
89
89
  """ main_window.py から分離された機能クラス """
90
90
 
91
- def __init__(self, main_window):
92
- """ クラスの初期化 """
93
- self.mw = main_window
94
-
95
91
 
96
92
  def set_3d_style(self, style_name):
97
93
  """3D表示スタイルを設定し、ビューを更新する"""
@@ -121,7 +117,7 @@ class MainWindowView3d(object):
121
117
 
122
118
  def draw_molecule_3d(self, mol):
123
119
  """Dispatch to custom style or standard drawing."""
124
- mw = self.mw if hasattr(self, 'mw') else self
120
+ mw = self
125
121
 
126
122
  if hasattr(mw, 'plugin_manager') and hasattr(mw.plugin_manager, 'custom_3d_styles'):
127
123
  if hasattr(self, 'current_3d_style') and self.current_3d_style in mw.plugin_manager.custom_3d_styles:
@@ -79,10 +79,6 @@ except Exception:
79
79
  class MainWindowViewLoaders(object):
80
80
  """ main_window.py から分離された機能クラス """
81
81
 
82
- def __init__(self, main_window):
83
- """ クラスの初期化 """
84
- self.mw = main_window
85
-
86
82
  def load_xyz_for_3d_viewing(self, file_path=None):
87
83
  """XYZファイルを読み込んで3Dビューアで表示する"""
88
84
  if not file_path:
@@ -85,7 +85,9 @@ class PluginManagerWindow(QDialog):
85
85
 
86
86
  self.table.setRowCount(len(plugins))
87
87
  for row, p in enumerate(plugins):
88
- self.table.setItem(row, 0, QTableWidgetItem(str(p.get('status', 'Unknown'))))
88
+ status_item = QTableWidgetItem(str(p.get('status', 'Unknown')))
89
+ status_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
90
+ self.table.setItem(row, 0, status_item)
89
91
  self.table.setItem(row, 1, QTableWidgetItem(str(p.get('name', 'Unknown'))))
90
92
  self.table.setItem(row, 2, QTableWidgetItem(str(p.get('version', ''))))
91
93
  self.table.setItem(row, 3, QTableWidgetItem(str(p.get('author', ''))))
@@ -108,7 +110,7 @@ class PluginManagerWindow(QDialog):
108
110
  if status.startswith("Error"):
109
111
  color = Qt.GlobalColor.red
110
112
  elif status == "Loaded":
111
- color = Qt.GlobalColor.green
113
+ color = Qt.GlobalColor.darkGreen
112
114
  elif status == "No Entry Point":
113
115
  color = Qt.GlobalColor.gray
114
116
 
@@ -120,7 +122,7 @@ class PluginManagerWindow(QDialog):
120
122
  if hasattr(self, 'btn_remove'):
121
123
  self.btn_remove.setEnabled(has_selection)
122
124
 
123
- def on_reload(self):
125
+ def on_reload(self, silent=False):
124
126
  # Trigger reload in main manager
125
127
  if self.plugin_manager.main_window:
126
128
  self.plugin_manager.discover_plugins(self.plugin_manager.main_window)
@@ -132,7 +134,8 @@ class PluginManagerWindow(QDialog):
132
134
  # We will handle UI rebuild in the main window code by observing or callback.
133
135
 
134
136
  # For immediate feedback:
135
- QMessageBox.information(self, "Reloaded", "Plugins have been reloaded.")
137
+ if not silent:
138
+ QMessageBox.information(self, "Reloaded", "Plugins have been reloaded.")
136
139
  else:
137
140
  self.plugin_manager.discover_plugins()
138
141
  self.refresh_plugin_list()
@@ -155,7 +158,7 @@ class PluginManagerWindow(QDialog):
155
158
  if reply == QMessageBox.StandardButton.Yes:
156
159
  try:
157
160
  os.remove(filepath)
158
- self.on_reload() # Reload list and plugins
161
+ self.on_reload(silent=True) # Reload list and plugins
159
162
  QMessageBox.information(self, "Success", f"Removed '{plugin.get('name', 'Unknown')}'.")
160
163
  except Exception as e:
161
164
  QMessageBox.critical(self, "Error", f"Failed to delete file: {e}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy-linux
3
- Version: 2.2.1
3
+ Version: 2.2.3
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
@@ -12,7 +12,7 @@ moleditpy_linux/modules/bond_item.py,sha256=eVkEeKvM4igYI67DYxpey3FllqDyt_iWDo4V
12
12
  moleditpy_linux/modules/bond_length_dialog.py,sha256=k5x_DhK9Q8CSwouKhEo_kLRRdaYHDaK84KDNmuDNLvY,14868
13
13
  moleditpy_linux/modules/calculation_worker.py,sha256=KiGQY7i-QCQofEoE0r65KoQgpEGFcbhmxWv6egfkUdc,42324
14
14
  moleditpy_linux/modules/color_settings_dialog.py,sha256=Ow44BhCOLo0AFb6klO001k6B4drOgKX9DeNBQhZLp5o,15474
15
- moleditpy_linux/modules/constants.py,sha256=qyIuIsqtkyNxYkmHDd3NW8dlEHxm88M3-7ZqW-62u88,4702
15
+ moleditpy_linux/modules/constants.py,sha256=6ZL8sYwh2Ll3nnexffllLRdcfjDIeYvgNrGPjmnvv0o,4702
16
16
  moleditpy_linux/modules/constrained_optimization_dialog.py,sha256=IEdNVhFoNSEMeA5ABpUH9Q88-YzDXFloQM2gwnPwnHY,30150
17
17
  moleditpy_linux/modules/custom_interactor_style.py,sha256=NjsXE2a43IDNEanZBlcG9eR4ZIERT1MsQC6lbfesapQ,38453
18
18
  moleditpy_linux/modules/custom_qt_interactor.py,sha256=MFaTuDh-FPeFBS4303CqxsxmsOIOW4QXUz6USwI8PHQ,2451
@@ -20,18 +20,18 @@ moleditpy_linux/modules/dialog3_d_picking_mixin.py,sha256=2Sut0J5ltXMtrUJ9R3o1oZ
20
20
  moleditpy_linux/modules/dihedral_dialog.py,sha256=rgry7LqyX9JMAR7d82QSroTPoKT3xz18EgKN1GzYZx4,18088
21
21
  moleditpy_linux/modules/main_window.py,sha256=IL8dH3qPx2TkPgO7amuDgjlFoadh5J59xYUEVhlNZqA,36338
22
22
  moleditpy_linux/modules/main_window_app_state.py,sha256=DmBfzurTftUIkPZu8465YnxL8Hdx2vHYSbyWdB-kvjs,34757
23
- moleditpy_linux/modules/main_window_compute.py,sha256=4ODU4PGG5AYn-agNxWIHErDoYXTgWwNPXEbMZEi6mVc,53440
24
- moleditpy_linux/modules/main_window_dialog_manager.py,sha256=S1ROCWqzB2uVSKHY4o5CbTtJAEjSyEXGPC1AgmdVgK4,20065
25
- moleditpy_linux/modules/main_window_edit_3d.py,sha256=uY203adPg3CLyAdbG2NCThG2Am0WduzPDan9rXAlc14,19841
26
- moleditpy_linux/modules/main_window_edit_actions.py,sha256=lUFxNFTUQzeXN8CNlb4_4S9j4M1EEq8kpJmh9dCzM3M,64818
27
- moleditpy_linux/modules/main_window_export.py,sha256=e0HA_jeaokIOBunQqGxUn5QKdniCmE8GrsE1Igy6zm8,38351
28
- moleditpy_linux/modules/main_window_main_init.py,sha256=YKUoKEFzg7YBeaLCUFdoxfsfg1pR7sfVC8J4-_S_8Aw,89317
29
- moleditpy_linux/modules/main_window_molecular_parsers.py,sha256=Ex4-urYsKf6PyHp4XToOhgXzuYWa_n7q--QmHci4OCU,48401
30
- moleditpy_linux/modules/main_window_project_io.py,sha256=q1vEmWQDqla32HVkmk8-j0OY9ut5TI5NJ4ikahewkEo,17259
31
- moleditpy_linux/modules/main_window_string_importers.py,sha256=mQVDv2Dj4MwnPgMRe2IqdAAKnB_quE6QfYeAgCjfv28,10892
23
+ moleditpy_linux/modules/main_window_compute.py,sha256=ipIkhH_DONXDnPzh7xeym9X-Yfx8EhsvXYOdyxsAj4c,53347
24
+ moleditpy_linux/modules/main_window_dialog_manager.py,sha256=9ZVy5-dlk8SjGU5R6NtbaVZuBQfVK5Nwrc633pEzjq8,19955
25
+ moleditpy_linux/modules/main_window_edit_3d.py,sha256=CUArB5wcsgq1C7LygAEC6URlbnn4RhRYDa5n-Y-etWI,19731
26
+ moleditpy_linux/modules/main_window_edit_actions.py,sha256=-SDLoMQ7S-3u3eBUb-w7BU7OAsFkhQ9ZBjF3Y2jGgZc,64708
27
+ moleditpy_linux/modules/main_window_export.py,sha256=dSVfylsybDDboDuXU9Inotf6YkrKJwgBTqGYSfq1lRE,38241
28
+ moleditpy_linux/modules/main_window_main_init.py,sha256=Yr7TbPgpqVIImZE0BznCLDxsLufQj-QXQGQd6x0kopk,89281
29
+ moleditpy_linux/modules/main_window_molecular_parsers.py,sha256=KR6vzuqc3nutOcorpYr0QOyX3MFBcxTwDhZX96VgJ9Q,48291
30
+ moleditpy_linux/modules/main_window_project_io.py,sha256=TWwtuKDuvgcvPZ9IGmW8r1EJJOrgxrIJRnxe_f4C1oM,17149
31
+ moleditpy_linux/modules/main_window_string_importers.py,sha256=v47wOd4RtjKYcF-aLP-mogGGdYTpTEo3dDyAu79_5MM,10782
32
32
  moleditpy_linux/modules/main_window_ui_manager.py,sha256=HofI6T9EvcSSzPbsdPqkYEEDoB6Hui1Uj2Ll-wwczGA,24016
33
- moleditpy_linux/modules/main_window_view_3d.py,sha256=TKRerktpCTYxX9HU-dSOnIhx4OyZaVrRYj4pEOUXmGc,74088
34
- moleditpy_linux/modules/main_window_view_loaders.py,sha256=Dbdgv4TY_ZkX8Qyaevwr-mBJYJ59CBzRTEks-U1FiGw,14462
33
+ moleditpy_linux/modules/main_window_view_3d.py,sha256=6eN3_NdpNJrCzMSp17t9_Omm71MwfgqDC8A5DSYHhUo,73942
34
+ moleditpy_linux/modules/main_window_view_loaders.py,sha256=gklTMo27QnyJ8Gd0ampPdbm9d0Gi-oHWkIqQuGADHmI,14352
35
35
  moleditpy_linux/modules/mirror_dialog.py,sha256=c3v4qY6R4FAljzk4EPaDjL9ZdZMjLQSFLqDMXz2fBUk,4696
36
36
  moleditpy_linux/modules/molecular_data.py,sha256=8gE9ByYg3kSBfb1zANsyad_BVBTm6WOLF7NsZIYuG2E,13250
37
37
  moleditpy_linux/modules/molecule_scene.py,sha256=khdt7h9Mk_D1cMbYeHGtq7P9aFXo0xG-hcShU_H2Y-Q,95911
@@ -40,7 +40,7 @@ moleditpy_linux/modules/periodic_table_dialog.py,sha256=ItEZUts1XCietz9paY-spvbz
40
40
  moleditpy_linux/modules/planarize_dialog.py,sha256=yY8o-SxT8vGEHVWnjDTXecRv5NUaEejEsXH-836Xk8g,8681
41
41
  moleditpy_linux/modules/plugin_interface.py,sha256=W6Hw1OLqMkcg8XU-S347v2sDBMEoo6iiCSbmL6MjZrA,7639
42
42
  moleditpy_linux/modules/plugin_manager.py,sha256=cxbqIE7Rb_KeBd-cG1vF2ySY2qNx8IJVRXjVPyQMFDc,13457
43
- moleditpy_linux/modules/plugin_manager_window.py,sha256=m2lJ-UltwoXQ2SYA1im6Q0v-5SfqWL2HcOBCTzUmiBw,9963
43
+ moleditpy_linux/modules/plugin_manager_window.py,sha256=UeoPQWTxmckoFIQAuv9jVBzok_9gEKEm9c7JsKRX0P4,10135
44
44
  moleditpy_linux/modules/settings_dialog.py,sha256=Nr7yE8UmYRi3VObWvRlrnv0DnjSjmYXbvqryZ02O12k,65348
45
45
  moleditpy_linux/modules/template_preview_item.py,sha256=djdq3tz73d_fJGOvai3E-V9Hk9q9ZW7skx7BV59mooA,6556
46
46
  moleditpy_linux/modules/template_preview_view.py,sha256=4OCHZDO51BvJpKdfrBWJ4_4WfLfFSKxsVIyf7I-Kj2E,3350
@@ -50,9 +50,9 @@ moleditpy_linux/modules/zoomable_view.py,sha256=hjwljui13QpvjvxJHY4Evot4jMQvxRBQ
50
50
  moleditpy_linux/modules/assets/icon.icns,sha256=wD5R6-Vw7K662tVKhu2E1ImN0oUuyAP4youesEQsn9c,139863
51
51
  moleditpy_linux/modules/assets/icon.ico,sha256=RfgFcx7-dHY_2STdsOQCQziY5SNhDr3gPnjO6jzEDPI,147975
52
52
  moleditpy_linux/modules/assets/icon.png,sha256=kCFN1WacYIdy0GN6SFEbNA00ef39pCczBnFdkkBI8Bs,147110
53
- moleditpy_linux-2.2.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
54
- moleditpy_linux-2.2.1.dist-info/METADATA,sha256=zTzDTlTnkxq1Wp7TAy-q70JTyotZmA8WhrmgNfxTg3U,59354
55
- moleditpy_linux-2.2.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
56
- moleditpy_linux-2.2.1.dist-info/entry_points.txt,sha256=-OzipSi__yVwlimNtu3eiRP5t5UMg55Cs0udyhXYiyw,60
57
- moleditpy_linux-2.2.1.dist-info/top_level.txt,sha256=qyqe-hDYL6CXyin9E5Me5rVl3PG84VqiOjf9bQvfJLs,16
58
- moleditpy_linux-2.2.1.dist-info/RECORD,,
53
+ moleditpy_linux-2.2.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
54
+ moleditpy_linux-2.2.3.dist-info/METADATA,sha256=B6URTOi5mBguOYLg5424CTJFamlB02S4Gct2HEJRv1g,59354
55
+ moleditpy_linux-2.2.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
56
+ moleditpy_linux-2.2.3.dist-info/entry_points.txt,sha256=-OzipSi__yVwlimNtu3eiRP5t5UMg55Cs0udyhXYiyw,60
57
+ moleditpy_linux-2.2.3.dist-info/top_level.txt,sha256=qyqe-hDYL6CXyin9E5Me5rVl3PG84VqiOjf9bQvfJLs,16
58
+ moleditpy_linux-2.2.3.dist-info/RECORD,,