from __future__ import annotations
from typing import TYPE_CHECKING
try:
# python 3.12+
from typing import override # noqa # type: ignore
except ImportError:
from typing_extensions import override # noqa # type: ignore
from ooo.dyn.awt.char_set import CharSetEnum
from ooo.dyn.awt.font_descriptor import FontDescriptor
from ooo.dyn.awt.font_family import FontFamilyEnum
from ooo.dyn.awt.font_pitch import FontPitchEnum
from ooo.dyn.awt.font_slant import FontSlant
from ooo.dyn.awt.font_strikeout import FontStrikeoutEnum
from ooo.dyn.awt.font_type import FontTypeEnum
from ooo.dyn.awt.font_underline import FontUnderlineEnum
from ooodev.adapter.struct_base import StructBase
from ooodev.units.angle10 import Angle10
if TYPE_CHECKING:
from ooodev.events.events_t import EventsT
# It seems that it is necessary to assign the struct to a variable, then change the variable and assign it back to the component.
# It is as if LibreOffice creates a new instance of the struct when it is changed.
# Example:
# fd = self.__copy()
# fd.Name = event_args.value
# self.component = fd
[docs]class FontDescriptorStructComp(StructBase[FontDescriptor]):
"""
Font Descriptor Struct
This class raises an event before and after a property is changed if it has been passed an event provider.
The event raised before the property is changed is called ``com_sun_star_awt_FontDescriptor_changing``.
The event raised after the property is changed is called ``com_sun_star_awt_FontDescriptor_changed``.
The event args for before the property is changed is of type ``KeyValCancelArgs``.
The event args for after the property is changed is of type ``KeyValArgs``.
"""
[docs] def __init__(self, component: FontDescriptor, prop_name: str, event_provider: EventsT | None = None) -> None:
"""
Constructor
Args:
component (FontDescriptor): Font Descriptor.
prop_name (str): Property Name. This value is assigned to the ``prop_name`` of ``event_data``.
event_provider (EventsPartial | None): Event Provider.
"""
super().__init__(component=component, prop_name=prop_name, event_provider=event_provider)
# region Overrides
@override
def _get_on_changed_event_name(self) -> str:
return "com_sun_star_awt_FontDescriptor_changed"
@override
def _get_on_changing_event_name(self) -> str:
return "com_sun_star_awt_FontDescriptor_changing"
@override
def _copy(self, src: FontDescriptor | None = None) -> FontDescriptor:
if src is None:
src = self.component
return FontDescriptor(
Name=src.Name,
Height=src.Height,
StyleName=src.StyleName,
Family=src.Family,
CharSet=src.CharSet,
Pitch=src.Pitch,
CharacterWidth=src.CharacterWidth,
Width=src.Width,
Weight=src.Weight,
Slant=src.Slant,
Strikeout=src.Strikeout,
Orientation=src.Orientation,
Underline=src.Underline,
Kerning=src.Kerning,
WordLineMode=src.WordLineMode,
Type=src.Type,
)
# endregion Overrides
# region Properties
@property
def name(self) -> str:
"""
Gets/Sets the exact name of the font.
"""
return self.component.Name
@name.setter
def name(self, value: str) -> None:
old_value = self.component.Name
if old_value != value:
event_args = self._trigger_cancel_event("Name", old_value, value)
_ = self._trigger_done_event(event_args)
@property
def height(self) -> int:
"""
Gets/Sets the height of the font in the measure of the destination.
"""
return self.component.Height
@height.setter
def height(self, value: int) -> None:
old_value = self.component.Height
if old_value != value:
event_args = self._trigger_cancel_event("Height", old_value, value)
_ = self._trigger_done_event(event_args)
@property
def width(self) -> int:
"""
Gets/Sets the width of the font in the measure of the destination.
"""
return self.component.Width
@width.setter
def width(self, value: int) -> None:
old_value = self.component.Width
if old_value != value:
event_args = self._trigger_cancel_event("Width", old_value, value)
_ = self._trigger_done_event(event_args)
@property
def style_name(self) -> str:
"""
Gets/Sets the style name of the font.
"""
return self.component.StyleName
@style_name.setter
def style_name(self, value: str) -> None:
old_value = self.component.StyleName
if old_value != value:
event_args = self._trigger_cancel_event("StyleName", old_value, value)
_ = self._trigger_done_event(event_args)
@property
def family(self) -> FontFamilyEnum:
"""
Gets/Sets the general style of the font.
When setting the value, the value can be an integer or a ``FontFamilyEnum`` object.
Hint:
- ``FontFamilyEnum`` can be imported from ``oo.dyn.awt.font_family``.
"""
return FontFamilyEnum(self.component.Family)
@family.setter
def family(self, value: int | FontFamilyEnum) -> None:
old_value = FontFamilyEnum(self.component.Family)
new_value = FontFamilyEnum(value)
if old_value.value != new_value.value:
event_args = self._trigger_cancel_event("Family", old_value.value, new_value.value)
_ = self._trigger_done_event(event_args)
@property
def char_set(self) -> CharSetEnum:
"""
Gets/Sets the character set which is supported by the font.
When setting the value, the value can be an integer or a ``CharSetEnum`` object.
Hint:
- ``CharSetEnum`` can be imported from ``ooo.dyn.awt.char_set``.
"""
return CharSetEnum(self.component.CharSet)
@char_set.setter
def char_set(self, value: int | CharSetEnum) -> None:
old_value = CharSetEnum(self.component.CharSet)
new_value = CharSetEnum(value)
if old_value.value != new_value.value:
event_args = self._trigger_cancel_event("CharSet", old_value.value, new_value.value)
_ = self._trigger_done_event(event_args)
@property
def pitch(self) -> FontPitchEnum:
"""
Gets/Sets the pitch of the font.
When setting the value, the value can be an integer or a ``FontPitchEnum`` object.
Hint:
- ``FontPitchEnum`` can be imported from ``ooo.dyn.awt.font_pitch``.
"""
return FontPitchEnum(self.component.Pitch)
@pitch.setter
def pitch(self, value: int | FontPitchEnum) -> None:
old_value = FontPitchEnum(self.component.Pitch)
new_value = FontPitchEnum(value)
if old_value.value != new_value.value:
event_args = self._trigger_cancel_event("Pitch", old_value.value, new_value.value)
_ = self._trigger_done_event(event_args)
@property
def character_width(self) -> float:
"""
Gets/Sets the character width.
Depending on the specified width, a font that supports this width may be selected.
The value is expressed as a percentage.
"""
return self.component.CharacterWidth
@character_width.setter
def character_width(self, value: float) -> None:
old_value = self.component.CharacterWidth
if old_value != value:
event_args = self._trigger_cancel_event("CharacterWidth", old_value, value)
_ = self._trigger_done_event(event_args)
@property
def weight(self) -> float:
"""
Gets/Sets the thickness of the line.
Depending on the specified weight, a font that supports this thickness may be selected.
The value is expressed as a percentage. ``150.0`` usually means bold.
"""
return self.component.Weight
@weight.setter
def weight(self, value: float) -> None:
old_value = self.component.Weight
if old_value != value:
event_args = self._trigger_cancel_event("Weight", old_value, value)
_ = self._trigger_done_event(event_args)
@property
def slant(self) -> FontSlant:
"""
Gets/Sets the slant of the font.
Hint:
- ``FontSlant`` is a ``ooo.dyn.awt.font_slant``.
"""
return self.component.Slant
@slant.setter
def slant(self, value: FontSlant) -> None:
old_value = self.component.Slant
if old_value.value != value.value:
event_args = self._trigger_cancel_event("Slant", old_value, value)
_ = self._trigger_done_event(event_args)
@property
def underline(self) -> FontUnderlineEnum:
"""
Gets/Sets the kind of underlining.
When setting the value, the value can be an integer or a ``FontUnderlineEnum`` object.
Hint:
``FontUnderlineEnum`` can be imported from ``ooo.dyn.awt.font_underline``.
"""
return FontUnderlineEnum(self.component.Underline)
@underline.setter
def underline(self, value: int | FontUnderlineEnum) -> None:
old_value = FontUnderlineEnum(self.component.Underline)
new_value = FontUnderlineEnum(value)
if old_value.value != new_value.value:
event_args = self._trigger_cancel_event("Underline", old_value.value, new_value.value)
_ = self._trigger_done_event(event_args)
@property
def strikeout(self) -> FontStrikeoutEnum:
"""
Gets/Sets the kind of strikeout.
When setting the value, the value can be an integer or a ``FontStrikeoutEnum`` object.
Hint:
- ``FontStrikeoutEnum`` can be imported from ``ooo.dyn.awt.font_strikeout``.
"""
return FontStrikeoutEnum(self.component.Strikeout)
@strikeout.setter
def strikeout(self, value: int | FontStrikeoutEnum) -> None:
old_value = FontStrikeoutEnum(self.component.Strikeout)
new_value = FontStrikeoutEnum(value)
if old_value.value != new_value.value:
event_args = self._trigger_cancel_event("Strikeout", old_value.value, new_value.value)
_ = self._trigger_done_event(event_args)
@property
def orientation(self) -> Angle10:
"""
Gets/Sets the rotation of the font.
The unit of measure is ``1/10 degrees``; ``0`` is the baseline.
When setting the value, the value can be an float in ``1/10 degrees`` or an ``Angle10`` object.
Returns:
Angle10: Rotation of the font.
"""
return Angle10(round(self.component.Orientation * 10))
@orientation.setter
def orientation(self, value: float | Angle10) -> None:
old_value = self.component.Orientation
if isinstance(value, Angle10):
new_value = 0 if value.value == 0 else value.value / 10
else:
new_value = 0 if value == 0 else value / 10
if old_value != value:
event_args = self._trigger_cancel_event("Orientation", old_value, new_value)
_ = self._trigger_done_event(event_args)
@property
def kerning(self) -> bool:
"""
For requesting, it specifies if there is a kerning table available.
For selecting, it specifies if the kerning table is to be used.
"""
return self.component.Kerning
@kerning.setter
def kerning(self, value: bool) -> None:
old_value = self.component.Kerning
if old_value != value:
event_args = self._trigger_cancel_event("Kerning", old_value, value)
_ = self._trigger_done_event(event_args)
@property
def word_line_mode(self) -> bool:
"""
Gets/Sets if only words get underlined.
``True`` means that only non-space characters get underlined, ``False`` means that the spacing also gets underlined.
This property is only valid if the property ``com.sun.star.awt.FontDescriptor.Underline`` is not ``FontUnderline.NONE``.
"""
return self.component.WordLineMode
@word_line_mode.setter
def word_line_mode(self, value: bool) -> None:
old_value = self.component.WordLineMode
if old_value != value:
event_args = self._trigger_cancel_event("WordLineMode", old_value, value)
_ = self._trigger_done_event(event_args)
@property
def type(self) -> FontTypeEnum:
"""
Gets/Sets the technology of the font representation. Flags Enum.
One or more values out of the constant group ``com.sun.star.awt.FontType`` can be combined by an arithmetical or-operation.
When setting the value, the value can be an integer or a ``FontTypeEnum`` object.
Hint:
- ``FontTypeEnum`` can be imported from ``ooo.dyn.awt.font_type``.
"""
return FontTypeEnum(self.component.Type)
@type.setter
def type(self, value: int | FontTypeEnum) -> None:
old_value = FontTypeEnum(self.component.Type)
new_value = FontTypeEnum(value)
if old_value.value != new_value.value:
event_args = self._trigger_cancel_event("Type", old_value.value, new_value.value)
_ = self._trigger_done_event(event_args)
# endregion Properties