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.
- {moleditpy-4.10.0 → moleditpy-4.10.1}/PKG-INFO +1 -1
- {moleditpy-4.10.0 → moleditpy-4.10.1}/pyproject.toml +1 -1
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/PKG-INFO +1 -1
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/plugins/plugin_manager_window.py +29 -15
- {moleditpy-4.10.0 → moleditpy-4.10.1}/LICENSE +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/README.md +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/setup.cfg +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/SOURCES.txt +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/dependency_links.txt +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/entry_points.txt +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/requires.txt +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/MoleditPy.egg-info/top_level.txt +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/__init__.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/__main__.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/assets/file_icon.ico +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/assets/icon.icns +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/assets/icon.ico +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/assets/icon.png +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/core/__init__.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/core/mol_geometry.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/core/molecular_data.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/main.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/plugins/__init__.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/plugins/plugin_interface.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/plugins/plugin_manager.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/__init__.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/about_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/align_plane_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/alignment_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/analysis_window.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/angle_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/app_state.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/atom_item.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/atom_picking.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/base_picking_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/bond_item.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/bond_length_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/calculation_worker.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/chain_mixin.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/color_settings_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/compute_logic.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/constrained_optimization_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/custom_interactor_style.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/custom_qt_interactor.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/dialog_3d_picking_mixin.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/dialog_logic.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/dihedral_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/edit_3d_logic.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/edit_actions_logic.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/export_logic.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/geometry_base_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/io_logic.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/main_window.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/main_window_init.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/mirror_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/molecular_scene_handler.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/molecule_scene.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/move_group_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/move_selected_atoms_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/periodic_table_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/planarize_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/plugin_menu_manager.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/preview_molecule.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/__init__.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_2d_cleanup_tab.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_2d_tab.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_3d_tabs.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_other_tab.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_tab_base.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/string_importers.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/template_preview_item.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/template_preview_view.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/translation_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/ui_manager.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/user_template_dialog.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/view_3d_logic.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/zoomable_view.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/__init__.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/constants.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/default_settings.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/hit_radius.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/sip_isdeleted_safe.py +0 -0
- {moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/utils/suppress_log.py +0 -0
- {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.
|
|
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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: MoleditPy
|
|
3
|
-
Version: 4.10.
|
|
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(
|
|
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
|
-
|
|
122
|
-
status_item
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{moleditpy-4.10.0 → moleditpy-4.10.1}/src/moleditpy/ui/settings_tabs/settings_2d_cleanup_tab.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|