47 lines
1.9 KiB
Python
47 lines
1.9 KiB
Python
from typing import TYPE_CHECKING
|
|
|
|
from source.type import DistanceFunc
|
|
|
|
if TYPE_CHECKING:
|
|
from source.gui.widget.abc import BoxWidget
|
|
|
|
|
|
class Value:
|
|
"""
|
|
Une valeur utilisée pour calculer la position des objets.
|
|
Elle utilise une fonction permettant à partir d'un widget, d'obtenir une position dans la fenêtre
|
|
"""
|
|
|
|
def __init__(self, calc: DistanceFunc):
|
|
self.calc = calc # fonction calculant la position depuis la taille d'un widget
|
|
|
|
def __add__(self, other) -> "Value": # opérateur +
|
|
"""
|
|
Créer un nouvel objet Value correspondant à l'addition des deux opérandes
|
|
:param other: l'autre élément utilisé dans la multiplication.
|
|
:return: le nouvel objet Value
|
|
"""
|
|
return self.__class__(lambda widget: self.calc(widget) + other.calc(widget))
|
|
|
|
def __radd__(self, other): # opérateur +, lorsque cet objet est situé à droite de l'opération
|
|
return self.__add__(other)
|
|
|
|
def __sub__(self, other) -> "Value": # opérateur -
|
|
"""
|
|
Créer un nouvel objet Value correspondant à la soustraction des deux opérandes
|
|
:param other: l'autre élément utilisé dans la multiplication.
|
|
:return: le nouvel objet Value
|
|
"""
|
|
return self.__class__(lambda widget: self.calc(widget) - other.calc(widget))
|
|
|
|
def __rsub__(self, other): # opérateur -, lorsque cet objet est situé à droite de l'opération
|
|
# similaire à __sub__, mais c'est cette valeur qui est soustraite à l'autre
|
|
return self.__class__(lambda widget: other.calc(widget) - self.calc(widget))
|
|
|
|
def __call__(self, widget: "BoxWidget") -> int: # lorsque cet objet est appelé comme une fonction
|
|
"""
|
|
Calcul pour le widget en paramètre la valeur associé.
|
|
:param widget: Le widget à utiliser pour les calculs
|
|
:return: la position correspondant à ce widget.
|
|
"""
|
|
return self.calc(widget)
|