Source code for grm.interaction
"""
This module provides functions to combine gui and graphs.
"""
from ctypes import c_int, c_void_p
from ctypes import byref, POINTER
from typing import Tuple
from gr import _require_runtime_version, _RUNTIME_VERSION
from . import _grm, args
_c_int_p = POINTER(c_int)
[docs]@_require_runtime_version(0, 47, 0)
def input(args_container: args._ArgumentContainer) -> int:
"""
Perform specific actions based on user interaction with the gui.
All coordinates are integers and workstation coordinates
It supports the following operation modes with the arguments needed:
reset_ranges:
* ``x`` mouse cursor x
* ``y`` mouse cursor y
* ``key`` the pressed key, f.e. 'r' for the right button
zoom:
* ``x`` start point x
* ``y`` start point y
* one of:
- ``angle_delta``: mouse wheel rotation angle in eights of a degree
- ``factor``: zoom factor
box zoom (Zooms the subplot to the selection made):
* ``x1``: fixed corner x
* ``y1``: fixed corner y
* ``x2``: other corner x
* ``y2``: other corner y
* ``keep_aspect_ratio``: if 1, the aspect ratio of the window is preserved
pan:
* ``x``: start point x
* ``y``: start point y
* ``xshift``: shift in x direction
* ``yshift``: shift in y direction
:param args_container: The container with one of the data sets described above set.
:raises TypeError: if args_container is not a valid :class:`grm.args._ArgumentContainer`
"""
if not isinstance(args_container, args._ArgumentContainer):
raise TypeError("args_container must be an ArgumentContainer!")
return _grm.grm_input(args_container.ptr)
[docs]@_require_runtime_version(0, 47, 0)
def get_box(x1: int, y1: int, x2: int, y2: int, keep_aspect_ratio: bool) -> Tuple[int, int, int, int]:
"""
Translate a x1, y1, x2, y2 in workstation coordinates into a box.
:raises TypeError: if the arguments have invalid types.
:raises ValueError: if the c call failed.
"""
if not isinstance(x1, int) or not isinstance(y1, int) or not isinstance(x2, int) or not isinstance(y2, int):
raise TypeError("x1, x2, y1 and y2 is not an int")
if not isinstance(keep_aspect_ratio, bool):
raise TypeError("keep_aspect_ratio must be a bool")
x = c_int()
y = c_int()
w = c_int()
h = c_int()
retval = _grm.grm_get_box(
c_int(x1),
c_int(y1),
c_int(x2),
c_int(y2),
c_int(1 if keep_aspect_ratio else 0),
byref(x),
byref(y),
byref(w),
byref(h),
)
if retval == 0:
raise ValueError("Was not able to execute grm_get_box!")
return (x.value, y.value, w.value, h.value)
if _RUNTIME_VERSION >= (0, 47, 0, 0):
_grm.grm_input.argtypes = [c_void_p]
_grm.grm_input.restype = c_int
_grm.grm_get_box.argtypes = [c_int, c_int, c_int, c_int, c_int, _c_int_p, _c_int_p, _c_int_p, _c_int_p]
_grm.grm_get_box.restype = c_int
__all__ = ["input", "get_box"]