MoleditPy 4.10.0__tar.gz → 4.10.1__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 (85) hide show
  1. {moleditpy-4.10.0 → moleditpy-4.10.1}/PKG-INFO +1 -1
  2. {moleditpy-4.10.0 → moleditpy-4.10.1}/pyproject.toml +1 -1
  3. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/PKG-INFO +1 -1
  4. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/plugins/plugin_manager_window.py +29 -15
  5. {moleditpy-4.10.0 → moleditpy-4.10.1}/LICENSE +0 -0
  6. {moleditpy-4.10.0 → moleditpy-4.10.1}/README.md +0 -0
  7. {moleditpy-4.10.0 → moleditpy-4.10.1}/setup.cfg +0 -0
  8. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/SOURCES.txt +0 -0
  9. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/dependency_links.txt +0 -0
  10. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/entry_points.txt +0 -0
  11. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/requires.txt +0 -0
  12. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/top_level.txt +0 -0
  13. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/__init__.py +0 -0
  14. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/__main__.py +0 -0
  15. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/assets/file_icon.ico +0 -0
  16. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/assets/icon.icns +0 -0
  17. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/assets/icon.ico +0 -0
  18. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/assets/icon.png +0 -0
  19. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/core/__init__.py +0 -0
  20. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/core/mol_geometry.py +0 -0
  21. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/core/molecular_data.py +0 -0
  22. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/main.py +0 -0
  23. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/plugins/__init__.py +0 -0
  24. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/plugins/plugin_interface.py +0 -0
  25. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/plugins/plugin_manager.py +0 -0
  26. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/__init__.py +0 -0
  27. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/about_dialog.py +0 -0
  28. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/align_plane_dialog.py +0 -0
  29. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/alignment_dialog.py +0 -0
  30. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/analysis_window.py +0 -0
  31. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/angle_dialog.py +0 -0
  32. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/app_state.py +0 -0
  33. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/atom_item.py +0 -0
  34. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/atom_picking.py +0 -0
  35. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/base_picking_dialog.py +0 -0
  36. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/bond_item.py +0 -0
  37. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/bond_length_dialog.py +0 -0
  38. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/calculation_worker.py +0 -0
  39. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/chain_mixin.py +0 -0
  40. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/color_settings_dialog.py +0 -0
  41. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/compute_logic.py +0 -0
  42. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/constrained_optimization_dialog.py +0 -0
  43. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/custom_interactor_style.py +0 -0
  44. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/custom_qt_interactor.py +0 -0
  45. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/dialog_3d_picking_mixin.py +0 -0
  46. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/dialog_logic.py +0 -0
  47. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/dihedral_dialog.py +0 -0
  48. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/edit_3d_logic.py +0 -0
  49. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/edit_actions_logic.py +0 -0
  50. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/export_logic.py +0 -0
  51. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/geometry_base_dialog.py +0 -0
  52. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/io_logic.py +0 -0
  53. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/main_window.py +0 -0
  54. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/main_window_init.py +0 -0
  55. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/mirror_dialog.py +0 -0
  56. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/molecular_scene_handler.py +0 -0
  57. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/molecule_scene.py +0 -0
  58. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/move_group_dialog.py +0 -0
  59. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/move_selected_atoms_dialog.py +0 -0
  60. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/periodic_table_dialog.py +0 -0
  61. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/planarize_dialog.py +0 -0
  62. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/plugin_menu_manager.py +0 -0
  63. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/preview_molecule.py +0 -0
  64. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_dialog.py +0 -0
  65. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/__init__.py +0 -0
  66. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_2d_cleanup_tab.py +0 -0
  67. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_2d_tab.py +0 -0
  68. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_3d_tabs.py +0 -0
  69. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_other_tab.py +0 -0
  70. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_tab_base.py +0 -0
  71. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/string_importers.py +0 -0
  72. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/template_preview_item.py +0 -0
  73. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/template_preview_view.py +0 -0
  74. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/translation_dialog.py +0 -0
  75. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/ui_manager.py +0 -0
  76. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/user_template_dialog.py +0 -0
  77. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/view_3d_logic.py +0 -0
  78. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/zoomable_view.py +0 -0
  79. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/__init__.py +0 -0
  80. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/constants.py +0 -0
  81. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/default_settings.py +0 -0
  82. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/hit_radius.py +0 -0
  83. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/sip_isdeleted_safe.py +0 -0
  84. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/suppress_log.py +0 -0
  85. {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/system_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy
3
- Version: 4.10.0
3
+ Version: 4.10.1
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 = "4.10.0"
8
+ version = "4.10.1"
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: 4.10.0
3
+ Version: 4.10.1
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
@@ -20,6 +20,7 @@ from PyQt6.QtCore import Qt, QUrl
20
20
  from PyQt6.QtGui import QDesktopServices, QDragEnterEvent, QDropEvent
21
21
  from PyQt6.QtWidgets import (
22
22
  QAbstractItemView,
23
+ QCheckBox,
23
24
  QDialog,
24
25
  QHBoxLayout,
25
26
  QHeaderView,
@@ -54,7 +55,9 @@ class PluginManagerWindow(QDialog):
54
55
  """Build the plugin manager UI with table, buttons, and drag-and-drop support."""
55
56
  layout = QVBoxLayout(self)
56
57
 
57
- lbl_info = QLabel("Drag & Drop .py or .zip files here to install plugins.")
58
+ lbl_info = QLabel(
59
+ "Drag & Drop .py or .zip files here to install plugins. Use the checkbox to enable/disable plugins."
60
+ )
58
61
  lbl_info.setStyleSheet("color: gray; font-style: italic;")
59
62
  layout.addWidget(lbl_info)
60
63
 
@@ -74,6 +77,7 @@ class PluginManagerWindow(QDialog):
74
77
  5, QHeaderView.ResizeMode.Stretch
75
78
  ) # Description stretches
76
79
  self.table.setColumnWidth(1, 200) # Make Name column wider
80
+ self.table.setColumnWidth(0, 120) # Keep the status checkbox on one line
77
81
  self.table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)
