Source code for ooodev.adapter.sheet.named_range_comp

from __future__ import annotations

try:
    # python 3.12+
    from typing import override  # noqa # type: ignore
except ImportError:
    from typing_extensions import override  # noqa # type: ignore

from typing import Any, cast, TYPE_CHECKING
from com.sun.star.sheet import XNamedRange

from ooodev.adapter._helper.builder import builder_helper
from ooodev.adapter.component_prop import ComponentProp
from ooodev.utils.builder.default_builder import DefaultBuilder
from ooodev.adapter.sheet.named_range_partial import NamedRangePartial
from ooodev.adapter.sheet.cell_range_referrer_partial import CellRangeReferrerPartial


if TYPE_CHECKING:
    from com.sun.star.sheet import NamedRange  # service


class _NamedRangeComp(ComponentProp):

    def __init__(self, component: XNamedRange) -> None:
        """
        Constructor

        Args:
            component (XNamedRange): UNO Component that supports ``com.sun.star.sheet.NamedRanges`` service.
        """
        # pylint: disable=no-member
        ComponentProp.__init__(self, component)
        # ContentProviderPartial is init in __new__
        # ContentProviderPartial.__init__(self, component=component, interface=None)

    # region Overrides
    @override
    def _ComponentBase__get_supported_service_names(self) -> tuple[str, ...]:
        """Returns a tuple of supported service names."""
        return ("com.sun.star.sheet.NamedRange",)

    # endregion Overrides

    # region Properties

    @property
    @override
    def component(self) -> NamedRange:
        """NamedRange Component"""
        # pylint: disable=no-member
        return cast("NamedRange", self._ComponentBase__get_component())  # type: ignore

    @property
    def __class__(self):  # type: ignore
        # pretend to be a NamedRangeComp class
        return NamedRangeComp

    @property
    def is_shared_formula(self) -> bool | None:
        """
        Gets/Sets if this defined name represents a shared formula.

        This special property shall not be used externally. It is used by import and export filters for compatibility with spreadsheet documents containing shared formulas. Shared formulas are shared by several cells to save memory and to decrease file size.

        A defined name with this property set will not appear in the user interface of Calc, and its name will not appear in cell formulas. A formula referring to this defined name will show the formula definition contained in the name instead.

        **optional**

        Returns:
            bool: The value or None if not available.
        """
        if hasattr(self.component, "IsSharedFormula"):
            return self.component.IsSharedFormula
        return None

    @is_shared_formula.setter
    def is_shared_formula(self, value: bool) -> None:
        if hasattr(self.component, "IsSharedFormula"):
            self.component.IsSharedFormula = value

    @property
    def token_index(self) -> int | None:
        """
        Gets the index used to refer to this name in token arrays.

        A token describing a defined name shall contain the op-code obtained from the FormulaMapGroupSpecialOffset.NAME offset and this index as data part.

        **optional**

        Returns:
            int: The index or None if not available.
        """
        if hasattr(self.component, "TokenIndex"):
            return self.component.TokenIndex
        return None

    # endregion Properties


[docs]class NamedRangeComp(_NamedRangeComp, NamedRangePartial, CellRangeReferrerPartial): """ Class for managing Sheet Cell Ranges Component. """ # pylint: disable=unused-argument def __new__(cls, component: XNamedRange, *args, **kwargs): new_class = type("NamedRangesComp", (_NamedRangeComp,), {}) builder = get_builder(component) builder_helper.builder_add_comp_defaults(builder) clz = builder.get_class_type( name="ooodev.adapter.sheet.named_range_comp.NamedRangeComp", base_class=new_class, set_mod_name=True, ) builder.init_class_properties(clz) result = super(new_class, new_class).__new__(clz, *args, **kwargs) # type: ignore builder.init_classes(result) _NamedRangeComp.__init__(result, component) return result
[docs] def __init__(self, component: XNamedRange) -> None: """ Constructor Args: component (XNamedRange): UNO Sheet Cell Range Component """ pass
[docs]def get_builder(component: Any) -> DefaultBuilder: # pylint: disable=import-outside-toplevel from ooodev.utils.builder.default_builder import DefaultBuilder builder = DefaultBuilder(component) builder.auto_interface() return builder