MoleditPy 2.4.2__tar.gz → 2.4.3__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-2.4.2 → moleditpy-2.4.3}/PKG-INFO +1 -1
  2. {moleditpy-2.4.2 → moleditpy-2.4.3}/pyproject.toml +1 -1
  3. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/MoleditPy.egg-info/PKG-INFO +1 -1
  4. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/constants.py +1 -1
  5. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_edit_actions.py +15 -7
  6. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_main_init.py +2 -1
  7. {moleditpy-2.4.2 → moleditpy-2.4.3}/LICENSE +0 -0
  8. {moleditpy-2.4.2 → moleditpy-2.4.3}/README.md +0 -0
  9. {moleditpy-2.4.2 → moleditpy-2.4.3}/setup.cfg +0 -0
  10. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/MoleditPy.egg-info/SOURCES.txt +0 -0
  11. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/MoleditPy.egg-info/dependency_links.txt +0 -0
  12. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/MoleditPy.egg-info/entry_points.txt +0 -0
  13. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/MoleditPy.egg-info/requires.txt +0 -0
  14. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/MoleditPy.egg-info/top_level.txt +0 -0
  15. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/__init__.py +0 -0
  16. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/__main__.py +0 -0
  17. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/main.py +0 -0
  18. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/__init__.py +0 -0
  19. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/about_dialog.py +0 -0
  20. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/align_plane_dialog.py +0 -0
  21. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/alignment_dialog.py +0 -0
  22. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/analysis_window.py +0 -0
  23. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/angle_dialog.py +0 -0
  24. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/assets/file_icon.ico +0 -0
  25. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/assets/icon.icns +0 -0
  26. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/assets/icon.ico +0 -0
  27. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/assets/icon.png +0 -0
  28. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/atom_item.py +0 -0
  29. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/bond_item.py +0 -0
  30. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/bond_length_dialog.py +0 -0
  31. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/calculation_worker.py +0 -0
  32. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/color_settings_dialog.py +0 -0
  33. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/constrained_optimization_dialog.py +0 -0
  34. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/custom_interactor_style.py +0 -0
  35. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/custom_qt_interactor.py +0 -0
  36. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/dialog3_d_picking_mixin.py +0 -0
  37. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/dihedral_dialog.py +0 -0
  38. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window.py +0 -0
  39. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_app_state.py +0 -0
  40. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_compute.py +0 -0
  41. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_dialog_manager.py +0 -0
  42. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_edit_3d.py +0 -0
  43. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_export.py +0 -0
  44. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_molecular_parsers.py +0 -0
  45. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_project_io.py +0 -0
  46. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_string_importers.py +0 -0
  47. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_ui_manager.py +0 -0
  48. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_view_3d.py +0 -0
  49. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/main_window_view_loaders.py +0 -0
  50. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/mirror_dialog.py +0 -0
  51. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/molecular_data.py +0 -0
  52. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/molecule_scene.py +0 -0
  53. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/move_group_dialog.py +0 -0
  54. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/periodic_table_dialog.py +0 -0
  55. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/planarize_dialog.py +0 -0
  56. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/plugin_interface.py +0 -0
  57. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/plugin_manager.py +0 -0
  58. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/plugin_manager_window.py +0 -0
  59. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/settings_dialog.py +0 -0
  60. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/template_preview_item.py +0 -0
  61. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/template_preview_view.py +0 -0
  62. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/translation_dialog.py +0 -0
  63. {moleditpy-2.4.2 → moleditpy-2.4.3}/src/moleditpy/modules/user_template_dialog.py +0 -0
  64. {moleditpy-2.4.2 → moleditpy-2.4.3}/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.4.2
3
+ Version: 2.4.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
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
  [project]
6
6
  name = "MoleditPy"
7
7
 
8
- version = "2.4.2"
8
+ version = "2.4.3"
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.4.2
3
+ Version: 2.4.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
@@ -16,7 +16,7 @@ from PyQt6.QtGui import QFont, QColor
16
16
  from rdkit import Chem
17
17
 
18
18
  #Version
19
- VERSION = '2.4.2'
19
+ VERSION = '2.4.3'
20
20
 
21
21
  ATOM_RADIUS = 18
22
22
  BOND_OFFSET = 3.5