78
82
  self.table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
79
83
  self.table.itemSelectionChanged.connect(self.update_button_state)
@@ -118,15 +122,17 @@ class PluginManagerWindow(QDialog):
118
122
 
119
123
  self.table.setRowCount(len(plugins))
120
124
  for row, p in enumerate(plugins):
121
- status_item = QTableWidgetItem(str(p.get("status", "Unknown")))
122
- status_item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
123
- status_item.setFlags(status_item.flags() | Qt.ItemFlag.ItemIsUserCheckable)
124
- status_item.setCheckState(
125
- Qt.CheckState.Unchecked
126
- if p.get("disabled", False)
127
- else Qt.CheckState.Checked
128
- )
125
+ # Keep an empty item for row selection; the checkbox owns visible status text.
126
+ status_item = QTableWidgetItem()
129
127
  self.table.setItem(row, 0, status_item)
128
+
129
+ # Use an explicit widget so macOS keeps the checkbox and status text
130
+ # in a stable horizontal layout instead of stacking the item indicator.
131
+ status_checkbox = QCheckBox(str(p.get("status", "Unknown")))
132
+ status_checkbox.setChecked(not p.get("disabled", False))
133
+ status_checkbox.setToolTip("Enable or disable this plugin")
134
+ status_checkbox.setStyleSheet("QCheckBox { padding-left: 4px; }")
135
+ self.table.setCellWidget(row, 0, status_checkbox)
130
136
  self.table.setItem(row, 1, QTableWidgetItem(str(p.get("name", "Unknown"))))
131
137
  self.table.setItem(row, 2, QTableWidgetItem(str(p.get("version", ""))))
132
138
  self.table.setItem(row, 3, QTableWidgetItem(str(p.get("author", ""))))
@@ -148,25 +154,33 @@ class PluginManagerWindow(QDialog):
148
154
  # Simple color coding for status
149
155
  status = str(p.get("status", ""))
150
156
  color = None
157
+ checkbox_color = None
151
158
  if status.startswith("Error"):
152
159
  color = Qt.GlobalColor.red
160
+ checkbox_color = "red"
153
161
  elif status == "Loaded":
154
162
  color = Qt.GlobalColor.darkGreen
163
+ checkbox_color = "darkgreen"
155
164
  elif status in ("No Entry Point", "Disabled"):
156
165
  color = Qt.GlobalColor.gray
166
+ checkbox_color = "gray"
157
167
 
158
168
  if color:
159
- self.table.item(row, 0).setForeground(color)
169
+ status_checkbox.setStyleSheet(
170
+ f"QCheckBox {{ padding-left: 4px; color: {checkbox_color}; }}"
171
+ )
172
+
173
+ def _status_checkbox(self, row: int) -> Optional[QCheckBox]:
174
+ """Return the visible status checkbox for a plugin table row."""
175
+ checkbox = self.table.cellWidget(row, 0)
176
+ return checkbox if isinstance(checkbox, QCheckBox) else None
160
177
 
161
178
  def _save_checkbox_preferences(self) -> set[str]:
162
179
  """Collect and persist checkbox choices."""
163
180
  disabled_paths = set()
164
181
  for row, plugin in enumerate(self.plugin_manager.plugins):
165
- status_item = self.table.item(row, 0)
166
- if (
167
- status_item is not None
168
- and status_item.checkState() == Qt.CheckState.Unchecked
169
- ):
182
+ status_checkbox = self._status_checkbox(row)
183
+ if status_checkbox is not None and not status_checkbox.isChecked():
170
184
  filepath = plugin.get("filepath")
171
185
  if filepath:
172
186
  disabled_paths.add(self.plugin_manager.plugin_path_key(filepath))
File without changes
File without changes
File without changes