From b6770a7e11bbbb4e82d34c48cb8fdbdae273daf8 Mon Sep 17 00:00:00 2001 From: uermel Date: Mon, 21 Oct 2024 16:52:23 -0700 Subject: [PATCH 1/3] fix copick shortcuts breaking ChimeraX toolbar. --- src/cmd/core.py | 30 +++++++++++++++++++++++++++++- src/shortcuts/shortcuts.py | 22 +++++++++++++++++++--- src/tool.py | 4 ++-- src/ui/QCoPickTreeModel.py | 9 --------- 4 files changed, 50 insertions(+), 15 deletions(-) diff --git a/src/cmd/core.py b/src/cmd/core.py index a1212f4..37a754c 100644 --- a/src/cmd/core.py +++ b/src/cmd/core.py @@ -28,9 +28,28 @@ def copick_start(session, config_file: str): copick.from_config_file(config_file) +def cks(session, shortcut=None): + """ + Enable copick keyboard shortcuts. Keys typed in the graphics window will be interpreted as shortcuts. + + Parameters + ---------- + shortcut : string + Keyboard shortcut to execute. If no shortcut is specified switch to shortcut input mode. + """ + + from ..shortcuts.shortcuts import copick_keyboard_shortcuts + + ks = copick_keyboard_shortcuts(session) + if shortcut is None: + ks.enable_shortcuts() + else: + ks.try_shortcut(shortcut) + + def register_copick(logger): """Register all commands with ChimeraX, and specify expected arguments.""" - from chimerax.core.commands import CmdDesc, FileNameArg, register + from chimerax.core.commands import CmdDesc, FileNameArg, StringArg, register def register_copick_start(): desc = CmdDesc( @@ -40,4 +59,13 @@ def register_copick_start(): ) register("copick start", desc, copick_start) + def register_copick_keyboard_shortcuts(): + desc = CmdDesc( + optional=[("shortcut", StringArg)], + synopsis="Start using Copick keyboard shortcuts.", + # url='help:user/commands/copick_start.html' + ) + register("cks", desc, cks) + register_copick_start() + register_copick_keyboard_shortcuts() diff --git a/src/shortcuts/shortcuts.py b/src/shortcuts/shortcuts.py index 6b205e5..e972e7b 100644 --- a/src/shortcuts/shortcuts.py +++ b/src/shortcuts/shortcuts.py @@ -6,7 +6,11 @@ from chimerax.artiax.particle.ParticleList import delete_selected_particles from chimerax.core.session import Session from chimerax.log.tool import Log -from chimerax.shortcuts.shortcuts import Shortcut, keyboard_shortcuts, list_keyboard_shortcuts +from chimerax.shortcuts.shortcuts import ( + Keyboard_Shortcuts, + Shortcut, + shortcut_descriptions, +) from ..misc.volops import switch_to_ortho, switch_to_slab @@ -75,8 +79,15 @@ def copick_shortcuts() -> Tuple[List[Tuple[Any, ...]], Tuple[Any, ...]]: return csc, catcols +def copick_keyboard_shortcuts(session: Session) -> Keyboard_Shortcuts: + ks = getattr(session, "copick_shortcuts", None) + if ks is None: + session.copick_shortcuts = ks = Keyboard_Shortcuts(session) + return ks + + def register_shortcuts(session: Session): - ksc = keyboard_shortcuts(session) + ksc = copick_keyboard_shortcuts(session) ksc.shortcuts.clear() scs, catcols = copick_shortcuts() @@ -145,6 +156,11 @@ def toggle_info_label(session: Session): session.copick.show_info = not session.copick.show_info +def list_copick_shortcuts(session: Session): + t = shortcut_descriptions(session.copick_shortcuts, html=True) + session.logger.info(t, is_html=True) + + def show_help(session: Session): - list_keyboard_shortcuts(session) + list_copick_shortcuts(session) session.tools.find_by_class(Log)[0].tool_window.shown = True diff --git a/src/tool.py b/src/tool.py index 7b4dc76..e53e2b3 100644 --- a/src/tool.py +++ b/src/tool.py @@ -48,7 +48,7 @@ class CopickTool(ToolInstance): # Does this instance persist when session closes SESSION_ENDURING = False # We do save/restore in sessions - SESSION_SAVE = True + SESSION_SAVE = False # Let ChimeraX know about our help page def __init__(self, session, tool_name): @@ -105,7 +105,7 @@ def __init__(self, session, tool_name): from .shortcuts.shortcuts import register_shortcuts register_shortcuts(self.session) - run(session, "ks") + run(session, "cks") # Stepper self.stepper_list = [] diff --git a/src/ui/QCoPickTreeModel.py b/src/ui/QCoPickTreeModel.py index 56dbcb7..1d0fabc 100644 --- a/src/ui/QCoPickTreeModel.py +++ b/src/ui/QCoPickTreeModel.py @@ -93,12 +93,3 @@ def flags(self, index: QModelIndex) -> Union[Qt.ItemFlag, None]: index.internalPointer() return Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable - - # if item.is_dir: - # return Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable - # - # if item.is_file: - # if item.extension in self._openable_types: - # return Qt.ItemFlag.ItemIsEnabled | Qt.ItemFlag.ItemIsSelectable - # else: - # return Qt.ItemFlag.ItemIsSelectable From 7ec902b513b5298f339fd7613c1ddeaadab65a21 Mon Sep 17 00:00:00 2001 From: uermel Date: Mon, 21 Oct 2024 16:52:48 -0700 Subject: [PATCH 2/3] update toml --- pyproject.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 955e306..ebda1e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,16 +3,16 @@ requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"] [project] name = "ChimeraX-copick" -version = "0.3.6" +version = "0.4.2" dynamic = ["classifiers", "requires-python"] dependencies = [ "ChimeraX-Core>=1.7", - "ChimeraX-ArtiaX>=0.4.9", + "ChimeraX-ArtiaX>=0.5.0", "ChimeraX-OME-Zarr>=0.5.4", "pydantic", "hatchling", "s3fs>=2024.3.1", - "copick[all]>=0.5.2", + "copick[all] @ git+https://github.com/copick/copick.git@8b8473e", ] authors = [ {name = "Utz H. Ermel", email = "utz@ermel.me"}, From 47e744745d42bca74325edf1aa62648c32971f58 Mon Sep 17 00:00:00 2001 From: uermel Date: Wed, 30 Oct 2024 15:41:01 -0700 Subject: [PATCH 3/3] update toml --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ebda1e0..dec51bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"] [project] name = "ChimeraX-copick" -version = "0.4.2" +version = "0.5.0" dynamic = ["classifiers", "requires-python"] dependencies = [ "ChimeraX-Core>=1.7", @@ -12,7 +12,7 @@ dependencies = [ "pydantic", "hatchling", "s3fs>=2024.3.1", - "copick[all] @ git+https://github.com/copick/copick.git@8b8473e", + "copick[all]>=0.6.0", ] authors = [ {name = "Utz H. Ermel", email = "utz@ermel.me"},