2025-03-07 08:03:18 +01:00

54 lines
1.5 KiB
Python

# SPDX-FileCopyrightText: © 2022-2023 Wojciech Trybus <wojtryb@gmail.com>
# SPDX-License-Identifier: GPL-3.0-or-later
"""Required part of api_krita package, so that no dependency is needed."""
from krita import Krita as Api
from typing import Callable, Protocol
from PyQt5.QtWidgets import QWidgetAction
from PyQt5.QtGui import QKeySequence
class KritaWindow(Protocol):
"""Krita window received in createActions() of main extension file."""
def createAction(
self,
name: str,
description: str,
menu: str, /
) -> QWidgetAction: ...
class KritaInstance:
"""Wraps krita API for typing, documentation and PEP8 compatibility."""
def __init__(self) -> None:
self.instance = Api.instance()
def get_action_shortcut(self, action_name: str) -> QKeySequence:
"""Return shortcut of krita action called `action_name`."""
return self.instance.action(action_name).shortcut()
def create_action(
self,
window: KritaWindow,
name: str,
group: str = "",
callback: Callable[[], None] = lambda: None
) -> QWidgetAction:
"""
Create a new action in krita.
Requires providing a krita window received in createActions()
method of the main extension file.
"""
krita_action = window.createAction(name, name, group)
krita_action.setAutoRepeat(False)
krita_action.triggered.connect(callback)
return krita_action
Krita = KritaInstance()