@@ -47,7 +47,7 @@ from PyQt6.QtCore import (
47
47
  )
48
48
 
49
49
  class Rotate2DDialog(QDialog):
50
- def __init__(self, parent=None):
50
+ def __init__(self, parent=None, initial_angle=0):
51
51
  super().__init__(parent)
52
52
  self.setWindowTitle("Rotate 2D")
53
53
  self.setFixedWidth(300)
@@ -59,14 +59,14 @@ class Rotate2DDialog(QDialog):
59
59
  input_layout.addWidget(QLabel("Angle (degrees):"))
60
60
  self.angle_spin = QSpinBox()
61
61
  self.angle_spin.setRange(-360, 360)
62
- self.angle_spin.setValue(45)
62
+ self.angle_spin.setValue(initial_angle)
63
63
  input_layout.addWidget(self.angle_spin)
64
64
  layout.addLayout(input_layout)
65
65
 
66
66
  # Slider
67
67
  self.slider = QSlider(Qt.Orientation.Horizontal)
68
68
  self.slider.setRange(-180, 180)
69
- self.slider.setValue(45)
69
+ self.slider.setValue(initial_angle)
70
70
  self.slider.setTickPosition(QSlider.TickPosition.TicksBelow)
71
71
  self.slider.setTickInterval(15)
72
72
  layout.addWidget(self.slider)
@@ -612,21 +612,29 @@ class MainWindowEditActions(object):
612
612
 
613
613
  def open_rotate_2d_dialog(self):
614
614
  """2D回転ダイアログを開く"""
615
- dialog = Rotate2DDialog(self)
615
+ # Initialize last_rotation_angle if not present
616
+ if not hasattr(self, 'last_rotation_angle'):
617
+ self.last_rotation_angle = 0
618
+
619
+ dialog = Rotate2DDialog(self, initial_angle=self.last_rotation_angle)
616
620
  if dialog.exec() == QDialog.DialogCode.Accepted:
617
621
  angle = dialog.get_angle()
622
+ self.last_rotation_angle = angle # Remember for next time
618
623
  self.rotate_molecule_2d(angle)
619
624
 
620
625
  def rotate_molecule_2d(self, angle_degrees):
621
- """2D分子を指定角度回転させる(選択範囲があればそれのみ)"""
626
+ """2D分子を指定角度回転させる(選択範囲があればそれのみ、なければ全体)"""
622
627
  try:
623
628
  # Determine target atoms
624
629
  selected_items = self.scene.selectedItems()
625
630
  target_atoms = [item for item in selected_items if isinstance(item, AtomItem)]
626
631
 
627
- # If no selection, do not rotate
632
+ # If no selection, rotate everything
633
+ if not target_atoms:
634
+ target_atoms = [data['item'] for data in self.data.atoms.values() if data.get('item') and not sip_isdeleted_safe(data['item'])]
635
+
628
636
  if not target_atoms:
629
- self.statusBar().showMessage("No atoms selected to rotate.")
637
+ self.statusBar().showMessage("No atoms to rotate.")
630
638
  return
631
639
 
632
640
  # Calculate Center
@@ -992,6 +992,7 @@ class MainWindowMainInit(object):
992
992
  edit_menu.addSeparator()
993
993
 
994
994
  rotate_2d_action = QAction("Rotate 2D...", self)
995
+ rotate_2d_action.setShortcut(QKeySequence("Ctrl+R"))
995
996
  rotate_2d_action.triggered.connect(self.open_rotate_2d_dialog)
996
997
  edit_menu.addAction(rotate_2d_action)
997
998
 
@@ -1054,7 +1055,7 @@ class MainWindowMainInit(object):
1054
1055
 
1055
1056
  reset_3d_view_action = QAction("Reset 3D View", self)
1056
1057
  reset_3d_view_action.triggered.connect(lambda: self.plotter.reset_camera() if hasattr(self, 'plotter') else None)
1057
- reset_3d_view_action.setShortcut(QKeySequence("Ctrl+R"))
1058
+ reset_3d_view_action.setShortcut(QKeySequence("Ctrl+Shift+R"))
1058
1059
  view_menu.addAction(reset_3d_view_action)
1059
1060
 
1060
1061
  view_menu.addSeparator()
File without changes
File without changes
File without changes