MoleditPy-linux 2.2.3__tar.gz → 2.2.4__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 (63) hide show
  1. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/PKG-INFO +1 -1
  2. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/pyproject.toml +1 -1
  3. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/MoleditPy_linux.egg-info/PKG-INFO +1 -1
  4. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/constants.py +1 -1
  5. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_main_init.py +31 -8
  6. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/LICENSE +0 -0
  7. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/README.md +0 -0
  8. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/setup.cfg +0 -0
  9. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/MoleditPy_linux.egg-info/SOURCES.txt +0 -0
  10. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/MoleditPy_linux.egg-info/dependency_links.txt +0 -0
  11. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/MoleditPy_linux.egg-info/entry_points.txt +0 -0
  12. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/MoleditPy_linux.egg-info/requires.txt +0 -0
  13. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/MoleditPy_linux.egg-info/top_level.txt +0 -0
  14. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/__init__.py +0 -0
  15. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/__main__.py +0 -0
  16. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/main.py +0 -0
  17. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/__init__.py +0 -0
  18. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/about_dialog.py +0 -0
  19. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/align_plane_dialog.py +0 -0
  20. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/alignment_dialog.py +0 -0
  21. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/analysis_window.py +0 -0
  22. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/angle_dialog.py +0 -0
  23. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/assets/icon.icns +0 -0
  24. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/assets/icon.ico +0 -0
  25. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/assets/icon.png +0 -0
  26. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/atom_item.py +0 -0
  27. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/bond_item.py +0 -0
  28. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/bond_length_dialog.py +0 -0
  29. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/calculation_worker.py +0 -0
  30. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/color_settings_dialog.py +0 -0
  31. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/constrained_optimization_dialog.py +0 -0
  32. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/custom_interactor_style.py +0 -0
  33. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/custom_qt_interactor.py +0 -0
  34. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/dialog3_d_picking_mixin.py +0 -0
  35. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/dihedral_dialog.py +0 -0
  36. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window.py +0 -0
  37. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_app_state.py +0 -0
  38. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_compute.py +0 -0
  39. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_dialog_manager.py +0 -0
  40. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_edit_3d.py +0 -0
  41. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_edit_actions.py +0 -0
  42. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_export.py +0 -0
  43. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_molecular_parsers.py +0 -0
  44. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_project_io.py +0 -0
  45. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_string_importers.py +0 -0
  46. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_ui_manager.py +0 -0
  47. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_view_3d.py +0 -0
  48. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/main_window_view_loaders.py +0 -0
  49. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/mirror_dialog.py +0 -0
  50. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/molecular_data.py +0 -0
  51. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/molecule_scene.py +0 -0
  52. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/move_group_dialog.py +0 -0
  53. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/periodic_table_dialog.py +0 -0
  54. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/planarize_dialog.py +0 -0
  55. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/plugin_interface.py +0 -0
  56. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/plugin_manager.py +0 -0
  57. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/plugin_manager_window.py +0 -0
  58. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/settings_dialog.py +0 -0
  59. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/template_preview_item.py +0 -0
  60. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/template_preview_view.py +0 -0
  61. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/translation_dialog.py +0 -0
  62. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/user_template_dialog.py +0 -0
  63. {moleditpy_linux-2.2.3 → moleditpy_linux-2.2.4}/src/moleditpy_linux/modules/zoomable_view.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy-linux
3
- Version: 2.2.3
3
+ Version: 2.2.4
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-linux"
7
7
 
8
- version = "2.2.3"
8
+ version = "2.2.4"
9
9
 
10
10
  license = {file = "LICENSE"}
11
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MoleditPy-linux
3
- Version: 2.2.3
3
+ Version: 2.2.4
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.2.3'
19
+ VERSION = '2.2.4'
20
20
 
21
21
  ATOM_RADIUS = 18
22
22
  BOND_OFFSET = 3.5
@@ -1934,29 +1934,52 @@ class MainWindowMainInit(object):
1934
1934
  a.setData(PLUGIN_ACTION_TAG)
1935
1935
  menu.addAction(a)
1936
1936
 
1937
+ # 5. Integrate File Openers into Import Menu
1937
1938
  # 5. Integrate File Openers into Import Menu
1938
1939
  if hasattr(self, 'import_menu') and self.plugin_manager.file_openers:
1939
1940
  # Add separator
1940
1941
  sep = self.import_menu.addSeparator()
1941
1942
  sep.setData(PLUGIN_ACTION_TAG)
1942
1943
 
1944
+ # Group by Plugin Name
1945
+ plugin_map = {}
1943
1946
  for ext, info in self.plugin_manager.file_openers.items():
1944
- label = f"Import {ext} ({info.get('plugin', 'Plugin')})..."
1947
+ p_name = info.get('plugin', 'Plugin')
1948
+ if p_name not in plugin_map:
1949
+ plugin_map[p_name] = {}
1950
+ plugin_map[p_name][ext] = info['callback']
1951
+
1952
+ for p_name, ext_map in plugin_map.items():
1953
+ # Create combined label: "Import .ext1/.ext2 (PluginName)..."
1954
+ extensions = sorted(ext_map.keys())
1955
+ ext_str = "/".join(extensions)
1956
+ label = f"Import {ext_str} ({p_name})..."
1957
+
1958
+ # Create combined filter: "PluginName Files (*.ext1 *.ext2)"
1959
+ filter_exts = " ".join([f"*{e}" for e in extensions])
1960
+ filter_str = f"{p_name} Files ({filter_exts});;All Files (*)"
1945
1961
 
1946
- def make_cb(callback):
1962
+ # Factory for callback to fix closure capture
1963
+ def make_unified_cb(extensions_map, dialog_filter, plugin_nm):
1947
1964
  def _cb():
1948
1965
  fpath, _ = QFileDialog.getOpenFileName(
1949
- self, f"Import {ext}", "",
1950
- f"{info.get('plugin', 'Plugin')} File (*{ext});;All Files (*)"
1966
+ self, f"Import {plugin_nm} Files", "",
1967
+ dialog_filter
1951
1968
  )
1952
1969
  if fpath:
1953
- callback(fpath)
1954
- self.current_file_path = fpath
1955
- self.update_window_title()
1970
+ _, extension = os.path.splitext(fpath)
1971
+ extension = extension.lower()
1972
+ # Dispatch to specific callback
1973
+ if extension in extensions_map:
1974
+ extensions_map[extension](fpath)
1975
+ self.current_file_path = fpath
1976
+ self.update_window_title()
1977
+ else:
1978
+ self.statusBar().showMessage(f"No handler for extension {extension}")
1956
1979
  return _cb
1957
1980
 
1958
1981
  a = QAction(label, self)
1959
- a.triggered.connect(make_cb(info['callback']))
1982
+ a.triggered.connect(make_unified_cb(ext_map, filter_str, p_name))
1960
1983
  a.setData(PLUGIN_ACTION_TAG)
1961
1984
  self.import_menu.addAction(a)
1962
1985
 
File without changes