summaryrefslogtreecommitdiff
path: root/wizards/source/scriptforge/python/scriptforge.py
diff options
context:
space:
mode:
Diffstat (limited to 'wizards/source/scriptforge/python/scriptforge.py')
-rw-r--r--wizards/source/scriptforge/python/scriptforge.py431
1 files changed, 283 insertions, 148 deletions
diff --git a/wizards/source/scriptforge/python/scriptforge.py b/wizards/source/scriptforge/python/scriptforge.py
index d722b3ca2f1a..94fe0fe5a7bd 100644
--- a/wizards/source/scriptforge/python/scriptforge.py
+++ b/wizards/source/scriptforge/python/scriptforge.py
@@ -315,8 +315,8 @@ class ScriptForge(object, metaclass = _Singleton):
if isinstance(returntuple[cstValue], uno.ByteSequence):
return ()
elif returntuple[cstVarType] == ScriptForge.V_DATE:
+ dat = None
try: # Anticipate fromisoformat('00:00:00') and alike
- dat = None
dat = datetime.datetime.fromisoformat(returntuple[cstValue])
finally:
return dat
@@ -528,10 +528,10 @@ class SFServices(object):
def Dispose(self):
if self.serviceimplementation == 'basic':
if self.objectreference >= len(ScriptForge.servicesmodules): # Do not dispose predefined module objects
- self.Execute(self.vbMethod, 'Dispose')
+ self.ExecMethod(self.vbMethod, 'Dispose')
self.objectreference = -1
- def Execute(self, flags = 0, methodname = '', *args):
+ def ExecMethod(self, flags = 0, methodname = '', *args):
if flags == 0:
flags = self.vbMethod
if len(methodname) > 0:
@@ -558,6 +558,8 @@ class SFServices(object):
Set the given property to a new value in the Basic world
"""
if self.serviceimplementation == 'basic':
+ if isinstance(value, datetime.datetime):
+ value = value.isoformat()
return self.EXEC(self.objectreference, self.vbLet + self.flgDateArg, propertyname, value)
@@ -588,7 +590,8 @@ class SFScriptForge:
Difference with the Basic version: dates are returned in their iso format,
not as any of the datetime objects.
"""
- return self.Execute(self.vbMethod + self.flgArrayRet, 'ImportFromCSVFile', filename, delimiter, dateformat)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'ImportFromCSVFile',
+ filename, delimiter, dateformat)
# #########################################################################
# SF_Basic CLASS
@@ -840,14 +843,14 @@ class SFScriptForge:
serviceproperties = dict()
def Console(self, modal = True):
- # Modal is always True in Python: Basic execution lasts only the time to display the box
- return self.Execute(self.vbMethod, 'Console', True)
+ # From Python, the current XComponentContext must be added as last argument
+ return self.ExecMethod(self.vbMethod, 'Console', modal, ScriptForge.componentcontext)
def ConsoleClear(self, keep = 0):
- return self.Execute(self.vbMethod, 'ConsoleClear', keep)
+ return self.ExecMethod(self.vbMethod, 'ConsoleClear', keep)
def ConsoleToFile(self, filename):
- return self.Execute(self.vbMethod, 'ConsoleToFile', filename)
+ return self.ExecMethod(self.vbMethod, 'ConsoleToFile', filename)
def DebugDisplay(self, *args):
# Arguments are concatenated in a single string similar to what the Python print() function would produce
@@ -859,7 +862,7 @@ class SFScriptForge:
def DebugPrint(self, *args):
# Arguments are concatenated in a single string similar to what the Python print() function would produce
param = '\t'.join(list(map(repr, args))).expandtabs(tabsize = 4)
- return self.Execute(self.vbMethod, 'DebugPrint', param)
+ return self.ExecMethod(self.vbMethod, 'DebugPrint', param)
def RaiseFatal(self, errorcode, *args):
"""
@@ -870,6 +873,16 @@ class SFScriptForge:
# Direct call because RaiseFatal forces an execution stop in Basic
return self.SIMPLEEXEC('SF_Exception.RaiseFatal', errorcode, *args)
+ def _RaiseFatal(self, sub, subargs, errorcode, *args):
+ """
+ Wrapper of RaiseFatal(). Includes method and syntax of the failed Python routine
+ to simulate the exact behaviour of the Basic RaiseFatal() method
+ For INTERNAL USE only
+ """
+ ScriptForge.InvokeSimpleScript('ScriptForge.SF_Utils._EnterFunction', sub, subargs)
+ self.RaiseFatal(errorcode, *args)
+ raise RuntimeError("The execution of the method '" + sub.split('.')[-1] + "' failed. Execution stops.")
+
# #########################################################################
# SF_FileSystem CLASS
# #########################################################################
@@ -890,7 +903,7 @@ class SFScriptForge:
ForReading, ForWriting, ForAppending = 1, 2, 8
def BuildPath(self, foldername, name):
- return self.Execute(self.vbMethod, 'BuildPath', foldername, name)
+ return self.ExecMethod(self.vbMethod, 'BuildPath', foldername, name)
def CompareFiles(self, filename1, filename2, comparecontents = False):
py = ScriptForge.pythonhelpermodule + '$' + '_SF_FileSystem__CompareFiles'
@@ -902,37 +915,37 @@ class SFScriptForge:
return False
def CopyFile(self, source, destination, overwrite = True):
- return self.Execute(self.vbMethod, 'CopyFile', source, destination, overwrite)
+ return self.ExecMethod(self.vbMethod, 'CopyFile', source, destination, overwrite)
def CopyFolder(self, source, destination, overwrite = True):
- return self.Execute(self.vbMethod, 'CopyFolder', source, destination, overwrite)
+ return self.ExecMethod(self.vbMethod, 'CopyFolder', source, destination, overwrite)
def CreateFolder(self, foldername):
- return self.Execute(self.vbMethod, 'CreateFolder', foldername)
+ return self.ExecMethod(self.vbMethod, 'CreateFolder', foldername)
def CreateTextFile(self, filename, overwrite = True, encoding = 'UTF-8'):
- return self.Execute(self.vbMethod, 'CreateTextFile', filename, overwrite, encoding)
+ return self.ExecMethod(self.vbMethod, 'CreateTextFile', filename, overwrite, encoding)
def DeleteFile(self, filename):
- return self.Execute(self.vbMethod, 'DeleteFile', filename)
+ return self.ExecMethod(self.vbMethod, 'DeleteFile', filename)
def DeleteFolder(self, foldername):
- return self.Execute(self.vbMethod, 'DeleteFolder', foldername)
+ return self.ExecMethod(self.vbMethod, 'DeleteFolder', foldername)
def FileExists(self, filename):
- return self.Execute(self.vbMethod, 'FileExists', filename)
+ return self.ExecMethod(self.vbMethod, 'FileExists', filename)
def Files(self, foldername, filter = ''):
- return self.Execute(self.vbMethod, 'Files', foldername, filter)
+ return self.ExecMethod(self.vbMethod, 'Files', foldername, filter)
def FolderExists(self, foldername):
- return self.Execute(self.vbMethod, 'FolderExists', foldername)
+ return self.ExecMethod(self.vbMethod, 'FolderExists', foldername)
def GetBaseName(self, filename):
- return self.Execute(self.vbMethod, 'GetBaseName', filename)
+ return self.ExecMethod(self.vbMethod, 'GetBaseName', filename)
def GetExtension(self, filename):
- return self.Execute(self.vbMethod, 'GetExtension', filename)
+ return self.ExecMethod(self.vbMethod, 'GetExtension', filename)
def GetFileLen(self, filename):
py = ScriptForge.pythonhelpermodule + '$' + '_SF_FileSystem__GetFilelen'
@@ -943,16 +956,16 @@ class SFScriptForge:
return 0
def GetFileModified(self, filename):
- return self.Execute(self.vbMethod + self.flgDateRet, 'GetFileModified', filename)
+ return self.ExecMethod(self.vbMethod + self.flgDateRet, 'GetFileModified', filename)
def GetName(self, filename):
- return self.Execute(self.vbMethod, 'GetName', filename)
+ return self.ExecMethod(self.vbMethod, 'GetName', filename)
def GetParentFolderName(self, filename):
- return self.Execute(self.vbMethod, 'GetParentFolderName', filename)
+ return self.ExecMethod(self.vbMethod, 'GetParentFolderName', filename)
def GetTempName(self):
- return self.Execute(self.vbMethod, 'GetTempName')
+ return self.ExecMethod(self.vbMethod, 'GetTempName')
def HashFile(self, filename, algorithm):
py = ScriptForge.pythonhelpermodule + '$' + '_SF_FileSystem__HashFile'
@@ -963,22 +976,22 @@ class SFScriptForge:
return ''
def MoveFile(self, source, destination):
- return self.Execute(self.vbMethod, 'MoveFile', source, destination)
+ return self.ExecMethod(self.vbMethod, 'MoveFile', source, destination)
def MoveFolder(self, source, destination):
- return self.Execute(self.vbMethod, 'MoveFolder', source, destination)
+ return self.ExecMethod(self.vbMethod, 'MoveFolder', source, destination)
def OpenTextFile(self, filename, iomode = 1, create = False, encoding = 'UTF-8'):
- return self.Execute(self.vbMethod, 'OpenTextFile', filename, iomode, create, encoding)
+ return self.ExecMethod(self.vbMethod, 'OpenTextFile', filename, iomode, create, encoding)
def PickFile(self, defaultfile = ScriptForge.cstSymEmpty, mode = 'OPEN', filter = ''):
- return self.Execute(self.vbMethod, 'PickFile', defaultfile, mode, filter)
+ return self.ExecMethod(self.vbMethod, 'PickFile', defaultfile, mode, filter)
def PickFolder(self, defaultfolder = ScriptForge.cstSymEmpty, freetext = ''):
- return self.Execute(self.vbMethod, 'PickFolder', defaultfolder, freetext)
+ return self.ExecMethod(self.vbMethod, 'PickFolder', defaultfolder, freetext)
def SubFolders(self, foldername, filter = ''):
- return self.Execute(self.vbMethod, 'SubFolders', foldername, filter)
+ return self.ExecMethod(self.vbMethod, 'SubFolders', foldername, filter)
def _ConvertFromUrl(self, filename):
# Alias for same function in FileSystem Basic module
@@ -1002,13 +1015,13 @@ class SFScriptForge:
serviceproperties = dict(Folder = False, Languages = False, Locale = False)
def AddText(self, context = '', msgid = '', comment = ''):
- return self.Execute(self.vbMethod, 'AddText', context, msgid, comment)
+ return self.ExecMethod(self.vbMethod, 'AddText', context, msgid, comment)
def ExportToPOTFile(self, filename, header = '', encoding= 'UTF-8'):
- return self.Execute(self.vbMethod, 'ExportToPOTFile', filename, header, encoding)
+ return self.ExecMethod(self.vbMethod, 'ExportToPOTFile', filename, header, encoding)
def GetText(self, msgid, *args):
- return self.Execute(self.vbMethod, 'GetText', msgid, *args)
+ return self.ExecMethod(self.vbMethod, 'GetText', msgid, *args)
_ = GetText
# #########################################################################
@@ -1122,32 +1135,32 @@ class SFScriptForge:
return self.SIMPLEEXEC(scope + ':' + script, *args)
def HasUnoMethod(self, unoobject, methodname):
- return self.Execute(self.vbMethod, 'HasUnoMethod', unoobject, methodname)
+ return self.ExecMethod(self.vbMethod, 'HasUnoMethod', unoobject, methodname)
def HasUnoProperty(self, unoobject, propertyname):
- return self.Execute(self.vbMethod, 'HasUnoProperty', unoobject, propertyname)
+ return self.ExecMethod(self.vbMethod, 'HasUnoProperty', unoobject, propertyname)
def OpenURLInBrowser(self, url):
py = ScriptForge.pythonhelpermodule + '$' + '_SF_Session__OpenURLInBrowser'
return self.SIMPLEEXEC(py, url)
def RunApplication(self, command, parameters):
- return self.Execute(self.vbMethod, 'RunApplication', command, parameters)
+ return self.ExecMethod(self.vbMethod, 'RunApplication', command, parameters)
def SendMail(self, recipient, cc = '', bcc = '', subject = '', body = '', filenames = '', editmessage = True):
- return self.Execute(self.vbMethod, 'SendMail', recipient, cc, bcc, subject, body, filenames, editmessage)
+ return self.ExecMethod(self.vbMethod, 'SendMail', recipient, cc, bcc, subject, body, filenames, editmessage)
def UnoObjectType(self, unoobject):
- return self.Execute(self.vbMethod, 'UnoObjectType', unoobject)
+ return self.ExecMethod(self.vbMethod, 'UnoObjectType', unoobject)
def UnoMethods(self, unoobject):
- return self.Execute(self.vbMethod, 'UnoMethods', unoobject)
+ return self.ExecMethod(self.vbMethod, 'UnoMethods', unoobject)
def UnoProperties(self, unoobject):
- return self.Execute(self.vbMethod, 'UnoProperties', unoobject)
+ return self.ExecMethod(self.vbMethod, 'UnoProperties', unoobject)
def WebService(self, uri):
- return self.Execute(self.vbMethod, 'WebService', uri)
+ return self.ExecMethod(self.vbMethod, 'WebService', uri)
# #########################################################################
# SF_String CLASS
@@ -1169,34 +1182,34 @@ class SFScriptForge:
return self.SIMPLEEXEC(py, inputstr, algorithm.lower())
def IsADate(self, inputstr, dateformat = 'YYYY-MM-DD'):
- return self.Execute(self.vbMethod, 'IsADate', inputstr, dateformat)
+ return self.ExecMethod(self.vbMethod, 'IsADate', inputstr, dateformat)
def IsEmail(self, inputstr):
- return self.Execute(self.vbMethod, 'IsEmail', inputstr)
+ return self.ExecMethod(self.vbMethod, 'IsEmail', inputstr)
def IsFileName(self, inputstr, osname = ScriptForge.cstSymEmpty):
- return self.Execute(self.vbMethod, 'IsFileName', inputstr, osname)
+ return self.ExecMethod(self.vbMethod, 'IsFileName', inputstr, osname)
def IsIBAN(self, inputstr):
- return self.Execute(self.vbMethod, 'IsIBAN', inputstr)
+ return self.ExecMethod(self.vbMethod, 'IsIBAN', inputstr)
def IsIPv4(self, inputstr):
- return self.Execute(self.vbMethod, 'IsIPv4', inputstr)
+ return self.ExecMethod(self.vbMethod, 'IsIPv4', inputstr)
def IsLike(self, inputstr, pattern, casesensitive = False):
- return self.Execute(self.vbMethod, 'IsLike', inputstr, pattern, casesensitive)
+ return self.ExecMethod(self.vbMethod, 'IsLike', inputstr, pattern, casesensitive)
def IsSheetName(self, inputstr):
- return self.Execute(self.vbMethod, 'IsSheetName', inputstr)
+ return self.ExecMethod(self.vbMethod, 'IsSheetName', inputstr)
def IsUrl(self, inputstr):
- return self.Execute(self.vbMethod, 'IsUrl', inputstr)
+ return self.ExecMethod(self.vbMethod, 'IsUrl', inputstr)
def SplitNotQuoted(self, inputstr, delimiter = ' ', occurrences = 0, quotechar = '"'):
- return self.Execute(self.vbMethod, 'SplitNotQuoted', inputstr, delimiter, occurrences, quotechar)
+ return self.ExecMethod(self.vbMethod, 'SplitNotQuoted', inputstr, delimiter, occurrences, quotechar)
def Wrap(self, inputstr, width = 70, tabsize = 8):
- return self.Execute(self.vbMethod, 'Wrap', inputstr, width, tabsize)
+ return self.ExecMethod(self.vbMethod, 'Wrap', inputstr, width, tabsize)
# #########################################################################
# SF_TextStream CLASS
@@ -1224,22 +1237,22 @@ class SFScriptForge:
line = Line
def CloseFile(self):
- return self.Execute(self.vbMethod, 'CloseFile')
+ return self.ExecMethod(self.vbMethod, 'CloseFile')
def ReadAll(self):
- return self.Execute(self.vbMethod, 'ReadAll')
+ return self.ExecMethod(self.vbMethod, 'ReadAll')
def ReadLine(self):
- return self.Execute(self.vbMethod, 'ReadLine')
+ return self.ExecMethod(self.vbMethod, 'ReadLine')
def SkipLine(self):
- return self.Execute(self.vbMethod, 'SkipLine')
+ return self.ExecMethod(self.vbMethod, 'SkipLine')
def WriteBlankLines(self, lines):
- return self.Execute(self.vbMethod, 'WriteBlankLines', lines)
+ return self.ExecMethod(self.vbMethod, 'WriteBlankLines', lines)
def WriteLine(self, line):
- return self.Execute(self.vbMethod, 'WriteLine', line)
+ return self.ExecMethod(self.vbMethod, 'WriteLine', line)
# #########################################################################
# SF_Timer CLASS
@@ -1258,19 +1271,19 @@ class SFScriptForge:
forceGetProperty = True
def Continue(self):
- return self.Execute(self.vbMethod, 'Continue')
+ return self.ExecMethod(self.vbMethod, 'Continue')
def Restart(self):
- return self.Execute(self.vbMethod, 'Restart')
+ return self.ExecMethod(self.vbMethod, 'Restart')
def Start(self):
- return self.Execute(self.vbMethod, 'Start')
+ return self.ExecMethod(self.vbMethod, 'Start')
def Suspend(self):
- return self.Execute(self.vbMethod, 'Suspend')
+ return self.ExecMethod(self.vbMethod, 'Suspend')
def Terminate(self):
- return self.Execute(self.vbMethod, 'Terminate')
+ return self.ExecMethod(self.vbMethod, 'Terminate')
# #########################################################################
# SF_UI CLASS
@@ -1298,47 +1311,50 @@ class SFScriptForge:
@property
def ActiveWindow(self):
- return self.Execute(self.vbMethod, 'ActiveWindow')
+ return self.ExecMethod(self.vbMethod, 'ActiveWindow')
def Activate(self, windowname = ''):
- return self.Execute(self.vbMethod, 'Activate', windowname)
+ return self.ExecMethod(self.vbMethod, 'Activate', windowname)
def CreateBaseDocument(self, filename, embeddeddatabase = 'HSQLDB', registrationname = ''):
- return self.Execute(self.vbMethod, 'CreateBaseDocument', filename, embeddeddatabase, registrationname)
+ return self.ExecMethod(self.vbMethod, 'CreateBaseDocument', filename, embeddeddatabase, registrationname)
def CreateDocument(self, documenttype = '', templatefile = '', hidden = False):
- return self.Execute(self.vbMethod, 'CreateDocument', documenttype, templatefile, hidden)
+ return self.ExecMethod(self.vbMethod, 'CreateDocument', documenttype, templatefile, hidden)
def Documents(self):
- return self.Execute(self.vbMethod, 'Documents')
+ return self.ExecMethod(self.vbMethod, 'Documents')
def GetDocument(self, windowname = ''):
- return self.Execute(self.vbMethod, 'GetDocument', windowname)
+ return self.ExecMethod(self.vbMethod, 'GetDocument', windowname)
def Maximize(self, windowname = ''):
- return self.Execute(self.vbMethod, 'Maximize', windowname)
+ return self.ExecMethod(self.vbMethod, 'Maximize', windowname)
def Minimize(self, windowname = ''):
- return self.Execute(self.vbMethod, 'Minimize', windowname)
+ return self.ExecMethod(self.vbMethod, 'Minimize', windowname)
def OpenBaseDocument(self, filename = '', registrationname = '', macroexecution = MACROEXECNORMAL):
- return self.Execute(self.vbMethod, 'OpenBaseDocument', filename, registrationname, macroexecution)
+ return self.ExecMethod(self.vbMethod, 'OpenBaseDocument', filename, registrationname, macroexecution)
def OpenDocument(self, filename, password = '', readonly = False, hidden = False,
macroexecution = MACROEXECNORMAL, filtername = '', filteroptions = ''):
- return self.Execute(self.vbMethod, 'OpenDocument', filename, password, readonly, hidden,
- macroexecution, filtername, filteroptions)
+ return self.ExecMethod(self.vbMethod, 'OpenDocument', filename, password, readonly, hidden,
+ macroexecution, filtername, filteroptions)
def Resize(self, left = -1, top = -1, width = -1, height = -1):
- return self.Execute(self.vbMethod, 'Resize', left, top, width, height)
+ return self.ExecMethod(self.vbMethod, 'Resize', left, top, width, height)
def SetStatusbar(self, text = '', percentage = -1):
- return self.Execute(self.vbMethod, 'SetStatusbar', text, percentage)
+ return self.ExecMethod(self.vbMethod, 'SetStatusbar', text, percentage)
- # ShowProgressBar - not supported in Python
+ def ShowProgressBar(self, title = '', text = '', percentage = -1):
+ # From Python, the current XComponentContext must be added as last argument
+ return self.ExecMethod(self.vbMethod, 'ShowProgressBar', title, text, percentage,
+ ScriptForge.componentcontext)
def WindowExists(self, windowname):
- return self.Execute(self.vbMethod, 'WindowExists', windowname)
+ return self.ExecMethod(self.vbMethod, 'WindowExists', windowname)
# #####################################################################################################################
@@ -1370,31 +1386,141 @@ class SFDatabases:
serviceproperties = dict(Queries = False, Tables = False, XConnection = False, XMetaData = False)
def CloseDatabase(self):
- return self.Execute(self.vbMethod, 'CloseDatabase')
+ return self.ExecMethod(self.vbMethod, 'CloseDatabase')
def DAvg(self, expression, tablename, criteria = ''):
- return self.Execute(self.vbMethod, 'DAvg', expression, tablename, criteria)
+ return self.ExecMethod(self.vbMethod, 'DAvg', expression, tablename, criteria)
def DCount(self, expression, tablename, criteria = ''):
- return self.Execute(self.vbMethod, 'DCount', expression, tablename, criteria)
+ return self.ExecMethod(self.vbMethod, 'DCount', expression, tablename, criteria)
def DLookup(self, expression, tablename, criteria = '', orderclause = ''):
- return self.Execute(self.vbMethod, 'DLookup', expression, tablename, criteria, orderclause)
+ return self.ExecMethod(self.vbMethod, 'DLookup', expression, tablename, criteria, orderclause)
def DMax(self, expression, tablename, criteria = ''):
- return self.Execute(self.vbMethod, 'DMax', expression, tablename, criteria)
+ return self.ExecMethod(self.vbMethod, 'DMax', expression, tablename, criteria)
def DMin(self, expression, tablename, criteria = ''):
- return self.Execute(self.vbMethod, 'DMin', expression, tablename, criteria)
+ return self.ExecMethod(self.vbMethod, 'DMin', expression, tablename, criteria)
def DSum(self, expression, tablename, criteria = ''):
- return self.Execute(self.vbMethod, 'DSum', expression, tablename, criteria)
+ return self.ExecMethod(self.vbMethod, 'DSum', expression, tablename, criteria)
def GetRows(self, sqlcommand, directsql = False, header = False, maxrows = 0):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'GetRows', sqlcommand, directsql, header, maxrows)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'GetRows', sqlcommand, directsql, header, maxrows)
def RunSql(self, sqlcommand, directsql = False):
- return self.Execute(self.vbMethod, 'RunSql', sqlcommand, directsql)
+ return self.ExecMethod(self.vbMethod, 'RunSql', sqlcommand, directsql)
+
+
+# #####################################################################################################################
+# SFDialogs CLASS (alias of SFDialogs Basic library) ###
+# #####################################################################################################################
+class SFDialogs:
+ """
+ The SFDialogs class manages dialogs defined with the Basic IDE
+ """
+ pass
+
+ # #########################################################################
+ # SF_Dialog CLASS
+ # #########################################################################
+ class SF_Dialog(SFServices):
+ """
+ Each instance of the current class represents a single dialog box displayed to the user.
+ From a Python script, a dialog box can be displayed in modal mode only.
+ 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, other user actions
+ executed on the box can trigger specific actions.
+ """
+ # Mandatory class properties for service registration
+ serviceimplementation = 'basic'
+ servicename = 'SFDialogs.Dialog'
+ servicesynonyms = ('dialog', 'sfdialogs.dialog')
+ serviceproperties = dict(Caption = True, Height = True, Modal = False, Name = False,
+ OnFocusGained = False, OnFocusLost = False, OnKeyPressed = False,
+ OnKeyReleased = False, OnMouseDragged = False, OnMouseEntered = False,
+ OnMouseExited = False, OnMouseMoved = False, OnMousePressed = False,
+ OnMouseReleased = False,
+ Page = True, Visible = True, Width = True, XDialogModel = False, XDialogView = False)
+
+ @classmethod
+ def PreProcessArgs(cls, args):
+ """
+ Review the arguments of the creation of the Basic service (must be a class method)
+ Add the XComponentContext as last argument
+ """
+ newargs = (*args, ScriptForge.componentcontext)
+ return newargs
+
+ def Activate(self):
+ return self.ExecMethod(self.vbMethod, 'Activate')
+
+ def Controls(self, controlname = ''):
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'Controls', controlname)
+
+ def EndExecute(self, returnvalue):
+ return self.ExecMethod(self.vbMethod, 'EndExecute', returnvalue)
+
+ def Execute(self, modal = True):
+ return self.ExecMethod(self.vbMethod, 'Execute', modal)
+
+ def Terminate(self):
+ return self.ExecMethod(self.vbMethod, 'Terminate')
+
+ # #########################################################################
+ # 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.
+ """
+ # Mandatory class properties for service registration
+ serviceimplementation = 'basic'
+ servicename = 'SFDialogs.DialogControl'
+ servicesynonyms = ('dialogcontrol', 'sfdialogs.dialog')
+ serviceproperties = dict(Cancel = True, Caption = True, ControlType = False, CurrentNode = True,
+ Default = True, Enabled = True, Format = True, ListCount = False,
+ ListIndex = True, Locked = True, MultiSelect = True, Name = False,
+ OnActionPerformed = False, OnAdjustmentValueChanged = False, OnFocusGained = False,
+ OnFocusLost = False, OnItemStateChanged = False, OnKeyPressed = False,
+ OnKeyReleased = False, OnMouseDragged = False, OnMouseEntered = False,
+ OnMouseExited = False, OnMouseMoved = False, OnMousePressed = False,
+ OnMouseReleased = False, OnNodeExpanded = True, OnNodeSelected = True,
+ OnTextChanged = False, Page = True, Parent = False, Picture = True,
+ RootNode = False, RowSource = True, Text = False, TipText = True,
+ TripleState = True, Value = True, Visible = True,
+ XControlModel = False, XControlView = False, XTreeDataModel = False)
+
+ # Root related properties do not start with X and, nevertheless, return a UNO object
+ @property
+ def CurrentNode(self):
+ return self.EXEC(self.objectreference, self.vbGet + self.flgUno, 'CurrentNode')
+
+ @property
+ def RootNode(self):
+ return self.EXEC(self.objectreference, self.vbGet + self.flgUno, 'RootNode')
+
+ def AddSubNode(self, parentnode, displayvalue, datavalue = ScriptForge.cstSymEmpty):
+ return self.ExecMethod(self.vbMethod + self.flgUno, 'AddSubNode', parentnode, displayvalue, datavalue)
+
+ def AddSubTree(self, parentnode, flattree, withdatavalue = False):
+ return self.ExecMethod(self.vbMethod, 'AddSubTree', parentnode, flattree, withdatavalue)
+
+ def CreateRoot(self, displayvalue, datavalue = ScriptForge.cstSymEmpty):
+ return self.ExecMethod(self.vbMethod + self.flgUno, 'CreateRoot', displayvalue, datavalue)
+
+ def FindNode(self, displayvalue, datavalue = ScriptForge.cstSymEmpty, casesensitive = False):
+ return self.ExecMethod(self.vbMethod + self.flgUno, 'FindNode', displayvalue, datavalue, casesensitive)
+
+ def SetFocus(self):
+ return self.ExecMethod(self.vbMethod, 'SetFocus')
+
+ def WriteLine(self, line = ''):
+ return self.ExecMethod(self.vbMethod, 'WriteLine', line)
# #####################################################################################################################
@@ -1430,25 +1556,26 @@ class SFDocuments:
forceGetProperty = True
def Activate(self):
- return self.Execute(self.vbMethod, 'Activate')
+ return self.ExecMethod(self.vbMethod, 'Activate')
def CloseDocument(self, saveask = True):
- return self.Execute(self.vbMethod, 'CloseDocument', saveask)
+ return self.ExecMethod(self.vbMethod, 'CloseDocument', saveask)
def Forms(self, form = ''):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'Forms', form)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'Forms', form)
def RunCommand(self, command):
- return self.Execute(self.vbMethod, 'RunCommand', command)
+ return self.ExecMethod(self.vbMethod, 'RunCommand', command)
def Save(self):
- return self.Execute(self.vbMethod, 'Save')
+ return self.ExecMethod(self.vbMethod, 'Save')
def SaveAs(self, filename, overwrite = False, password = '', filtername = '', filteroptions = ''):
- return self.Execute(self.vbMethod, 'SaveAs', filename, overwrite, password, filtername, filteroptions)
+ return self.ExecMethod(self.vbMethod, 'SaveAs', filename, overwrite, password, filtername, filteroptions)
def SaveCopyAs(self, filename, overwrite = False, password = '', filtername = '', filteroptions = ''):
- return self.Execute(self.vbMethod, 'SaveCopyAs', filename, overwrite, password, filtername, filteroptions)
+ return self.ExecMethod(self.vbMethod, 'SaveCopyAs', filename, overwrite,
+ password, filtername, filteroptions)
# #########################################################################
# SF_Base CLASS
@@ -1468,22 +1595,22 @@ class SFDocuments:
XComponent = False)
def CloseDocument(self, saveask = True):
- return self.Execute(self.vbMethod, 'CloseDocument', saveask)
+ return self.ExecMethod(self.vbMethod, 'CloseDocument', saveask)
def FormDocuments(self):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'FormDocuments')
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'FormDocuments')
def Forms(self, formdocument, form = ''):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'Forms', formdocument, form)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'Forms', formdocument, form)
def GetDatabase(self, user = '', password = ''):
- return self.Execute(self.vbMethod, 'GetDatabase', user, password)
+ return self.ExecMethod(self.vbMethod, 'GetDatabase', user, password)
def IsLoaded(self, formdocument):
- return self.Execute(self.vbMethod, 'IsLoaded', formdocument)
+ return self.ExecMethod(self.vbMethod, 'IsLoaded', formdocument)
def OpenFormDocument(self, formdocument, designmode = False):
- return self.Execute(self.vbMethod, 'OpenFormDocument', formdocument, designmode)
+ return self.ExecMethod(self.vbMethod, 'OpenFormDocument', formdocument, designmode)
# #########################################################################
# SF_Calc CLASS
@@ -1529,113 +1656,113 @@ class SFDocuments:
return self.GetProperty('Width', rangename)
def XCellRange(self, rangename):
- return self.Execute(self.vbGet + self.flgUno, 'XCellRange', rangename)
+ return self.ExecMethod(self.vbGet + self.flgUno, 'XCellRange', rangename)
def XSpreadsheet(self, sheetname):
- return self.Execute(self.vbGet + self.flgUno, 'XSpreadsheet', sheetname)
+ return self.ExecMethod(self.vbGet + self.flgUno, 'XSpreadsheet', sheetname)
# Usual methods
def Activate(self, sheetname = ''):
- return self.Execute(self.vbMethod, 'Activate', sheetname)
+ return self.ExecMethod(self.vbMethod, 'Activate', sheetname)
def ClearAll(self, range):
- return self.Execute(self.vbMethod, 'ClearAll', range)
+ return self.ExecMethod(self.vbMethod, 'ClearAll', range)
def ClearFormats(self, range):
- return self.Execute(self.vbMethod, 'ClearFormats', range)
+ return self.ExecMethod(self.vbMethod, 'ClearFormats', range)
def ClearValues(self, range):
- return self.Execute(self.vbMethod, 'ClearValues', range)
+ return self.ExecMethod(self.vbMethod, 'ClearValues', range)
def CopySheet(self, sheetname, newname, beforesheet = 32768):
sheet = (sheetname.objectreference if isinstance(sheetname, SFDocuments.SF_CalcReference) else sheetname)
- return self.Execute(self.vbMethod + self.flgObject, 'CopySheet', sheet, newname, beforesheet)
+ return self.ExecMethod(self.vbMethod + self.flgObject, 'CopySheet', sheet, newname, beforesheet)
def CopySheetFromFile(self, filename, sheetname, newname, beforesheet = 32768):
sheet = (sheetname.objectreference if isinstance(sheetname, SFDocuments.SF_CalcReference) else sheetname)
- return self.Execute(self.vbMethod + self.flgObject, 'CopySheetFromFile',
- filename, sheet, newname, beforesheet)
+ return self.ExecMethod(self.vbMethod + self.flgObject, 'CopySheetFromFile',
+ filename, sheet, newname, beforesheet)
def CopyToCell(self, sourcerange, destinationcell):
range = (sourcerange.objectreference if isinstance(sourcerange, SFDocuments.SF_CalcReference)
else sourcerange)
- return self.Execute(self.vbMethod + self.flgObject, 'CopyToCell', range, destinationcell)
+ return self.ExecMethod(self.vbMethod + self.flgObject, 'CopyToCell', range, destinationcell)
def CopyToRange(self, sourcerange, destinationrange):
range = (sourcerange.objectreference if isinstance(sourcerange, SFDocuments.SF_CalcReference)
else sourcerange)
- return self.Execute(self.vbMethod + self.flgObject, 'CopyToRange', range, destinationrange)
+ return self.ExecMethod(self.vbMethod + self.flgObject, 'CopyToRange', range, destinationrange)
def DAvg(self, range):
- return self.Execute(self.vbMethod, 'DAvg', range)
+ return self.ExecMethod(self.vbMethod, 'DAvg', range)
def DCount(self, range):
- return self.Execute(self.vbMethod, 'DCount', range)
+ return self.ExecMethod(self.vbMethod, 'DCount', range)
def DMax(self, range):
- return self.Execute(self.vbMethod, 'DMax', range)
+ return self.ExecMethod(self.vbMethod, 'DMax', range)
def DMin(self, range):
- return self.Execute(self.vbMethod, 'DMin', range)
+ return self.ExecMethod(self.vbMethod, 'DMin', range)
def DSum(self, range):
- return self.Execute(self.vbMethod, 'DSum', range)
+ return self.ExecMethod(self.vbMethod, 'DSum', range)
def Forms(self, sheetname, form = ''):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'Forms', sheetname, form)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'Forms', sheetname, form)
def GetColumnName(self, columnnumber):
- return self.Execute(self.vbMethod, 'GetColumnName', columnnumber)
+ return self.ExecMethod(self.vbMethod, 'GetColumnName', columnnumber)
def GetFormula(self, range):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'GetFormula', range)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'GetFormula', range)
def GetValue(self, range):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'GetValue', range)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'GetValue', range)
def ImportFromCSVFile(self, filename, destinationcell, filteroptions = ScriptForge.cstSymEmpty):
- return self.Execute(self.vbMethod, 'ImportFromCSVFile', filename, destinationcell, filteroptions)
+ return self.ExecMethod(self.vbMethod, 'ImportFromCSVFile', filename, destinationcell, filteroptions)
def ImportFromDatabase(self, filename = '', registrationname = '', destinationcell = '', sqlcommand = '',
directsql = False):
- return self.Execute(self.vbMethod, 'ImportFromDatabase', filename, registrationname,
- destinationcell, sqlcommand, directsql)
+ return self.ExecMethod(self.vbMethod, 'ImportFromDatabase', filename, registrationname,
+ destinationcell, sqlcommand, directsql)
def InsertSheet(self, sheetname, beforesheet = 32768):
- return self.Execute(self.vbMethod, 'InsertSheet', sheetname, beforesheet)
+ return self.ExecMethod(self.vbMethod, 'InsertSheet', sheetname, beforesheet)
def MoveRange(self, source, destination):
- return self.Execute(self.vbMethod, 'MoveRange', source, destination)
+ return self.ExecMethod(self.vbMethod, 'MoveRange', source, destination)
def MoveSheet(self, sheetname, beforesheet = 32768):
- return self.Execute(self.vbMethod, 'MoveSheet', sheetname, beforesheet)
+ return self.ExecMethod(self.vbMethod, 'MoveSheet', sheetname, beforesheet)
def Offset(self, range, rows = 0, columns = 0, height = ScriptForge.cstSymEmpty,
width = ScriptForge.cstSymEmpty):
- return self.Execute(self.vbMethod, 'Offset', range, rows, columns, height, width)
+ return self.ExecMethod(self.vbMethod, 'Offset', range, rows, columns, height, width)
def RemoveSheet(self, sheetname):
- return self.Execute(self.vbMethod, 'RemoveSheet', sheetname)
+ return self.ExecMethod(self.vbMethod, 'RemoveSheet', sheetname)
def RenameSheet(self, sheetname, newname):
- return self.Execute(self.vbMethod, 'RenameSheet', sheetname, newname)
+ return self.ExecMethod(self.vbMethod, 'RenameSheet', sheetname, newname)
def SetArray(self, targetcell, value):
- return self.Execute(self.vbMethod + self.flgArrayArg, 'SetArray', targetcell, value)
+ return self.ExecMethod(self.vbMethod + self.flgArrayArg, 'SetArray', targetcell, value)
def SetCellStyle(self, targetrange, style):
- return self.Execute(self.vbMethod, 'SetCellStyle', targetrange, style)
+ return self.ExecMethod(self.vbMethod, 'SetCellStyle', targetrange, style)
def SetFormula(self, targetrange, formula):
- return self.Execute(self.vbMethod + self.flgArrayArg, 'SetFormula', targetrange, formula)
+ return self.ExecMethod(self.vbMethod + self.flgArrayArg, 'SetFormula', targetrange, formula)
def SetValue(self, targetrange, value):
- return self.Execute(self.vbMethod + self.flgArrayArg, 'SetValue', targetrange, value)
+ return self.ExecMethod(self.vbMethod + self.flgArrayArg, 'SetValue', targetrange, value)
def SortRange(self, range, sortkeys, sortorder = 'ASC', destinationcell = ScriptForge.cstSymEmpty,
containsheader = False, casesensitive = False, sortcolumns = False):
- return self.Execute(self.vbMethod, 'SortRange', range, sortkeys, sortorder, destinationcell,
- containsheader, casesensitive, sortcolumns)
+ return self.ExecMethod(self.vbMethod, 'SortRange', range, sortkeys, sortorder, destinationcell,
+ containsheader, casesensitive, sortcolumns)
# #########################################################################
# SF_CalcReference CLASS
@@ -1677,37 +1804,37 @@ class SFDocuments:
OrderBy = True, Parent = False, RecordSource = True, XForm = False)
def Activate(self):
- return self.Execute(self.vbMethod, 'Activate')
+ return self.ExecMethod(self.vbMethod, 'Activate')
def CloseFormDocument(self):
- return self.Execute(self.vbMethod, 'CloseFormDocument')
+ return self.ExecMethod(self.vbMethod, 'CloseFormDocument')
def Controls(self, controlname = ''):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'Controls', controlname)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'Controls', controlname)
def GetDatabase(self, user = '', password = ''):
- return self.Execute(self.vbMethod, 'GetDatabase', user, password)
+ return self.ExecMethod(self.vbMethod, 'GetDatabase', user, password)
def MoveFirst(self):
- return self.Execute(self.vbMethod, 'MoveFirst')
+ return self.ExecMethod(self.vbMethod, 'MoveFirst')
def MoveLast(self):
- return self.Execute(self.vbMethod, 'MoveLast')
+ return self.ExecMethod(self.vbMethod, 'MoveLast')
def MoveNew(self):
- return self.Execute(self.vbMethod, 'MoveNew')
+ return self.ExecMethod(self.vbMethod, 'MoveNew')
def MoveNext(self, offset = 1):
- return self.Execute(self.vbMethod, 'MoveNext', offset)
+ return self.ExecMethod(self.vbMethod, 'MoveNext', offset)
def MovePrevious(self, offset = 1):
- return self.Execute(self.vbMethod, 'MovePrevious', offset)
+ return self.ExecMethod(self.vbMethod, 'MovePrevious', offset)
def Requery(self):
- return self.Execute(self.vbMethod, 'Requery')
+ return self.ExecMethod(self.vbMethod, 'Requery')
def Subforms(self, subform = ''):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'Subforms', subform)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'Subforms', subform)
# #########################################################################
# SF_FormControl CLASS
@@ -1738,10 +1865,10 @@ class SFDocuments:
Visible = True, XControlModel = False, XControlView = False)
def Controls(self, controlname = ''):
- return self.Execute(self.vbMethod + self.flgArrayRet, 'Controls', controlname)
+ return self.ExecMethod(self.vbMethod + self.flgArrayRet, 'Controls', controlname)
def SetFocus(self):
- return self.Execute(self.vbMethod, 'SetFocus')
+ return self.ExecMethod(self.vbMethod, 'SetFocus')
# ##############################################False##################################################################
@@ -1791,7 +1918,15 @@ def CreateScriptService(service, *args):
# Check if the service is a predefined standard Basic service
elif scriptservice in ScriptForge.servicesmodules:
return serv(ScriptForge.servicesmodules[scriptservice], classmodule = SFServices.moduleStandard)
+ else:
+ serv = None
# The requested service is to be found in the Basic world
+ # Check if the service must review the arguments
+ if serv is not None:
+ if hasattr(serv, 'PreProcessArgs'):
+ # PreProcessArgs() must be a class method
+ args = serv.PreProcessArgs(args)
+ # Get the service object back from Basic
if len(args) == 0:
serv = ScriptForge.InvokeBasicService('SF_Services', SFServices.vbMethod, 'CreateScriptService', service)
else: