diff options
-rw-r--r-- | wizards/Package_scriptforge.mk | 1 | ||||
-rw-r--r-- | wizards/source/scriptforge/python/scriptforge.py | 104 | ||||
-rw-r--r-- | wizards/source/scriptforge/python/scriptforge.pyi | 7232 |
3 files changed, 7317 insertions, 20 deletions
diff --git a/wizards/Package_scriptforge.mk b/wizards/Package_scriptforge.mk index 4cd78e1f4982..96b5a907a321 100644 --- a/wizards/Package_scriptforge.mk +++ b/wizards/Package_scriptforge.mk @@ -57,5 +57,6 @@ $(eval $(call gb_Package_add_files,wizards_basicsrvscriptforge,$(LIBO_SHARE_FOLD $(eval $(call gb_Package_add_files,wizards_basicsrvscriptforge,$(LIBO_LIB_PYUNO_FOLDER),\ python/scriptforge.py \ + python/scriptforge.pyi \ )) # vim: set noet sw=4 ts=4: diff --git a/wizards/source/scriptforge/python/scriptforge.py b/wizards/source/scriptforge/python/scriptforge.py index de590875c961..e339ada06d63 100644 --- a/wizards/source/scriptforge/python/scriptforge.py +++ b/wizards/source/scriptforge/python/scriptforge.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright 2020-2024 Jean-Pierre LEDURE, Rafael LIMA, Alain ROMEDENNE +# Copyright 2020-2024 Jean-Pierre LEDURE, Rafael LIMA, @AmourSpirit, Alain ROMEDENNE # ===================================================================================================================== # === The ScriptForge library and its associated libraries are part of the LibreOffice project. === @@ -38,6 +38,11 @@ - implements a protocol between those interfaces and, when appropriate, the corresponding ScriptForge Basic libraries implementing the requested services. + The scriptforge.pyi module + - provides the static type checking of all the visible interfaces of the ScriptForge API. + - when the user uses an IDE like PyCharm or VSCode, (s)he might benefit from the typing + hints provided by them thanks to the twin scriptforhe.pyi module. + Usage: When Python and LibreOffice run in the same process (usual case): @@ -45,10 +50,13 @@ When Python and LibreOffice are started in separate processes, LibreOffice being started from console ... (example for Linux with port = 2023) - ./soffice --accept='socket,host=localhost,port=2023;urp;' + ./soffice --accept='socket,host=localhost,port=2024;urp;' then use next statements: from scriptforge import CreateScriptService, ScriptForge - ScriptForge(hostname = 'localhost', port = 2023) + ScriptForge(hostname = 'localhost', port = 2024) + + When the user uses an IDE like PyCharm or VSCode, (s)he might benefit from the typing + hints provided by them thanks to the twin scriptforhe.pyi module. Specific documentation about the use of ScriptForge from Python scripts: https://help.libreoffice.org/latest/en-US/text/sbasic/shared/03/sf_intro.html?DbPAR=BASIC @@ -59,6 +67,7 @@ import uno import datetime import time import os +from typing import TypeVar class _Singleton(type): @@ -446,10 +455,10 @@ class ScriptForge(object, metaclass = _Singleton): class SFServices(object): """ - Generic implementation of a parent Service class - Every service must subclass this class to be recognized as a valid service + Generic implementation of a parent Service class. + Every service must subclass this class to be recognized as a valid service. A service instance is created by the CreateScriptService method - It can have a mirror in the Basic world or be totally defined in Python + It can have a mirror in the Basic world or be totally defined in Python. Every subclass must initialize 3 class properties: servicename (e.g. 'ScriptForge.FileSystem', 'ScriptForge.Basic') @@ -659,7 +668,6 @@ class SFServices(object): # SFScriptForge CLASS (alias of ScriptForge Basic library) ### # ##################################################################################################################### class SFScriptForge: - pass # ######################################################################### # SF_Array CLASS @@ -1227,12 +1235,12 @@ class SFScriptForge: def MoveFile(self, source, destination): return self.ExecMethod(self.vbMethod, 'MoveFile', source, destination) - def Normalize(self, filename): - return self.ExecMethod(self.vbMethod, 'Normalize', filename) - def MoveFolder(self, source, destination): return self.ExecMethod(self.vbMethod, 'MoveFolder', source, destination) + def Normalize(self, filename): + return self.ExecMethod(self.vbMethod, 'Normalize', filename) + def OpenTextFile(self, filename, iomode = 1, create = False, encoding = 'UTF-8'): return self.ExecMethod(self.vbMethod, 'OpenTextFile', filename, iomode, create, encoding) @@ -1529,12 +1537,12 @@ class SFScriptForge: def SetPDFExportOptions(self, pdfoptions): return self.ExecMethod(self.vbMethod + self.flgDictArg, 'SetPDFExportOptions', pdfoptions) - def UnoObjectType(self, unoobject): - return self.ExecMethod(self.vbMethod, 'UnoObjectType', unoobject) - def UnoMethods(self, unoobject): return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'UnoMethods', unoobject) + def UnoObjectType(self, unoobject): + return self.ExecMethod(self.vbMethod, 'UnoObjectType', unoobject) + def UnoProperties(self, unoobject): return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'UnoProperties', unoobject) @@ -2391,11 +2399,11 @@ class SFDocuments: def OpenFormDocument(self, formdocument, designmode = False): return self.ExecMethod(self.vbMethod, 'OpenFormDocument', formdocument, designmode) - def OpenQuery(self, queryname): - return self.ExecMethod(self.vbMethod, 'OpenQuery', queryname) + def OpenQuery(self, queryname, designmode = False): + return self.ExecMethod(self.vbMethod, 'OpenQuery', queryname, designmode) - def OpenTable(self, tablename): - return self.ExecMethod(self.vbMethod, 'OpenTable', tablename) + def OpenTable(self, tablename, designmode = False): + return self.ExecMethod(self.vbMethod, 'OpenTable', tablename, designmode) def PrintOut(self, formdocument, pages = '', copies = 1): return self.ExecMethod(self.vbMethod, 'PrintOut', formdocument, pages, copies) @@ -2666,12 +2674,12 @@ class SFDocuments: XChartObj = False, XDiagram = False, XShape = False, XTableChart = False, XTitle = True, YTitle = True) - def Resize(self, xpos = -1, ypos = -1, width = -1, height = -1): - return self.ExecMethod(self.vbMethod, 'Resize', xpos, ypos, width, height) - def ExportToFile(self, filename, imagetype = 'png', overwrite = False): return self.ExecMethod(self.vbMethod, 'ExportToFile', filename, imagetype, overwrite) + def Resize(self, xpos = -1, ypos = -1, width = -1, height = -1): + return self.ExecMethod(self.vbMethod, 'Resize', xpos, ypos, width, height) + # ######################################################################### # SF_Form CLASS # ######################################################################### @@ -3032,6 +3040,62 @@ def CreateScriptService(service, *args, **kwargs): createScriptService, createscriptservice = CreateScriptService, CreateScriptService + +# ############################################################################### +# FOR TYPING HINTS, NEXT VARIABLE TYPES MAY BE IMPORTED IN USER SCRIPTS +# EXAMPLE: +# from scriptforge import CALC, RANGE +# def userfct(c: CALC, r: RANGE) -> RANGE: +# r1: RANGE = "A1:K10" +# ############################################################################### +# List the available service types +# SFScriptForge +ARRAY = SFScriptForge.SF_Array +BASIC = SFScriptForge.SF_Basic +DICTIONARY = SFScriptForge.SF_Dictionary +EXCEPTION = SFScriptForge.SF_Exception +FILESYSTEM = SFScriptForge.SF_FileSystem +L10N = SFScriptForge.SF_L10N +PLATFORM = SFScriptForge.SF_Platform +REGION = SFScriptForge.SF_Region +SESSION = SFScriptForge.SF_Session +STRING = SFScriptForge.SF_String +TEXTSTREAM = SFScriptForge.SF_TextStream +TIMER = SFScriptForge.SF_Timer +UI = SFScriptForge.SF_UI +# SFDatabases +DATABASE = SFDatabases.SF_Database +DATASET = SFDatabases.SF_Dataset +DATASHEET = SFDatabases.SF_Datasheet +# SFDialogs +DIALOG = SFDialogs.SF_Dialog +DIALOGCONTROL = SFDialogs.SF_DialogControl +# SFDocuments +DOCUMENT = SFDocuments.SF_Document +BASE = SFDocuments.SF_Base +CALC = SFDocuments.SF_Calc +CALCREFERENCE = SFDocuments.SF_CalcReference +CHART = SFDocuments.SF_Chart +FORM = SFDocuments.SF_Form +FORMCONTROL = SFDocuments.SF_FormControl +FORMDOCUMENT = SFDocuments.SF_FormDocument +WRITER = SFDocuments.SF_Writer +# SFWidgets +MENU = SFWidgets.SF_Menu +POPUPMENU = SFWidgets.SF_PopupMenu +TOOLBAR = SFWidgets.SF_Toolbar +TOOLBARBUTTON = SFWidgets.SF_ToolbarButton +# UNO +UNO = TypeVar('UNO') +# Other +FILE = TypeVar('FILE', str, str) +SHEETNAME = TypeVar('SHEETNAME', str, str) +RANGE = TypeVar('RANGE', str, str) +SCRIPT_URI = TypeVar('SCRIPT_URI', str, str) +SQL_SELECT = TypeVar('SQL_SELECT', str, str) +SQL_ACTION = TypeVar('SQL_ACTION', str, str) + + # ###################################################################### # Lists the scripts, that shall be visible inside the Basic/Python IDE # ###################################################################### diff --git a/wizards/source/scriptforge/python/scriptforge.pyi b/wizards/source/scriptforge/python/scriptforge.pyi new file mode 100644 index 000000000000..dc2569279786 --- /dev/null +++ b/wizards/source/scriptforge/python/scriptforge.pyi @@ -0,0 +1,7232 @@ +# -*- coding: utf-8 -*- + +# Copyright 2020-2024 Jean-Pierre LEDURE, Rafael LIMA, @AmourSpirit, Alain ROMEDENNE + +# ===================================================================================================================== +# === The ScriptForge library and its associated libraries are part of the LibreOffice project. === +# === Full documentation is available on https://help.libreoffice.org/ === +# ===================================================================================================================== + +# ScriptForge is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# ScriptForge is free software; you can redistribute it and/or modify it under the terms of either (at your option): + +# 1) The Mozilla Public License, v. 2.0. If a copy of the MPL was not +# distributed with this file, you can obtain one at http://mozilla.org/MPL/2.0/ . + +# 2) The GNU Lesser General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. If a copy of the LGPL was not +# distributed with this file, see http://www.gnu.org/licenses/ . + +""" + ScriptForge libraries are an extensible and robust collection of macro scripting resources for LibreOffice + to be invoked from user Basic or Python macros. Users familiar with other BASIC macro variants often face hard + times to dig into the extensive LibreOffice Application Programming Interface even for the simplest operations. + By collecting most-demanded document operations in a set of easy to use, easy to read routines, users can now + program document macros with much less hassle and get quicker results. + + The use of the ScriptForge interfaces in user scripts hides the complexity of the usual UNO interfaces. + However, it does not replace them. At the opposite their coexistence is ensured. + Indeed, ScriptForge provides a number of shortcuts to key UNO objects. + + The scriptforge.py module + - describes the interfaces (classes and attributes) to be used in Python user scripts + to run the services implemented in the standard modules shipped with LibreOffice + - implements a protocol between those interfaces and, when appropriate, the corresponding ScriptForge + Basic libraries implementing the requested services. + + The scriptforge.pyi module + - provides the static type checking of all the visible interfaces of the ScriptForge API. + - when the user uses an IDE like PyCharm or VSCode, (s)he might benefit from the typing + hints provided by them thanks to the actual scriptforge.pyi module. + + Specific documentation about the use of ScriptForge from Python scripts: + https://help.libreoffice.org/latest/en-US/text/sbasic/shared/03/sf_intro.html?DbPAR=BASIC + """ +# IMPORTS +from __future__ import annotations +import datetime +import time +from typing import Any, Dict, List, Literal, NewType, Optional, overload, Sequence, Tuple, TypeVar, Union + +# List the available service types +# SFScriptForge +ARRAY = SFScriptForge.SF_Array +BASIC = SFScriptForge.SF_Basic +DICTIONARY = SFScriptForge.SF_Dictionary +EXCEPTION = SFScriptForge.SF_Exception +FILESYSTEM = SFScriptForge.SF_FileSystem +L10N = SFScriptForge.SF_L10N +PLATFORM = SFScriptForge.SF_Platform +REGION = SFScriptForge.SF_Region +SESSION = SFScriptForge.SF_Session +STRING = SFScriptForge.SF_String +TEXTSTREAM = SFScriptForge.SF_TextStream +TIMER = SFScriptForge.SF_Timer +UI = SFScriptForge.SF_UI +# SFDatabases +DATABASE = SFDatabases.SF_Database +DATASET = SFDatabases.SF_Dataset +DATASHEET = SFDatabases.SF_Datasheet +# SFDialogs +DIALOG = SFDialogs.SF_Dialog +DIALOGCONTROL = SFDialogs.SF_DialogControl +# SFDocuments +DOCUMENT = SFDocuments.SF_Document +BASE = SFDocuments.SF_Base +CALC = SFDocuments.SF_Calc +CALCREFERENCE = SFDocuments.SF_CalcReference +CHART = SFDocuments.SF_Chart +FORM = SFDocuments.SF_Form +FORMCONTROL = SFDocuments.SF_FormControl +FORMDOCUMENT = SFDocuments.SF_FormDocument +WRITER = SFDocuments.SF_Writer +# SFWidgets +MENU = SFWidgets.SF_Menu +POPUPMENU = SFWidgets.SF_PopupMenu +TOOLBAR = SFWidgets.SF_Toolbar +TOOLBARBUTTON = SFWidgets.SF_ToolbarButton +# Aggregate +SERVICE = Union[ARRAY, BASIC, DICTIONARY, EXCEPTION, FILESYSTEM, L10N, PLATFORM, REGION, SESSION, STRING, + TEXTSTREAM, TIMER, UI, + DATABASE, DATASET, DATASHEET, + DIALOG, DIALOGCONTROL, + DOCUMENT, BASE, CALC, CALCREFERENCE, CHART, FORM, FORMCONTROL, FORMDOCUMENT, WRITER, + MENU, POPUPMENU, TOOLBAR, TOOLBARBUTTON] +# UNO +UNO = TypeVar('UNO') +# Other +FILE = TypeVar('FILE', str, str) +""" File or folder name expressed in accordance with the ``FileSystem.FileNaming`` notation. """ + +SHEETNAME = TypeVar('SHEETNAME', str, str) +""" A sheet in a Calc document, as a string. It must not contain next characters: "[]*?:\\\/". The apostrophe (') +is forbidden in the first and last positions. The "~" (tilde) character designates the active sheet. """ +RANGE = TypeVar('RANGE', str, str) +""" A set of contiguous cells located in a sheet. + +The sheet name is optional. If no sheet name is provided, then the active sheet is used. +The use of single quotes to enclose the sheet name is required if the name contains blank spaces " " or periods ".". +Otherwise surrounding single quotes and $ signs are allowed but ignored. + +The shortcut "~" (tilde) represents the current selection or the first selected range if multiple ranges are selected. +The shortcut "*" represents all used cells. + +Examples + - ``$'SheetX'.D2``, ``$D$2`` - Single cells + - ``$'SheetX'.D2:F6``, ``D2:D10`` - Single ranges with multiple cells + - ``$'SheetX'.*`` - All used cells in the given sheet + - ``$'SheetX'.A:A``, ``3:5`` - All cells in contiguous columns or rows up to the last used cell + - ``myRange`` - A range named "myRange" at spreadsheet level + - ``~.someRange``, ``SheetX.someRange`` - Range names at sheet level + - ``~.~`` or ``~`` - The current selection in the active sheet +""" +SCRIPT_URI = TypeVar('SCRIPT_URI', str, str) +""" String reference to a Basic or Python macro as described in +``https://wiki.documentfoundation.org/Documentation/DevGuide/Scripting_Framework#Scripting_Framework_URI_Specification`` +""" +SQL_SELECT = TypeVar('SQL_SELECT', str, str) +""" A SQL command containing a SELECT statement, a tablename or a queryname. +In a SELECT statement, table-, qyery- and field names may be surrounded by square brackets. """ +SQL_ACTION = TypeVar('SQL_ACTION', str, str) +""" A SQL command containing an action statement (CREATE TABLE, INSERT, DELETE, ...). +Table- and field names may be surrounded by square brackets. """ +SCALAR = Union[int, float, str, datetime.datetime] +VECTOR = Sequence[SCALAR] +MATRIX = Sequence[VECTOR] + +# Define the used UNO types +try: + # Next code can succeed only when types-unopy is installed + from com.sun.star.awt import XControl + from com.sun.star.awt import XControlModel + from com.sun.star.awt import XTabControllerModel + from com.sun.star.awt import XWindow + from com.sun.star.awt.tree import XMutableTreeDataModel + from com.sun.star.awt.tree import XMutableTreeNode + from com.sun.star.beans import PropertyValue + from com.sun.star.chart import XDiagram + from com.sun.star.document import XEmbeddedScripts + from com.sun.star.drawing import XShape + from com.sun.star.form import ListSourceType + from com.sun.star.form import XForm + from com.sun.star.frame import XDesktop + from com.sun.star.lang import XComponent + from com.sun.star.script import XLibraryContainer + from com.sun.star.script.provider import XScriptProvider + from com.sun.star.sdb import XOfficeDatabaseDocument + from com.sun.star.sdbc import XConnection as UNOXConnection + from com.sun.star.sdbc import XDatabaseMetaData + from com.sun.star.sheet import XSheetCellCursor + from com.sun.star.sheet import XSpreadsheet + from com.sun.star.table import XCellRange + from com.sun.star.table import XTableChart + from com.sun.star.uno import XComponentContext + from com.sun.star.uno import XInterface + from com.sun.star.util import Date as UNODate + from com.sun.star.util import DateTime as UNODateTime + from com.sun.star.util import Time as UNOTime +except ImportError: + # types-unopy is not installed + XControl = NewType('XControl', UNO) + XControlModel = NewType('XControlModel', UNO) + XTabControllerModel = NewType('XTabControllerModel', UNO) + XWindow = NewType('XWindow', UNO) + XMutableTreeDataModel = NewType('XMutableTreeDataModel', UNO) + XMutableTreeNode = NewType('XMutableTreeNode', UNO) + PropertyValue = NewType('PropertyValue', UNO) + XDiagram = NewType('XDiagram', UNO) + XEmbeddedScripts = NewType('XEmbeddedScripts', UNO) + XShape = NewType('XShape', UNO) + ListSourceType = NewType('ListSourceType', UNO) + XForm = NewType('XForm', UNO) + XDesktop = NewType('XDesktop', UNO) + XComponent = NewType('XComponent', UNO) + XLibraryContainer = NewType('XLibraryContainer', UNO) + XScriptProvider = NewType('XScriptProvider', UNO) + XOfficeDatabaseDocument = NewType('XOfficeDatabaseDocument', UNO) + UNOXConnection = NewType('UNOXConnection', UNO) + XDatabaseMetaData = NewType('XDatabaseMetaData', UNO) + XSheetCellCursor = NewType('XSheetCellCursor', UNO) + XSpreadsheet = NewType('XSpreadsheet', UNO) + XCellRange = NewType('XCellRange', UNO) + XTableChart = NewType('XTableChart', UNO) + XComponentContext = NewType('XComponentContext', UNO) + XInterface = NewType('XInterface', UNO) + UNODate = NewType('UNODate', UNO) + UNODateTime = NewType('UNODateTime', UNO) + UNOTime = NewType('UNOTime', UNO) + +# Docstring rules to display readable text both in PyCharm and VS Code +# Indentation and punctuation are required like in the example below. +# def ImportFromCSVFile(self, filename: FILE, delimiter: str = ',', +# dateformat: Literal['YYYY-MM-DD', 'DD-MM-YYYY', 'MM-DD-YYYY'] = ...) -> Tuple[str, ...]: +# """ +# Import the data contained in a comma-separated values (CSV) file. The comma may be replaced +# by any character. +# Difference with the Basic version: dates are returned in their iso format, +# not as any of the datetime objects. +# Args <<<<< No colon (:) +# ``filename``: The name of the text file containing the data. +# The name must be expressed according to the current FileNaming property of the FileSystem +# service. +# <<<<< When multiple arguments, a linefeed is required here +# ``dateformat``: A special mechanism handles dates when ``dateformat`` is not the empty string. +# The dash (-) may be replaced by a dot (.), a slash (/) or a space. Other date formats +# will be ignored. +# Returns <<<<< No colon (:) +# A ``list`` of ``lists``. +# """ +# ... + + +# ##################################################################################################################### +# ScriptForge CLASS ### +# ##################################################################################################################### + +class ScriptForge(object, metaclass = ...): + """ + The ScriptForge class encapsulates the core of the ScriptForge run-time + - Bridge with the LibreOffice process + - Implementation of the interlanguage protocol with the Basic libraries + - Identification of the available services interfaces + - Dispatching of services + - Coexistence with UNO + + The class may be instantiated several times. Only the first instance will be retained ("Singleton"). + """ + + def __init__(self, hostname: str = ..., port: int = ...): + """ + The ScriptForge class encapsulates the core of the ScriptForge run-time + - Bridge with the LibreOffice process + - Implementation of the interlanguage protocol with the Basic libraries + - Identification of the available services interfaces + - Dispatching of services + - Coexistence with UNO + + The class may be instantiated several times. Only the first instance will be retained ("Singleton"). + + Both arguments are mandatory when Python and LibreOffice run in separate processes. + Otherwise, do not call this routine or leave both arguments out. + To execute at most once by LibreOffice session. + Args + ``hostname``: probably 'localhost' + + ``port``: port number + """ + ... + + +# ##################################################################################################################### +# SFServices CLASS (ScriptForge services superclass) ### +# ##################################################################################################################### + +class SFServices(object): + """ + Generic implementation of a parent Service class. + + Every service must subclass this class to be recognized as a valid service. + A service instance is created by the ``CreateScriptService`` method. + + It can have a mirror in the ``Basic`` world or be totally defined in ``Python``. + """ + + def Dispose(self) -> None: + """ Free up the object's resources after usage. """ + ... + + def GetProperty(self, propertyname: str, arg: Any = ...) -> Any: + """ Get the given property from the Basic world """ + ... + + def Properties(self) -> Tuple[str, ...]: + """ Properties list. """ + ... + + +# ##################################################################################################################### +# SFScriptForge CLASS (alias of ScriptForge Basic library) ### +# ##################################################################################################################### +class SFScriptForge: + """ SF_ScriptForge all-purpose services. """ + + # ######################################################################### + # SF_Array CLASS + # ######################################################################### + class SF_Array(SFServices, metaclass = ...): + + def ImportFromCSVFile(self, + filename: FILE, + delimiter: str = ',', + dateformat: Literal['YYYY-MM-DD', 'DD-MM-YYYY', 'MM-DD-YYYY', + 'YYYY/MM/DD', 'DD/MM/YYYY', 'MM/DD/YYYY', + 'YYYY.MM.DD', 'DD.MM.YYYY', 'MM.DD.YYYY', + 'YYYY MM DD', 'DD MM YYYY', 'MM DD YYYY'] = ... + ) -> MATRIX: + """ + Import the data contained in a comma-separated values (CSV) file. The comma may be replaced + by any character. + Difference with the Basic version: dates are returned in their iso format, + not as any of the datetime objects. + Args + ``filename``: The name of the text file containing the data. + The name must be expressed according to the current FileNaming property of the FileSystem + service. + + ``dateformat``: A special mechanism handles dates when ``dateformat`` is not the empty string. + The dash (-) may be replaced by a dot (.), a slash (/) or a space. Other date formats + will be ignored. + Returns + A ``list`` of ``lists``. + """ + ... + + # ######################################################################### + # SF_Basic CLASS + # ######################################################################### + class SF_Basic(SFServices, metaclass = ...): + """ + This service proposes a collection of Basic methods to be executed in a Python context + simulating the exact syntax and behavior of the identical Basic builtin method.\n + Typical example: + ``basic = CreateScriptService('basic')`` + ``basic.MsgBox('This has to be displayed in a message box')`` + """ + + MB_ABORTRETRYIGNORE: Literal[2] + MB_DEFBUTTON1: Literal[128] + MB_DEFBUTTON2: Literal[258] + MB_DEFBUTTON3: Literal[215] + MB_ICONEXCLAMATION: Literal[48] + MB_ICONINFORMATION: Literal[64] + MB_ICONQUESTION: Literal[32] + MB_ICONSTOP: Literal[16] + MB_OK: Literal[0] + MB_OKCANCEL: Literal[1] + MB_RETRYCANCEL: Literal[5] + MB_YESNO: Literal[4] + MB_YESNOCANCEL: Literal[3] + IDABORT: Literal[3] + IDCANCEL: Literal[2] + IDIGNORE: Literal[5] + IDNO: Literal[7] + IDOK: Literal[1] + IDRETRY: Literal[4] + IDYES: Literal[6] + + @classmethod + def CDate(cls, datevalue: Union[int, float, str]) -> Optional[datetime.datetime]: + """ + Converts a numeric expression or a string to a ``datetime.datetime`` Python native object. + Args + ``datevalue``: A numeric expression or a ``string`` representing a date. + Returns + The equivalent ``datetime.datetime``. + """ + ... + + @staticmethod + def CDateFromUnoDateTime(unodate: Union[UNODateTime, UNODate, UNOTime]) -> datetime.datetime: + """ + Converts a ``UNO date/time`` representation to a ``datetime.datetime`` Python native object. + Args + ``unodate``: A ``UNO date`` object, ``com.sun.star.util.DateTime``, ``.Date`` or ``.Time``. + Returns + The equivalent ``datetime.datetime``. + """ + ... + + @staticmethod + def CDateToUnoDateTime(date: Union[float, time.struct_time, datetime.datetime, datetime.date, datetime.time] + ) -> UNODateTime: + """ + Converts a date representation into the ``com.sun.star.util.DateTime`` date format. + Args + ``date``: A ``datetime`` like object. + When ``date`` is a ``float`` it is considered a ``time.time`` value. + Returns + A ``com.sun.star.util.DateTime`` UNO object. + """ + ... + + @classmethod + def ConvertFromUrl(cls, url: str) -> str: + """ + Convert from url. + Args + ``url``: A string representing a file in URL format. + Returns + The same file name in native operating system notation._ + """ + ... + + @classmethod + def ConvertToUrl(cls, systempath: str) -> str: + """ + Convert to url. + Args + ``systempath``: A string representing a file in native operating system notation. + Returns + The same file name in URL format. + """ + ... + + @classmethod + def CreateUnoService(cls, servicename: str) -> UNO: + """ + Instantiates a UNO service + Args + ``servicename``: A string representing the service to create. + Returns + A UNO object + """ + ... + + @classmethod + def CreateUnoStruct(cls, unostructure: str) -> UNO: + """ + Returns an instance of a UNO structure of the specified type. + Args + ``unostructure``: A UNO Struct typename such as ``com.sun.star.awt.Size``. + Returns + A UNO Object + """ + ... + + @classmethod + def DateAdd(cls, + interval: Literal['yyyy', 'q', 'm','y', 'w', 'ww', 'd', 'h', 'n', 's'], + number: int, + date: Union[float, time.struct_time, datetime.datetime, datetime.date, datetime.time] + ) -> datetime.datetime: + """ + Adds a date or time interval to a given date/time a number of times and returns the resulting date. + Args + ``interval``: A string expression specifying the date or time interval. + + ``number``: A numerical expression specifying how often the interval value will be added when + positive or subtracted when negative. + + ``date``: A given ``datetime.datetime`` value, the interval value will be added ``number`` + times to this ``date`` value. + Returns + A ``datetime.datetime`` value. + """ + ... + + @classmethod + def DateDiff(cls, + interval: Literal['yyyy', 'q', 'm','y', 'w', 'ww', 'd', 'h', 'n', 's'], + date1: Union[float, time.struct_time, datetime.datetime, datetime.date, datetime.time], + date2: Union[float, time.struct_time, datetime.datetime, datetime.date, datetime.time], + firstdayofweek: Literal[0, 1, 2, 3, 4, 5, 6, 7] = ..., + firstweekofyear: Literal[0, 1, 2, 3] = ..., + ) -> int: + """ + Gets the number of date or time intervals between two given date/time values. + Args + ``interval``: A string expression specifying the date interval. + + ``date1``: The first ``datetime.datetime`` values to be compared. + + ``firstdayofweek``: An optional parameter that specifies the starting day of a week. + + ``firstweekofyear``: An optional parameter that specifies the starting week of a year. + Returns + A number. + """ + ... + + @classmethod + def DatePart(cls, + interval: Literal['yyyy', 'q', 'm','y', 'w', 'ww', 'd', 'h', 'n', 's'], + date: Union[float, time.struct_time, datetime.datetime, datetime.date, datetime.time], + firstdayofweek: Literal[0, 1, 2, 3, 4, 5, 6, 7] = ..., + firstweekofyear: Literal[0, 1, 2, 3] = ..., + ) -> int: + """ + Gets a specified part of a date. + Args + ``interval``: A string expression specifying the date interval. + + ``date``: The date from which to extract a part. + + ``firstdayofweek``: the starting day of a week. Defaults to 1. + + ``firstweekofyear``: the starting week of a year. Defaults to 1. + Returns + The specified part of the date. + """ + ... + + @classmethod + def DateValue(cls, string: str) -> datetime.datetime: + """ + Computes a date value from a date string. + Args + ``string``: A string expression that contains the date that you want to calculate. + The string passed to ``DateValue`` must be expressed in one of the date formats defined + by your locale setting or using the ISO date format "yyyy-mm-dd" (year, month and day + separated by hyphens). + Returns + The converted date. + """ + ... + + @classmethod + def Format(cls, expression: Union[datetime.datetime, float, int], format: str = ...) -> str: + """ + Converts a number to a string, and then formats it according to the format that you specify. + Args + ``expression``: Numeric expression that you want to convert to a formatted string. + + ``format``: the format to apply. Defaults to "". + Returns + The formatted value. + """ + ... + + @classmethod + def GetDefaultContext(cls) -> XComponentContext: + """ + Gets the default context of the process service factory, if existent, else returns a None reference. + """ + ... + + @classmethod + def GetGuiType(cls) -> int: + """ + Gets a numerical value that specifies the graphical user interface. + Returns + The GetGuiType value, 1 for Windows, 4 for UNIX + """ + ... + + @classmethod + def GetPathSeparator(cls) -> str: + """ + Gets the operating system-dependent directory separator used to specify file paths. + Returns + The os path separator + """ + ... + + @classmethod + def GetSystemTicks(cls) -> int: + """ + Gets the number of system ticks provided by the operating system. + You can use this function to optimize certain processes. + Use this method to estimate time in milliseconds: + Returns + The actual number of system ticks. + """ + ... + + class GlobalScope(metaclass = ...): + """ + Use cases: + - ``GlobalScope.BasicLibraries`` + - ``GlobalScope.DialogLibraries`` + """ + + @classmethod + def BasicLibraries(cls) -> XLibraryContainer: + """ + ``GlobalScope.BasicLibraries`` gets the UNO object containing all shared Basic libraries + and modules. This method is the Python equivalent to ``GlobalScope.BasicLibraries`` + in Basic scripts. + Returns + A ``XLibraryContainer`` UNO object. + """ + ... + + @classmethod + def DialogLibraries(cls) -> XLibraryContainer: + """ + ``GlobalScope.DialogLibraries`` gets the UNO object containing all shared dialog libraries. + Returns + A ``DialogLibraryContainer`` UNO object. + """ + ... + + @classmethod + def InputBox(cls, + prompt: str, + title: str = ..., + default: str = ..., + xpostwips: int = ..., + ypostwips: int = ..., + ) -> str: + """ + Displays an input box. + Args + ``prompt``: String expression displayed as the message in the dialog box. + + ``title``: String expression displayed in the title bar of the dialog box. + + ``default``: String expression displayed in the text box as default ifno other input is given. + + ``xpostwips``: Integer expression that specifies the horizontal position of the dialog. + The position is an absolute coordinate and does not refer to the window of LibreOffice. + + ``ypostwips``: Integer expression that specifies the vertical position of the dialog. + The position is an absolute coordinate and does not refer to the window of LibreOffice. + + If ``xpostwips`` and ``ypostwips`` are omitted, the dialog is centered on the screen. + Returns + The input string. + """ + ... + + @classmethod + def MsgBox(cls, prompt: str, buttons: int = ..., title: str = ...) -> int: + """ + Displays a dialogue box containing a message and returns an optional value. + + MB_xx constants help specify the dialog type, the number and type of buttons to display, + plus the icon type. By adding their respective values they form bit patterns, that define the + MsgBox dialog appearance. + Args + ``prompt``: String expression displayed as a message in the dialog box. + + ``buttons``: Integer expression that specifies the dialog type, as well as the number + and type of buttons to display, and the icon type. ``buttons`` represents a combination of bit + patterns, that is, a combination of elements can be defined by adding their respective values. + Defaults to 0. + + ``title``: String expression displayed in the title bar of the dialog. Defaults to "". + Returns + The pressed button. + """ + ... + + @classmethod + def Now(cls) -> datetime.datetime: + """ + Gets the current system date and time as a ``datetime.datetime`` Python native object. + """ + ... + + @classmethod + def RGB(cls, red: int, green: int, blue: int) -> int: + """ + Gets an integer color value consisting of red, green, and blue components. + Args + ``red``: An integer expression that represents the red component (0-255) of the composite color. + + ``green``: An integer expression that represents the green component (0-255) of the + composite color. + + ``blue``: An integer expression that represents the blue component (0-255) of the composite + color. + Returns + An integer color value consisting of red, green, and blue components. + """ + ... + + + @classmethod + def Xray(cls, unoobject: UNO) -> None: + """ + Inspect UNO objects or variables. + Args + ``unoobject``: A variable or UNO object. + """ + ... + + StarDesktop: XDesktop + """ Gets the desktop as a UNO object. """ + ThisComponent: Optional[XComponent] + """ + If the current component refers to a LibreOffice document, this method + returns the UNO object representing the document. + When the current component is the Basic IDE, the ThisComponent object returns in Basic the + component owning the currently run user script. This behaviour cannot be reproduced in Python. + Returns + The current component or None when not a document. + """ + ThisDatabaseDocument: Optional[XOfficeDatabaseDocument] + """ + If the script is being executed from a Base document or any of its subcomponents + this method returns the main component of the Base instance. + Returns + The current Base (main) component or None when not a Base document or one of its subcomponents. + """ + + # ######################################################################### + # SF_Dictionary CLASS + # ######################################################################### + class SF_Dictionary(SFServices, dict): + """ + The service adds to a Python dict instance the interfaces for conversion to and from + a list of UNO PropertyValues + Usage + ``dico = dict(A = 1, B = 2, C = 3)`` + + ``myDict = CreateScriptService('Dictionary', dico) # Initialize myDict with the content of dico`` + + ``myDict['D'] = 4`` + + ``print(myDict) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}`` + + ``propval = myDict.ConvertToPropertyValues()`` + or + ``dico = dict(A = 1, B = 2, C = 3)`` + + ``myDict = CreateScriptService('Dictionary') # Initialize myDict as an empty dict object`` + + ``myDict.update(dico) # Load the values of dico into myDict`` + + ``myDict['D'] = 4`` + + ``print(myDict) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}`` + + ``propval = myDict.ConvertToPropertyValues()`` + """ + + def ConvertToPropertyValues(self) -> Tuple[PropertyValue]: + """ + Store the content of the dictionary in an array of PropertyValues. + Each entry in the list is a ``com.sun.star.beans.PropertyValue``. + The key is stored in Name, the value is stored in ``Value``. + + If one of the items has a type ``datetime``, it is converted to a ``com.sun.star.util.DateTime`` + structure. If one of the items is an empty list, it is converted to ``None``. + Returns + A list of property values. The resulting list is empty when the dictionary is empty. + """ + ... + + def ImportFromPropertyValues(self, propertyvalues: Sequence[PropertyValue], overwrite: bool = ...) -> bool: + """ + Inserts the contents of an array of ``PropertyValue`` objects into the current dictionary. + ``PropertyValue`` Names are used as keys in the dictionary, whereas Values contain + the corresponding values. Date-type values are converted to ``datetime.datetime`` instances. + Args + ``propertyvalues``: tuple containing ``com.sun.star.beans.PropertyValue`` objects. + + ``overwrite``: When True, entries with same name may exist in the dictionary + and their values are overwritten. When ``False`` (default), repeated keys are not overwritten. + Defaults to ``False``. + Returns + True when successful. + """ + ... + + # ######################################################################### + # SF_Exception CLASS + # ######################################################################### + class SF_Exception(SFServices, metaclass = ...): + """ + The Exception service is a collection of methods for code debugging. + + The ``Exception`` service console stores events, variable values and information about errors. + + Use the console when the Python shell is not available, for example in ``Calc`` user defined functions (UDF) + or during events processing. + + Use the ``DebugPrint()`` and ``DebuDisplay()`` methods to log any relevant information, events and data + of any type to the console. + + Console entries can be dumped to a text file or visualized in a dialogue. + """ + + def Console(self, modal: bool = ...): + """ + Displays the console messages in a modal or non-modal dialog. In both modes, all the past messages + issued by a ``DebugPrint()`` method or resulting from an exception are displayed. In non-modal mode, + subsequent entries are added automatically. + + If the console is already open, when non-modal, it is brought to the front. + + A modal console can only be closed by the user. A non-modal console can either be closed by the user + or upon script termination. + Args + ``modal``: determine if the console window is modal (``True``) or non-modal (``False``). + Default value is ``True``. + """ + ... + + def ConsoleClear(self, keep: int = ...): + """ + Clears the console keeping an optional number of recent messages. If the console is activated in non-modal mode, + it is refreshed. + Args + ``keep``: the number of recent messages to be kept. Default value is 0. + """ + ... + + def ConsoleToFile(self, filename: FILE) -> bool: + """ + Exports the contents of the console to a text file. If the file already exists and the console + is not empty, it will be overwritten without warning. Returns True if successful. + Args + ``filename``: the name of the text file the console should be dumped into. + The name is expressed according to the current ``FileNaming`` property of the ``SF_FileSystem`` + service. + Returns + ``True`` when successful. + """ + ... + + def DebugDisplay(self, *args)-> int: + """ + Concatenates all the arguments into a single human-readable string and displays it in a MsgBox + with an Information icon and an OK button. The displayed string is also added to the Console. + Args + ``*args``: any number of arguments of any type. + Returns + The result of the execution of the ``MsgBox()`` method. + """ + ... + + def DebugPrint(self, *args): + """ + Assembles all the given arguments into a single human-readable string and adds it as a new entry + in the console. + Args + ``*args``: any number of arguments of any type. + """ + ... + + @classmethod + def PythonShell(cls, variables: dict = ...) -> None: + """ + Opens an APSO Python shell as a non-modal window. + The Python script keeps running after the shell is opened. + The output from ``print`` statements inside the script are shown in the shell. + Args + ``variables``: a Python dictionary with variable names and values that will be + passed on to the APSO Python shell. By default, all local variables are passed using + Python's builtin ``locals()`` function. + + Typical use: ``{**globals(), **locals()}`` + """ + ... + + # ######################################################################### + # SF_FileSystem CLASS + # ######################################################################### + class SF_FileSystem(SFServices, metaclass = ...): + """ + The "FileSystem" service includes common file and folder handling routines. + """ + + FileNaming: str + """ + Sets or returns the current files and folders notation, either ``'ANY', 'URL'`` or ``'SYS'``: + + ``ANY``: (default) the methods of the ``FileSystem`` service accept both URL and current operating + system's notation for input arguments but always return URL strings. + + ``URL``: the methods of the ``FileSystem`` service expect URL notation for input arguments and + return URL strings. + + ``SYS``: the methods of the ``FileSystem`` service expect current operating system's notation + for both input arguments and return strings. + + Once set, the ``FileNaming`` property remains unchanged either until the end of the ``LibreOffice`` + session or until it is set again. + """ + ConfigFolder: FILE + """ Returns the configuration folder of ``LibreOffice``. """ + ExtensionsFolder: FILE + """ Returns the folder where extensions are installed. """ + HomeFolder: FILE + """ Returns the user home folder. """ + InstallFolder: FILE + """ Returns the installation folder of ``LibreOffice``. """ + TemplatesFolder: FILE + """ Returns the folder containing the system templates files. """ + TemporaryFolder: FILE + """ Returns the temporary files folder defined in the ``LibreOffice`` path settings. """ + UserTemplatesFolder: FILE + """ Returns the folder containing the user-defined template files. """ + + ForReading: Literal[1] + ForWriting: Literal[2] + ForAppending: Literal[8] + + def BuildPath(self, foldername: FILE, name: str) -> str: + """ + Joins a folder path and the name of a file and returns the full file name with a + valid path separator. The path separator is added only if necessary. + + Args + ``foldername``: the path with which name will be combined. + The specified path does not need to be an existing folder. + + ``name``: the name of the file to be appended to foldername. This parameter uses + the notation of the current operating system. + + Returns + The path concatenated with the file name after insertion of a path separator, if necessary. + """ + ... + + def CompareFiles(self, filename1: FILE, filename2: FILE, comparecontents: bool = ...) -> bool: + """ + Compare 2 files and return ``True`` if they seem identical. + Depending on the value of the ``comparecontents`` argument, + the comparison between both files can be either based only on + file attributes (such as the last modified date), or based on the file contents. + Args + ``filename1``: the 1st file to compare. + + ``filename2``: the 2nd file to compare. + + ``comparecontents``: when ``True``, the contents of the files are compared. + Defaults to ``False``. + Returns + ``True`` when the files seem identical + """ + ... + + def CopyFile(self, source: FILE, destination: FILE, overwrite: bool = ...) -> bool: + """ + Copies one or more files from one location to another. + Args + ``source``: ``FileName`` or ``NamePattern`` which can include wildcard characters, + for one or more files to be copied. + + ``destination``: ``FileName`` where the single ``source`` file is to be copied + or ``FolderName`` where the multiple files from ``source`` are to be copied. + + ``overwrite``: if ``True`` (default), files may be overwritten. + ``CopyFile`` will fail if Destination has the read-only attribute set, + regardless of the value of Overwrite. + Returns + ``True`` if at least one file has been copied. ``False`` if an error occurred. + An error also occurs if a source using wildcard characters doesn't match any files. + The method stops on the first error it encounters. + No attempt is made to roll back or undo any changes made before an error occurs. + Notes + - If ``destination`` does not exist, it is created. + - Wildcard characters are not allowed in ``destination``. + """ + ... + + def CopyFolder(self, source: FILE, destination: FILE, overwrite: bool = ...) -> bool: + """ + Copies one or more folders from one location to another. + Args + ``source``: ``FolderName`` or ``NamePattern`` which can include wildcard characters, + for one or more folders to be copied. + + ``destination``: ``FolderName`` where the single ``source`` folder is to be copied + or ``FolderName`` where the multiple folders from ``source`` are to be copied. + If ``FolderName`` does not exist, it is created. + + ``overwrite``: if ``True`` (default), folders and their content may be overwritten. + Defaults to ``True``. ``CopyFile`` will fail if ``destination`` has the read-only + attribute set, regardless of the value of ``overwrite``. + Returns + ``True`` if at least one folder has been copied. ``False`` if an error occurred. + An error also occurs if a ``source`` using wildcard characters doesn't match any folders. + The method stops on the first error it encounters. + No attempt is made to roll back or undo any changes made before an error occurs. + Notes + - If ``destination`` does not exist, it is created. + - Wildcard characters are not allowed in ``destination``. + """ + ... + + def CreateFolder(self, foldername: FILE) -> bool: + """ + Creates the specified ``olderame``. + If the specified folder has a parent folder that does not exist, it is created. + Args + foldername: a string representing the folder to create. It must not exist. + Returns + ``True`` if ``foldername`` is a valid folder name, does not exist and creation was successful. + ``False`` otherwise, including when ``foldername`` is a file. + """ + ... + + def CreateTextFile( + self, filename: FILE, overwrite: bool = ..., encoding: str = ... + ) -> TEXTSTREAM: + """ + Creates a specified file and returns a ``TextStream`` service instance that can be used + to write to the file. + The method returns ``None`` if an error occurred. + Args + ``filename``: the name of the file to be created. + + ``overwrite``: determines if ``filename`` can be overwritten (default = ``True``). + + ``encoding``: the character set to be used. The default encoding is "UTF-8". + """ + ... + + def DeleteFile(self, filename: FILE) -> bool: + """ + Deletes one or more files. + The files to be deleted must not be readonly. + Args + ``filename``: ``FileName`` or ``NamePattern`` which can include wildcard characters, + for one or more files to be deleted. + Returns + ``True`` if at least one file has been deleted. ``False`` if an error occurred. + An error also occurs if ``fileName`` using wildcard characters doesn't match any files. + The method stops on the first error it encounters. + No attempt is made to roll back or undo any changes made before an error occurs. + """ + ... + + def DeleteFolder(self, foldername: FILE) -> bool: + """ + Deletes one or more folders. + The folders to be deleted must not be readonly. + Args + ``foldername``: ``FolderName`` or ``NamePattern`` which can include wildcard characters, + for one or more Folders to be deleted. + Returns + ``True`` if at least one folder has been deleted. ``False`` if an error occurred. + An error will also occur if the ``foldername`` parameter uses wildcard characters and + does not match any folders. + The method stops immediately after it encounters an error. + The method does not roll back nor does it undo changes made before the error occurred. + """ + ... + + def ExtensionFolder(self, extension: str) -> str: + """ + Returns a string containing the folder where the specified extension package is installed. + Args + ``extension``: a string value with the ID of the extension. + If the extension is not installed, an exception is raised. + """ + ... + + def FileExists(self, filename: FILE) -> bool: + """ + Return ``True`` if the given file exists. + Args + ``filename``: a string representing the file to be tested. + Returns + ``True`` if ``filename`` is a valid File name and it exists. + ``False`` otherwise, including when ``filename`` is a folder. + """ + ... + + def Files(self, foldername: FILE, filter: str = ..., includesubfolders: bool = ...) -> Tuple[str, ...]: + """ + Gets a tuple of the ``FileNames`` stored in the given folder. + If the argument ``foldername`` specifies a folder that does not exist, an exception is raised. + The resulting tuple may be filtered with wildcards. + Args + ``foldername``: the folder to explore. + + ``filter``: contains wildcards ("?" and "*") to limit the list to the relevant files + (default = ""). + + ``includesubfolders``: set this argument to ``True`` to include the contents of + subfolders (Default = ``False``). + Returns + A tuple of strings, each entry is the ``FileName`` of an existing file. + """ + ... + + def FolderExists(self, foldername: FILE) -> bool: + """ + Returns ``True`` if the given folder name exists. + Args + ``foldername``: a string representing a folder. + Returns + ``True`` if ``folderName`` is a valid folder name and it exists. + ``False`` otherwise, including when ``foldername`` is a file. + """ + ... + + def GetBaseName(self, filename: FILE) -> str: + """ + Returns the ``BaseName`` (equal to the last component) of a file or folder name, without its extension. + The method does not check for the existence of the specified file or folder. + Args + ``filename``: path and file name + Returns + The ``BaseName`` of the given file name. It may be the empty string. + """ + ... + + def GetExtension(self, filename: FILE) -> str: + """ + Returns the extension part of a ``File-`` or ``FolderName``, without the dot (.). + The method does not check for the existence of the specified file or folder. + Args + ``filename``: path and file name + Returns + The extension without a leading dot. May be empty. + """ + ... + + def GetFileLen(self, filename: FILE) -> int: + """ + Returns the length of a file in bytes. + Args + ``filename``: a string representing an existing file. + Returns + File size if ``filename`` exists. + """ + ... + + def GetFileModified(self, filename: FILE) -> datetime.datetime: + """ + Returns the last modified date for the given file. + Args + ``filename``: a string representing an existing file. + Returns + The modification date and time. + """ + ... + + def GetName(self, filename: FILE) -> str: + """ + Returns the last component of a ``File-`` or ``FolderName``. + The method does not check for the existence of the specified file or folder. + Args + ``filename``: path and file name + Returns + The last component of the full file name in native operating system format. + """ + ... + + def GetParentFolderName(self, filename: FILE) -> FILE: + """ + Returns a string containing the name of the parent folder of the last component in a specified + ``File-`` or ``FolderName``. + The method does not check for the existence of the specified file or folder. + Args + ``filename``: path and file name. + Returns + A folder name including its final path separator. + """ + ... + + def GetTempName(self, extension: str = ...) -> FILE: + """ + Returns a randomly generated temporary file name that is useful for performing + operations that require a temporary file : the method does not create any file. + Args + ``extension``: the extension of the temporary file name (Default = ""). + Returns + A ``FileName`` as a string. + By default, the returned file name does not have an extension (suffix). + Use the extension parameter to specify the extension of the file name to be generated. + The folder part of the returned string is the system's temporary folder. + """ + ... + + def HashFile(self, + filename: FILE, + algorithm: Literal['MD5', 'SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512'], + ) -> str: + """ + Gets a hexadecimal string representing a checksum of the given file. + Args + ``filename``: a string representing a file. + + ``algorithm``: the hashing algorithm to use. + Returns + The requested checksum as a string. Hexadecimal digits are lower-cased. + A zero-length string when an error occurred. + Note + The supported hashing algorithms are: + - MD5 + - SHA1 + - SHA224 + - SHA256 + - SHA384 + - SHA512 + """ + ... + + def MoveFile(self, source: FILE, destination: FILE) -> bool: + """ + Moves one or more files from one location to another. + Returns ``True`` if at least one file has been moved or ``False`` if an error occurred. + An error will also occur if the source parameter uses wildcard characters anddoes not match any files. + + The method stops immediately after it encounters an error. The method does not + roll back nor does it undo changes made before the error occurred. + Args + ``source``: ``FileName`` or ``NamePattern`` which can include wildcard characters, + for one or more files to be moved. + + ``destination``: if ``source`` is an existing file name then ``destination`` indicates + the new path and file name of the moved file. If the move operation involves multiple files, + then ``destination`` must be a folder name. If it does not exist, it is created. + If ``source`` and ``destination`` have the same parent folder, the method will rename + the ``source``. + Wildcard characters are not allowed in ``destination``. + Returns + ``True`` if at least one file has been moved. ``False`` if an error occurred. + """ + ... + + def MoveFolder(self, source: FILE, destination: FILE) -> bool: + """ + Moves one or more folders from one location to another. + Returns ``True`` if at least one folder has been moved or ``False`` if an error occurred. + An error will also occur if the source parameter uses wildcard characters and does + not match any folders. + + The method stops immediately after it encounters an error. The method does not roll + back nor does it undo changes made before the error occurred. + Args + ``source``: ``FolderName`` or ``NamePattern`` which can include wildcard characters, + for one or more folders to be moved. + + ``destination``: if the move operation involves a single folder, then ``destination`` + is the name and path of the moved folder. It must not exist. + If multiple folders are being moved, then ``destination`` designates where the folders + in ``source`` will be moved into. If ``destination`` does not exist, it is created. + Wildcard characters are not allowed in ``destination``. + Returns + ``True`` if at least one folder has been moved. ``False`` if an error occurred. + """ + ... + + def Normalize(self, filename: FILE) -> FILE: + """ + Returns a string containing the normalized path name by collapsing redundant separators and up-level + references. For instance, the path names ``A//B``, ``A/B/``, ``A/./B`` and ``A/foo/../B`` are all + normalized to ``A/B``. + + On Windows, forward slashes ``/`` are converted to backward slashes \\\. + Args + ``filename``: a string representing a valid path name. + The file or directory represented by this argument may not exist. + Returns + The normalized file name. + """ + ... + + def OpenTextFile(self, + filename: FILE, + iomode: Literal[1, 2, 8] = ..., + create: bool = ..., + encoding: str = ..., + ) -> TEXTSTREAM: + """ + Opens a specified file and returns a ``TextStream`` object that can be used to read from, + write to, or append to the file. + Args + ``filename``: identifies the file to open. + + ``iomode``: indicates input/output mode. It can be one of three constants: + ``filesystem.ForReading`` (default), ``filesystem.ForWriting``, or ``filesystem.ForAppending``. + + ``create``: boolean value that indicates whether a new file can be created if the specified + filename doesn't exist. The value is ``True`` if a new file and its parent folders + may be created. ``False`` if they aren't created. Defaults to ``False``. + + ``encoding``: the character set that should be used. Defaults to "UTF-8". + Returns + A ``TEXTSTREAM`` instance representing the opened file or ``None`` if an error occurred. + The method does not check if the file is really a text file. It doesn't check either + if the given encoding is implemented in LibreOffice nor if it is the right one. + """ + ... + + def PickFile(self, + defaultfile: FILE = ..., + mode: Literal['OPEN', 'SAVE'] = ..., + filter: str = ..., + ) -> FILE: + """ + Opens a dialog box to open or save a file. + + If the ``SAVE`` mode is set and the picked file exists, a warning message will be displayed. + Args + ``defaultfile``: this argument is a string composed of a folder and file name. + The folder part indicates the folder that will be shown when the dialog opens + (default = the last selected folder). The file part designates the default file to open or save. + + ``mode``: a string value that can be either "OPEN" (for input files) or + "SAVE" (for output files). The default value is "OPEN". + + ``filter``: the extension of the files displayed when the dialog is opened + (default = no filter). + Returns + The selected FileName in ``filesystem.FileNaming`` format or "" if the dialog was cancelled. + """ + ... + + def PickFolder(self, defaultfolder: FILE = ..., freetext: str = ...) -> FILE: + """ + Display a dialog box to select a folder. + Args + ``defaultfolder``: the folder from which to start. Default = the last selected folder. + + ``freetext``: text to display in the dialog. Defaults to "". + Returns + The selected folder in ``filesystem.FileNaming`` notation. + A zero-length string if the dialog was cancelled. + """ + ... + def SubFolders(self, + foldername: FILE, + filter: str = ..., + includesubfolders: bool = ... + ) -> Tuple[str, ...]: + """ + Returns a tuple of strings corresponding to the folders stored + in the given ``foldername``. + The list may be filtered with wildcards. + Args + ``foldername``: a string representing a folder. The folder must exist. ``foldername`` must not + designate a file. + + ``filter``: a string containing wildcards ("?" and "*") that will be applied to the resulting + list of folders (default = ""). + + ``includesubfolders``: set this argument to ``True`` to include the contents of + subfolders (Default = ``False``). + """ + ... + + # ######################################################################### + # SF_L10N CLASS + # ######################################################################### + class SF_L10N(SFServices): + """ + This service provides a number of methods related to the translation of strings + with minimal impact on the program's source code. + + The methods provided by the L10N service can be used mainly to: + - Create POT files that can be used as templates for translation of all strings in the program. + - Get translated strings at runtime for the language defined in the Locale property. + """ + + Folder: FILE + """ The folder containing the ``PO`` files """ + Languages: Tuple[str, ...] + """ A list of all the base names (without the ``.po`` extensions found in the specified ``folder``. """ + Locale: str + """ The currently active ``language-COUNTRY`` combination. """ + + def AddText(self, context: str = ..., msgid: str = ..., comment: str = ...) -> bool: + """ + Adds a new entry in the list of localizable strings. It must not exist yet. + Args + ``context``: the key to retrieve the translated string with the GetText method. + This parameter has a default value of "". + + ``msgid``: the untranslated string, which is the text appearing in the program code. ``msgid`` + must not be empty. + + The ``msgid`` becomes the key to retrieve the translated string via + the ``GetText()`` method when ``context`` is empty. + The ``msgid`` string may contain any number of placeholders (%1 %2 %3 ...) for dynamically + modifying the string at runtime. + + ``comment``: optional comment to be added alongside the string to help translators. + Returns + ``True`` if successful. + """ + ... + + def AddTextsFromDialog(self, dialog: DIALOG) -> bool: + """ + Add all fixed text strings of a dialog to the list of localizable text strings. + + Added texts are: + - The title of the dialog. + - The caption associated with next control types: Button, CheckBox, FixedLine, FixedText, GroupBox and RadioButton. + - The content of list- and combo boxes. + - The tip- or help text displayed when the mouse is hovering the control. + + The current method has method ``SFDialogs.SF_Dialog.GetTextsFromL10N()`` as counterpart. + The targeted dialog must not be open when the current method is run. + Args + ``dialog``: a SFDialogs.Dialog service instance + Returns + ``True`` when successful. + """ + ... + + def ExportToPOTFile(self, filename: FILE, header: str = ..., encoding: str = ...) -> bool: + """ + Export a set of untranslated strings as a POT file. + The set of strings has been built either by a succession of AddText() methods + or by a successful invocation of the L10N service with the ``FolderName`` argument. + The generated file should pass successfully the ``"msgfmt --check 'the pofile'"`` GNU command. + Args + ``filename``: the complete file name (in ``filesstem.FileNaming`` notation) + to export to. If it exists, it is overwritten without warning. + + ``header``: comments that will appear on top of the generated file. Do not include + any leading "#". If the string spans multiple lines, insert escape sequences (``\\n``) where + relevant. A standard header will be added anyway. Defaults to "". + + ``encoding``: the character set that should be used. Defaults to "UTF-8". + Returns + ``True`` if successful. + """ + ... + + def GetText(self, msgid: str, *args: Any) -> str: + """ + Gets the translated string corresponding to the given ``msgid`` argument. + A list of arguments may be specified to replace the placeholders (%1, %2, ...) in the string. + Args + ``msgid``: the untranslated string, which is the text appearing in the program code. + It must not be empty. It may contain any number of placeholders (%1 %2 %3 ...) that can be used + to dynamically insert text at runtime. + + Besides using a single ``msgid`` string, this method also accepts the following formats: + - the untranslated text (``msgid``) + - the reference to the untranslated text (``context``) + - both (``context|msgId``), use the pipe character as delimiter. + + ``args``: values to be inserted into the placeholders. + Any variable type is allowed, however only strings, numbers and dates will be considered. + Returns + The translated string. If no translated string is found, the method returns the untranslated + string after replacing the placeholders with the specified arguments. + """ + ... + + # ######################################################################### + # SF_Platform CLASS + # ######################################################################### + class SF_Platform(SFServices, metaclass = ...): + """ + The ``Platform`` service implements a collection of properties about the actual execution environment + and context, such as : + - the hardware platform + - the operating system + - the LibreOffice version + - the current user + All its properties are read-only. + """ + + Architecture: str + """ The hardware bit architecture. Example: '32bit' or '64bit'. """ + ComputerName: str + """ The computer's network name. """ + CPUCount: int + """ The number of central processing units. """ + CurrentUser: str + """ The name of the currently logged user. """ + Extensions: Tuple[str, ...] + """ An array of strings containing the internal IDs of all installed extensions. """ + FilterNames: Tuple[str, ...] + """ An array of strings containing the available document import and export filter names. """ + Fonts: Tuple[str, ...] + """ An array of strings containing the names of all available fonts. """ + FormatLocale: str + """ The locale used for numbers and dates as a string in the format "la-CO" (language-COUNTRY). """ + Locale: str + """ The locale of the operating system as a string in the format "la-CO" (language-COUNTRY). + This is equivalent to the ``SystemLocale`` property. """ + Machine: str + """ The machine type. Examples are: 'i386' or 'x86_64'. """ + OfficeLocale: str + """ The locale of the user interface as a string in the format "la-CO" (language-COUNTRY). """ + OfficeVersion: str + """ The actual LibreOffice version expressed as ``LibreOffice w.x.y.z (The Document Foundation)``. """ + OSName: str + """ The operating system type. Example: 'Darwin, Linux' or 'Windows'. """ + OSPlatform: str + """ A single string identifying the underlying platform with as much useful and human-readable information + as possible. Example: ``Linux-5.8.0-44-generic-x86_64-with-glibc2.32``. """ + OSRelease: str + """ The operating system's release. Example: ``5.8.0-44-generic``. """ + OSVersion: str + """ The operating system's build or version. Example: ``#50-Ubuntu SMP Tue Feb 9 06:29:41 UTC 2021 `` """ + Printers: Tuple[str, ...] + """ The list of available printers. The default printer is put in the first position of the list + (index = [0]). """ + Processor: str + """ The real processor name. Example: ``amdk6``. This property may return the same value as the ``Machine`` + property. """ + PythonVersion: str + """ The version of the Python interpreter being used as a string in the format ``Python major.minor.patchlevel`` + (ex: ``Python 3.9.7``). """ + SystemLocale: str + """ The locale of the operating system as a string in the format "la-CO" (language-COUNTRY). + This is equivalent to the ``Locale`` property. """ + UserData: DICTIONARY + """ Returns a ``Dictionary`` instance containing key-value pairs in relation with the + ``Tools - Options - User Data`` dialog. """ + + # ######################################################################### + # SF_Region CLASS + # ######################################################################### + class SF_Region(SFServices, metaclass = ...): + """ + The "Region" service gathers a collection of functions about languages, countries and timezones + - Locales + - Currencies + - Numbers and dates formatting + - Calendars + - Timezones conversions + - Numbers transformed to text in any supported language + """ + + def Country(self, region: str = ...) -> str: + """ + Gets the country name in English corresponding to a given region. + Args + ``region``: formatted as "la-CO" or "CO". + """ + ... + + def Currency(self, region: str = ...) -> str: + """ + Gets the ISO 4217 currency code of the specified region. + Args: + ``region``: formatted as "la-CO" or "CO". + """ + ... + + def DatePatterns(self, region=...) -> Tuple[str, ...]: + """ + Gets an array of strings containing the date acceptance patterns for the specified region. + Args + ``region``: formatted as "la-CO". + """ + ... + + def DateSeparator(self, region: str = ...) -> str: + """ + Returns the date separator used in the given region. + Args + ``region``: formatted as "la-CO". + """ + ... + + def DayAbbrevNames(self, region: str = ...) -> Tuple[str, ...]: + """ + Gets an array of strings containing the list of abbreviated weekday names in the specified language. + Args + ``region``: formatted as "la-CO" or "la". + """ + ... + + def DayNames(self, region: str = ...) -> Tuple[str, ...]: + """ + Gets an array of strings containing the list of weekday names in the specified language. + Args + ``region``: formatted as "la-CO" or "la". + """ + ... + + def DayNarrowNames(self, region: str = ...) -> Tuple[str, ...]: + """ + Gets a zero-based array of strings containing the list of the initials of weekday names + in the specified language. + Args + ``region``: formatted as "la-CO" or "la". + """ + ... + + def DecimalPoint(self, region: str = ...) -> str: + """ + Gets the decimal separator used in numbers in the specified region. + Args + ``region``: formatted as "la-CO". + """ + ... + + def Language(self, region: str = ...) -> str: + """ + Gets tthe name of the language, in English, of the specified region. + Args + ``region``: formatted as "la-CO" or "la". + """ + ... + + def ListSeparator(self, region: str = ...) -> str: + """ + Gets the list separator used in the specified region. + Args + ``region``: formatted as "la-CO". + """ + ... + + def MonthAbbrevNames(self, region: str = ...) -> Tuple[str, ...]: + """ + Gets a zero-based array of strings containing the list of abbreviated month names + in the specified language. + Args + ``region``: formatted as "la-CO". + """ + ... + + def MonthNames(self, region: str = ...) -> Tuple[str, ...]: + """ + Gets an array of strings containing the list of month names in the specified language. + Args + ``region``: formatted as "la-CO" or "la". + """ + ... + + def MonthNarrowNames(self, region: str = ...) -> Tuple[str, ...]: + """ + Gets an array of strings containing the list of the initials of month names in the specified language. + Args + ``region``: formatted as "la-CO" or "la". + """ + ... + + def ThousandSeparator(self, region: str = ...) -> str: + """ + Gets the thousands separator used in numbers in the specified region. + Args + ``region``: formatted as "la-CO". + """ + ... + + def TimeSeparator(self, region: str = ...) -> str: + """ + Gets the separator used to format times in the specified region. + Args + ``region``: formatted as "la-CO". + """ + ... + + def DSTOffset(self, localdatetime: datetime.datetime, timezone: str, locale: str = ...) -> int: + """ + Computes the additional Daylight Saving Time (DST) offset, in minutes, that is applicable + to a given region and timezone. + Args + ``localdatetime``: the local date and time to consider. + + ``timezone``: the timezone for which the offset will be calculated. + + ``locale``: the locale specifying the country for which the offset will be calculated, + given either in "la-CO" or "CO" formats. The default value is the locale defined + in the ``OfficeLocale`` property of the ``Platform`` service. + """ + ... + + def LocalDateTime(self, utcdatetime: datetime.datetime, timezone: str, locale: str = ...) -> datetime.datetime: + """ + Computes the local date and time from a UTC date and time. + Args + ``utcdatetime``: the UTC date and time, expressed using a date object. + + ``timezone``: the timezone for which the local time will be calculated. + + ``locale``: the locale specifying the country for which the offset will be calculated, + given either in "la-CO" or "CO" formats. The default value is the locale defined + in the ``OfficeLocale`` property of the ``Platform`` service. + """ + ... + + def Number2Text(self, number: Union[int, float, str], locale: str = ...) -> str: + """ + Converts numbers and monetary values into written text for any of the currently supported languages. + Args + ``number``: the number to be converted into written text. + It can be provided either as a numeric type or as a string. When a string is provided, + it can be preceded by a prefix informing how the numbers should be written. + It is also possible to include ISO 4217 currency codes. + + ``locale``: the locale defining the language into which the number will be converted to, + given either in "la-CO" or "la" formats. + The default value is the locale defined in the ``OfficeLocale`` property of the ``Platform`` + service. + Returns + The converted number or monetary value in letters. + """ + ... + + def TimeZoneOffset(self, timezone: str, locale: str = ...) -> int: + """ + Gets the offset between GMT and the given timezone and locale, in minutes. + Args + ``imezone``: the timezone for which the offset to the GMT will be calculated. + + ``locale``: the locale specifying the country for which the offset will be calculated, + given either in "la-CO" or "CO" formats. + The default value is the locale defined in the ``OfficeLocale`` property + of the ``Platform`` service. + """ + ... + + def UTCDateTime(self, localdatetime: datetime.datetime, timezone: str, locale: str = ...) -> datetime.datetime: + """ + Gets the UTC date and time considering a given local date and time in a timezone. + Args + ``localdatetime``: the local date and time in a specific timezone, expressed as a date. + + ``timezone``: the timezone for which the ``localdatetime`` argument is given. + + ``locale``: the locale specifying the country for which the ``localdatetime`` argument is given, + expressed either in "la-CO" or "CO" formats. The default value is the locale defined + in the ``OfficeLocale`` property of the ``Platform`` service. + """ + ... + + def UTCNow(self, timezone: str, locale: str = ...) -> datetime.datetime: + """ + Gets the current UTC date and time, given a timezone and a locale. + Args + ``timezone``: the timezone for which the current UTC time will be calculated. + + ``locale``: the locale specifying the country for which the current UTC time will be calculated, + expressed either in "la-CO" or "CO" formats. The default value is the locale defined + in the ``OfficeLocale`` property of the ``Platform`` service. + """ + ... + + # ######################################################################### + # SF_Session CLASS + # ######################################################################### + class SF_Session(SFServices, metaclass = ...): + """ + The Session service gathers various general-purpose methods about: + - UNO introspection + - the invocation of external scripts or programs + - send mails + - ... + """ + + # Class constants Where to find an invoked library ? + SCRIPTISEMBEDDED: Literal["document"] + """ The invoked library is in the document (Basic + Python). """ + SCRIPTISAPPLICATION: Literal["application"] + """ The invoked library is in any shared library (Basic). """ + SCRIPTISPERSONAL: Literal["user"] + """ The invoked library is in My Macros (Python). """ + SCRIPTISPERSOXT: Literal["user:uno_packages"] + """ The invoked library is in an extension installed for the current user (Python). """ + SCRIPTISSHARED: Literal["share"] + """ The invoked library is in LibreOffice macros (Python). """ + SCRIPTISSHAROXT: Literal["share:uno_packages"] + """ The invoked library is in an extension installed for all users (Python). """ + SCRIPTISOXT: Literal["uno_packages"] + """ The invoked library is in an extension but the installation parameters are unknown (Python). """ + + @classmethod + def ExecuteBasicScript( + cls, scope: str = ..., script: str = ..., *args: Optional[Any] + ) -> Any: + """ + Execute the Basic script given its name and location and fetch its result if any. + + If the script returns nothing, which is the case of procedures defined with Sub, + the returned value is ``None``. + Args + ``scope``: string specifying where the script is stored. + + ``script``: string specifying the script to be called in the format + "library.module.method" as a case-sensitive string. + + ``args``: the arguments to be passed to the called script. + Notes + Argument ``scope`` can be either: + - "document" (= ``session.SCRIPTISEMBEDDED``) + - "application" (= ``session.SCRIPTISAPPLICATION``). + + About argument ``script``: + - The library is loaded in memory if necessary. + - The module must not be a class module. + - The method may be a ``Sub`` or a ``Function``. + Returns + The value returned by the called script. + """ + ... + + @classmethod + def ExecuteCalcFunction(cls, calcfunction: str, *args: Any) -> Any: + """ + Execute a Calc function using its English name and based on the given arguments. + If the arguments are arrays, the function is executed as an array formula. + Args + ``calcfunction``: the name of the Calc function to be called, in English. + + ``args``: the arguments to be passed to the called Calc function. + Each argument must be either a string, a numeric value or an array of arrays combining + those types. + Returns + The value returned by the function. + """ + ... + + @classmethod + def ExecutePythonScript(cls, scope: str = ..., script: str = ..., *args: Any) -> Any: + """ + Execute the Python script given its location and name, fetch its result if any. + Result can be a single value or an array of values. + + If the script is not found, or if it returns nothing, the returned value is ``None``. + Args + ``scope``: one of the applicable constants listed. See Notes. + + ``script``: either "library/module.py$method" or "module.py$method" + or "myExtension.oxt|myScript|module.py$method" as a case-sensitive string. + Notes + Arg ``scope`` can be either + - "document" (= ``session.SCRIPTISEMBEDDED``) + - "application" (= ``session.SCRIPTISAPPLICATION``) + - "user" (= ``session.SCRIPTISPERSONAL``) + - "user:uno_packages" (= ``session.SCRIPTISPERSOXT``) + - "share" (= ``session.SCRIPTISSHARED``). Default value. + - "share:uno_packages" (= ``session.SCRIPTISSHAROXT``) + - "uno_packages" (= ``session.SCRIPTISOXT``) + + About argument ``script``: + - ``library``: The folder path to the Python module. + - ``myScript``: The folder containing the Python module. + - ``module.py``: The Python module. + - ``method``: The Python function. + Returns + The value(s) returned by the call to the script. If > 1 values, enclosed in a tuple. + """ + ... + + def GetPDFExportOptions(self) -> DICTIONARY: + """ + Returns the current PDF export settings defined in the ``PDF Options`` dialog, which can be accessed + by choosing ``File - Export as - Export as PDF``. + Returns + A ``Dictionary`` object wherein each key represents an export option and the corresponding + value is the current PDF export setting. + """ + ... + + def HasUnoMethod(self, unoobject: UNO, methodname: str) -> bool: + """ + Returns ``True`` if a UNO object contains the given method. + Args + ``unoobject``: the object to inspect. + + ``methodname``: the name of the method as a string. The search is case-sensitive. + Returns + ``False`` when the method is not found or when an argument is invalid. + """ + ... + + def HasUnoProperty(self, unoobject: UNO, propertyname: str) -> bool: + """ + Returns ``True`` if a UNO object contains the given property. + Args + ``unoobject``: the object to inspect. + + ``propertyname``: the name of the property as a string. The search is case-sensitive. + Returns + ``False`` when the property is not found or when an argument is invalid. + """ + ... + + @classmethod + def OpenURLInBrowser(cls, url: str) -> None: + """ + Opens a given URL in the default browser. + Args + ``url``: The URL to open in the browser. + """ + ... + + def RunApplication(self, command: str, parameters: str) -> bool: + """ + Executes an arbitrary system command. + Args + ``command``: the command to execute. + This may be an executable file or a file which is registered with an application + so that the system knows what application to launch for that file. A file must be + expressed in the current ``filesystem.FileNaming`` notation. + + ``parameters``: a list of space separated parameters as a single string. + The method does not validate the given parameters, but only passes them to the specified + command. + Returns + ``True`` if the command was launched successfully. + """ + ... + def SendMail(self, + recipient: str, + cc: str = ..., + bcc: str = ..., + subject: str = ..., + body: str = ..., + filenames: str = ..., + editmessage: bool = ..., + ) -> None: + """ + Send a message (with or without attachments) to recipients from the user's mail client. + The message may be edited by the user before sending or, alternatively, be sent immediately. + Args + ``recipient``: an email addresses (To recipient). + + ``cc``: a comma-delimited list of email addresses (carbon copy). Defaults to ''. + + ``bcc``: a comma-delimited list of email addresses (blind carbon copy). Defaults to ''. + + ``subject``: the header of the message. Defaults to ''. + + ``body``: the unformatted text of the message. Defaults to ''. + + ``filenames``: a comma-separated list of filenames to attach to the mail. + ``filesystem.FileNaming`` naming conventions apply. Defaults to ''. + + ``editmessage``: when ``True`` (default) the message is editable before being sent. + """ + ... + + def SetPDFExportOptions(self, pdfoptions: DICTIONARY) -> bool: + """ + Modifies the PDF export settings defined in the ``PDF Options`` dialog, which can be accessed + by choosing ``File - Export as - Export as PDF``. + + The new settings can be used by the ``ExportAsPDF()`` method from the ``Document`` service. + Args + ``pdfoptions``: a ``Dictionary`` object that defines the PDF export settings to be changed. + Each key-value pair represents an export option and its new value. + Returns + ``True`` when successful. + """ + ... + + def UnoMethods(self, unoobject: UNO) -> Tuple[str, ...]: + """ + Returns a tuple of the methods callable from an UNO object. The tuple may be empty. + Args + ``unoobject``: the object to inspect. + """ + ... + + def UnoObjectType(self, unoobject: UNO) -> str: + """ + Identify the UNO class of an UNO object. + Args + ``unoobject``: the object to inspect. + Returns + ``com.sun.star. ...`` as a string or a zero-length string if the identification was not + successful. + """ + ... + + def UnoProperties(self, unoobject: UNO) -> Tuple[str, ...]: + """ + Returns a tuple of the properties callable from an UNO object. The tuple may be empty. + Args + ``unoobject``: the object to inspect. + """ + ... + + def WebService(self, uri: str) -> str: + """ + Get some web content from a URI. + Args + ``uri ``: text of the web service. + Returns + The web page content of the URI. + """ + ... + # ######################################################################### + # SF_String CLASS + # ######################################################################### + class SF_String(SFServices, metaclass = ...): + """ + Focus on string manipulation, regular expressions, encodings and hashing algorithms. + The methods implemented in Basic that are redundant with Python builtin functions + are not duplicated. + """ + + sfCR: str + """ Carriage return (ASCII 13). """ + sfCRLF: str + """ Carriage return + linefeed (ASCII 13 + 10). """ + sfLF: str + """ Linefeed (ASCII 10). """ + sfNEWLINE: str + """ Depending on the operating system, either Carriage return + Linefeed (ASCII 13 + 10) + or Linefeed (ASCII 10). """ + sfTAB: str + """ Horizontal tabulation (ASCII 09). """ + + @classmethod + def HashStr(cls, + inputstr: str, + algorithm: Literal['MD5', 'SHA1', 'SHA224', 'SHA256', 'SHA384', 'SHA512'], + ) -> str: + """ + Return a hexadecimal string representing a checksum of the given input string. + Args + ``inputstr``: the string to be hashed. + + ``algorithm``: the hashing algorithm to use. + Returns + The requested checksum as a string. Hexadecimal digits are lower-cased. + A zero-length string when an error occurred. + Note + The supported hashing algorithms are: + - MD5 + - SHA1 + - SHA224 + - SHA256 + - SHA384 + - SHA512 + """ + ... + + def IsADate(self, + inputstr: str, + dateformat: Literal['YYYY-MM-DD', 'DD-MM-YYYY', 'MM-DD-YYYY', + 'YYYY/MM/DD', 'DD/MM/YYYY', 'MM/DD/YYYY', + 'YYYY.MM.DD', 'DD.MM.YYYY', 'MM.DD.YYYY', + 'YYYY MM DD', 'DD MM YYYY', 'MM DD YYYY'] = ..., + ) -> bool: + """ + Return ``True`` if the string is a valid date respecting the given format. + Args + ``inputstr``: the input string. + + ``dateformat``: either ``YYYY-MM-DD`` (default), ``DD-MM-YYYY`` or ``MM-DD-YYYY``. + The dash (-) may be replaced by a dot (.), a slash (/) or a space. + Returns + ``True`` if the string contains a valid date and there is at least one character. + ``False`` otherwise or if the date format is invalid. + """ + ... + + def IsEmail(self, inputstr: str) -> bool: + """ + Return ``True`` if the string is a valid email address. + Args + ``inputstr``: the input string. + Returns + ``True`` if the string contains an email address and there is at least one character, + ``False`` otherwise. + """ + ... + + def IsFileName(self, inputstr: str, osname: Literal['WINDOWS', 'LINUX', 'MACOS', 'SOLARIS'] = ...) -> bool: + """ + Return ``True`` if the string is a valid filename in a given operating system. + Args + ``inputstr``: the input string. + + ``osname``: the default is the current operating system on which the script is run. + Returns + ``True`` if the string contains a valid filename and there is at least one character, + + """ + ... + + def IsIBAN(self, inputstr: str) -> bool: + """ + Returns ``True`` if the input string is a valid International Bank Account Number. + Args + ``inputstr``: the input string. + Returns + ``True`` if the string contains a valid IBAN number. The comparison is not case-sensitive. + """ + ... + + def IsIPv4(self, inputstr: str) -> bool: + """ + Return ``True`` if the string is a valid IPv4 address. + Args + ``inputstr``: the input string. + Returns + ``True`` if the string contains a valid IPv4 address and there is at least one character, + ``False`` otherwise. + """ + ... + + def IsLike(self, inputstr: str, pattern: str, casesensitive: bool = ...) -> bool: + """ + Returns True if the whole input string matches a given pattern containing wildcards. + Args + ``inputstr``: the input string. + + ``pattern``: the pattern as a string. The ``?`` represents any single character. + The ``*`` represents zero, one, or multiple characters. + + ``casesensitive``: defaults to ``False``. + Returns + ``True`` if a match is found. Zero-length input or pattern strings always return ``False``. + """ + ... + + def IsSheetName(self, inputstr: str) -> bool: + """ + Return ``True`` if the input string can serve as a valid Calc sheet name. + + The sheet name must not contain the characters ``[ ] * ? : / \\`` + or the character ``'`` (apostrophe) as first or last character. + Args + ``inputstr``: the input string. + Returns + ``True`` if the string is validated as a potential Calc sheet name, ``False`` otherwise. + """ + ... + + def IsUrl(self, inputstr: str) -> bool: + """ + Return ``True`` if the string is a valid absolute URL (Uniform Resource Locator). + Args + ``inputstr``: the input string. + Returns + ``True`` if the string contains a URL and there is at least one character, ``False`` otherwise. + """ + ... + + def SplitNotQuoted(self, + inputstr: str, + delimiter: str = ..., + occurrences: int = ..., + quotechar: Literal["'", '"'] = ..., + ) -> Tuple[str, ...]: + """ + Split a string on ``delimiter`` into an array. If ``delimiter`` is part of a quoted (sub)string, + it is ignored. Use case: parsing of csv-like records containing quoted strings. + Args + ``inputstr``: the input string. + + ``delimiter``: a string of one or more characters that is used to delimit the input string. + Defaults to ' ' (space). + + ``occurrences``: the maximum number of substrings to return (Default = 0, meaning no limit). + + ``quotechar``: the quoting character, either ``"`` (default) or ``'``. + Returns + A tuple whose items are chunks of the input string, The ``delimiter`` is not included. + """ + ... + + def Wrap(self, inputstr: str, width: int = ..., tabsize: int = ...) -> Tuple[str, ...]: + """ + Wraps every single paragraph in text (a string) so every line is at most ``width`` characters long. + Args + ``inputstr``: the input string. + + ``width``: the maximum number of characters in each line. Defaults to 70. + + ``tabsize``: before wrapping the text, the existing TAB (ASCII 09) characters are replaced with + spaces. ``TabSize`` defines the TAB positions at + ``TabSize + 1, 2 * TabSize + 1 , ... N * TabSize + 1``. Defaults to 8. + Returns + A tuple of output lines, without final newlines except the pre-existing line-breaks. + Tabs are expanded. Symbolic line breaks are replaced by their hard equivalents. + If the wrapped output has no content, the returned tuple is empty. + """ + ... + + # ######################################################################### + # SF_TextStream CLASS + # ######################################################################### + class SF_TextStream(SFServices): + """ + The ``TextStream`` service is used to sequentially read from and write to files opened or created + using the ScriptForge.FileSystem service. + """ + + AtEndOfStream: bool + """ Used in read mode. A ``True`` value indicates that the end of the file has been reached. + A test using this property should precede calls to the ``ReadLine()`` method. """ + Encoding: str + """ The character set to be used. The default encoding is "UTF-8". """ + FileName: FILE + """ Returns the name of the current file either in URL format or in the native operating system's format, + depending on the current value of the ``FileNaming`` property of the ``filesystem`` service. """ + IOMode: Literal['READ', 'WRITE', 'APPEND'] + """ The input/output mode. """ + Line: int + """ The number of lines read or written so far. """ + NewLine: str + """ Sets or returns the current delimiter to be inserted between two successive written lines. + The default value is the native line delimiter in the current operating system. """ + + def CloseFile(self) -> bool: + """ + Empties the output buffer if relevant. Closes the actual input or output stream. + Returns + ``True`` if the closure was successful. + """ + ... + + def ReadAll(self) -> str: + """ + Returns all the remaining lines in the text stream as one string. Line breaks are NOT removed. + The resulting string can be split in lines either by using the usual ``split()`` builtin function. + Returns + The read lines. The string may be empty. + Note + The ``Line`` property is incremented only by 1. + """ + ... + + def ReadLine(self) -> str: + """ + Returns the next line in the text stream as a string. Line breaks are removed. + Returns + The read line. The string may be empty. + """ + ... + + def SkipLine(self) -> None: + """ + Skips the next line when reading a ``TextStream`` file. This method can result in ``AtEndOfStream`` + being set to ``True``. + """ + ... + + def WriteBlankLines(self, lines: int) -> None: + """ + Writes a number of empty lines in the output stream. + Args + ``lines``: the number of lines to write. + """ + ... + + def WriteLine(self, line: str) -> None: + """ + Writes the given line to the output stream. A newline is inserted if relevant. + Args + ``line``: the line to write, may be the empty string. + """ + ... + + # ######################################################################### + # SF_Timer CLASS + # ######################################################################### + class SF_Timer(SFServices): + """ + The ``Timer`` service measures the amount of time it takes to run user scripts. + + A ``Timer`` measures durations. It can be: + - Started, to indicate when to start measuring time. + - Suspended, to pause measuring running time. + - Resumed, to continue tracking running time after the Timer has been suspended. + - Restarted, which will cancel previous measurements and start the Timer at zero. + """ + + Duration: float + """ The actual running time elapsed since start or between start and stop (not considering suspended time). """ + IsStarted: bool + """ ``True`` when timer is started or suspended. """ + IsSuspended: bool + """ ``True`` when timer is started and suspended. """ + SuspendDuration: float + """ The actual time elapsed while suspended since start or between start and stop. """ + TotalDuration: float + """ The actual time elapsed since start or between start and stop (including suspensions and running time). + ``TotalDuration = Duration + SuspendDuration``. """ + + def Continue(self) -> bool: + """ + Continue/Resume a suspended timer. + Returns + ``True`` except if the timer is not in suspended state. + """ + ... + + def Restart(self) -> bool: + """ + Terminate the timer and restart a new clean timer. + Returns + ``True`` except if the timer is inactive. + """ + ... + + def Start(self) -> bool: + """ + Start a new clean timer. + Returns + ``True`` except if the timer is already started. + """ + ... + + def Suspend(self) -> bool: + """ + Suspend a running timer. + Returns + ``True`` except if the timer is not started or already suspended. + """ + ... + + def Terminate(self) -> bool: + """ + Terminate a running timer. + Returns + ``True`` except if the timer is neither started nor suspended. + """ + ... + + # ######################################################################### + # SF_UI CLASS + # ######################################################################### + class SF_UI(SFServices, metaclass = ...): + """ + Class for the identification and the manipulation of the different windows composing the whole + ``LibreOffice`` application: + - Windows selection + - Windows moving and resizing + - Statusbar settings + - Creation of new windows + - Access to the underlying "documents" + + Windows can be designated using different ``WindowNames``: + - a full path and file name + - the last component of the full file name or even only the last component without its suffix + - the title of the window + - for new documents, something like "Untitled 1" + - one of the special windows ``BASICIDE`` and ``WELCOMESCREEN`` + A ``WindowName`` is case-sensitive. + """ + + MACROEXECALWAYS: Literal[2] + """ Macros are always executed. """ + MACROEXECNEVER: Literal[1] + """ Macros are never executed. """ + MACROEXECNORMAL: Literal[0] + """ Macro execution depends on user settings. """ + + ActiveWindow: str + """ A valid and unique WindowName for the currently active window. When the window cannot be identified, + a zero-length string is returned. """ + + Height: int + """ The height of the active window in pixels. """ + Width: int + """ The width of the active window in pixels. """ + + X: int + """ The X coordinate of the active window, which is the distance to the left edge of the screen in pixels. """ + + Y: int + """ The Y coordinate of the active window, which is the distance to the top edge of the screen in pixels. + This value does not consider window decorations added by your operating system, so even when the window + is maximized this value may not be zero. """ + + def Activate(self, windowname: str = ...) -> bool: + """ + Make the specified window active. + Args + ``windowname``: see definitions at ``SF_UI`` class level. + Returns + ``True`` if the given window is found and can be activated. + There is no change in the actual user interface if no window matches the selection. + """ + ... + + def CreateBaseDocument(self, + filename: str, + embeddeddatabase: Literal['HSQLDB', 'FIREBIRD', 'CALC'] = ..., + registrationname: str = ..., + calcfilename: str = ..., + ) -> BASE: + """ + Create a new LibreOffice Base document embedding an empty database of the given type. + Args + ``filename``: identifies the file to create. It must follow the ``FileSystem.FileNaming`` + notation. If the file already exists, it is overwritten without warning. + + ``embeddeddatabase``: either ``HSQLDB`` or ``FIREBIRD`` or ``CALC``. Defaults to ``HSQLDB``. + + ``registrationname``: the name used to store the new database in the databases register. + If "" (default), no registration takes place. If the name already exists it is overwritten + without warning. + + ``calcfilename``: only when ``embeddeddatabase`` = ``CALC``, the name of the file containing + the tables as Calc sheets. The name of the file must be given in ``FileSystem.FileNaming`` + notation. The file must exist. + Returns + A ``Base`` service instance. + """ + ... + + def CreateDocument(self, + documenttype: Literal['', 'calc', 'draw', 'impress', 'math', 'writer', + 'Calc', 'Draw', 'Impress', 'Math', 'Writer', + 'CALC', 'DRAW', 'IMPRESS', 'MATH', 'WRITER'] = ..., + templatefile: FILE = ..., + hidden: bool = ... + ) -> Union[DOCUMENT, CALC, WRITER]: + """ + Create a new ``LibreOffice`` document of a given type or based on a given template. + Args + ``documenttype``: Calc, Writer, etc. If absent, a ``templatefile`` must be given. + + ``templatefile``: the full ``FileName`` of the template to build the new document on. + If the file does not exist, the argument is ignored. + The ``FileSystem`` service provides the ``TemplatesFolder`` and ``UserTemplatesFolder`` + properties to help to build the argument. Defaults to ''. + + ``hidden``: if ``True``, open in the background. Defaults to ``False``. + To use with caution: activation or closure can only happen programmatically. + Returns + A ``Document`` object or one of its subclasses. + Note + Use the ``CreateBaseDocument()`` method to create a new ``Base`` document. + """ + ... + + def Documents(self) -> Tuple[str, ...]: + """ + Returns the list of the currently open documents. Special windows are ignored. + Returns + An array either of file names (in ``FileSystem.FileNaming`` notation) or of window titles + for unsaved documents. + """ + ... + + def GetDocument( + self, + windowname: Union[str, XComponent, XOfficeDatabaseDocument] = ... + ) -> Union[BASE, CALC, DOCUMENT, FORMDOCUMENT, WRITER]: + """ + Returns a ``Document`` object referring to the active window or the given window. + Args + ``windowname``: when a string, see definitions in ``SF_UI``. If absent the active window is + considered. When an object, must be a UNO object of types ``XComponent`` + or ``XOfficeDatabaseDocument``. + Returns + A ``Document`` object or one of its subclasses. + + """ + ... + + def Maximize(self, windowname: str = ...) -> None: + """ + Maximizes the active window or the given window. + Args + ``windowname``: see definitions in ``SF_UI``. If absent the active window is considered. + """ + ... + + def Minimize(self, windowname: str = ...) -> None: + """ + Minimizes the active window or the given window. + Args + ``windowname``: see definitions in ``SF_UI``. If absent the active window is considered. + """ + ... + + def OpenBaseDocument(self, + filename: FILE = ..., + registrationname: str = ..., + macroexecution: Literal[0, 1, 2] = ..., + ) -> BASE: + """ + Open an existing LibreOffice Base document and return a SFDocuments.Base object. + Args + ``filename``: identifies the file to open. + It must follow the ``FileSystem.FileNaming`` notation. Defaults to ''. + + ``registrationname``: the name of a registered database. + It is ignored if FileName <> "". Defaults to ''. + + ``macroexecution``: one of the MACROEXECxxx constants. Defaults to ``MACROEXECNORMAL``. + Returns + A ``Base`` object. + """ + ... + + def OpenDocument(self, + filename: FILE, + password: str = ..., + readonly: bool = ..., + hidden: bool = ..., + macroexecution: Literal[0, 1, 2] = ..., + filtername: str = ..., + filteroptions: str = ..., + ) -> Union[DOCUMENT, CALC, WRITER]: + """ + Open an existing LibreOffice document with the given options. + Args + ``filename``: identifies the file to open. It must follow the ``FileSystem.FileNaming`` + notation. + + ``password``: to use when the document is protected. If wrong or absent while the document + is protected, the user will be prompted to enter a password. + + ``readonly``: defaults to ``False``. + + ``hidden``: if ``True``, open in the background. Defaults to ``False``. + ``True`` to use with caution: activation or closure can only happen programmatically. + + ``macroexecution``: one of the MACROEXECxxx constants. Defaults to ``MACROEXECNORMAL``. + + ``filtername``: the name of a filter that should be used for loading the document. + If present, the filter must exist. Defaults to ''. + + ``filteroptions``: an optional string of options associated with the filter. + Returns + A ``Document`` object or one of its subclasses, or + None if the opening failed, including when due to a user decision. + """ + ... + + def Resize(self, left: int = ..., top: int = ..., width: int = ..., height: int = ...) -> None: + """ + Resizes and/or moves the active window. Negative or absent arguments are ignored. + If the window was minimized or without arguments, it is restored. + Args + ``left``: distance from left edge of screen. + + ``top``: distance from top of screen. + + ``width``: width of the window. + + ``height``: height of the window. + """ + ... + + def RunCommand(self, command: str, *args: Any, **kwargs: Any) -> None: + """ + Runs a UNO command on the current window. Commands can be run with or without arguments. + Arguments are not validated before running the command. If the command or its arguments are invalid, + then nothing will happen. + Args + ``command``: case-sensitive string containing the UNO command name. + The inclusion of the prefix ".uno:" in the command is optional. + The command itself is not checked for correctness. + + ``args, kwargs``: use either pairs of ("name", value) positional arguments + or pairs of name = value keyword arguments. + """ + ... + + def SetStatusbar(self, text: str = ..., percentage: Union[int, float] = ...) -> None: + """ + Display a text and a progressbar in the status bar of the active window. + Any subsequent calls in the same macro run refer to the same status bar of the same window, + even if the window is not active anymore. + A call without arguments resets the status bar to its normal state. + Args + ``text``: the optional text to be displayed before the progress bar. Defaults to ''. + + ``percentage``: the optional degree of progress between 0 and 100. + """ + ... + def ShowProgressBar(self, title: str = ..., text: str = ..., percentage: Union[int, float] = ...) -> None: + """ + Display a non-modal dialog box. Specify its title, an explicatory text and the progress + on a progressbar. A call without arguments erases the progress bar dialog. + The box will anyway vanish at the end of the macro run. + Args + ``title``: the title appearing on top of the dialog box (Default = ``ScriptForge``). + + ``text``: the optional text to be displayed above the progress bar. Defaults to ''. + + ``percentage``: the degree of progress between 0 and 100. + """ + ... + + def WindowExists(self, windowname: str) -> bool: + """ + Returns ``True`` if the specified window exists. + Args + ``windowname``: see the definitions in ``SF_UI``. + Returns + ``True`` if the given window is found. + """ + ... + + +# ##################################################################################################################### +# SFDatabases CLASS (alias of SFDatabases Basic library) ### +# ##################################################################################################################### +class SFDatabases: + """ + The SFDatabases class manages databases embedded in or connected to Base documents. + The associated services include the ``Database``, ``Dataset`` and ``Datasheet`` services. + """ + + # ######################################################################### + # SF_Database CLASS + # ######################################################################### + class SF_Database(SFServices): + """ + Each instance of the current class represents a single database, stored in or connected + to a ``Base`` document, with essentially its tables, queries and data. + + The exchanges with the database are done in SQL only. + To make them more readable, use optionally square brackets to surround table/query/field names + instead of the (RDBMS-dependent) normal surrounding character. + + ``SQL`` statements may be run in direct or indirect modes. In direct mode the statement is transferred + literally without syntax checking nor review to the database engine. + """ + + Queries: Tuple[str, ...] + """ The list of stored queries. """ + Tables: Tuple[str, ...] + """ The list of stored tables. """ + XConnection: UNO + """ The ``UNO`` object representing the current connection (``com.sun.star.sdbc.XConnection``). """ + XMetaData: UNO + """ The ``UNO`` object representing the metadata describing the database system attributes + (``com.sun.star.sdbc.XDatabaseMetaData``). """ + + def CloseDatabase(self) -> None: + """ + Close the current database connection. + """ + ... + + def Commit(self) -> None: + """ + Commits all updates done since the previous ``Commit`` or ``Rollback`` call. + This method is ignored if commits are done automatically after each SQL statement, + i.e. the database is set to the default auto-commit mode. + """ + ... + + def CreateDataset(self, sqlcommand: SQL_SELECT, directsql: bool = ..., filter: str = ..., orderby: str = ... + ) -> Optional[DATASET]: + """ + Creates a Dataset service instance based on a table, query or ``SQL SELECT`` statement. + Args + ``sqlcommand``: a table name, a query name or a valid ``SQL SELECT`` statement. + Identifiers may be enclosed with square brackets. This argument is case-sensitive. + + ``directsql``: set this argument to ``True`` to send the statement directly to the database + engine without preprocessing by LibreOffice (Default = ``False``). + + ``filter``: specifies the condition that records must match to be included in the returned + dataset. This argument is expressed as a ``SQL WHERE`` statement without the ``WHERE`` keyword. + + ``orderby``: specifies the ordering of the dataset as a ``SQL ORDER BY`` statement + without the ``ORDER BY`` keyword. + Returns + A ``Dataset`` service instance. + """ + ... + + def DAvg(self, expression: str, tablename: str, criteria: str = ...) -> Optional[float, int]: + """ + Compute the aggregate function ``AVG()`` on a field or expression belonging to a table + filtered by a ``WHERE``-clause. + Args + ``expression``: an ``SQL`` expression. + + ``tablename``: the name of a table. + + ``criteria``: an optional ``WHERE`` clause without the word ``WHERE``. + Returns + int | float | None + """ + ... + + def DCount(self, expression: str, tablename: str, criteria: str = ...) -> Optional[int]: + """ + Compute the aggregate function ``COUNT()`` on a field or expression belonging to a table + filtered by a ``WHERE``-clause. + Args + ``expression``: an ``SQL`` expression. + + ``tablename``: the name of a table. + + ``criteria``: an optional ``WHERE`` clause without the word ``WHERE``. + Returns + int | float | None + """ + ... + + def DLookup(self, expression: str, tablename: str, criteria: str = ..., orderclause: str = ...) -> Any: + """ + Compute a ``SQL`` expression on a single record returned by a ``WHERE`` clause defined by the + ``criteria`` parameter. + + If the query returns multiple records, only the first one is considered. + Use the ``orderclause`` parameter to determine how query results are sorted. + Args + ``expression``: an ``SQL`` expression in which the field names are surrounded with + square brackets. + + ``tablename``: the name of a table (without square brackets). + + ``criteria``: an optional ``WHERE`` clause without the word ``WHERE``, in which field names + are surrounded with square brackets. + + ``orderclause``: an optional ``ORDER BY`` clause without the ``ORDER BY`` keywords. + Field names should be surrounded with square brackets. + Returns + The found value or None. + """ + ... + + def DMax(self, expression: str, tablename: str, criteria: str = ...) -> Optional[float, int]: + """ + Compute the aggregate function ``MAX()`` on a field or expression belonging to a table + filtered by a ``WHERE``-clause. + Args + ``expression``: an ``SQL`` expression. + + ``tablename``: the name of a table. + + ``criteria``: an optional ``WHERE`` clause without the word ``WHERE``. + Returns + int | float | None + """ + ... + + def DMin(self, expression: str, tablename: str, criteria: str = ...) -> Optional[float, int]: + """ + Compute the aggregate function ``MIN()`` on a field or expression belonging to a table + filtered by a ``WHERE``-clause. + Args + ``expression``: an ``SQL`` expression. + + ``tablename``: the name of a table. + + ``criteria``: an optional ``WHERE`` clause without the word ``WHERE``. + Returns + int | float | None + """ + ... + + def DSum(self, expression: str, tablename: str, criteria: str = ...) -> Optional[float, int]: + """ + Compute the aggregate function ``SUM()`` on a field or expression belonging to a table + filtered by a ``WHERE``-clause. + Args + ``expression``: an ``SQL`` expression. + + ``tablename``: the name of a table. + + ``criteria``: an optional ``WHERE`` clause without the word ``WHERE``. + Returns + int | float | None + """ + ... + + def GetRows(self, + sqlcommand: SQL_SELECT, + directsql: bool = ..., + header: bool = ..., + maxrows: int = ..., + ) -> MATRIX: + """ + Return the content of a table, a query or a ``SELECT SQL`` statement as a list of lists. + The first index corresponds to the individual records and the second index refers to the record fields. + Args + ``sqlcommand``: a table name, a query name or a ``SELECT SQL`` statement. + + ``directsql``: when ``True``, no syntax conversion is done by LibreOffice. + Ignored when ``sqlommand`` is a table or a query name. Defaults to ``False``. + + ``header``: when ``True``, a header row is inserted on the top of the list with the + column names. Defaults to ``False``. + + ``maxrows``: the maximum number of returned rows. If absent, all records are returned. + Returns + The returned list will be empty if no rows are returned and the column headers are not required. + """ + ... + + def OpenFormDocument(self, formdocument: str) -> Optional[FORMDOCUMENT]: + """ + Open the ``FormDocument`` given by its hierarchical name in normal mode. + If the form document is already open, the form document is made active. + Args + ``formdocument``: a valid form document name as a case-sensitive string. + When hierarchical, the hierarchy must be rendered with forward slashes ("/"). + Returns + A ``FormDocument`` instance or ``None``. + """ + ... + + def OpenQuery(self, queryname: str) -> Optional[DATASHEET]: + """ + Opens the Data View window of the specified query. + Args + ``queryname``: the name of an existing query as a case-sensitive string. + Returns + An instance of the ``Datasheet`` service. + If the query could not be opened, then ``None`` is returned. + """ + ... + + def OpenSql(self, sql: SQL_SELECT, directsql: bool = ...) -> Optional[DATASHEET]: + """ + Runs a ``SQL SELECT`` command, opens a Data View window with the results. + Args + sql: a string containing a valid ``SQL SELECT`` statement. + Identifiers may be enclosed by square brackets. + + directsql: when ``True``, the ``SQL`` command is sent to the database engine + without pre-analysis. Defaults to ``False``. + Returns + An instance of the ``Datasheet`` service. + If the query could not be opened, then ``None`` is returned. + """ + ... + + def OpenTable(self, tablename: str) -> Optional[DATASHEET]: + """ + Opens the Data View window of the specified table. + Args + ``tablename``: the name of an existing table as a case-sensitive string. + Returns + An instance of the ``Datasheet`` service. + If the table could not be opened, then ``None`` is returned. + """ + ... + + def Rollback(self) -> None: + """ + Cancels all updates made to the database since the previous ``Commit`` or ``Rollback`` call. + This method is ignored if commits are done automatically after each SQL statement, + i.e. if the database is set to the default auto-commit mode. + """ + ... + + def RunSql(self, sqlcommand: SQL_ACTION, directsql: bool = ...) -> bool: + """ + Execute an action query (table creation, record insertion, ...) or ``SQL`` statement on + the current database. + Args + ``sqlcommand``: a query name (without square brackets) or an ``SQL`` statement. + + ``directsql``: when ``True``, no syntax conversion is done by LibreOffice. + Ignored when ``sqlcommand`` is a query name. Defaults to ``False``. + Returns + ``True`` when the command ran successfully. + """ + ... + + def SetTransactionMode(self, transactionmode: Literal[0, 1, 2, 4, 8] = ...) -> bool: + """ + Defines the level of isolation in database transactions. + + By default, databases manage transactions in auto-commit mode, which means that a ``Commit()`` + is automatically performed after every SQL statement. + + Use this method to manually determine the isolation level of transactions. + When a transaction mode other than ``NONE (0)`` is set, the script has to explicitly + call the ``Commit()`` method to apply the changes to the database. + + Args + ``tranactionmode``: specifies the transaction mode. + This argument must be one of the constants defined in ``com.sun.star.sdbc.TransactionIsolation`` + (Default = ``NONE``) + Returns + ``True`` when successful. + """ + ... + + # ######################################################################### + # SF_Dataset CLASS + # ######################################################################### + class SF_Dataset(SFServices): + """ + A dataset represents a set of tabular data produced by a database. + + In the user interface of LibreOffice a dataset corresponds with the data + displayed in a form or a data sheet (table, query). + + To use datasets, the database instance must exist but the Base document may not be open. + + With this service it is possible to: + - Navigate through and access the data in a dataset. + - Update, insert and remove records in a dataset. + """ + + BOF: bool + """ Returns ``True`` if the current record position is before the first record in the dataset, + otherwise returns ``False``. Set this property to ``True`` to move the cursor to the beginning of the dataset. + Setting this property to ``False`` is ignored. """ + DefaultValues: Dict + """ Returns a ``dict`` with the default values used for each field in the dataset. + The fields or columns in the dataset are the keys in the dictionary. The database field types are converted + to their corresponding Python data types. When the field type is undefined, the default value is None. """ + EOF: bool + """ Returns ``True`` if the current record position is after the last record in the dataset, + otherwise returns ``False``. Set this property to ``True`` to move the cursor to the end of the dataset. + Setting this property to ``False`` is ignored. """ + Fields: Tuple[str, ...] + """ Returns a list containing the names of all fields in the dataset. """ + Filter: str + """ Returns the filter applied in addition to the eventual ``WHERE`` clause(s) in the initial ``SQL`` statement. + This property is expressed as a ``WHERE`` clause without the ``WHERE`` keyword. """ + OrderBy: str + """ Returns the ordering clause that replaces the eventual ``ORDER BY`` clause present in the initial + ``SQL`` statement. This property is expressed as a ``ORDER BY`` clause without the ``ORDER BY`` keywords. """ + ParentDatabase: DATABASE + """ Returns the ``Database`` instance corresponding to the parent database of the current dataset. """ + RowCount: int + """ Returns the exact number of records in the dataset. Note that the evaluation of this property + implies browsing the whole dataset, which may be costly depending on the dataset size. """ + RowNumber: int + """ Returns the number of the current record starting at 1. Returns 0 if this property is unknown. """ + Source: str + """ Returns the source of the dataset. It can be either a table name, a query name or a ``SQL`` statement. """ + SourceType: str + """ Returns the source of the dataset. It can be one of the following string values: + ``TABLE``, ``QUERY`` or ``SQL``. """ + UpdatableFields: List + """ Returns a ``list`` containing the names of all fields in the dataset that are updatable. """ + Values: Dict + """ Returns a ``dict`` containing the pairs (field name: value) of the current record in the dataset. """ + XRowSet: UNO + """ Returns the ``com.sun.star.sdb.RowSet`` ``UNO`` object representing the dataset. """ + + def CloseDataset(self) -> bool: + """ + Closes the current Dataset. + Returns + ``True`` when successful. + """ + ... + + def CreateDataset(self, filter:str = ..., orderby: str = ...) -> DATASET: + """ + Returns a ``Dataset`` service instance derived from the actual dataset by applying + the specified ``filter`` and ``orderby`` arguments. + Args + ``filter``: specifies the condition that records must match to be included in the + returned dataset. This argument is expressed as a ``SQL WHERE`` clause + without the ``WHERE`` keyword. If this argument is not specified, then the filter + used in the current dataset is applied, otherwise the current filter is replaced + by this argument. + + ``orderby``: specifies the ordering of the dataset as a ``SQL ORDER BY`` clause + without the ``ORDER BY`` keywords. If this argument is not specified, then + the sorting order used in the current dataset is applied, otherwise + the current sorting order is replaced by this argument. + Returns + A new ``Dataset`` service instance. + """ + ... + + def Delete(self) -> bool: + """ + Deletes the current record from the dataset. + + After this operation the cursor is positioned at the record immediately after the deleted record. + When the deleted record is the last in the dataset, then the cursor is positioned after it + and the property ``EOF`` returns ``True``. + Returns + ``True`` when successful. + """ + ... + + def ExportValueToFile(self, fieldname: str, filename: FILE, overwrite: bool = ...) -> bool: + """ + Exports the value of a binary field of the current record to the specified file. + If the specified field is not binary or if it contains no data, then the output file is not created. + Args + ``fieldname``: the name of the binary field to be exported, as a case-sensitive string. + + ``filename``: the complete path to the file to be created using the notation defined + in the ``FileSystem.FileNaming`` property. + + ``overwrite``: set this argument to ``True`` to allow the destination file + to be overwritten (Default = ``False``). + Returns + ``True`` when successful. + """ + ... + + def GetRows(self, header: bool = ..., maxrows: int = ...) -> Optional[MATRIX]: + """ + Return the content of the dataset as a list of lists. + The first index corresponds to the individual records and the second index refers to the record fields. + Args + ``header``: when ``True``, a header row is inserted on the top of the list with the + column names. Defaults to ``False``. + + ``maxrows``: the maximum number of returned rows. If absent, all records are returned. + Returns + The returned list will be empty if no rows are returned and the column headers are not required. + """ + ... + + def GetValue(self, fieldname: str) -> Any: + """ + Returns the value of the specified field from the current record of the dataset. + Args + ``fieldname``: the name of the field to be returned, as a case-sensitive string. + Returns + If the specified field is binary, then its length is returned. + """ + ... + + def Insert(self, *args, **kwargs: Dict) -> int: + """ + Inserts a new record at the end of the dataset and initialize its fields with the specified values. + Updatable fields with unspecified values are initialized with their default values. + Args + Next variants are allowed: + - ``newid = dataset.Insert({"Name": "John", "Age": 50, "City": "Chicago"})`` + - ``newid = dataset.Insert("Name", "John", "Age", 50, "City", "Chicago")`` + - ``newid = dataset.Insert(Name = "John", Age = 50, City = "Chicago")`` + Returns + If the primary key of the dataset is an ``auto value``, then this method returns + the primary key value of the new record. Otherwise, the method will return 0 (when successful) + or -1 (when not successful). + """ + ... + + def MoveFirst(self) -> bool: + """ + Moves the dataset cursor to the first record. Deleted records are ignored by this method. + Returns + ``True`` when successful. + """ + ... + + def MoveLast(self) -> bool: + """ + Moves the dataset cursor to the last record. Deleted records are ignored by this method. + Returns + ``True`` when successful. + """ + ... + + def MoveNext(self, offset: int = ...) -> bool: + """ + Moves the dataset cursor forward by a given number of records. + Deleted records are ignored by this method. + Args + ``offset``: the number of records by which the cursor shall be moved forward. + This argument may be a negative value (Default = +1). + Returns + ``True`` when successful. + """ + ... + + def MovePrevious(self, offset: int = 1) -> bool: + """ + Moves the dataset cursor backward by a given number of records. + Deleted records are ignored by this method. + Args + ``offset``: the number of records by which the cursor shall be moved backward. + This argument may be a negative value (Default = +1). + Returns + ``True`` when successful. + """ + ... + + def Reload(self, filter: str = ..., orderby: str = ...) -> bool: + """ + Reloads the dataset from the database. The properties ``Filter`` and ``OrderBy`` may be defined + when calling this method. + + Reloading the dataset is useful when records have been inserted to or deleted from the database. + Note that the methods ``CreateDataset`` and ``Reload`` perform similar functions, + however ``Reload`` reuses the same Dataset class instance. + Args + ``filter``: specifies the condition that records must match to be included in the + returned dataset. This argument is expressed as a ``SQL WHERE`` clause + without the ``WHERE`` keyword. If this argument is not specified, then the filter + used in the current dataset is applied, otherwise the current filter is replaced + by this argument. + + ``orderby``: specifies the ordering of the dataset as a ``SQL ORDER BY`` clause + without the ``ORDER BY`` keywords. If this argument is not specified, then + the sorting order used in the current dataset is applied, otherwise + the current sorting order is replaced by this argument. + Returns + ``True`` when successful. + """ + ... + + def Update(self, *args, **kwargs) -> bool: + """ + Updates the values of the specified fields in the current record. + Args + Next variants are allowed: + - ``newid = dataset.Update({"Age": 51, "City": "New York"})`` + - ``newid = dataset.Update("Age", 51, "City", "New York")`` + - ``newid = dataset.Update(Age = 51, City = "New York")`` + Returns + ``True`` when successful. + """ + ... + + # ######################################################################### + # SF_Datasheet CLASS + # ######################################################################### + class SF_Datasheet(SFServices): + """ + The Datasheet service allows to visualize the contents of database tables as well as the results + of queries and ``SQL`` statements using ``Base's Data View``. + + Additionally, this service allows to: + - add custom menus to the data view + - access values in specific positions of the data view + - position the cursor in a specific cell of the data view + + The ``Base`` document owning the data may or may not be opened. + """ + + ColumnHeaders: Tuple[str, ...] + """ Returns a list with the names of the column headers in the datasheet. """ + CurrentColumn: str + """ Returns the currently selected column name. """ + CurrentRow: int + """ Returns the number of the currently selected row, starting at 1. """ + DatabaseFileName: FILE + """ Returns the file name of the ``Base`` file in ``SF_FileSystem.FileNaming`` format. """ + Filter: str + """ Specifies a filter to be applied to the datasheet expressed as the ``WHERE`` clause of a ``SQL`` query + without the ``WHERE`` keyword. If an empty string is specified then the active Filter is removed. """ + LastRow: int + """ Returns the number of rows in the datasheet. """ + OrderBy: str + """ Specifies the order in which records are shown expressed as the ``ORDER BY`` clause of a ``SQL`` query + without the ``ORDER BY`` keyword. If an empty string is specified then the active ``OrderBy`` is removed. """ + ParentDatabase: DATABASE + """ Returns the ``Database`` instance corresponding to the parent database of the current datasheet. """ + Source: SQL_SELECT + """ Returns the source of the datasheet. It can be either a table name, a query name + or a ``SQL`` statement. """ + SourceType: str + """ Returns the type of the data source of the datasheet. It can be one of the following string values: + ``TABLE``, ``QUERY`` or ``SQL``. """ + + XComponent: UNO + """ Returns the ``com.sun.star.lang.XComponent`` ``UNO`` object representing the datasheet. """ + + XControlModel: UNO + """ Returns the ``com.sun.star.awt.XControl`` ``UNO`` object representing the datasheet. """ + + XTabControllerModel: UNO + """ Returns the ``com.sun.star.awt.XTabControllerModel `` ``UNO`` object representing the datasheet. """ + + def Activate(self) -> None: + """ + Brings to front the data view window referred to by the ``Datasheet`` instance. + """ + ... + + def CloseDatasheet(self) -> None: + """ + Closes the data view window referred to by the ``Datasheet`` instance. + """ + ... + + def CreateMenu(self, menuheader: str, before: Union[str, int] = ..., submenuchar: str = ...) -> object: + """ + Creates a new menu entry in the data view window and returns a ``SFWidgets.Menu`` service instance, + with which menu items can be programmatically added. + Args + ``menuheader``: the name of the new menu. + ``before``: this argument can be either the name of an existing menu entry before + which the new menu will be placed or a number expressing the position of the new menu. + If this argument is left blank the new menu is placed as the last entry. + + ``submenuchar``: the delimiter used in menu trees . Defaults to ``">"``. + Returns + A ``Menu`` service instance. + Note + Menus added using the ``CreateMenu`` method are lost as soon as the data view window is closed. + """ + ... + + def GetText(self, column: Union[str, int] = ...) -> str: + """ + Returns the text in a given column of the current row. + Args + ``column``: the name of the column as a string or the column position (starting at ``1``). + If a position greater than the number of columns is given, the last column is returned. + Note + This method does not change the position of the cursor in the data view window. + Returns + The column text. + """ + ... + + def GetValue(self, column: Union[str, int]) -> Optional[Union[str, int, float, datetime.datetime]]: + """ + Returns the value in a given column of the current row as a valid Python type. + Args + ``column``: the name of the column as a string or the column position (starting at ``1``). + If a position greater than the number of columns is given, the last column is returned. + Returns + The targeted column value. + Binary types are returned as a ``int`` value indicating the length of the binary field. + """ + ... + + def GoToCell(self, row: int = ..., column: Union[int, str] = ...) -> None: + """ + Moves the cursor to the specified row and column. + Args + ``row``: the row number as a numeric value starting at ``1``. + If the requested row exceeds the number of existing rows, the cursor is moved to the last row. + If this argument is not specified, then the row is not changed. + + ``column``: the name of the column as a string or the column position (starting at ``1``). + If the requested column exceeds the number of existing columns, the cursor is moved + to the last column. If this argument is not specified, then the column is not changed. + """ + ... + + def RemoveMenu(self, menuheader: str) -> bool: + """ + Removes a menu entry from the data view menubar by its name. + Args + ``menuheader``: the case-sensitive name of the menu to be removed. + The name must not include the tilde (``~``) character. + Returns + ``True`` when successful. + Note + This method can remove menus that belong to the standard user interface + as well as menus that were programmatically added with the CreateMenu method. + The removal of standard menus is not permanent, and they will reappear + after the window is closed and reopened. + """ + ... + + def Toolbars(self, toolbarname: str = ...) -> Union[TOOLBAR, Tuple[str, ...]]: + """ + Returns either a list of the available toolbar names in the actual datasheet or a ``Toolbar`` + service instance. + Args + ``toolbarname``: the usual name of one of the available toolbars. + Returns + A zero-based array of toolbar names when the argument is absent, + or a new ``Toolbar`` object instance from the ``SF_Widgets`` class. + """ + ... + +# ##################################################################################################################### +# SFDialogs CLASS (alias of SFDialogs Basic library) ### +# ##################################################################################################################### +class SFDialogs: + """ + Management of dialogs. They may be defined with the Basic IDE or built from scratch. + """ + + # ######################################################################### + # SF_Dialog CLASS + # ######################################################################### + class SF_Dialog(SFServices): + """ + The ``Dialog`` service contributes to the management of dialogs created with the Basic Dialog Editor + or dialogs created on-the-fly. Each instance of the ``Dialog`` class represents a single dialog box + displayed to the user. + + A dialog box can be displayed in modal or in non-modal modes. + + In modal mode, + the box is displayed and the execution of the macro process is suspended + until one of the ``OK`` or ``Cancel`` buttons is pressed. In the meantime, user actions executed + on the box can trigger specific actions. + + In non-modal mode, + the dialog box is "floating" on the user desktop and the execution + of the macro process continues normally. A non-modal dialog closes when it is terminated + with the Terminate() method or when the LibreOffice session ends. + The window close button is inactive in non-modal dialogs. + + A dialog box disappears from memory after its explicit termination. + """ + + OKBUTTON: Literal[1] + """ ``OK`` button has been pressed. """ + CANCELBUTTON: Literal[0] + """ ``Cancel`` button has been pressed. """ + + Caption: str + """ Specify the title of the dialog. """ + Height: int + """ Specify the height of the dialog. """ + Modal: bool + """ Specifies if the dialog box is currently in execution in modal mode. """ + Name: str + """ The name of the dialog. """ + Page: int + """ A dialog may have several pages that can be traversed by the user step by step. + The Page property of the Dialog object defines which page of the dialog is active. """ + Visible: bool + """ Specify if the dialog box is visible on the desktop. + By default it is not visible until the ``Execute()`` method is run and visible afterwards. """ + XDialogModel: UNO + """ The UNO representation (``com.sun.star.awt.XControlModel``) of the dialog model. """ + XDialogView: UNO + """ The UNO representation (``com.sun.star.awt.XControl``) of the dialog view. """ + Width: int + """ Specify the width of the dialog. """ + + OnFocusGained: SCRIPT_URI + """ Get/set the macro triggered by the ``When receiving focus`` event.""" + OnFocusLost: SCRIPT_URI + """ Get/set the macro triggered by the ``When losing focus`` event.""" + OnKeyPressed: SCRIPT_URI + """ Get/set the macro triggered by the ``Key pressed`` event.""" + OnKeyReleased: SCRIPT_URI + """ Get/set the macro triggered by the ``Key released`` event.""" + OnMouseDragged: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse moved while button pressed`` event.""" + OnMouseEntered: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse inside`` event.""" + OnMouseExited: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse outside`` event.""" + OnMouseMoved: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse moved`` event.""" + OnMousePressed: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse button pressed`` event.""" + OnMouseReleased: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse button released`` event.""" + + def Activate(self) -> bool: + """ + Set the focus on the current dialog instance. + Probably called from after an event occurrence or to focus on a non-modal dialog. + Returns + ``True`` if focusing is successful. + """ + ... + + def Center(self, parent: Union[DIALOG, BASE, DOCUMENT, CALC, WRITER, FORMDOCUMENT, DATASHEET] = ...) -> bool: + """ + Centres the current dialogue box instance in the middle of a parent window. + Without arguments, the method centres the dialogue box in the middle of the current window. + Args + ``parent``: an optional object that can be either, + - a ScriptForge dialog object, + - a ScriptForge document (Calc, Base, ...) object. + Returns + ``True`` when successful. + """ + ... + def CloneControl( + self, sourcename: str, controlname: str, left: int = ..., top: int = ...) -> Optional[DIALOGCONTROL]: + """ + Duplicate an existing control of any type in the actual dialog. + The duplicated control is left unchanged. The new control can be relocated. + Args + ``sourcename``: the name of the control to duplicate. + + ``controlname``: the name of the new control. It must not exist yet. + + ``left``: the left coordinate of the new control expressed in "``Map AppFont``" units. + + ``top``: the top coordinate of the new control expressed in "``Map AppFont``" units. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def Controls(self, controlname: str = ...) -> Union[DIALOGCONTROL, Tuple[str, ...]]: + """ + Returns the list of the controls contained in the dialog or a dialog control object based on its name. + Args + ``controlname``: a valid control name as a case-sensitive string. + If absent the list is returned. + Returns + The list of available control names as strings when ``controlname`` is absent. + Otherwise, if ``controlname`` exists, an instance of the ``SFDialogs.SF_DialogControl`` class. + """ + ... + + def CreateButton(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + toggle: bool = ..., + push: Literal["", "OK", "CANCEL"] = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``Button`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``toggle``: when ``True`` a toggle button is created. Default = ``False``. + + ``push``: button type "OK", "CANCEL" or empty string (default). + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateCheckBox(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + multiline: bool = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``ComboBox`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``multiline``: when ``True`` the caption may be displayed on more than one line. + Default = ``False``. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateComboBox(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + dropdown: bool = ..., + linecount: int = ... + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``ComboBox`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``dropdown``: when ``True`` (default), a drop-down button is displayed. + + ``linecount``: the maximum line count displayed in the drop-down (default = 5). + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateCurrencyField(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + spinbutton: bool = ..., + minvalue: Union[int, float] = ..., + maxvalue: Union[int, float] = ..., + increment: int = ..., + accuracy: int = ... + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``CurrenyField`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``spinbutton``: when ``True`` a spin button is present. Default = ``False``. + + ``minvalue``: the smallest value that can be entered in the control. Default = -1000000. + + ``maxvalue``: the largest value that can be entered in the control. Default = +1000000. + + ``increment``: the step when the spin button is pressed. Default = 1. + + ``accuracy``: the decimal accuracy. Default = 2 decimal digits. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateDateField(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + dropdown: bool = ..., + mindate: datetime.datetime = ..., + maxdate: datetime.datetime = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``DateField`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``dropdown``: when ``True`` a dropdwn button is shown. Default = ``False``. + + ``mindate``: the smallest date that can be entered in the control. Default = 1900-01-01. + + ``maxdate``: the largest date that can be entered in the control. Default = 2200-12-31. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateFileControl(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``FileControl`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateFixedLine(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + orientation: Literal["H", "Horizontal", "V", "Vertical"], + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``FixedLine`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``orientation``: for horizontal orientation use "H" or "Horizontal", + for vertical orientation use "V" or "Vertical". + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateFixedText(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + multiline: bool = ..., + align: Literal["LEFT", "CENTER", "RIGHT"] = ..., + verticalalign: Literal["TOP", "MIDDLE", "BOTTOM"] = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``FixedText`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: border kind, "3D" or "FLAT" or "NONE". Default is ``NONE``. + + ``multiline``: when ``True`` the caption may be displayed on more than one line. + Default ``False``. + + ``align``: horizontal alignment, "LEFT" (default) or "CENTER" or "RIGHT". + + ``verticalalign``: vertical alignment, "TOP" (default) or "MIDDLE" or "BOTTOM". + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateFormattedField(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + spinbutton: bool = ..., + minvalue: Union[int, float] = ..., + maxvalue: Union[int, float] = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``FormattedField`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``spinbutton``: when ``True`` a spin button is present. Default = ``False``. + + ``minvalue``: the smallest value that can be entered in the control. Default = -1000000. + + ``maxvalue``: the largest value that can be entered in the control. Default = +1000000. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateGroupBox(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``GroupBox`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateHyperlink(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + multiline: bool = ..., + align: Literal["LEFT", "CENTER", "RIGHT"] = ..., + verticalalign: Literal["TOP", "MIDDLE", "BOTTOM"] = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``Hyperlink`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: border kind, "3D" or "FLAT" or "NONE". Default is ``NONE``. + + ``multiline``: when ``True`` the caption may be displayed on more than one line. + Default ``False``. + + ``align``: horizontal alignment, "LEFT" (default) or "CENTER" or "RIGHT". + + ``verticalalign``: vertical alignment, "TOP" (default) or "MIDDLE" or "BOTTOM". + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateImageControl(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + scale: Literal["FITTOSIZE", "KEEPRATIO", "NO"] = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``ImageControl`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: border kind, "3D" or "FLAT" or "NONE". Default is ``NONE``. + + ``scale``: one of next values, "FITTOSIZE" (default) or "KEEPRATIO" or "NO". + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateListBox(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + dropdown: bool = ..., + linecount: int = ..., + multiselect: bool = ... + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``ListBox`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``dropdown``: When ``True`` (default), a drop-down button is displayed. + + ``linecount``: the maximum line count displayed in the drop-down (default = 5). + + ``multiselect``: when ``True``, more than 1 entry may be selected. Default = ``False``. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateNumericField(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + spinbutton: bool = ..., + minvalue: Union[int, float] = ..., + maxvalue: Union[int, float] = ..., + increment: int = ..., + accuracy: int = ... + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``NumericField`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``spinbutton``: when ``True`` a spin button is present. Default = ``False``. + + ``minvalue``: the smallest value that can be entered in the control. Default = -1000000. + + ``maxvalue``: the largest value that can be entered in the control. Default = +1000000. + + ``increment``: the step when the spin button is pressed. Default = 1. + + ``accuracy``: the decimal accuracy. Default = 2 decimal digits. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreatePatternField(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + editmask: str = ..., + literalmask: str = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``PatternField`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``editmask``: a character code that determines what the user may enter. More info on + https://wiki.documentfoundation.org/Documentation/DevGuide/Graphical_User_Interfaces#Pattern_Field. + + ``literalmask``: contains the initial values that are displayed in the pattern field. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateProgressBar(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + minvalue: Union[int, float] = ..., + maxvalue: Union[int, float] = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``ProgressBar`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``minvalue``: the smallest value that can be entered in the control. Default = 0. + + ``maxvalue``: the largest value that can be entered in the control. Default = 100. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateRadioButton(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + multiline: bool = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``RadioButton`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``multiline``: when ``True`` the caption may be displayed on more than one line. + Default is ``False``. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateScrollBar(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + orientation: Literal["H", "Horizontal", "V", "Vertical"], + border: Literal["3D", "FLAT", "NONE"] = ..., + minvalue: Union[int, float] = ..., + maxvalue: Union[int, float] = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``ScrollBar`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``orientation``: for horizontal orientation use "H" or "Horizontal", + for vertical orientation use "V" or "Vertical". + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``minvalue``: the smallest value that can be entered in the control. Default = 0. + + ``maxvalue``: the largest value that can be entered in the control. Default = 100. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateTableControl(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + rowheaders: bool = ..., + columnheaders: bool = ..., + scrollbars: Literal["H", "Horizontal", "V", "Vertical", "B", "Both", "N", "None"] = ..., + gridlines: bool = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``TableControl`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``rowheaders``: when ``True`` (default), the row headers are shown. + + ``columnheaders``: when ``True`` (default), the column headers are shown. + + ``scrollbars``: H[orizontal] or V[ertical] or B[oth] or N[one] (default). + + ``gridlines``: when ``True`` horizontal and vertical lines are painted between the grid cells. + Default is ``False``. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateTextField(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + multiline: bool = ..., + maximumlength: int = ..., + passwordcharacter: str = ... + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``TextField`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: border kind, "3D" or "FLAT" or "NONE". Default is ``NONE``. + + ``multiline``: when ``True`` the caption may be displayed on more than one line. + Default ``False``. + + ``maximumlength``: the maximum character count (default = 0 meaning unlimited). + + ``passwordcharacter``: a single character specifying the echo for a password text field + (default = ""). + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateTimeField(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + mintime: datetime.datetime = ..., + maxtime: datetime.datetime = ... + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``TimeField`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + + ``mintome``: the smallest time that can be entered in the control. Default = 0h. + + ``maxtime``: the largest time that can be entered in the control. Default = 24h. + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def CreateTreeControl(self, + controlname: str, + place: Union[UNO, Tuple[int, int, int, int]], + border: Literal["3D", "FLAT", "NONE"] = ..., + ) -> Optional[DIALOGCONTROL]: + """ + Create a new control of type ``TreeControl`` in the actual dialog. + Args + ``controlname``: the name of the new control. It must not exist yet. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + + ``border``: "3D" (default), "FLAT" or "NONE". + Returns + A ``SFDialogs.SF_DialogControl`` instance or ``None``. + """ + ... + + def EndExecute(self, returnvalue: int) -> None: + """ + Ends the display of a modal dialog and gives back the argument + as return value for the current Execute() action. + + ``EndExecute()`` is usually contained in the processing of a macro + triggered by a dialog or control event. + Args + ``returnvalue``: The value passed to the running ``Execute()`` method. + """ + ... + + def Execute(self, modal: bool = ...) -> int: + """ + Display the dialog. In modal mode, the process is suspended until its closure by the user. + Args + ``modal``: ``False`` when non-modal dialog. Defaults to ``True``. + Returns + 0 = Cancel button pressed. 1 = OK button pressed. Otherwise: the dialog stopped + with an ``EndExecute()`` statement executed from a dialog or control event. + """ + ... + + def GetTextsFromL10N(self, l10n: L10N) -> bool: + """ + Replace all fixed text strings of a dialog by their localized version. + Replaced texts are: + - the title of the dialog + - the caption associated with next control types: ``Button, CheckBox, FixedLine, FixedText, GroupBox`` and ``RadioButton`` + - the content of list- and comboboxes + - the tip- or helptext displayed when the mouse is hovering a control. + The current method has a twin method ``ScriptForge.SF_L10N.AddTextsFromDialog``. + The current method is probably run before the ``Execute()`` method. + Args + ``l10n``: A "L10N" service instance created with CreateScriptService("L10N"). + Returns + ``True`` when successful. + """ + ... + + def OrderTabs(self, tabslist: Sequence[str], start: int = ..., increment: int = ...) -> bool: + """ + Set the tabulation index of a series of controls. + + The sequence of controls is given as a list or tuple of control names from the first to the last. + + Next controls will not be accessible (anymore ?) via the TAB key if >=1 of next conditions is met: + - if they are not in the given list + - if their type is ``FixedLine``, ``GroupBox`` or ``ProgressBar`` + - if the control is disabled + Args + ``tabslist``: a list or tuple of valid control names in the order of tabulation. + + ``start``: the tab index to be assigned to the 1st control in the list. Default is ``1``. + + ``increment``: the difference between ``2`` successive tab indexes. Default is ``1``. + Returns + ``True`` when successful. + """ + ... + + def Resize(self, left: int = ..., top: int = ..., width: int = ..., height: int = ...) -> bool: + """ + Moves the topleft corner of a dialog to new coordinates and/or modify its dimensions. + All distances are expressed in ``Map AppFont`` units. + Without arguments, the method resets the initial position and dimensions. + Args + ``left``: the horizontal distance from the top-left corner. + + ``top``: the vertical distance from the top-left corner. + + ``width``: the width of the rectangle containing the dialog. + + ``height``: the height of the rectangle containing the dialogue box. + Returns + ``True`` if the resize was successful. + """ + ... + + def SetPageManager(self, + pilotcontrols: str = ..., + tabcontrols: str = ..., + wizardcontrols: str = ..., + lastpage: int = ..., + ) -> bool: + """ + Defines which controls in a dialog are responsible for switching pages, making it easier + to orchestrate the ``Page`` property of a dialog and its controls. + + Dialogs may have multiple pages and the currently visible page is defined by the ``Page``dialog property. + If the ``Page`` property is left unchanged, the default visible page is equal to ``0`` (zero), meaning + that no particular page is defined and all visible controls are displayed regardless of the value set in + their own ``Page`` property. + + When the ``Page`` property of a dialog is changed to some other value such as ``1``, ``2``, ``3`` + and so forth, then only the controls whose ``Page`` property match the current dialog page will + be displayed. + + By using the SetPageManager method it is possible to define four types of page managers: + - List box or combo box: in this case, each entry in the list box or combo box corresponds to a page. The first item refers to Page 1, the second items refers to Page 2 and so on. + - Group of radio buttons: defines a group of radio buttons that will control which page is visible. + - Sequence of buttons: defines a set of buttons, each of which corresponding to a dialog page. This can be used to emulate a tabbed interface by placing buttons side by side in the dialog. + - Previous/Next buttons: defines which buttons in the dialog that will be used to navigate to the Previous/Next page in the dialog. + + This method is supposed to be called just once before calling the ``Execute()`` method. + Subsequent calls are ignored. + Args + ``pilotcontrols``: a comma-separated list of ``ListBox``, ``ComboBox`` or ``RadioButton`` + control names used as page managers. + For ``RadioButton`` controls, specify the name of the first control in the group to be used. + + ``tabcontrols``: a comma-separated list of button names that will be used as page managers. + The order in which they are specified in this argument corresponds to the page number + they are associated with. + + ``wizardcontrols``: a comma-separated list with the names of two buttons that will be used + s the ``Previous/Next`` buttons. + + ``lastpage``: the number of the last available page. + It is recommended to specify this value when using the ``Previous/Next`` page manager. + Returns + ``True`` on success. + Tip + It is possible to use more than one page management mechanism at the same time. + """ + ... + + def Terminate(self) -> bool: + """ + Terminate the dialog service for the current dialog instance. + After termination any action on the current instance will be ignored. + Returns + ``True`` if termination is successful. + """ + ... + + # ######################################################################### + # SF_DialogControl CLASS + # ######################################################################### + class SF_DialogControl(SFServices): + """ + Each instance of the current class represents a single control within a dialog box. + The focus is clearly set on getting and setting the values displayed by the controls of the dialog box, + not on their formatting. + A special attention is given to controls with type ``TreeControl``. + """ + + Border: Literal["3D", "FLAT", "NONE"] + """ Get the surrounding of the control. """ + Cancel: bool + """ Get/set whether a command button has or not the behaviour of a Cancel button. + Applicable to ``Button`` controls. """ + Caption: str + """ Get/set the text associated with the control. Applicable to ``Button, CheckBox, FixedLine, + FixedText, GroupBox, Hyperlink, RadioButton`` controls. """ + ControlType: str + """ get the type of control as a string. """ + CurrentNode: UNO + """ Get/set the currently upmost node selected in the tree control, as a + ``com.sun.star.awt.tree.XMutableTreeNode`` object. Applicable to ``TreeControl`` controls. """ + Default: bool + """ Get/set whether a command button is the default (OK) button. + Applicable to ``Button`` controls. """ + Enabled: bool + """ Specifies if the control is accessible with the cursor. """ + Format: Literal["Standard (short)", "Standard (short YY)", "Standard (short YYYY)", "Standard (long)", + "DD/MM/YY", "MM/DD/YY", "YY/MM/DD", "DD/MM/YYYY", "MM/DD/YYYY", "YYYY/MM/DD", "YY-MM-DD", "YYYY-MM-DD", + "24h short", "24h long", "12h short", "12h long"] + """ Get/set the format used to display dates and times. Applicable to ``DateField, TimeFiels, FormattedField`` + controls. """ + Height: int + """ Get/set the height of the control. """ + ListCount: int + """ Get the number of rows in the control. Applicable to ``ComboBox, ListBox, TableControl`` controls. """ + ListIndex: int + """ Get/set which item is selected in the control. Applicable to ``ComboBox, ListBox, TableControl`` + controls. """ + Locked: bool + """ Get/set if the control is read-only.. Applicable to ``ComboBox, CurrencyField, DateField, FileControl, + FormattedField, ListBox, NumericField, PatternField, TextField, TimeField`` controls. """ + MultiSelect: bool + """ Get/set whether a user can make multiple selections in a ``listbox``. """ + Name: str + """ The name of the control. """ + + OnActionPerformed: SCRIPT_URI + """ Get/set the macro triggered by the ``Execute action`` event. """ + OnAdjustmentValueChanged: SCRIPT_URI + """ Get/set the macro triggered by the ``While adjusting`` event. """ + OnFocusGained: SCRIPT_URI + """ Get/set the macro triggered by the ``When receiving focus`` event.""" + OnFocusLost: SCRIPT_URI + """ Get/set the macro triggered by the ``When losing focus`` event.""" + OnItemStatusChanged: SCRIPT_URI + """ Get/set the macro triggered by the ``Item status changed`` event. """ + OnKeyPressed: SCRIPT_URI + """ Get/set the macro triggered by the ``Key pressed`` event.""" + OnKeyReleased: SCRIPT_URI + """ Get/set the macro triggered by the ``Key released`` event.""" + OnMouseDragged: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse moved while button pressed`` event.""" + OnMouseEntered: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse inside`` event.""" + OnMouseExited: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse outside`` event.""" + OnMouseMoved: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse moved`` event.""" + OnMousePressed: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse button pressed`` event.""" + OnMouseReleased: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse button released`` event.""" + OnNodeExpanded: SCRIPT_URI + """ Get/set the macro triggered by the ``Expansion button is pressed on a node in a tree control`` event. """ + OnNodeSelected: SCRIPT_URI + """ Get/set the macro triggered by the ``Node in a tree control is selected`` event.""" + + Page: int + """ A dialog may have several pages that can be traversed by the user step by step. + The Page property of the Dialog object defines which page of the dialog is active. + The`` ``Page property of a control defines the page of the dialog on which the control is visible. """ + Parent: DIALOG + """ The parent ``DIALOG`` class object instance. """ + Picture: FILE + """ Get/se the file name (in ``FileSystem.FileNaming`` notation) containing a bitmap or other type of graphic + to be displayed on the specified control. """ + RootNode: UNO + """ Get the lowest root node (usually there is only one such root node), as a + ``com.sun.star.awt.tree.XMutableTreeNode`` object. Applicable to ``TreeControl`` controls. """ + RowSource: Sequence[str] + """ Get/set the data contained in a ``combobox`` or a ``listbox``. """ + TabIndex: int + """ Specifies a control's place in the tab order in the dialog. """ + Text: str + """ Get the text being displayed by the control. Applicable to ``ComboBox, FileControl, FormattedField, + PatternField, TextField`` controls. """ + TripleState: bool + """ Get/set whether the ``checkbox`` control may appear dimmed (grayed). """ + URL: str + """ Get/set the URL to open when clcking the ``hyperlink`` control. """ + Value: Any + """ + Get/set the content of the control: + + - ``Button``: bool - For toggle buttons only. + - ``CheckBox``: bool, int - 0, ``False``: not checked, 1, ``True``: checked, 2: grayed, don't know. + - ``ComboBox``: str - The selected value. The ``ListIndex`` property is an alternate option. + - ``CurrencyField``: int, float. + - ``DateField``: datetime.datetime. + - ``FileControl``: FILE. + - ``FormattedField``: str, int, float. + - ``ListBox``: List(str), str - The selected row(s) as a scalar or as an array depending on the ``MultiSelect`` attribute. + - ``NumericField``: int, float. + - ``PatternField``: str. + - ``ProgressBar``: int - Must be within the predefined bounds. + - ``RadioButton``: bool - Each button has its own name. They are linked together if their TAB positions are contiguous. If a radiobutton is set to ``True``, the other related buttons are automatically set to ``False``. + - ``ScrollBar``: int - Must be within the predefined bounds. + - ``TableControl``: List[Any] - The data of the currently selected row. + - ``TextField``: str - The text appearing in the control. + - ``TimeField``: datetime.datetime. + Not applicable to ``FixedLine, FixedText, GroupBox, Hyperlink, ImageControl`` and ``TreeControl`` dialog controls. + """ + Visible: bool + """ Get/set if the dialog control is hidden or visible. """ + Width: int + """ Get/set the width of the control. """ + X: int + """ X coordinate of the top-left corner of the control. """ + Y: int + """ Y coordinate of the top-left corner of the control. """ + + XControlModel: UNO + """ The UNO representation (``com.sun.star.awt.XControlModel``) of the control model. """ + XControlView: UNO + """ The UNO representation (``com.sun.star.awt.XControl``) of the control view. """ + XGridColumnModel: UNO + """ The UNO representation (``com.sun.star.awt.grid.XGridColumnModel``) of a ``tablecontrol`` column model. """ + XGridDataModel: UNO + """ The UNO representation (``com.sun.star.awt.grid.XGridDataModel``) of a ``tablecontrol`` data model. """ + XTreeDataModel: UNO + """ The UNO representation (``com.sun.star.awt.tree.MutableTreeDataModel``) of a ``treecontrol`` data model. """ + + def AddSubNode(self, + parentnode: XMutableTreeNode, + displayvalue: str, + datavalue: Any = ..., + ) -> XMutableTreeNode: + """ + Return a new node of the tree control subordinate to a parent node. + Args + ``parentnode``: a node UNO object, of type ``com.sun.star.awt.tree.XMutableTreeNode``. + + ``displayvalue``: the text appearing in the control box. + + ``datavalue``: any value associated with the new node. + Returns + The new node UNO object: ``com.sun.star.awt.tree.XMutableTreeNode``. + """ + ... + + def AddSubTree(self, + parentnode: XMutableTreeNode, + flattree: MATRIX, + withdatavalue: bool = ..., + ): + """ + Return ``True`` when a subtree, subordinate to a parent node, could be inserted successfully + in a tree control. If the parent node had already child nodes before calling this method, + the child nodes are erased. + Args + ``parentnode``: a node UNO object, of type ``com.sun.star.awt.tree.XMutableTreeNode``. + + ``flattree``: a list of lists sorted on the columns containing the ``DisplayValues``. + + ``withdatavalue``: when ``False`` (default), every column of ``FlatTree`` contains the + text to be displayed in the tree control. When ``True``, the texts to be displayed + (``DisplayValue``) are in columns 0, 2, 4, ... while the ``DataValues`` are in columns + 1, 3, 5, ... + Notes + Typically, such an array can be issued by the GetRows() method applied on + the ``SFDatabases.Database`` service. + """ + ... + + def CreateRoot(self, displayvalue: str, datavalue: Any = ...) -> XMutableTreeNode: + """ + Return a new root node of the tree control. + The new tree root is inserted below pre-existing root nodes. + Args + ``displayvalue``: the text appearing in the control box. + + ``datavalue``: any value associated with the root node. + Returns + The new root node as a UNO object of type ``com.sun.star.awt.tree.XMutableTreeNode``. + """ + ... + + def FindNode(self, + displayvalue: str = ..., + datavalue: Any = ..., + casesensitive: bool = ..., + ) -> Optional[XMutableTreeNode]: + """ + Traverses the tree and find recursively, starting from the root, a node meeting some criteria. + Either (1 match is enough) having its ``DisplayValue`` like ``displayValue`` or + having its ``DataValue`` = ``datavalue``. + + Comparisons may be or not case-sensitive. + + The first matching occurrence is returned. + Args + ``displayvalue``: the pattern to be matched. It may contain wildcards(? and *). + + ``datavalue``: a string, a numeric value or a date. + + ``casesensitive``: Defaults to ``False``. + Returns + The found node of type ``com.sun.star.awt.tree.XMutableTreeNode`` or ``None`` if not found. + """ + ... + + def Resize(self, left: int = ..., top: int = ..., width: int = ..., height: int = ...) -> bool: + """ + Move the top-left corner of the control to new coordinates and/or modify its dimensions. + Without arguments, the method resets the initial dimensions and position. + All distances are expressed in ``Map AppFont`` units and are measured from the top-left corner + of the parent dialog. + Args + ``left``: the horizontal distance from the top-left corner. It may be negative. + + ``top``: the vertical distance from the top-left corner. It may be negative. + + ``width``: the horizontal width of the rectangle containing the control. It must be positive. + + ``height``: the vertical height of the rectangle containing the control. It must be positive. + Returns + ``True`` when successful. + """ + ... + + def SetFocus(self) -> bool: + """ + Set the focus on the current Control instance. + Probably called from after an event occurrence. + Returns + ``True`` if focusing is successful. + """ + ... + + def SetTableData(self, + dataarray: MATRIX, + widths: Sequence[Union[int, float]] = ..., + alignments: str = ..., + rowheaderwidth: int = ..., + ) -> bool: + """ + Fill a table control with the given data. Preexisting data is erased. + + The Basic IDE allows to define if the control has a row and/or a column header. + When it is the case, the array in argument should contain those headers resp. in the first + column and/or in the first row. + + A column in the control shall be sortable when the data (headers excluded) in that column + is homogeneously filled either with numbers or with strings. + + Columns containing strings will by default be left-aligned, those with numbers will be right-aligned. + Args + ``dataarray``: the set of data to display in the table control, including optional + column/row headers. + + ``widths``: tuple or list containing the relative widths of each column. + In other words, widths = (1, 2) means that the second column is twice as wide as + the first one. If the number of values in the tuple is smaller than the number of + columns in the table, then the last value in the tuple is used to define the width + of the remaining columns. + + ``alignments``: the column's horizontal alignment as a string with length = number of columns. + Possible characters are: L(eft), C(enter), R(ight) or space (default behavior). + + ``rowheaderwidth``: width of the row header column expressed in ``Map AppFont`` units. + Defaults to ``10``. The argument is ignored when the table control has no row header. + Returns + ``True`` when successful. + """ + ... + + def WriteLine(self, line: str = ...) -> bool: + """ + Add a new line to a multiline ``TextField`` control. + Args + ``line``: the line to insert at the end of the text box. + A newline character will be inserted before the line, if relevant. Defaults to an empty line. + Returns + ``True`` if insertion is successful. + """ + ... + + +# ##################################################################################################################### +# SFDocuments CLASS (alias of SFDocuments Basic library) ### +# ##################################################################################################################### +class SFDocuments: + """ + The SFDocuments class gathers a number of classes, methods and properties making easy + managing and manipulating LibreOffice documents. + """ + + # ######################################################################### + # SF_Document CLASS + # ######################################################################### + class SF_Document(SFServices): + """ + The methods and properties are generic for all types of documents: they are combined in the + current SF_Document class + - saving, exporting, closing documents + - accessing their standard or custom properties + - styles and menubar management + + Specific properties and methods are implemented in the concerned subclass(es) SF_Calc, SF_Base, ... + """ + + CustomProperties: DICTIONARY + """ Returns a ``ScriptForge.Dictionary`` object instance. After update, can be passed again to the property + for updating the document. Individual items of the dictionary may be either strings, numbers, + ``datetime.datetime`` or ``com.sun.star.util.Duration`` items. + This property is not applicable to ``Base`` documents. """ + Description: str + """ Get/set the ``Description`` property of the document (also known as "``Comments``"). + This property is not applicable to ``Base`` documents. """ + DocumentProperties: DICTIONARY + """ Returns a ``ScriptForge.Dictionary`` object instance containing all the entries. Document statistics + are included. Note that they are specific to the type of document. As an example, a ``Calc`` document + includes a "``CellCount``" entry. Other documents do not. + This property is not applicable to ``Base`` documents. """ + DocumentType: str + """ String value with the document type (``Base``, ``Calc``, ``Writer``, etc) """ + ExportFilters: Tuple[str, ...] + """ Returns a tuple of strings with the export filter names applicable to the current document. + Filters used for both import/export are also returned. + This property is not applicable to ``Base`` documents. """ + FileSystem: FILE + """ Returns a string with the URL path to the root of the virtual file system of the document. + Use the ``FileSystem`` service to view its contents, as well as to create, open and read files stored in it. """ + ImportFilters: Tuple[str, ...] + """ Returns a tuple of strings with the import filter names applicable to the current document. + Filters used for both import/export are also returned. + This property is not applicable to ``Base`` documents. """ + IsBase: bool + """ ``True`` when type of document = ``Base``. """ + IsCalc: bool + """ ``True`` when type of document = ``Calc``. """ + IsDraw: bool + """ ``True`` when type of document = ``Draw``. """ + IsFormDocument: bool + """ ``True`` when type of document = ``FormDocument``. """ + IsImpress: bool + """ ``True`` when type of document = ``Impress``. """ + IsMath: bool + """ ``True`` when type of document = ``Math``. """ + IsWriter: bool + """ ``True`` when type of document = ``Writer``. """ + Keywords: str + """ Get/set the ``Keywords`` property of the document as a comma-seprated list of keywords. + This property is not applicable to ``Base`` documents. """ + Readonly: bool + """ ``True`` if the document is actually in read-only mode. + This property is not applicable to ``Base`` documents. """ + StyleFamilies: Tuple[str, ...] + """ Get the list of available style families. + This property is not applicable to ``Base`` documents. """ + Subject: str + """ Get/set the ``Subject`` property of the document. + This property is not applicable to ``Base`` documents. """ + Title: str + """ Get/set the ``Title`` property of the document. + This property is not applicable to ``Base`` documents. """ + + XComponent: UNO + """ A ``com.sun.star.lang.XComponent`` or ``com.sun.star.comp.dba.ODatabaseDocument`` UNO object representing + the document. """ + XDocumentSettings: UNO + """ A ``com.sun.star.XXX.DocumentSettings`` UNO object, where XXX is either ``sheet, text, drawing`` or + ``presentation``. This object gives access to the internal UNO properties that are specific + to the document's type. + This property is not applicable to ``Base`` documents. """ + + def Activate(self) -> bool: + """ + Make the current document active. + Returns + ``True`` if the document could be activated. + Otherwise, there is no change in the actual user interface. + """ + ... + + def CloseDocument(self, saveask: bool = ...) -> bool: + """ + Close the document. Does nothing if the document is already closed + regardless of how the document was closed, manually or by program. + Args + ``saveask``: if ``True`` (default), the user is invited to confirm or not the writing + of the changes on disk. No effect if the document was not modified. + Returns + ``False`` if the user declined to close. + """ + ... + + def CreateMenu(self, menuheader: str, before: Union[str, int] = ..., submenuchar: str = ... + ) -> MENU: + """ + Creates a new menu entry in the menubar of a given document window. + + The menu created is only available during the current LibreOffice session and is not saved neither + in the document nor in the global application settings. + Hence, closing the document window will make the menu disappear. + It will only reappear when the macro that creates the menu is executed again. + Args + ``menuheader``: the toplevel name of the new menu. + + ``before``: the name (as a string) or position (as an integer starting at 1) of + an existing menu before which the new menu will be placed. + If no value is defined for this argument, the menu will be created at the last position + in the menubar. + + ``submenuchar``: the delimiter used to create menu trees when calling + methods as ``AddItem()`` from the Menu service. The default value is ">". + Returns + A ``SFWidgets.SF_Menu`` class instance or ``None``. + """ + ... + + def DeleteStyles(self, family: str, styleslist: Union[str, Sequence[str]]) -> None: + """ + Suppresses a single style or a list of styles given by their names within a specific styles family. + Only user-defined styles may be deleted, built-in styles are ignored. + It applies to all document types except ``Base`` and ``FormDocument``. + Args + ``family``: one of the style families present in the actual document, as a case-sensitive + string. Valid family names can be retrieved using the ``StyleFamilies`` property. + + ``styleslist``: a single style name as a string or a list/tuple of style names. + The style names may be localized or not. The styles list is typically the output of the + execution of a ``Styles()`` method. + + """ + ... + + def Echo(self, echoon: bool = ..., hourglass: bool = ...) -> None: + """ + While a script is executed any display update resulting from that execution + is done immediately. + + For performance reasons it might be an advantage to differ the display updates + up to the end of the script. This is where pairs of Echo() methods to set and reset the removal of the + immediate updates may be beneficial. + + Optionally the actual mouse pointer can be modified to the image of an hourglass. + + Args + ``echoon``: when ``False``, the display updates are suspended. Default is ``True``. + + ``hourglass``: when ``True``, the mouse pointer is changed to an hourglass. Default is ``False``. + """ + ... + + def ExportAsPDF(self, + filename: FILE, + overwrite: bool = ..., + pages: str = ..., + password: str = ..., + watermark: str = ..., + ) -> bool: + """ + Store the document to the given file location in PDF format. + This method is not applicable to ``Base`` documents. + Args + ``filename``: identifies the file where to save. + It must follow the ``SF_FileSystem.FileNaming`` notation. + + ``overwrite``: ``True`` if the destination file may be overwritten. Defaults to ``False``. + + ``pages``: the pages to print as a string, like in the user interface. Example: "1-4;10;15-18". + + ``password``: password to open the document. + + ``watermark``: the text for a watermark to be drawn on every page of the exported PDF file. + Returns + ``False`` if the document could not be saved. + """ + ... + + def PrintOut(self, pages: str = ..., copies: int = ...) -> bool: + """ + Send the content of the document to the printer. + The printer might be defined previously by default, by the user or by the ``SetPrinter()`` method. + This method is not applicable to ``Base`` documents. + Args + ``pages``: the pages to print as a string, like in the user interface. Example: "1-4;10;15-18". + Default is all pages. + + ``copies``: the number of copies. Defaults to 1. + Returns + ``True`` when successful. + """ + ... + + def RemoveMenu(self, menuheader: str) -> bool: + """ + Removes a toplevel menu from the menubar of a given document window. + Args + ``menuheader``: the toplevel name of the menu to be removed. + Returns + ``True`` if the specified menu existed and could be removed. + Notes + This method can be used to remove any menu entry from the document window, including + default menus. However, none of these changes in the menubar are saved to the document + or to the application settings. To restore the menubar to the default settings, + simply close and reopen the document. + """ + ... + + def RunCommand(self, command: str, *args, **kwargs) -> None: + """ + Runs a UNO command on the document window associated with the service instance. + + The document itself does not need to be active to be able to run commands. + + Commands can be run with or without arguments. Arguments are not validated before running the command. + If the command or its arguments are invalid, then nothing will happen. + Args + ``command``: case-sensitive string containing the UNO command name. + The inclusion of the prefix ``.uno:`` in the command is optional. + The command itself is not checked for correctness. + + ``kwargs``: the command arguments as keyword arguments. + """ + ... + + def Save(self) -> bool: + """ + Store the document to the file location from which it was loaded. + The method is ignored if the document was not modified. + Returns + ``False`` if the document could not be saved. + """ + ... + + def SaveAs(self, + filename: FILE, + overwrite: bool = ..., + password: str = ..., + filtername: str = ..., + filteroptions: str = ..., + ) -> bool: + """ + Store the document to the given file location. + The new location becomes the new file name on which simple ``Save()`` method calls will be applied. + Args + ``filename``: identifies the file where to save. It must follow the ``SF_FileSystem.FileNaming`` + notation. + + ``overwrite``: ``True`` if the destination file may be overwritten. Defaults to ``False``. + + ``password``: a non-space string to protect the document. + + ``filtername``: the name of a filter that should be used for saving the document. + If present, the filter must exist. + + ``filteroptions``: a string of options associated with the filter. + Returns + ``False`` if the document could not be saved. + """ + ... + + def SaveCopyAs(self, + filename: FILE, + overwrite: bool = ..., + password: str = ..., + filtername: str = ..., + filteroptions: str = ..., + ) -> bool: + """ + Store the document to the given file location. + The actual location is unchanged + Args + ``filename``: identifies the file where to save. It must follow the ``SF_FileSystem.FileNaming`` + notation. + + ``overwrite``: ``True`` if the destination file may be overwritten. Defaults to ``False``. + + ``password``: a non-space string to protect the document. + + ``filtername``: the name of a filter that should be used for saving the document. + If present, the filter must exist. + + ``filteroptions``: a string of options associated with the filter. + Returns + ``False`` if the document could not be saved. + """ + ... + + def SetPrinter(self, + printer: str = ..., + orientation: Literal['PORTRAIT', 'LANDSCAPE'] = ..., + paperformat: Literal['A3', 'A4', 'A5', 'LETTER', 'LEGAL', 'TABLOID'] = ... + ) -> bool: + """ + Define the printer options for the document. + This method is not applicable to ``Base`` documents. + Args + ``printer``: the name of the printer queue where to print to. + When absent or space, the default printer is set. + + ``orientation``: either ``PORTRAIT`` or ``LANDSCAPE``. Left unchanged when absent. + + ``paperformat``: paper format. Left unchanged when absent. + Returns + ``True`` when successful. + """ + ... + + def Styles(self, + family: str, + namepattern: str = ..., + parentstyle: str = ..., + used: bool = ..., + userdefined: bool = ..., + category: Literal['TEXT', 'CHAPTER', 'LIST', 'INDEX', 'EXTRA', 'HTML'] = ..., + ) -> Tuple[str, ...]: + """ + Retrieves a list of styles matching an optional compound criteria, the returned list may be empty. + This method is not applicable to ``Base`` documents. + Args + ``family``: one of the style families present in the actual document, as a case-sensitive + string. Valid family names can be retrieved using the ``StyleFamilies`` property. + + ``namepattern``: a filter on the style names, as a case-sensitive string pattern. + The names include the internal and localized names. Admitted wildcards are "?" and "*". + + ``parentstyle``: when present, only the children of the given, localized or not, parent style + name are retained. + + ``used``: when ``True``, the style must be used in the document, when absent the argument + is ignored. + + ``userdefined``: when ``True``, the style must have been added by the user, either in the + document or its template, when absent, the argument is ignored. + + ``category``: a sub-category of the ``ParagraphStyles`` family. + Returns + A list of style names. + """ + ... + + def Toolbars(self, toolbarname: str = ...) -> Union[TOOLBAR, Tuple[str, ...]]: + """ + Returns either a list of the available toolbar names in the actual document + or a ``SFWidgets.SF_Toolbar`` object instance. + Args + ``toolbarname``: the optional usual name of one of the available toolbars. + Returns + A list of toolbar names when the argument is absent, or a new ``Toolbar`` object instance + from the ``SF_Widgets`` library. + """ + ... + + def XStyle(self, family: str, stylename: str) -> UNO: + """ + This method returns the UNO representation of a given style. + It is applicable to all document types except ``Base`` documents. + Args + ``family``: one of the style families present in the actual document, as a case-sensitive + string. Valid family names can be retrieved using ``StyleFamilies`` property. + + ``stylename``: one of the styles present in the given family, as a case-sensitive string. + The ``stylename`` argument may be localized or not. + Returns + A ``com.sun.star.style.XStyle`` UNO object or one of its descendants, + like ``com.sun.star.style.CellStyle`` or ``com.sun.star.style.ParagraphStyle``, etc. + ``None`` is returned when the ``stylename`` does not exist in the given ``family``. + """ + ... + + # ######################################################################### + # SF_Base CLASS + # ######################################################################### + class SF_Base(SF_Document, SFServices): + """ + The ``Base`` service provides a number of methods and properties to facilitate the management + and handling of ``LibreOffice Base`` documents. + + The ``Base`` service extends the ``Document`` service and provides additional methods that are + specific for ``Base`` documents, enabling users to: + - get access to the database contained in a ``Base`` document + - open form documents, tables and queries stored in a ``Base`` document + - check if a form document from a Base document is currently loaded + + """ + + def CloseFormDocument(self, formdocument: str) -> bool: + """ + Close the given form document. + Nothing happens if the form document is not open. + + The method is deprecated. Use the ``SF_FormDocument.CloseDocument()`` method instead. + + Args + ``formdocument``: a valid hierarchical form name as a case-sensitive string. + Returns + ``True`` if closure is successful. + """ + ... + + def FormDocuments(self) -> Tuple[str, ...]: + """ + Return the list of the form documents contained in the ``Base`` document. + Returns + A tuple of strings. Each entry is the full path name of a form document. + The path separator is the slash ("/"). + """ + ... + + def Forms(self, formdocument: str, form: Union[str, int] = ...) -> Union[FORM, Tuple[str, ...]]: + """ + Depending on the parameters provided this method will return: + - a tuple with the names of all the forms contained in a form document (if the ``form`` argument is absent) + - a ``SFDocuments.Form`` object representing the form specified in the ``form`` argument. + + The method is deprecated. Use the ``SF_FormDocument.Forms()`` method instead. + Args + ``formdocument``: the hierarchical name of an open form document. + + ``form``: the name or index number of the form stored in the form document. + If this argument is absent, the method will return a list with the names of all forms + available in the form document. + Returns + Either a tuple of strings. Each entry is a form name stored in the form document, + or a ``SFDocuments.Form`` class instance. + """ + ... + + def GetDatabase(self, user: str = ..., password: str = ...) -> Optional[DATABASE]: + """ + Returns a ``SFDatabases.Database`` class instance giving access + to the execution of SQL commands on the database defined and/or stored in + the actual ``Base`` document. + Args + ``user``, ``password``: the Login parameters as strings. + The default value for both parameters is the empty string. + Returns + A ``SFDatabases.SF_Database`` class instance or ``None`` + """ + ... + + def IsLoaded(self, formdocument: str) -> bool: + """ + Return ``True`` if the given form Ddcument is currently open. + Args + ``formdocument``: A valid hierarchical form document name as a case-sensitive string. + """ + ... + + def OpenFormDocument(self, formdocument: str, designmode: bool = ...) -> FORMDOCUMENT: + """ + Open the form document given by its hierarchical name either in normal or in design mode. + If the form document is already open, the form document is made active without changing its mode. + Args + ``formdocument``: a valid hierarchical form document name as a case-sensitive string. + + ``designmode``: when ``True`` the form document is opened in design mode. Defaults to ``False``. + Returns + The ``SFDocuments.SF_FormDocument`` class instance corresponding with the opened form document. + """ + ... + + def OpenQuery(self, queryname: str, designmode: bool = ...) -> DATASHEET: + """ + Opens the Data View window of the specified query and returns an instance of the + ``SFDatabases.SF_Datasheet`` service. + + The query can be opened in normal or design mode. + + If the query is already open, its Data View window will be made active. + Args + ``queryname``: the name of an existing SELECT query as a case-sensitive String. + + ``designmode``: when ``True``, the query is opened in design mode. + Otherwise, it is opened in normal mode (default). + Returns + the ``SFDatabases.SF_Datasheet`` service instance corresponding with the query. + Note + Closing the Base document will cause the Data View window to be closed as well. + """ + ... + + def OpenTable(self, tablename: str, designmode: bool = ...) -> DATASHEET: + """ + Opens the Data View window of the specified table and returns an instance of the + ``SFDatabases.SF_Datasheet`` service. + + The table can be opened in normal or design mode. + + If the table is already open, its Data View window will be made active. + Args + ``tablename``: the name of an existing table or view as a case-sensitive String. + + ``designmode``: when ``True``, the table is opened in design mode. + Otherwise, it is opened in normal mode (default). + Returns + the ``SFDatabases.SF_Datasheet`` service instance corresponding with the table. + Note + Closing the Base document will cause the Data View window to be closed as well. + """ + ... + + # pylint: disable=arguments-renamed + def PrintOut(self, formdocument: str, pages: str = ..., copies: int = ...) -> bool: + """ + Send the content of the form document to the printer. + The printer might be defined previously by default, by the user or by the ``SetPrinter()`` method. + + The method is deprecated. Use the ``SF_FormDocument.PrintOut()`` method instead. + + Args + ``formdocument``: a valid form document name as a case-sensitive string. + The form document must be open. It is activated by the method. + + ``pages``: the pages to print as a string, like in the user interface. Example: "1-4;10;15-18". + Default is all pages. + + ``copies``: the number of copies. Defaults to 1. + Returns + ``True`` when successful. + """ + ... + + def SetPrinter(self, + formdocument: str = ..., + printer: str = ..., + orientation: Literal['PORTRAIT', 'LANDSCAPE'] = ..., + paperformat: Literal['A3', 'A4', 'A5', 'LETTER', 'LEGAL', 'TABLOID'] = ... + ) -> bool: + """ + Define the printer options for the form document. + + The method is deprecated. Use the ``SF_FormDocument.SetPrinter()`` method instead. + + Args + ``formdocument``: a valid form document name as a case-sensitive string. + + ``printer``: the name of the printer queue where to print to. + When absent or space, the default printer is set. + + ``orientation``: either ``PORTRAIT`` or ``LANDSCAPE``. Left unchanged when absent. + + ``paperformat``: paper format. Left unchanged when absent. + Returns + ``True`` when successful. + """ + ... + + # ######################################################################### + # SF_Calc CLASS + # ######################################################################### + class SF_Calc(SF_Document, SFServices): + """ + The ``SF_Calc`` class is focused on : + - management (copy, insert, move, ...) of sheets within a ``Calc`` document + - exchange of data between Python data structures and ``Calc`` ranges of values + - copying and importing massive amounts of data + + All methods and properties defined for the ``Document`` service can also be accessed using a ``Calc`` + service instance. + """ + + CurrentSelection: Union[RANGE, Tuple[RANGE, ...]] + """ Get/set the single selected range as a string or the list of selected ranges as a tuple of strings. """ + + def FirstCell(self, rangename: RANGE) -> RANGE: + """ + Returns the First used cell in a given range or sheet. When the argument is a sheet it will always + return the "sheet.$A$1" cell. """ + ... + def FirstColumn(self, rangename: RANGE) -> int: + """ Returns the leftmost column number in a given range. """ + ... + def FirstRow(self, rangename: RANGE) -> int: + """ Returns the First used column in a given range. """ + ... + def Height(self, rangename: RANGE) -> int: + """ Returns the height in # of rows of the given range. """ + ... + def LastCell(self, rangename: RANGE) -> RANGE: + """ Returns the last used cell in a given sheet or range. """ + ... + def LastColumn(self, rangename: RANGE) -> int: + """ Returns the last used column in a given range or sheet. """ + ... + def LastRow(self, rangename: RANGE) -> int: + """ The last used row in a given range or sheet. """ + ... + def Range(self, rangename: RANGE) -> CALCREFERENCE: + """ Returns a (internal) range object """ + ... + def Region(self, rangename: RANGE) -> RANGE: + """ + Returns the address of the smallest area that contains the specified range + so that the area is surrounded by empty cells or sheet edges. + This is equivalent to applying the ``Ctrl + *`` shortcut to the given range. + """ + ... + def Sheet(self, sheetname: SHEETNAME) -> CALCREFERENCE: + """ + Returns a sheet reference that can be used as argument of methods like ``CopySheet()``. """ + ... + def SheetName(self, rangename: RANGE) -> str: + """ Returns the sheet name part of a range address. """ + ... + def Width(self, rangename: RANGE) -> int: + """ The number of columns (>= 1) in the given range. """ + ... + def XCellRange(self, rangename: RANGE) -> XCellRange: + """ A ``com.sun.star.Table.XCellRange`` UNO object. """ + ... + def XSheetCellCursor(self, rangename: str) -> XSheetCellCursor: + """ A ``com.sun.star.sheet.XSheetCellCursor`` UNO object. """ + ... + def XSpreadsheet(self, sheetname: SHEETNAME) -> XSpreadsheet: + """ A ``com.sun.star.sheet.XSpreadsheet`` UNO object. """ + ... + + def A1Style(self, row1: int, column1: int, row2: int = ..., column2: int = ..., sheetname: SHEETNAME = ..., + ) -> RANGE: + """ + Returns a range address as a string based on sheet coordinates, i.e. row and column numbers. + + If only a pair of coordinates is given, then an address to a single cell is returned. + Additional arguments can specify the bottom-right cell of a rectangular range. + + Row and column numbers start at 1. + + Args + ``row1``: specify the row number of the top cell in the range to be considered. + + ``column1``: specify the column number of the left cell in the range to be considered. + + ``row2``: specify the row number of the bottom cell in the range to be considered. + If this argument is not provided, or if ``row2 < row1``, + then the address of the single cell range represented by ``row1`` and ``column1`` is returned. + + ``column2``: specify the column number of the right cell in the range to be considered. + If these arguments are not provided, or if ``column2 < rcolumn1``, + then the address of the single cell range represented by ``row1`` and ``column1`` is returned. + + ``sheetname``: the name of the sheet to be prepended to the returned range address. + The sheet must exist. The default value is ``"~"`` corresponding to the currently active sheet. + Returns + A range address as a string. + """ + ... + + def Activate(self, sheetname: SHEETNAME = ...) -> bool: + """ + If the argument ``sheetname`` is provided, the given sheet is activated and becomes the currently + selected sheet. If the argument is absent, then the document window is activated. + Args + ``sheetname``: the name of the sheet to be activated in the document. + Returns + ``True`` if the document or the sheet could be made active. Otherwise, there is no change + in the actual user interface. + """ + ... + + def Charts(self, sheetname: SHEETNAME, chartname: str = ...) -> Union[Tuple[str, ...], CHART]: + """ + Returns either the list with the names of all chart objects in a given sheet + or a single Chart service instance. + - If only ``sheetname`` is specified, a tuple containing the names of all charts is returned. + - If a ``chartname`` is provided, then a single object corresponding to the desired chart is returned. The specified chart must exist. + + Args + ``sheetname``: the name of the sheet from which the list of charts + is to be retrieved or where the specified chart is located. + + ``chartname``: the user-defined name of the chart object to be returned. + If the chart does not have a user-defined name, then the internal object name can be used. + If this argument is absent, then the list of chart names in the specified sheet is returned. + Returns + Either the list with the names of all chart objects in a given sheet or a + single ``Chart`` service instance. + """ + ... + + def ClearAll(self, + range: RANGE, + filterformula: str = ..., + filterscope: Literal['CELL', 'ROW', 'COLUMN'] = ..., + ) -> None: + """ + Clears all the contents and formats of the given range. + A filter formula can be specified to determine which cells shall be affected. + Args + ``range``: the range to be cleared, as a string. + + ``filterformula``: a ``Calc`` formula that shall be applied to the given range + to determine which cells will be affected. The specified formula must return ``True`` + or ``False``. If this argument is not specified, then all cells in the range are affected. + Express the formula in terms of (examples assume a range = ``"A1:J10"``): + - the top-left cell of the range when ``filterscope`` = "CELL" e.g. ``"=(A1>100)"`` + - the topmost row of the range when ``filterscope`` = "ROW" e.g. ``"=(SUM($A1:$J1)<1000)"`` + - the leftmost column of the range when ``filterscope`` = "COLUMN" e.g. ``"=(A$10=SUM(A$1:A$9))"`` + + ``filterscope``: determines how ``filterformula`` is expanded to the given range. + The argument is mandatory if a ``filterformula`` is specified. + """ + ... + + def ClearFormats(self, + range: RANGE, + filterformula: str = ..., + filterscope: Literal['CELL', 'ROW', 'COLUMN'] = ..., + ) -> None: + """ + Clears the formats of the given range. + A filter formula can be specified to determine which cells shall be affected. + Args + ``range``: the range to be cleared, as a string. + + ``filterformula``: a ``Calc`` formula that shall be applied to the given range + to determine which cells will be affected. The specified formula must return ``True`` + or ``False``. If this argument is not specified, then all cells in the range are affected. + Express the formula in terms of (examples assume a range = ``"A1:J10"``): + - the top-left cell of the range when ``filterscope`` = "CELL" e.g. ``"=(A1>100)"`` + - the topmost row of the range when ``filterscope`` = "ROW" e.g. ``"=(SUM($A1:$J1)<1000)"`` + - the leftmost column of the range when ``filterscope`` = "COLUMN" e.g. ``"=(A$10=SUM(A$1:A$9))"`` + + ``filterscope``: determines how ``filterformula`` is expanded to the given range. + The argument is mandatory if a ``filterformula`` is specified. + """ + ... + + def ClearValues(self, + range: RANGE, + filterformula: str = ..., + filterscope: Literal['CELL', 'ROW', 'COLUMN'] = ..., + ) -> None: + """ + Clears the values and formulas in the given range. + A filter formula can be specified to determine which cells shall be affected. + Args + ``range``: the range to be cleared, as a string. + + ``filterformula``: a ``Calc`` formula that shall be applied to the given range + to determine which cells will be affected. The specified formula must return ``True`` + or ``False``. If this argument is not specified, then all cells in the range are affected. + Express the formula in terms of (examples assume a range = ``"A1:J10"``): + - the top-left cell of the range when ``filterscope`` = "CELL" e.g. ``"=(A1>100)"`` + - the topmost row of the range when ``filterscope`` = "ROW" e.g. ``"=(SUM($A1:$J1)<1000)"`` + - the leftmost column of the range when ``filterscope`` = "COLUMN" e.g. ``"=(A$10=SUM(A$1:A$9))"`` + + ``filterscope``: determines how ``filterformula`` is expanded to the given range. + The argument is mandatory if a ``filterformula`` is specified. + """ + ... + def CompactLeft(self, range: RANGE, wholecolumn: bool = ..., filterformula: str = ...) -> RANGE: + """ + Deletes the columns of a specified range that match a filter expressed as a ``Calc`` formula. + The filter is applied to each column to decide whether it will be deleted or not. + + The deleted column can be limited to the height of the specified range or span to the + height of the entire sheet, thus deleting whole columns. + Args + ``range``: the range from which columns will be deleted, as a string. + + ``wholecolumn``: if this option is set to ``True`` the entire column will be deleted + from the sheet. The default value is ``False``, which means that the deleted column + will be limited to the height of the specified range. + + ``filterformula``: the filter to be applied to each column to determine whether it will + be deleted. The filter is expressed as a ``Calc`` formula that should be applied + to the first column. When the formula returns ``True`` for a column, that column will be + deleted. The default filter deletes all empty columns. + For example, suppose range ``"A1:J200"`` is selected (height = 200), so the default formula + is ``"=(COUNTBLANK(A1:A200)=200)"``. This means that if all 200 cells are empty in the first + column (Column A), then the column is deleted. + Returns + String with the range address of the compacted range. + If all columns are deleted, then an empty string is returned. + """ + ... + + def CompactUp(self, + range: RANGE, + wholerow: bool = ..., + filterformula: str = ... + ) -> RANGE: + """ + Deletes the rows of a specified range that match a filter expressed as a ``Calc`` formula. + The filter is applied to each row to decide whether it will be deleted or not. + + The deleted row can be limited to the width of the specified range or span to the + width of the entire sheet, thus deleting whole rows. + Args + ``range``: the range from which rows will be deleted, as a string. + + ``wholerow``: if this option is set to ``True`` the entire row will be deleted + from the sheet. The default value is ``False``, which means that the deleted row + will be limited to the width of the specified range. + + ``filterformula``: the filter to be applied to each row to determine whether it will + be deleted. The filter is expressed as a ``Calc`` formula that should be applied + to the first row. When the formula returns ``True`` for a row, that row will be + deleted. The default filter deletes all empty rows. + For example, suppose range ``"A1:J200"`` is selected (width = 10), so the default formula + is ``"=(COUNTBLANK(A1:J1)=10)"``. This means that if all 10 cells are empty in the first + row (Row 1), then the row is deleted. + Returns + String with the range address of the compacted range. + If all rows are deleted, then an empty string is returned. + """ + ... + + def CopySheet(self, + sheetname: Union[SHEETNAME, CALCREFERENCE], + newname: SHEETNAME, + beforesheet: Union[int, SHEETNAME]) -> bool: + """ + Copies a specified sheet before an existing sheet or at the end of the list of sheets. + The sheet to be copied may be contained inside any open ``Calc`` document. + Args + ``sheetname``: the name of the sheet to be copied as a string, + or a reference to a sheet as a ``CALCREFERENCE`` class instance. + A ``CALCREFERENCE`` is produced by the ``Sheet`` property of the ``Calc`` class. + + ``newname``: the name of the sheet to insert. The name must not be in use in the document. + + ``beforesheet``: the name (string) or index (numeric, starting from 1) of the sheet + before which to insert the copied sheet. The default behavior is to add the copied sheet + at the last position. + Returns + ``True`` if the sheet could be copied successfully. + """ + ... + + def CopySheetFromFile(self, + filename: FILE, + sheetname: SHEETNAME, + newname: SHEETNAME, + beforesheet: Union[int, SHEETNAME] = ..., + ) -> bool: + """ + Copies a specified sheet from a closed Calc document and pastes it before an existing + sheet or at the end of the list of sheets. + + If the file does not exist, an error is raised. If the file is not a valid ``Calc`` file, + a blank sheet is inserted. If the source sheet does not exist in the input file, + an error message is inserted at the top of the newly pasted sheet. + Args + ``filename``: identifies the source file. It must follow the ``SF_FileSystem.FileNaming`` + notation. The file must not be protected with a password. + + ``sheetname``: the name of the sheet to be copied as a string. + + ``newname``: the name of the copied sheet to be inserted in the document. + The name must not be in use in the document. + + ``beforesheet``: the name (string) or index (numeric, starting from 1) + of the sheet before which to insert the copied sheet. + The default behavior is to add the copied sheet at the last position. + Returns + ``True`` if the sheet could be created. + """ + ... + + def CopyToCell(self, + sourcerange: Union[RANGE, CALCREFERENCE], + destinationcell: RANGE + ) -> RANGE: + """ + Copies a specified source range (values, formulas and formats) to a destination range or cell. + The method reproduces the behavior of a Copy/Paste operation from a range to a single cell. + + The source range may belong to another open ``Calc`` document. + + Args + ``sourcerange``: the source range as a string when it belongs to the same document + or as a reference when it belongs to another open ``Calc`` document. + + ``destinationcell``: the destination cell where the copied range of cells will be pasted, + as a string. If a range is given, only its top-left cell is considered. + Returns + A string representing the modified range of cells. + The modified area depends on the size of the source area. + """ + ... + + def CopyToRange(self, + sourcerange: Union[RANGE, CALCREFERENCE], + destinationrange: RANGE + ) -> RANGE: + """ + Copies downwards and/or rightwards a specified source range (values, formulas and formats) + to a destination range. The method imitates the behavior of a Copy/Paste operation from + a source range to a larger destination range. + + - If the height (or width) of the destination area is > 1 row (or column) then the height (or width) of the source must be <= the height (or width) of the destination. Otherwise, nothing happens. + - If the height (or width) of the destination is = 1 then the destination is expanded downwards (or rightwards) up to the height (or width) of the source range. + + The source range may belong to another open ``Calc`` document. + + Args + ``sourcerange``: the source range as a string when it belongs to the same document + or as a reference when it belongs to another open ``Calc`` document. + + ``destinationrange``: the destination of the copied range of cells, as a string. + Returns + A string representing the modified range of cells. + """ + ... + + def CreateChart(self, + chartname: str, + sheetname: SHEETNAME, + range: RANGE, + columnheader: bool = ..., + rowheader: bool = ..., + ) -> CHART: + """ + Creates a new chart object showing the data in the specified range. + The returned chart object can be further manipulated using the ``Chart service``. + Args + ``chartname``: the user-defined name of the chart to be created. + The name must be unique in the same sheet. + + ``sheetname``: the name of the sheet where the chart will be placed. + + ``range``: the range to be used as the data source for the chart. The range may refer to + any sheet of the ``Calc`` document. + + ``columnheader``: when ``True``, the topmost row of the range is used as labels + for the category axis or the legend. Defaults to ``False``. + + ``rowheader``: when ``True``, the leftmost column of the range is used as labels + for the category axis or the legend. Defaults to ``False``. + Returns + A new chart service instance. + """ + ... + + def CreatePivotTable(self, + pivottablename: str, + sourcerange: RANGE, + targetcell: RANGE, + datafields: Union[Sequence[str], str] = ..., + rowfields: Union[Sequence[str], str] = ..., + columnfields: Union[Sequence[str], str] = ..., + filterbutton: bool = ..., + rowtotals: bool = ..., + columntotals: bool = ..., + ) -> RANGE: + """ + Creates a new pivot table with the properties defined by the arguments passed to the method. + + A name must be provided for the pivot table. + If a pivot table with the same name already exists in the targeted sheet, + it will be replaced without warning. + + Args + ``pivottablename``: the user-defined name of the new pivot table. + + ``sourcerange``: the range containing the raw data, as a string. + It is assumed that the first row contains the field names that are used by the pivot table. + + ``targetcell``: the top-left cell where the new pivot table will be placed. + If a range is specified, only its top-left cell is considered. + + ``datafields``: it can be either a single string or a list of strings + that define field names and functions to be applied. + When a list is specified, it must follow the syntax ["FieldName[;Function]", ...]. + The allowed functions are: ``Sum, Count, Average, Max, Min, Product, CountNums, StDev, StDevP, Var, VarP`` and ``Median``. + Function names must be provided in English. + When all values are numerical, ``Sum`` is the default function, otherwise + the default function is ``Count``. + + ``rowfields``: a single string or a list with the field names that will be used as the pivot + table rows. + + ``columnfields``: a single string or a list with the field names that will be used + as the pivot table columns. + + ``filterbutton``: determines whether a filter button will be displayed above the pivot + table (Default = ``True``). + + ``rowtotals``: specifies if a separate column for row totals will be added to the pivot + table (Default = ``True``). + + ``columntotals``: specifies if a separate row for column totals will be added to the pivot + table (Default = ``True``) + Returns + A string containing the range where the new pivot table was placed. + """ + ... + + def DAvg(self, range: RANGE) -> float: + """ + Get the number of the numeric values stored in the given range, excluding values from filtered + and hidden rows and hidden columns, the same as for the status bar functions. + Args + ``range``: the range as a string where to get the values from. + """ + ... + + def DCount(self, range: RANGE) -> int: + """ + Get the number of numeric values stored in the given range, excluding values from filtered + and hidden rows and hidden columns, the same as for the status bar functions. + Args + ``range``: the range as a string where to get the values from. + """ + ... + + def DMax(self, range: RANGE) -> float: + """ + Get the greatest of the numeric values stored in the given range, excluding values from filtered + and hidden rows and hidden columns, the same as for the status bar functions. + Args + ``range``: the range as a string where to get the values from. + """ + ... + + def DMin(self, range: RANGE) -> float: + """ + Get the smallest of the numeric values stored in the given range, excluding values from filtered + and hidden rows and hidden columns, the same as for the status bar functions. + Args + ``range``: the range as a string where to get the values from. + """ + ... + + def DSum(self, range: RANGE) -> float: + """ + Get the sum of the numeric values stored in the given range, excluding values from filtered + and hidden rows and hidden columns, the same as for the status bar functions. + Args + ``range``: the range as a string where to get the values from. + """ + ... + + def ExportRangeToFile(self, + range: RANGE, + filename: FILE, + imagetype: Literal['pdf', 'jpeg', 'png'] = ..., + overwrite: bool = ..., + ) -> bool: + """ + Exports the specified range as an image or PDF file. + Args + ``range``: a sheet name or a cell range to be exported, as a string. + + ``filename``: the name of the file to be saved. It must follow the + ``SF_FileSystem. FileNaming`` notation. + + ``imagetype``: identifies the destination file type. Possible values are ``jpeg, pdf`` + and ``png``. Defaults to ``pdf``. + + ``overwrite``: when set to ``True``, the destination file may be overwritten. + Defaults to ``False``. + Returns + ``True`` if the destination file was successfully saved. + """ + ... + + def Forms(self, sheetname: SHEETNAME, form: Union[int, str] = ...) -> Union[FORM, Tuple[str, ...]]: + """ + Depending on the parameters provided this method will return: + + - A tuple with the names of all the forms contained in a given sheet (if the form argument is absent) + - A ``SFDocuments.Form`` service instance representing the form specified as argument. + + Args + ``sheetname``: the name of the sheet, as a string, from which the form will be retrieved. + + ``form``: the name or index corresponding to a form stored in the specified sheet. + If this argument is absent, the method will return a list with the names of all forms available + in the sheet. + """ + ... + + def GetColumnName(self, columnnumber: int) -> str: + """ + Converts a column number ranging between 1 and 16384 into its corresponding + letter (column 'A', 'B', ..., 'XFD'). If the given column number is outside + the allowed range, a zero-length string is returned. + Args + ``columnnumber``: the column number as an integer value in the interval 1 ... 16384. + """ + ... + + def GetFormula(self, range: RANGE) -> Union[str, Tuple[str, ...], Tuple[Tuple[str, ...]], ...]: + """ + Get the formula(s) stored in the given range of cells as a single string, a tuple of strings, + or a tuple of tuples of strings. + Args + ``range``: the range where to get the formulas from, as a string. + Returns + The names of ``Calc`` functions used in the returned formulas are expressed in English. + """ + ... + + def GetValue(self, + range: RANGE + ) -> Union[str, Tuple[Union[str, float], ...], Tuple[Tuple[Union[str, float], ...]], ...]: + """ + Get the value(s) stored in the given range of cells as a single value, a tuple or a tuple of tuples. + All returned values are either doubles or strings. + Args + ``range``: the range where to get the values from, as a string. + Returns + If a cell contains a date, the number corresponding to that date will be returned. + To convert numeric values to dates, use the ``CDate()`` function from the + ``SFScriptForge.SF_Basic`` service. + """ + ... + + def ImportFromCSVFile(self, + filename: FILE, + destinationcell: RANGE, + filteroptions: str = ... + ) -> RANGE: + """ + Imports the contents of a CSV-formatted text file and places it on a given destination cell. + The destination area is cleared of all contents and formats before inserting the contents + of the CSV file. + Args + ``filename``: identifies the file to open. It must follow the ``SF_FileSystem.FileNaming`` + notation. + + ``destinationcell``: the destination cell to insert the imported data, as a string. + If instead a range is given, only its top-left cell is considered. + + ``filteroptions``: the arguments for the CSV input filter. + Returns + A string representing the modified range of cells. + The modified area depends only on the content of the source file. + Note + Default ``filteroptions`` make the following assumptions: + - The input file encoding is UTF8. + - The field separator is a comma, a semicolon or a Tab character. + - The string delimiter is the double quote ("). + - All lines are included. + - Quoted strings are formatted as text. + - Special numbers are detected. + - All columns are presumed to be texts, except if recognized as valid numbers. + - The language is English/US, which implies that the decimal separator is "." and the thousands separator is ",". + """ + ... + + def ImportFromDatabase(self, + filename: FILE = ..., + registrationname: str = ..., + destinationcell: RANGE = ..., + sqlcommand: SQL_SELECT = ..., + directsql: bool = ..., + ) -> None: + """ + Imports the contents of a database table, query or resultset, i.e. the result of a + SELECT SQL command, inserting it on a destination cell. + + The destination area is cleared of all contents and formats before inserting the + imported contents. The size of the modified area is fully determined by the contents in + the table or query. + Args + ``filename``: identifies the file to open. It must follow the ``SF_FileSystem.FileNaming`` + notation. + + ``registrationname``: the name to use to find the database in the databases register. + This argument is ignored if a filename is provided. + + ``destinationcell``: the destination of the imported data, as a string. + If a range is given, only its top-left cell is considered. + + ``sqlcommand``: a table or query name (without surrounding quotes or square brackets) + or a SELECT SQL statement in which table and field names may be surrounded by square brackets + or quotes to improve its readability. + + ``directsql``: when ``True``, the SQL command is sent to the database engine without + pre-analysis. Default is ``False``. The argument is ignored for tables.For queries, + the applied option is the one set when the query was defined. + """ + ... + + def ImportStylesFromFile(self, + filename: FILE, + families: Union[str, Sequence[str]] = ..., + overwrite: bool = ... + ): + """ + This method loads all the styles belonging to one or more style families from a closed + file into the actual ``Calc`` document. + + Are always imported together: + - ``ParagraphStyles`` and ``CharacterStyles`` + - ``NumberingStyles`` and ``ListStyles`` + + Args + ``filename``: the file from which to load the styles in the ``SFScriptForge.FileSystem`` + notation. The file is presumed to be a ``Calc`` document. + + ``families``: one of the style families present in the actual document, + as a case-sensitive string or a tuple of such strings. + Leave this argument blank to import all families. + + ``overwrite``: when ``True``, the actual styles may be overwritten. Default is ``False``. + Returns + ``True`` if styles were successfully imported. + + """ + ... + + def InsertSheet(self, sheetname: SHEETNAME, beforesheet: Union[SHEETNAME, int] = ...) -> bool: + """ + Inserts a new empty sheet before an existing sheet or at the end of the list of sheets. + Args + ``sheetname``: the name of the new sheet. + + ``beforesheet``: the name (string) or index (numeric, starting from 1) of the sheet + efore which to insert the new sheet. This argument is optional and the default behavior + is to insert the sheet at the last position. + Returns + ``True`` if the sheet could be inserted successfully. + """ + ... + + def MoveRange(self, source: RANGE, destination: RANGE) -> RANGE: + """ + Moves a specified source range to a destination cell. + Args + ``source``: the source range of cells, as a string. + + ``destination``: the destination cell, as a string. If a range is given, + its top-left cell is considered as the destination. + Returns + A string representing the modified range of cells. + The modified area depends only on the size of the source area. + """ + ... + + def MoveSheet(self, + sheetname: SHEETNAME, + beforesheet: Union[SHEETNAME, int] = ... + ) -> bool: + """ + Moves an existing sheet and places it before a specified sheet or at the end of the list of sheets. + Args + ``sheetname``: the name of the sheet to move. The sheet must exist or an exception is raised. + + ``beforesheet``: The name (string) or index (numeric, starting from 1) of the sheet + before which the original sheet will be placed. This argument is optional and + the default behavior is to move the sheet to the last position. + Returns + ``True`` if the sheet could be moved successfully. + """ + ... + + def Offset(self, + range: RANGE, + rows: int = ..., + columns: int = ..., + height: int = ..., + width: int = ..., + ) -> RANGE: + """ + Returns a new range (as a string) offset and/or resized by a certain number of rows and columns + from a given range. + + This method has the same behavior as the homonymous Calc's ``Offset()`` built-in function. + + Args + ``range``: the range, as a string, that the method will use as reference to perform + the offset operation. + + ``rows``: the number of rows by which the initial range is offset upwards (negative value) + or downwards (positive value). Use 0 (default) to stay in the same row. + + ``columns``: the number of columns by which the initial range is offset to the left + (negative value) or to the right (positive value). Use 0 (default) to stay in the same column. + + ``height``: the vertical height for an area that starts at the new range position. + Omit this argument when no vertical resizing is needed. + + ``width``: the horizontal width for an area that starts at the new range position. + Omit this argument when no horizontal resizing is needed. + Returns + A new range. + Note + - Arguments ``rows`` and ``columns`` must not lead to zero or negative start row or column. + - Arguments ``height`` and ``width`` must not lead to zero or negative count of rows or columns. + """ + ... + + def OpenRangeSelector(self, + title: str = ..., + selection: RANGE = ..., + singlecell: bool = ..., + closeafterselect: bool = ..., + ) -> RANGE: + """ + Opens a non-modal dialog that can be used to select a range in the document and returns a string + containing the selected range. + Args + ``title``: the title of the dialog, as a string. + + ``selection``: an initial range that is selected when the dialog is displayed. + + ``singlecell``: when ``True`` (default) only single-cell selection is allowed. + When ``False`` range selection is allowed. + + ``closeafterselect``: when ``True`` (default) the dialog is closed immediately after + the selection is made. wWhen ``False`` the user can change the selection as many times + as needed. Dialog closure is manual. + Returns + The selected range as a string, or the empty string when the user cancelled the request. + Note + This method opens the same dialog that is used by ``LibreOffice`` when the ``Shrink`` + button is pressed. For example, the vTools - Goal Seek`` dialog has a ``Shrink`` button + to the right of the ``Formula`` cell field. + """ + ... + + def Printf(self, + inputstr: str, + range: RANGE, + tokencharacter: str = ... + ) -> str: + """ + Returns the input string after substituting its tokens by their values in a given range. + + This method can be used to quickly extract specific parts of a range name, such as the sheet name + or the first cell column and row, and use them to compose a new range address or a formula. + + Args + ``inputstr``: the string containing the tokens that will be replaced by the corresponding + values in ``range``. + + ``range``: the range from which values will be extracted. If it contains a sheet name, + the sheet must exist. + + ``tokencharacter``: the character used to identify tokens. Defaults to "%". + Note + Accepted tokens: + - ``%S`` - the sheet name containing the range, including single quotes when necessary. + - ``%R1`` - the row number of the top left cell of the range. + - ``%C1`` - the column letter of the top left cell of the range. + - ``%R2`` - the row number of the bottom right cell of the range. + - ``%C2`` - the column letter of the bottom right cell of the range. + Returns + The input string after substitution of the contained tokens. + """ + ... + + def PrintOut(self, + sheetname: SHEETNAME = ..., + pages: str = ..., + copies: int = ...) -> bool: + """ + Send the content of the given sheet to the printer. + The printer might be defined previously by default, by the user or by the ``SF_Document.SetPrinter()`` + method. + Args + ``sheetname``: the sheet to print, default is the active sheet. + + ``pages``: the pages to print as a string, like in the user interface. Example: "1-4;10;15-18". + Default is all pages. + + ``copies``: the number of copies. Defaults to 1. + Returns + ``True`` when successful. + """ + ... + + def RemoveDuplicates(self, + range: RANGE, + columns: Union[int | Sequence[int]], + header: bool = ..., + casesensitive: bool = ..., + mode: Literal["CLEAR", "COMPACT"] = ..., + ) -> RANGE: + """ + Removes duplicate rows from a specified range. + The comparison to determine if a given row is a duplicate is done based on a subset + of the columns in the range. + + The resulting range replaces the input range, in which, either: + + - all duplicate rows are cleared from their content + - all duplicate rows are suppressed and rows below are pushed upwards. + + Anyway, the first copy of each set of duplicates is kept and the initial sequence is preserved. + + Args + ``range``: the range, as a string, from which the duplicate rows should be removed. + + ``columns``: a single integer or a tuple of integers containing column numbers, + indicating which columns will be considered to determine if a row is a duplicate or not. + If this argument is left blank, then only the first column is used. + Column numbers must be in the interval between ``1`` and the range width. + + ``header``: when ``True``, the first row is a header row. Default is ``False``. + + ``casesensitive``: for string comparisons. Default is ``False``. + + ``mode``: either ``"CLEAR"`` or ``"COMPACT"`` (default). + For large ranges, the ``"COMPACT"`` mode is probably significantly slower. + Returns + The resulting range as a string. + """ + ... + + def RemoveSheet(self, sheetname: SHEETNAME) -> bool: + """ + Removes an existing sheet from the document. + Args + ``sheetname``: the name of the sheet to remove. + Returns + ``True`` if the sheet could be removed successfully. + """ + ... + + def RenameSheet(self, sheetname: SHEETNAME, newname: SHEETNAME) -> bool: + """ + Renames the given sheet. + Args + ``sheetname``: the name of the sheet to rename. + + ``newname``: the new name of the sheet. It must not exist yet. + Returns + ``True`` if successful. + """ + ... + + def SetArray(self, + targetcell: RANGE, + value: Union[SCALAR, VECTOR, MATRIX] + ) -> RANGE: + """ + Stores the given value starting from a specified target cell. The updated area expands + itself from the target cell or from the top-left corner of the given range to accommodate + the size of the input value argument. Vectors are always expanded vertically. + Args + ``targetcell``: the cell or a range as a string from where to start to store the given value. + + ``value``: a scalar, a vector or an array with the new values to be stored from the target + cell or from the top-left corner of the range if targetcell is a range. + The new values must be strings, numeric values or dates. Other types will cause the + corresponding cells to be emptied. + Returns + A string representing the modified area as a range of cells. + Note + To dump the full contents of an array in a sheet, use ``SetArray()``. To dump the contents + of an array only within the boundaries of the targeted range of cells, use ``SetValue()``. + """ + ... + + def SetCellStyle(self, + targetrange: RANGE, + style: str, + filterformula: str = ..., + filterscope: Literal['CELL', 'ROW', 'COLUMN'] = ..., + ) -> RANGE: + """ + Applies the specified cell style to the given target range. + The range is updated and the remainder of the sheet is left untouched. + Either the full range is updated or a selection based on a ``filterformula``. + If the cell style does not exist, an error is raised. + Args + ``targetrange``: the range to which the style will be applied, as a string. + + ``style``: the name of the cell style to apply. + + ``filterformula``: a ``Calc`` formula that shall be applied to the given range + to determine which cells will be affected. The specified formula must return ``True`` + or ``False``. If this argument is not specified, then all cells in the range are affected. + + Express the formula in terms of (examples assume a range = ``"A1:J10"``): + - the top-left cell of the range when ``filterscope`` = "CELL" e.g. ``"=(A1>100)"`` + - the topmost row of the range when ``filterscope`` = "ROW" e.g. ``"=(SUM($A1:$J1)<1000)"`` + - the leftmost column of the range when ``filterscope`` = "COLUMN" e.g. ``"=(A$10=SUM(A$1:A$9))"`` + + ``filterscope``: determines how ``filterformula`` is expanded to the given range. + Tuple The argument is mandatory if a ``filterformula`` is specified. + Returns + A string representing the modified area as a range of cells. + """ + ... + + def SetFormula(self, + targetrange: RANGE, + formula: Union[str, Sequence[str], Sequence[Sequence[str]]] + ) -> RANGE: + """ + Inserts the given (list of) formula(s) in the specified range. + The size of the modified area is equal to the size of the range. + Args + ``targetrange``: the range to insert the formulas, as a string. + + ``formula``: a string, a tuple or a tuple of tuples of strings with the new + formulas for each cell in the target range. + Returns + A string representing the modified area as a range of cells. + Notes + The full range is updated and the remainder of the sheet is left unchanged. + + If the given ``formula`` is a string, the unique formula is pasted along the + whole range with adjustment of the relative references. + + If the size of ``formula`` is smaller than the size of ``targetrange``, then the + remaining cells are emptied. + + If the size of ``formula`` is larger than the size of ``targetrange``, then the + formulas are only partially copied until they fill the size of ``targetrange``. + + Vectors are always expanded vertically, except if ``targetrange`` has a height + of exactly 1 row. + """ + ... + + def SetValue(self, + targetrange: RANGE, + value: Union[SCALAR, VECTOR, MATRIX] + ) -> RANGE: + """ + Stores the given value(s) in the specified range. The size of the modified area + is equal to the size of the target range. + Args + ``targetrange``: the range where to store the given value, as a string. + + ``value``: a scalar, a vector or an array with the new values for each + cell of the range. The new values must be strings, numeric values or + dates. Other types will cause the corresponding cells to be emptied. + Returns + A string representing the modified area as a range of cells. + """ + ... + def ShiftDown(self, range: RANGE, wholerow: bool = ..., rows: int = ...) -> RANGE: + """ + Moves a given range of cells downwards by inserting empty rows. + The current selection is not affected. + + Depending on the value of the ``wholerows`` argument the inserted rows can either + span the width of the specified range or span all columns in the row. + Args + ``range``: the range above which rows will be inserted, as a string. + + ``wholerow``: if set to ``False`` (default), then the width + of the inserted rows will be the same as the width of the specified range. + Otherwise, the inserted row will span all columns in the sheet. + + ``rows``: the number of rows to be inserted. The default value is + the height of the original range. The number of rows must be a positive number. + Returns + A string representing the new location of the initial range. + """ + ... + + def ShiftLeft(self, range: RANGE, wholecolumn: bool = ..., columns: int = ...) -> RANGE: + """ + Deletes the leftmost columns of a given range and moves to the left all cells to the right + of the given range. The current selection is not affected. + + Depending on the value of the ``wholecolumn`` argument the deleted columns can either span the + height of the specified range or span all rows in the column. + Args + ``range``: the range from which cells will be deleted, as a string. + + ``wholecolumn``: if set to ``False`` (default), then the height of the deleted + columns will be the same as the height of the specified range. Otherwise, the deleted + columns will span all rows in the sheet. + + ``columns``: the number of columns to be deleted from the specified range. + The default value is the width of the original range, which is also the maximum + value of this argument. + Returns + A string representing the location of the remaining portion of the initial range. + If all cells in the original range have been deleted, then an empty string is returned. + """ + ... + + def ShiftRight(self, range: RANGE, wholecolumn: bool = ..., columns: int = ...) -> RANGE: + """ + Moves a given range of cells to the right by inserting empty columns. + The current selection is not affected. + + Depending on the value of the ``wholecolumn`` argument the inserted columns can + either span the height of the specified range or span all rows in the column. + Args + ``range``: the range which will have empty columns inserted to its left, as a string. + + ``wholecolumn``: if set to ``False`` (default), then the height of the inserted + columns will be the same as the height of the specified range. Otherwise, the inserted + columns will span all rows in the sheet. + + ``columns``: the number of columns to be inserted. The default value is the width + of the original range. + Returns + A string representing the new location of the initial range. + Note + If the shifted range exceeds the sheet edges, then nothing happens. + """ + ... + + def ShiftUp(self, range: RANGE, wholerow: bool = ..., rows: int = ...) -> RANGE: + """ + Deletes the topmost rows of a given range and moves upwards all cells below the given range. + The current selection is not affected. + + Depending on the value of the ``wholerow`` argument the deleted rows can either span the width + of the specified range or span all columns in the row. + Args + ``range``: the range from which cells will be deleted, as a string. + + ``wholerow``: if set to ``False`` (default), then the width of the deleted + rows will be the same as the width of the specified range. Otherwise, the deleted + row will span all columns in the sheet. + + ``rows``: the number of rows to be deleted from the specified range. + The default value is the height of the original range, which is also the maximum + value of this argument. + Returns + A string representing the location of the remaining portion of the initial range. + If all cells in the original range have been deleted, then an empty string is returned. + """ + ... + + def SortRange(self, + range: RANGE, + sortkeys: Union[int, Sequence[int]], + sortorder: Union[Literal['ASC', 'DESC', ''], Sequence[Literal['ASC', 'DESC', '']]] = ..., + destinationcell: RANGE = ..., + containsheader: bool = ..., + casesensitive: bool = ..., + sortcolumns: bool = ..., + ) -> RANGE: + """ + Sort the given range on any number of columns/rows. The sorting order may vary by column/row. + Args + ``range``: the range to be sorted, as a string. + + ``sortkeys``: a scalar (if 1 column/row) or a tuple of column/row numbers starting from 1. + + ``sortorder``: a scalar or a tuple of strings containing the values + ``"ASC"`` (ascending), ``"DESC"`` (descending) or ``""`` (which defaults to ascending). + Each item is paired with the corresponding item in ``sortkeys``. + If the sortorder tuple is shorter than ``sortkeys``, the remaining keys are sorted + in ascending order. + + ``destinationcell``: the destination cell of the sorted range of cells, + as a string. If a range is given, only its top-left cell is considered. + By default, the source range is overwritten. + + ``containsheader``: when ``True``, the first row/column is not sorted. + + ``casesensitive``: only for string comparisons. Default is ``False``. + + ``sortcolumns``: when ``True``, the columns are sorted from left to right. + Default is ``False`` : rows are sorted from top to bottom. + Returns + A string representing the modified range of cells. + """ + ... + + # ######################################################################### + # SF_CalcReference CLASS + # ######################################################################### + class SF_CalcReference(SFServices): + """ + The SF_CalcReference class has as unique role to hold sheet and range references. + """ + + # ######################################################################### + # SF_Chart CLASS + # ######################################################################### + class SF_Chart(SFServices): + """ + The SF_Chart module is focused on the description of chart documents + stored in Calc sheets. + With this service, many chart types and chart characteristics available + in the user interface can be read or modified. + """ + + ChartType: Literal['Pi', 'Bar', 'Donut', 'Column', 'Area', 'Line', 'CY', 'Bubble', 'Net'] + """ Get/set the chart type as a string that can assume one of the following values: "Pie", "Bar", + "Donut", "Column", "Area", "Line", "XY", "Bubble", "Net". """ + Deep: bool + """ When ``True`` indicates that the chart is three-dimensional and each series is arranged in the z-direction. + When ``False`` series are arranged considering only two dimensions. """ + Dim3D: Union[bool, str] + """ Get/set if the chart is displayed with 3D elements. If the value is a string, it must be either + ``"Bar", "Cylinder", "Cone"`` or ``"Pyramid"``. If the boolean ``True`` value is specified, + then the chart is displayed using 3D bars. """ + Exploded: Union[int, float] + """ Get/set how much pie segments are offset from the chart center as a percentage of the radius. + Applicable to ``Pie`` and ``Donut`` charts only. """ + Filled: bool + """ When ``True``, specifies a filled net chart. Applicable to ``net`` charts only. """ + Legend: bool + """ Specifies whether the chart has a legend. """ + Percent: bool + """ When ``True``, chart series are stacked and each category sums up to 100%. + Applicable to ``Area``, ``Bar``, ``Bubble``, ``Column`` and ``Net`` charts. """ + Stacked: bool + """ When ``True``, chart series are stacked. + Applicable to ``Area``, ``Bar``, ``Bubble``, ``Column`` and ``Net`` charts. """ + Title: str + """ Get/set the main title of the chart. """ + XTitle: str + """ Get/set the title of the X-axis. """ + YTitle: str + """ Get/set the title of the Y-axis. """ + + XChartObj: UNO + """ Returns the object representing the chart, which is an instance of the ``ScChartObj`` class. """ + XDiagram: UNO + """ Returns the ``com.sun.star.chart.XDiagram`` object representing the diagram of the chart. """ + XShape: UNO + """ Returns the ``com.sun.star.drawing.XShape`` object representing the shape of the chart. """ + XTableChart: UNO + """ Returns the ``com.sun.star.table.XTableChart`` object representing the data being displayed in the chart. + """ + + def ExportToFile(self, + filename: FILE, + imagetype: Literal['gif', 'jpeg', 'png', 'svg', 'tiff'] = ..., + overwrite: bool = ... + ) -> bool: + """ + Saves the chart as an image file in a specified location. + Args + ``filename``: identifies the path and file name where the image will be saved. + It must follow the notation defined in ``SF_FileSystem.FileNaming``. + + ``imagetype``: the name of the image type to be created. + The following values are accepted: ``gif, jpeg, png`` (default), ``svg`` and ``tiff``. + + ``overwrite``: specifies if the destination file can be overwritten. Defaults to ``False``. + Returns + ``True`` if the image file could be successfully created. + """ + ... + + def Resize(self, xpos: int = ..., ypos: int = ..., width: int = ..., height: int = ...) -> bool: + """ + Changes the position of the chart in the current sheet and modifies its width and height. + Args + ``xpos``: specify the new ``X`` position of the chart. + + ``ypos``: specify the new ``Y`` position of the chart. + + ``width``: specify the new width of the chart. + + ``height``: specify the new height of the chart. + Returns + ``True`` if repositioning/resizing was successful. + Note + - All arguments are provided as integer values that correspond to ``1/100`` of a millimeter. + - Omitted arguments leave the corresponding actual values unchanged. + - Negative arguments are ignored. + """ + ... + + # ######################################################################### + # SF_Form CLASS + # ######################################################################### + class SF_Form(SFServices): + """ + Management of forms defined in LibreOffice documents. Supported types are Base, Calc and Writer documents. + It includes the management of sub-forms + Each instance of the current class represents a single form or a single sub-form + A form may optionally be (understand "is often") linked to a data source manageable with + the SFDatabases.Database service. The current service offers rapid access to that service. + """ + + AllowDeletes: bool + """ Get/set if the form allows to delete records. """ + AllowInserts: bool + """ Get/set if the form allows to add records. """ + AllowUpdates: bool + """ Get/set if the form allows to update records. """ + BaseForm: str + """ Get the hierarchical name of the Base form document containing the actual form. """ + Bookmark: SCALAR + """ Specifies uniquely the current record of the form's underlying table, query or SQL statement. """ + CurrentRecord: int + """ Identifies the current record in the dataset being viewed on a form. If the row number is positive, + the cursor moves to the given row number with respect to the beginning of the result set. Row count starts at 1. + If the given row number is negative, the cursor moves to an absolute row position with respect to the end + of the result set. Row -1 refers to the last row in the result set. """ + Filter: str + """ Specifies a subset of records to be displayed as a ``SQL WHERE``-clause without the ``WHERE`` keyword. """ + LinkChildFields: Tuple[str, ...] + """ Specifies how records in a child subform are linked to records in its parent form. """ + LinkParentFields: Tuple[str, ...] + """ Specifies how records in a child subform are linked to records in its parent form. """ + Name: str + """ The name of the current form. """ + + OnApproveCursorMove: SCRIPT_URI + """ Get/set the macro triggered by the ``Before record change`` event.""" + OnApproveParameter: SCRIPT_URI + """ Get/set the macro triggered by the ``Fill parameters`` event.""" + OnApproveReset: SCRIPT_URI + """ Get/set the macro triggered by the ``Prior to reset`` event.""" + OnApproveRowChange: SCRIPT_URI + """ Get/set the macro triggered by the ``Before record action`` event.""" + OnApproveSubmit: SCRIPT_URI + """ Get/set the macro triggered by the ``Before submitting`` event.""" + OnConfirmDelete: SCRIPT_URI + """ Get/set the macro triggered by the ``Confirm deletion`` event.""" + OnCursorMoved: SCRIPT_URI + """ Get/set the macro triggered by the ``After record change`` event.""" + OnErrorOccurred: SCRIPT_URI + """ Get/set the macro triggered by the ``Error occurred`` event.""" + OnLoaded: SCRIPT_URI + """ Get/set the macro triggered by the ``When loading`` event.""" + OnReloaded: SCRIPT_URI + """ Get/set the macro triggered by the ``When reloading`` event.""" + OnReloading: SCRIPT_URI + """ Get/set the macro triggered by the ``Before reloading`` event.""" + OnResetted: SCRIPT_URI + """ Get/set the macro triggered by the ``After resetting`` event.""" + OnRowChanged: SCRIPT_URI + """ Get/set the macro triggered by the ``After record action`` event.""" + OnUnloaded: SCRIPT_URI + """ Get/set the macro triggered by the ``When unloading`` event.""" + OnUnloading: SCRIPT_URI + """ Get/set the macro triggered by the ``Before unloading`` event.""" + + OrderBy: str + """ Specifies in which order the records should be displayed as a ``SQL ORDER BY`` clause + without the ``ORDER BY`` keywords. """ + Parent: Union[FORM, FORMDOCUMENT, DOCUMENT, CALC, WRITER] + """ The parent of the current form. It can be either a ``SFDocuments.Form``, a ``SFDocuments.FormDocument``, + a ``SFDocuments.Document`` object or one of its subclasses. """ + RecordSource: Union[SQL_SELECT, str] + """ Specifies the source of the data, as a table name, a query name or a SQL statement. """ + + XForm: UNO + """ The UNO object representing interactions with the form. Refer to ``com.sun.star.form.XForm`` and + ``com.sun.star.form.component.DataForm`` in the API documentation for detailed information. """ + + def Activate(self) -> bool: + """ + Sets the focus on the container of the current ``Form`` instance. + + The behavior of the ``Activate`` method depends on the type of document where the form is located. + * In `Writer`` documents: Sets the focus on that document. + * In ``Calc`` documents: Sets the focus on the sheet to which the form belongs. + * In ``Base`` documents: Sets the focus on the ``FormDocument`` the ``Form`` refers to. + Returns + ``True`` if focusing was successful. + """ + ... + + def CloseFormDocument(self) -> bool: + """ + Closes the ``form`` document containing the actual ``Form`` instance. The ``Form`` instance is disposed. + + The method is deprecated. Use the ``SF_FormDocument.CloseDocument()`` method instead. + + Returns + ``True`` if closure is successful. + Note + This method only closes form documents located in ``Base`` documents. + If the form is stored in a ``Writer`` or ``Calc`` document, calling ``CloseFormDocument()`` + will have no effect. + """ + ... + + def Controls(self, controlname: str = ...) -> Union[FORMCONTROL, Tuple[str, ...]]: + """ + The value returned by the method depends on the arguments provided: + - If the method is called without arguments, then it returns the list of the controls contained in the form. + + - If the optional ``controlName`` argument is provided, the method returns a ``FormControl`` class instance referring to the specified control. + + Note + Subform controls are ignored by this method. + """ + ... + + def GetDatabase(self, user: str = ..., password: str = ...) -> Optional[DATABASE]: + """ + Gets a ``SFDatabases.Database`` instance giving access to the execution of SQL commands + on the database the current form is connected to and/or that is stored in the current ``Base`` document. + + Each form has its own database connection, except in ``Base`` documents where they all + share the same connection. + Args + ``user``, ``password````: the login parameters. + Returns + A ``SFDatabases.Database`` class instance. + """ + ... + + def MoveFirst(self) -> bool: + """ + The form cursor is positioned on the first record. + + Returns + ``True`` if successful. + """ + ... + + def MoveLast(self) -> bool: + """ + The form cursor is positioned on the last record. + + Returns + ``True`` if successful. + """ + ... + + def MoveNew(self) -> bool: + """ + The form cursor is positioned on the new record area. + + Returns + ``True`` if successful. + """ + ... + + def MoveNext(self, offset: int = ...) -> bool: + """ + The form cursor is positioned on the next record. + Args + ``offset``: the number of records to go forward. Defaults to 1. + Returns + ``True`` if successful. + """ + ... + + def MovePrevious(self, offset: int = ...) -> bool: + """ + The form cursor is positioned on the previous record. + Args + ``offset``: the number of records to go backward. Defaults to 1. + Returns + ``True`` if successful. + """ + ... + + def Requery(self) -> bool: + """ + Reloads the current data from the database and refreshes the form. + The cursor is positioned on the first record. + + Returns + ``True`` if successful. + """ + ... + + def Subforms(self, subform: Union[int, str] = ...) -> Union[FORM, Tuple[str, ...]]: + """ + Depending on the parameters provided this method will return: + + - A tuple with the names of all the subforms contained in the actual form (if the form argument is absent) + - A ``SFDocuments.Form`` service instance representing the subform specified as argument. + + Args + ``subform``: the name or index corresponding to a subform stored in the actual form. + If this argument is absent, the method will return a list with the names of + all available subforms. + """ + ... + + # ######################################################################### + # SF_FormControl CLASS + # ######################################################################### + class SF_FormControl(SFServices): + """ + Manage the controls belonging to a form or subform stored in a document. + + Each instance of the current class represents a single control within a form, a subform or a column + in a table-control. A prerequisite is that all controls within the same form, subform or table-control + must have a unique name. + """ + + Action: Literal['none', 'submitForm', 'resetForm', 'refreshForm', 'moveToFirst', 'moveToLast', 'moveToNext', + 'moveToPrev', 'saveRecord', 'moveToNew', 'deleteRecord', 'undoRecord'] + """ Get/set the action triggered when the button is clicked. Applicable to ``Button`` controls. """ + Caption: str + """ Get/set the text associated with the control. Applicable to ``Button, CheckBox, FixedText, + GroupBox, RadioButton`` controls. """ + ControlSource: str + """ Specifies the rowset field mapped onto the current control. Applicable to + ``CheckBox, ComboBox, CurrencyField, DateField, FormattedField, ImageControl, ListBox, NumericField, + PatternField, RadioButton, TextField, TimeField`` controls. """ + ControlType: str + """ get the type of control as a string. """ + Default: bool + """ Get/set whether a command button is the default (OK) button. + Applicable to ``Button`` controls. """ + DefaultValue: bool + """ Specifies the default value used to initialize a control in a new record. + Applicable to ``CheckBox, ComboBox, CurrencyField, DateField, FileControl, FormattedField, ListBox, + NumericField, PatternField, RadioButton, SpinButton, TextField, TimeField`` controls. """ + Enabled: bool + """ Specifies if the control is accessible with the cursor. """ + Format: Literal["Standard (short)", "Standard (short YY)", "Standard (short YYYY)", "Standard (long)", + "DD/MM/YY", "MM/DD/YY", "YY/MM/DD", "DD/MM/YYYY", "MM/DD/YYYY", "YYYY/MM/DD", "YY-MM-DD", "YYYY-MM-DD", + "24h short", "24h long", "12h short", "12h long"] + """ Get/set the format used to display dates and times. Applicable to ``DateField, TimeFiels, FormattedField`` + controls. """ + ListCount: int + """ Get the number of rows in the control. Applicable to ``ComboBox, ListBox`` controls. """ + ListIndex: int + """ Get/set which item is selected in the control. In case of multiple selection, the index of the first + item is returned. Applicable to ``ComboBox, ListBox`` controls. """ + ListSource: Union[str, Tuple[str, ...]] + """ Specifies the data contained in a control as a tuple of string values. + Combined with ``ListSourceType``, may also contain the name of a table, a query or a complete SQL statement. + Applicable to ``ComboBox, ListBox`` controls. """ + ListSourceType: int + """ Specifies the type of data contained in a control. It must be one of + the ``com.sun.star.form.ListSourceType.*`` constants. Applicable to ``ComboBox, ListBox`` controls. """ + Locked: bool + """ Get/set if the control is read-only.. Applicable to ``ComboBox, CurrencyField, DateField, FileControl, + FormattedField, ImageControl, ListBox, NumericField, PatternField, TextField, TimeField`` controls. """ + MultiSelect: bool + """ Get/set whether a user can make multiple selections in a ``listbox``. """ + Name: str + """ The name of the control. """ + + OnActionPerformed: SCRIPT_URI + """ Get/set the macro triggered by the ``Execute action`` event. """ + OnAdjustmentValueChanged: SCRIPT_URI + """ Get/set the macro triggered by the ``While adjusting`` event. """ + OnApproveAction: SCRIPT_URI + """ Get/set the macro triggered by the ``Approve action`` event. """ + OnApproveReset: SCRIPT_URI + """ Get/set the macro triggered by the ``Prior to reset`` event. """ + OnApproveUpdate: SCRIPT_URI + """ Get/set the macro triggered by the ``WBefore updating`` event. """ + OnChanged: SCRIPT_URI + """ Get/set the macro triggered by the ``Changed`` event. """ + OnErrorOccurred: SCRIPT_URI + """ Get/set the macro triggered by the ``Error occurred`` event. """ + OnFocusGained: SCRIPT_URI + """ Get/set the macro triggered by the ``When receiving focus`` event.""" + OnFocusLost: SCRIPT_URI + """ Get/set the macro triggered by the ``When losing focus`` event.""" + OnItemStateChanged: SCRIPT_URI + """ Get/set the macro triggered by the ``Item status changed`` event. """ + OnKeyPressed: SCRIPT_URI + """ Get/set the macro triggered by the ``Key pressed`` event.""" + OnKeyReleased: SCRIPT_URI + """ Get/set the macro triggered by the ``Key released`` event.""" + OnMouseDragged: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse moved while button pressed`` event.""" + OnMouseEntered: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse inside`` event.""" + OnMouseExited: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse outside`` event.""" + OnMouseMoved: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse moved`` event.""" + OnMousePressed: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse button pressed`` event.""" + OnMouseReleased: SCRIPT_URI + """ Get/set the macro triggered by the ``Mouse button released`` event.""" + OnResetted: SCRIPT_URI + """ Get/set the macro triggered by the ``After resetting`` event. """ + OnTextChanged: SCRIPT_URI + """ Get/set the macro triggered by the ``Text modified`` event. """ + OnUpdated: SCRIPT_URI + """ Get/set the macro triggered by the ``After updating`` event. """ + + Parent: Union[FORM, FORMCONTROL] + """ Depending on the parent type, a form, a subform or a tablecontrol, returns the parent + ``SFDocuments.SF_Form`` or ``SFDocuments.SF_FormControl`` class instance. """ + Picture: FILE + """ Get/se the file name (in ``FileSystem.FileNaming`` notation) containing a bitmap or other type of graphic + to be displayed on the control. Applicable to ``Button, ImageButton, ImageControl`` controls. """ + Required: bool + """ A control is said required when the underlying data must not contain a ``NULL`` value. + Applicable to ``CheckBox, ComboBox, CurrencyField, DateField, ListBox, NumericField, PatternField, + RadioButton, SpinButton, TextField, TimeField`` controls.""" + Text: str + """ Get the text being displayed by the control. Applicable to ``ComboBox, DateField, FileControl, + FormattedField, PatternField, TextField, TimeField`` controls. """ + TipText: str + """ Specifies the text that appears as a tooltip when you hover the mouse pointer over the control. """ + TripleState: bool + """ Get/set whether the ``checkbox`` control may appear dimmed (grayed). """ + Value: Any + """ + Get/set the content of the control: + + - ``Button``: bool - For toggle buttons only. + - ``CheckBox``: bool, int - 0, ``False``: not checked, 1, ``True``: checked, 2: grayed, don't know. + - ``ComboBox``: str - The selected value. The ``ListIndex`` property is an alternate option. + - ``CurrencyField``: int, float. + - ``DateField``: datetime.datetime. + - ``FileControl``: FILE. + - ``FormattedField``: str, int, float. + - ``HiddenControl``: str, + - ``ListBox``: List(str), str - Get the selected row(s) as a single string or an array of strings. Only a single value can be set. + - ``NumericField``: int, float. + - ``PatternField``: str. + - ``RadioButton``: bool - Each button has its own name. Multiple RadioButton controls are linked together when they share the same group name. If a radiobutton is set to ``True``, the other related buttons are automatically set to ``False``. + - ``ScrollBar``: int - Must be within the predefined bounds. + - ``SpinButton``: int - Must be within the predefined bounds. + - ``TextField``: str - The text appearing in the control. + - ``TimeField``: datetime.datetime. + Not applicable to ``FixedText, GroupBox, ImageButton, ImageControl, NavigationBar`` and ``TableControl`` + form controls. + """ + Visible: bool + """ Get/set if the form control is hidden or visible. """ + + XControlModel: UNO + """ The UNO representation (``com.sun.star.awt.XControlModel``) of the control model. """ + XControlView: UNO + """ The UNO representation (``com.sun.star.awt.XControl``) of the control view. """ + + def Controls(self, controlname: str = ...) -> Union[FORMCONTROL, Tuple[str, ...]]: + """ + This method is applicable only to controls of the ``TableControl`` type. + The returned value depends on the arguments provided. + + If ``controlname`` is absent, then a tuple containing the names of all controls is returned. + + If ``controlname`` is provided, the method returns a ``FormControl`` class instance + corresponding to the specified control. + + Args + ``controlname``: a valid control name as a case-sensitive string. + Returns + The list of available control names + or an instance of the ``SFDocuments.SF_FormControl`` class. + """ + ... + + def SetFocus(self) -> bool: + """ + Sets the focus on the control. + + Returns + ``True`` if focusing was successful. + """ + ... + + # ######################################################################### + # SF_FormDocument CLASS + # ######################################################################### + class SF_FormDocument(SF_Document, SFServices): + """ + The ``FormDocument`` service allows to access form documents stored in ``Base`` documents. + + Each form document may be composed of one or more forms, including the main form and other sub-forms. + + This service inherits methods and properties from the ``Document`` service and is often used alongside + the ``Base`` and ``Database`` services. + """ + + def CloseDocument(self) -> bool: + """ + Close the form document and dispose the actual instance. + + Returns + ``True`` if closure is successful. + """ + ... + + def Forms(self, form: Union[int, str] = ...) -> Union[FORM, Tuple[str, ...]]: + """ + Depending on the parameters provided this method will return: + + - A tuple with the names of all the forms contained in the form document (if the form argument is absent) + - A ``SFDocuments.Form`` service instance representing the form specified as argument. + + Args + ``form``: the name or index corresponding to a form stored in the form document. + If this argument is absent, the method will return a list with the names of all available forms. + """ + ... + + def GetDatabase(self, user: str = ..., password: str = ...) -> Optional[DATABASE]: + """ + Returns a Database service instance (service = ``SFDatabases.Database``) giving access + to the execution of SQL commands on the database linked with the actual form document. + Args + ``user``, ``oassword``: the login parameters. + """ + ... + + def PrintOut(self, + pages: str = ..., + copies: int = ..., + printbackground: bool = ..., + printblankpages: bool = ..., + printevenpages: bool = ..., + printoddpages: bool = ..., + printimages: bool = ..., + ) -> bool: + """ + Send the content of the document to the printer. + + The printer might be defined previously by default, by the user or by the SetPrinter() method. + + Args + ``pages``: the pages to print as a string, like in the user interface. + Example: "1-4;10;15-18". Defaults to all pages. + + ``copies``: the number of copies to print. Defaults to 1. + + ``printbackground``: print the background image when ``True`` (default). + + ``printblankpages``: when ``False`` (default), omit empty pages. + + ``printevenpages``: print the left pages when ``True`` (default). + + ``printoddpages``: print the right pages when ``True`` (default). + + ``printimages``: print the graphic objects when ``True`` (defauly). + Returns + ``True`` when successful. + """ + ... + + # ######################################################################### + # SF_Writer CLASS + # ######################################################################### + class SF_Writer(SF_Document, SFServices): + """ + Many methods are generic for all types of documents and are inherited from the ``SF_Document`` + module, whereas other methods that are specific for ``Writer`` documents are defined + in the ``SF_Writer`` module. + """ + + def Forms(self, form: Union[int, str] = ...) -> Union[FORM, Tuple[str, ...]]: + """ + Depending on the parameters provided this method will return: + + - A tuple with the names of all the forms contained in the writer document (if the form argument is absent) + - A ``SFDocuments.Form`` service instance representing the form specified as argument. + + Args + ``form``: the name or index corresponding to a form stored in the form document. + If this argument is absent, the method will return a list with the names of all available forms. + """ + ... + + def ImportStylesFromFile(self, + filename: FILE, + families: Union[str, Sequence[str]] = ..., + overwrite: bool = ... + ): + """ + This method loads all the styles belonging to one or more style families from a closed + file into the actual ``Writer`` document. + + Are always imported together: + - ``ParagraphStyles`` and ``CharacterStyles`` + - ``NumberingStyles`` and ``ListStyles`` + + Args + ``filename``: the file from which to load the styles in the ``SFScriptForge.FileSystem`` + notation. The file is presumed to be a ``Writer`` document. + + ``families``: one of the style families present in the actual document, + as a case-sensitive string or a tuple of such strings. + Leave this argument blank to import all families. + + ``overwrite``: when ``True``, the actual styles may be overwritten. Default is ``False``. + Returns + ``True`` if styles were successfully imported. + + """ + ... + + def PrintOut(self, + pages: str = ..., + copies: int = ..., + printbackground: bool = ..., + printblankpages: bool = ..., + printevenpages: bool = ..., + printoddpages: bool = ..., + printimages: bool = ..., + ) -> bool: + """ + Send the content of the document to the printer. + + The printer might be defined previously by default, by the user or by the SetPrinter() method. + + Args + ``pages``: the pages to print as a string, like in the user interface. + Example: "1-4;10;15-18". Defaults to all pages. + + ``copies``: the number of copies to print. Defaults to 1. + + ``printbackground``: print the background image when ``True`` (default). + + ``printblankpages``: when ``False`` (default), omit empty pages. + + ``printevenpages``: print the left pages when ``True`` (default). + + ``printoddpages``: print the right pages when ``True`` (default). + + ``printimages``: print the graphic objects when ``True`` (defauly). + Returns + ``True`` when successful. + """ + ... + +class SFWidgets: + """ + The SFWidgets class manages toolbars, menus and popup menus. + """ + + # ######################################################################### + # SF_Menu CLASS + # ######################################################################### + class SF_Menu(SFServices): + """ + Display a menu in the menubar of a document or a form document. + After use, the menu will not be saved neither in the application settings, nor in the document. + + The menu will be displayed, as usual, when its header in the menubar is clicked. + When one of its items is selected, there are 3 alternative options: + - a UNO command (like ".uno:About") is triggered + - a user script is run receiving a standard argument defined in this service + - one of above combined with a toggle of the status of the item + + The menu is described from top to bottom. Each menu item receives a numeric and a string identifier. + + The ``SF_Menu`` service provides the following capabilities: + - Creation of menus with custom entries, checkboxes, radio buttons and separators. + - Decoration of menu items with icons and tooltips. + Menu entries associated with a script receive a comma-separated string argument with the following values: + - The toplevel name of the menu. + - The string ID of the selected menu entry. + - The numeric ID of the selected menu entry. + - The current state of the menu item. This is useful for checkboxes and radio buttons. If the item is checked, the value "1" is returned, otherwise "0" is returned. + """ + + ShortcutCharacter: str + """ Character used to define the access key of a menu item. The default character is "~" (tilde). """ + SubmenuCharacter: str + """ Character or string that defines how menu items are nested. The default character is ">". + + Example + ``oMenu.AddItem("Item A")`` + + ``oMenu.AddItem("Item B>Item B.1")`` + + ``oMenu.AddItem("Item B>Item B.2")`` + + ``oMenu.AddItem("---")`` + + ``oMenu.AddItem("Item C>Item C.1>Item C.1.1")`` + + ``oMenu.AddItem("Item C>Item C.1>Item C.1.2")`` + + ``oMenu.AddItem("Item C>Item C.2>Item C.2.1")`` + + ``oMenu.AddItem("Item C>Item C.2>Item C.2.2")`` + + ``oMenu.AddItem("Item C>Item C.2>---")`` + + ``oMenu.AddItem("Item C>Item C.2>Item C.2.3")`` + + ``oMenu.AddItem("Item C>Item C.2>Item C.2.4")`` + """ + + def AddCheckBox(self, + menuitem: str, + name: str = ..., + status: bool = ..., + icon: str = ..., + tooltip: str = ..., + command: str = ..., + script: SCRIPT_URI = ..., + ) -> int: + """ + Inserts a checkbox in the menu. + Args + ``menuitem``: defines the text to be displayed in the menu. + This argument also defines the hierarchy of the item inside the menu by using the submenu + character. + + ``name``: the string value used to identify the menu item. + By default, the last component of the menu hierarchy is used. + + ``status``: defines whether the item is selected when the menu is created. Defaults to ``False``. + + ``icon``: the relative path and name of the icon to be displayed versus the folder structure + found in the ZIP files located in the ``$INSTALLDIR/share/config`` directory. + The actual icon shown depends on the icon set being used. + + ``tooltip``: text to be displayed as tooltip. + + ``command``: the name of a UNO command without the .uno: prefix. If the command name + does not exist, nothing will happen when the item is clicked. + + ``script``: the URI for a Basic or Python script that will be executed when the item is clicked. + Note + The ``command`` and ``script`` arguments are mutually exclusive. + Returns + A numeric value that uniquely identifies the inserted item. + """ + ... + + def AddItem(self, + menuitem: str, + name: str = ..., + icon: str = ..., + tooltip: str = ..., + command: str = ..., + script: SCRIPT_URI = ..., + ) -> int: + """ + Inserts a label entry in the menu. + Args + ``menuitem``: defines the text to be displayed in the menu. + This argument also defines the hierarchy of the item inside the menu by using the submenu + character. + + ``name``: the string value used to identify the menu item. + By default, the last component of the menu hierarchy is used. + + ``icon``: the relative path and name of the icon to be displayed versus the folder structure + found in the ZIP files located in the ``$INSTALLDIR/share/config`` directory. + The actual icon shown depends on the icon set being used. + + ``tooltip``: text to be displayed as tooltip. + + ``command``: the name of a UNO command without the .uno: prefix. If the command name + does not exist, nothing will happen when the item is clicked. + + ``script``: the URI for a Basic or Python script that will be executed when the item is clicked. + Note + The ``command`` and ``script`` arguments are mutually exclusive. + Returns + A numeric value that uniquely identifies the inserted item. + """ + ... + + def AddRadioButton(self, + menuitem: str, + name: str = ..., + status: bool = ..., + icon: str = ..., + tooltip: str = ..., + command: str = ..., + script: SCRIPT_URI = ..., + ) -> int: + """ + Inserts a radio btton in the menu. + Args + ``menuitem``: defines the text to be displayed in the menu. + This argument also defines the hierarchy of the item inside the menu by using the submenu + character. + + ``name``: the string value used to identify the menu item. + By default, the last component of the menu hierarchy is used. + + ``status``: defines whether the item is selected when the menu is created. Defaults to ``False``. + + ``icon``: the relative path and name of the icon to be displayed versus the folder structure + found in the ZIP files located in the ``$INSTALLDIR/share/config`` directory. + The actual icon shown depends on the icon set being used. + + ``tooltip``: text to be displayed as tooltip. + + ``command``: the name of a UNO command without the .uno: prefix. If the command name + does not exist, nothing will happen when the item is clicked. + + ``script``: the URI for a Basic or Python script that will be executed when the item is clicked. + Note + The ``command`` and ``script`` arguments are mutually exclusive. + Returns + A numeric value that uniquely identifies the inserted item. + """ + ... + + # ######################################################################### + # SF_Menu CLASS + # ######################################################################### + class SF_PopupMenu(SFServices): + """ + Display a popup menu anywhere and any time. + A popup menu is usually triggered by a mouse action (typically a right-click) on a dialog, a form + or one of their controls. In this case the menu will be displayed below the clicked area. + + When triggered by other events, including in the normal flow of a user script, the script should + provide the coordinates of the top-left edge of the menu versus the actual component. + + The menu is described from top to bottom. Each menu item receives a numeric and a string identifier. + The ``Execute()`` method returns the item selected by the user. + + The ``SF_PopupMenu`` service provides the following capabilities: + - Creation of menus with custom entries, checkboxes, radio buttons and separators. + - Decoration of menu items with icons and tooltips. + """ + + ShortcutCharacter: str + """ Character used to define the access key of a menu item. The default character is "~" (tilde). """ + SubmenuCharacter: str + """ Character or string that defines how menu items are nested. The default character is ">". + + Example + ``oMenu.AddItem("Item A")`` + + ``oMenu.AddItem("Item B>Item B.1")`` + + ``oMenu.AddItem("Item B>Item B.2")`` + + ``oMenu.AddItem("---")`` + + ``oMenu.AddItem("Item C>Item C.1>Item C.1.1")`` + + ``oMenu.AddItem("Item C>Item C.1>Item C.1.2")`` + + ``oMenu.AddItem("Item C>Item C.2>Item C.2.1")`` + + ``oMenu.AddItem("Item C>Item C.2>Item C.2.2")`` + + ``oMenu.AddItem("Item C>Item C.2>---")`` + + ``oMenu.AddItem("Item C>Item C.2>Item C.2.3")`` + + ``oMenu.AddItem("Item C>Item C.2>Item C.2.4")`` + """ + + def AddCheckBox(self, + menuitem: str, + name: str = ..., + status: bool = ..., + icon: str = ..., + tooltip: str = ..., + ) -> int: + """ + Inserts a checkbox in the menu. + Args + ``menuitem``: defines the text to be displayed in the menu. + This argument also defines the hierarchy of the item inside the menu by using the submenu + character. + + ``name``: the string value used to identify the menu item. + By default, the last component of the menu hierarchy is used. + + ``status``: defines whether the item is selected when the menu is created. Defaults to ``False``. + + ``icon``: the relative path and name of the icon to be displayed versus the folder structure + found in the ZIP files located in the ``$INSTALLDIR/share/config`` directory. + The actual icon shown depends on the icon set being used. + + ``tooltip``: text to be displayed as tooltip. + Returns + A numeric value that uniquely identifies the inserted item. + """ + ... + + def AddItem(self, + menuitem: str, + name: str = ..., + icon: str = ..., + tooltip: str = ..., + ) -> int: + """ + Inserts a label entry in the menu. + Args + ``menuitem``: defines the text to be displayed in the menu. + This argument also defines the hierarchy of the item inside the menu by using the submenu + character. + + ``name``: the string value used to identify the menu item. + By default, the last component of the menu hierarchy is used. + + ``icon``: the relative path and name of the icon to be displayed versus the folder structure + found in the ZIP files located in the ``$INSTALLDIR/share/config`` directory. + The actual icon shown depends on the icon set being used. + + ``tooltip``: text to be displayed as tooltip. + Returns + A numeric value that uniquely identifies the inserted item. + """ + ... + + def AddRadioButton(self, + menuitem: str, + name: str = ..., + status: bool = ..., + icon: str = ..., + tooltip: str = ..., + ) -> int: + """ + Inserts a radio btton in the menu. + Args + ``menuitem``: defines the text to be displayed in the menu. + This argument also defines the hierarchy of the item inside the menu by using the submenu + character. + + ``name``: the string value used to identify the menu item. + By default, the last component of the menu hierarchy is used. + + ``status``: defines whether the item is selected when the menu is created. Defaults to ``False``. + + ``icon``: the relative path and name of the icon to be displayed versus the folder structure + found in the ZIP files located in the ``$INSTALLDIR/share/config`` directory. + The actual icon shown depends on the icon set being used. + + ``tooltip``: text to be displayed as tooltip. + Returns + A numeric value that uniquely identifies the inserted item. + """ + ... + + def Execute(self, returnid: bool = ...) -> Union[int, str]: + """ + Displays the popup menu and waits for a user action. + Args + ``returnid``: if ``True`` (default), the numeric identfier of the selected item is returned. + If ``False``, the method returns the item's name. + Returns + The item clicked by the user. + If the user clicks outside the popup menu or presses the ``Esc`` key, then no item is selected. + In such cases, the returned value is either ``0`` (zero) or the empty string, depending + on the ``returnid`` argument. + """ + ... + + # ######################################################################### + # SF_Toolbar CLASS + # ######################################################################### + class SF_Toolbar(SFServices): + """ + Each component has its own set of toolbars, depending on the component type + (Calc, Writer, Basic IDE, ...). + + In the context of the actual class, a toolbar is presumed defined statically: + - either bat LibreOffice installation, + - or by a customization done by the user at application or at document levels. + + The ``Toolbar`` service allows to retrieve information related to the toolbars available for + a specific document window. + + With this service it is possible to: + - toggle the visibility of specific toolbars. + - access to information about the buttons available in each toolbar. + + This service handles both built-in and custom toolbars. + """ + + BuiltIn: bool + """ Returns ``True`` when the toolbar is part of the set of standard toolbars shipped with LibreOffice. """ + Docked: bool + """ Returns ``True`` when the toolbar is active in the window and docked. """ + HasGlobalScope: bool + """ Returns ``True`` when the toolbar is available in all documents of the same type. """ + Name: str + """ Returns the name of the toolbar. """ + ResourceURL: str + """ Returns the resource URL of the toolbar, in the form ``"private:toolbar/toolbar_name"``. """ + Visible: bool + """ Get/set whether the toolbar is active and visible in the document window. """ + XUIElement: UNO + """ Returns the ``com.sun.star.ui.XUIElement`` UNO object that represents the toolbar. """ + + def ToolbarButtons(self, buttonname: str = ...) -> Union[TOOLBARBUTTON, Tuple[str]]: + """ + Returns either a list of the available toolbar button names in the actual toolbar + or a ``ToolbarButton`` object instance. + Args + ``buttonname``: the usual name of one of the available buttons in the actual toolbar. + The button name is the localized button name defined in the ``Tools - Customize - Toolbars`` + dialog. + Returns + A tuple of button names when the argument is absent, + or a new ``SF_ToolbarButton`` object instance otherwise. + """ + ... + + # ######################################################################### + # SF_Toolbar CLASS + # ######################################################################### + class SF_ToolbarButton(SFServices): + """ + A toolbar consists in a series of graphical controls to trigger actions. + The ``Toolbar`` service gives access to the ``ToolbarButton`` service to manage + the individual buttons belonging to the toolbar. + + With this service it is possible to: + - know the characteristics of the button + - toggle the visibility of the button. + - execute the command associated with the toolbar button. + """ + + Caption: str + """ Returns the name of the button. """ + Height: int + """ Returns the height of the button, in pixels. """ + Index: int + """ Returns the index of the button in its parent toolbar. """ + OnClick: str + """ Get/set the UNO command or the script executed when the button is pressed. """ + Parent: TOOLBAR + """ Returns a ``Toolbar`` service instance corresponding to the parent toolbar of the current + toolbar button. """ + TipText: str + """ Get/set the tooltip text shown when the user hovers the toolbar button. """ + Visible: bool + """ Get/set whether the toolbar button is visible or not. """ + Width: int + """ Returns the width of the button, in pixels. """ + X: int + """ Returns the X (horizontal) coordinate of the top-left corner of the button, in pixels. """ + Y: int + """ Returns the Y (vertical) coordinate of the top-left corner of the button, in pixels. """ + + def Execute(self) -> Optional[Any]: + """ + Execute the command stored in the toolbar button. + The command can be a UNO command or a Basic/Python script (expressed in the + ``scripting framework_URI`` notation). + Returns + The output of the script or None + """ + ... + + +# ############################################################################# +# CreateScriptService signatures +# ############################################################################# +@overload +def CreateScriptService(service: Literal['servicename', 'Servicename', 'Library.Servicename'], *args: Any + ) -> Optional[SERVICE]: + """ + The modules and classes implemented in the ScriptForge libraries are invoked + from user scripts as "Services". A generic constructor of those services has been designed for that purpose. + + Args + ``service``: the name of the service as a string 'library.service' or one of its synonyms. + + The service names created with ``CreateScriptService()`` are: + - ``Array``, ``Basic``, ``Dictionary``, ``Exception``, ``FileSystem``, ``L10N``, ``Platform``, ``Region``, ``Session``, ``String``, ``Timer``, ``UI`` + - ``Database`` + - ``Dialog``, ``NewDialog``, ``DialogEvent`` + - ``Document``, ``Base``, ``Calc``, ``Writer`` + - ``PopupMenu`` + + ``args``: the optional arguments to pass to the service constructor. + ``Dictionary`` + (positional): a Python dictionary. Default = ``None``. + ``Timer`` + ``start``: when ``True``, the timer starts immediately. Default = ``False``. + ``Database`` + ``filename``: the name of the ``Base`` file containing the database. Must be expressed + using the ``SF_FileSystem.FileNaming`` notation. + + ``registrationname``: the name of a registered database. + If ``filename`` is provided, this argument is ignored. + + ``readonly``: determines if the database will be opened as readonly. Defaults to ``True``. + + ``user``, ``password``: additional connection parameters. + ``Dialog`` + ``container``: ``"GlobalScope"`` for preinstalled libraries or a window name. + Defaults to the current document. + + ``library``: the case-sensitive name of a library contained in the container. + Default value is ``"Standard"``. + + ``dialogname``: a case-sensitive string designating the dialog. + ``NewDialog`` + ``dialogname``: an identifier for the dialog to be built from scratch. + + ``place``: the size and position expressed in "``APPFONT units``". Either: + - a tuple (X, Y, Width, Height). + - a ``com.sun.star.awt.Rectangle`` structure. + ``DialogEvent`` + (positional): the event object passed by ``LibreOffice`` to the event-handling routine. + ``Document``, ``Base``, ``Calc``, ``Writer`` + ``windowname``: see definitions at ``SF_UI`` class level. + ``PopupMenu`` + ``event``: the mouse event object passed by ``LibreOffice`` to the event-handling routine. + + ``x``, ``y``: the screen coordinates where the menu will be displayed. + + ``submenuchar``: character or string that defines how menu items are nested. + The default character is ``">"``. + Returns + The service as a Python class instance. + """ + ... +@overload +def CreateScriptService(service: Literal['array', 'Array', 'ScriptForge.Array']) -> ARRAY: ... +@overload +def CreateScriptService(service: Literal['basic', 'Basic', 'ScriptForge.Basic']) -> BASIC: ... +@overload +def CreateScriptService(service: Literal['dictionary', 'Dictionary', 'ScriptForge.Dictionary'], + dic: Optional[Dict] = None) -> Optional[DICTIONARY]: ... +@overload +def CreateScriptService(service: Literal['exception', 'Exception', 'ScriptForge.Exception']) -> EXCEPTION: ... +@overload +def CreateScriptService(service: Literal['filesystem', 'FileSystem', 'ScriptForge.FileSystem']) -> FILESYSTEM: ... +@overload +def CreateScriptService(service: Literal['l10n', 'L10N', 'ScriptForge.L10N'], foldername: str = '', + locale: str = '', encoding: str = '', locale2: str = '', encoding2: str = '') -> Optional[L10N]: ... +@overload +def CreateScriptService(service: Literal['platform', 'Platform', 'ScriptForge.Platform']) -> PLATFORM: ... +@overload +def CreateScriptService(service: Literal['region', 'Region', 'ScriptForge.Region']) -> Optional[REGION]: ... +@overload +def CreateScriptService(service: Literal['session', 'Session', 'ScriptForge.Session']) -> SESSION: ... +@overload +def CreateScriptService(service: Literal['string', 'String', 'ScriptForge.String']) -> STRING: ... +@overload +def CreateScriptService(service: Literal['timer', 'Timer', 'ScriptForge.Timer'], start: bool = False + ) -> Optional[TIMER]: ... +@overload +def CreateScriptService(service: Literal['ui', 'UI', 'ScriptForge.UI']) -> UI: ... +@overload +def CreateScriptService(service: Literal['database', 'Database', 'SFDatabases.Database'], filename: str = '', + registrationname: str = '', readonly: bool = True, user: str = '', password: str = '' + ) -> Optional[DATABASE]: ... +@overload +def CreateScriptService(service: Literal['dialog', 'Dialog', 'SFDialogs.Dialog'], container: str = '', + library: str = 'Standard', dialogname: str = '') -> Optional[DIALOG]: ... +@overload +def CreateScriptService(service: Literal['newdialog', 'NewDialog', 'SFDialogs.NewDialog'], dialogname: str, + place: Tuple[int, int, int, int]) -> Optional[DIALOG]: ... +@overload +def CreateScriptService(service: Literal['dialogevent', 'DialogEvent', 'SFDialogs.DialogEvent'], + event: Optional[UNO] = None) -> Optional[DIALOG, DIALOGCONTROL]: ... +@overload +def CreateScriptService(service: Literal['document', 'Document', 'SFDocuments.Document'], + windowname: Union[UNO, str] = '') -> Optional[DOCUMENT]: ... +@overload +def CreateScriptService(service: Literal['base', 'Base', 'SFDocuments.Base'], windowname: Union[UNO, str] = '' + ) -> Optional[BASE]: ... +@overload +def CreateScriptService(service: Literal['calc', 'Calc', 'SFDocuments.Calc'], windowname: Union[UNO, str] = '' + ) -> Optional[CALC]: ... +@overload +def CreateScriptService(service: Literal['writer', 'Writer', 'SFDocuments.Writer'], windowname: Union[UNO, str] = '' + ) -> Optional[WRITER]: ... +@overload +def CreateScriptService(service: Literal['popupmenu', 'PopupMenu', 'SFWidgets.PopupMenu'], event: Optional[UNO] = None, + x: int = 0, y: int = 0, submenuchar:str = '') -> Optional[POPUPMENU]: ... + +createScriptService, createscriptservice = CreateScriptService, CreateScriptService |