diff --git a/setup.cfg b/setup.cfg index 4e4e5ec..25f8c14 100644 --- a/setup.cfg +++ b/setup.cfg @@ -34,6 +34,7 @@ install_requires = aiida-core aiidalab-widgets-base aiida-chemshell>=0.1.5 + rdkit python_requires = >=3.10 diff --git a/src/aiidalab_chemshell/wizards/structure.py b/src/aiidalab_chemshell/wizards/structure.py index d1b1716..055f1d3 100644 --- a/src/aiidalab_chemshell/wizards/structure.py +++ b/src/aiidalab_chemshell/wizards/structure.py @@ -65,11 +65,18 @@ def __init__(self, model: StructureInputModel, **kwargs): ) ipw.dlink((self.database_widget, "data_object"), (self.model, "structure_file")) - self.tabs.children = [self.file_input_widget, self.database_widget] - for i, title in enumerate(["Upload File", "AiiDA Database"]): + self.smiles_widget = awb.SmilesWidget(title="SMILES") + + self.tabs.children = [ + self.file_input_widget, + self.database_widget, + self.smiles_widget, + ] + for i, title in enumerate(["Upload File", "AiiDA Database", "SMILES String"]): self.tabs.set_title(i, title) self.model.observe(self._on_file_upload, "structure_file") + self.smiles_widget.observe(self._on_smiles_generation, "structure") def render(self): """Render the wizard's contents if not already rendered.""" @@ -116,6 +123,14 @@ def _on_file_upload(self, change=None): self._update_children() return + def _on_smiles_generation(self, change=None): + """When SMILES string is inputted.""" + self.viewer = awb.viewers.StructureDataViewer( + structure=self.smiles_widget.structure + ) + self._update_children() + return + def _get_ase_object_from_file(self, fname: str, content: bytes) -> ase.Atoms | None: suffix = "".join(Path(fname).suffixes) with NamedTemporaryFile(suffix=suffix) as tmpf: