Commit Graph
132 Commits
Author SHA1 Message Date
Jean-Pierre Ledure ca1dca4f1d ScriptForge (ContextMenu) new RemoveAllItems() method
The contextmenu service handles the context
menus stored in a document. So far, it
provided only the AddItem() method to add
new items at the bottom of the menu.

The new method allows to forget the preconfigured
menu and to replace it completely.

Example: associate next Sub with the
         on-right-click event of sheet 'Sheet1'
         => The custom menu appears when
            right-clicking in column C, otherwise
            normal behaviour
  Sub OnRightClick1(Optional XRange)
       ' Xrange is a com.sun.star.table.XCellRange
  Dim calc, menu, bColumn
  Set calc = CreateScriptService("Calc", ThisComponent)
  Set menu = calc.ContextMenus("cell")
  menu.RemoveAllItems()
  bColumn =  ( Len(calc.Intersect("Sheet1.$C:$C", _
             XRange.AbsoluteName)) > 0 )
  If bColumn Then
      menu.AddItem("A", Script := "vnd.sun.star.script:...&location=document")
      ...
  End If
  menu.Activate(bColumn)
  End Sub

The function is available both for Basic and Python user scripts.
The user documentation will have to be reviewed.

Change-Id: I84ee8724bf99c37397a19d729133cc4686a63980
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180520
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2025-01-21 09:30:57 +01:00
Jean-Pierre Ledure 1032ba1214 ScriptForge (SF_Calc new Intersect() method
The
    calc.Intersect(range1, range2) method
computes the common area as a string
which is a sub-range of both input ranges.
It returns an empty string when the
sub-range is empty.

Potential use case: customizing a popup
or context menu depending on the presence
of the selected cell in a given area.

In addition, the A1Style() method returns
the sheetname in the output string only
when it is an explicit argument.

Changes are applicable both for Basic and
Python scripts.

They require an update of the user documentation.

Change-Id: I920fc8bee6dace9ceed263a0570b4c0197bc8cb8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180479
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2025-01-19 16:43:49 +01:00
Jean-Pierre Ledure b86e078d79 ScriptForge (SF_Calc new XRectangle property
The
   XReetangle(rangename)
property returns a com.sun.star.awt.Rectangle
structure describing the coordinates (in pixels)
on the screen where the given range is
located.

This opens the door to effective interactivity
in calc sheets with the use of popup menus.

Example:
   r = calc.XRectangle("B2")
   menu = CreateScriptService("PopupMenu", , _
           X := r.X + r.Width/2, Y := r.Y + r.Height/2)
initializes a popup menu centered on the given
cell.

The property exists in Basic and Python.
The SF_Calc help page should be updated
according to the actual patch.

Change-Id: I2a97c5c7b5bf84d36a2aab5e4b822e30c9d53d8e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180140
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2025-01-12 16:15:38 +01:00
Jean-Pierre Ledure e0935e73bb ScriptForge - Upgrade to version 25.8
Hard-coded version numbers are modified
from 25.2 to 25.8.

Many changes in po files due to the alphabetical
sequence of keys after the introduction of the
new "case-sensitive" keys feature.
Before this the dict.Keys() method delivered
the keys as an array in the order of creation.

No effect on actual user scripts.

Change-Id: Iee0c48eca22d17ad892278398c9125912b8b2b3c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180120
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2025-01-11 16:00:11 +01:00
Jean-Pierre Ledure d28fcb3e26 ScriptForge (SF_Session) enhance ExecuteCalcFunction
The ExecuteCalcFunction() method is a wrapper
of the
   com.sun.star.sheet.FunctionAccess::callFunction()
method.

This method accepts a broad variety of arguments
- scalars: numeric and strings only
- data arrays (= arrays os arrays)
- 2D arrays (1D arrays give errors)
- com.sun.star.table.XCellRange objects
depending on the called function and its
execution or not as an "array function".

The actual commit makes that the arguments passed to
   session.ExecuteCalcFunction()
are checked as formally correct: scalars are filtered
as numeric or strings, dates and booleans are converted,
arrays are reshaped to 2D where necessary.

The actual change facilitates, as an example,
the use of complex array functions like XLOOKUP,
a powerful search engine on large data sets.

The implemented functionalities are valid in Basic
and Python.

The help documentation might be completed with
additional examples.

Change-Id: I6bba1e21828ef09c5c6f0463cbcfa1f5df695073
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177744
Tested-by: Jenkins
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
2024-12-04 10:21:45 +01:00
Jean-Pierre Ledure 0f74a4c2bf scriptforge.py Color args in exception.PythonShell()
The
   exception.PythonShell()
method opens the APSO console.

It receives 2 additional arguments
   background
   foreground
which specify the back- and foreground colors
of the window to open as a Python console.

Typical use of the method:
   exc.PythonShell({**globals(), **locals()}, \
       background = 0x0, foregound = 0xFFFFFF)
opens the shell with all existing variables
loaded and with white characters on a black
background.

The default values are those set in APSO:
   background = 0xFDF6E3
   foreground = 0x657B83
No impact on existing scripts.

The current change requires to be completed with
the addition of the 2 arguments in the
adequate help page.

Additonal minor changes
- typo in scriptforge.pyi
- 'outsideprocess' replaced by 'remoteprocess'

Change-Id: I9b1be123f049aa39bd0d814b6dd63fcc4f4ea310
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174897
Tested-by: Jenkins
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
2024-10-15 11:00:38 +02:00
Jean-Pierre Ledure af67aa7cc9 scriptforge.py - clarify pipe mode
Introduction of a
  ScriptForge.outsideprocess
property: when True the actual mode
is via socket or via pipe.

The property is for internal use only.
Once set it cannot be changed anymore.

Previous statements similar to
   if ScriptForge.port > 0:
which returned True when socket mode
are replaced by a broader
   if ScriptForge.outsideprocess:

No effect on user scripts.

Change-Id: Ice0efd8c2ab9925511fc8c6889cab714fd208ba1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/174874
Tested-by: Jenkins
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
2024-10-14 10:25:03 +02:00
Jean-Pierre Ledure acbbf33d67 scriptforge.py - improve debugging mode
To facilitate the debugging of the
ScriptForge Basic code called by the
python scripts, 2 methods have been
added to the ScriptForge() class:

- initializeRoot(force = False)
  Initialize the global scriptforge
  data structure.
  - When force = False, only when
    not yet done.
  - When force = True, reinitialize it
    whatever its status.

- errorHandling(standard = True)
  Determine how errors in the ScriptForge
  Basic code are handled. Either
  - the standard mode, i.e. display a "crash" message
    to the user
  - the debugging mode, i.e. the execution stops
    on the line causing the error

Example (cfr. tdf#162962)

from scriptforge import CreateScriptService, ScriptForge
sf = ScriptForge()
sf.errorHandling(False)

def testSF():
    srv = CreateScriptService("Calc")

g_exportedScripts = (testSF,)

Change-Id: I25d7d8e36e71d95ff8a04191bb8344794886d69e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173458
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2024-09-17 12:58:10 +02:00
Jean-Pierre Ledure 0419b8c8f9 scriptforge.py Connect via pipe
Python scripts using ScriptForge start like:
   from scriptforge import CreateScriptService, \
           ScriptForge
   ScriptForge(...)		(*)
   sv = CreateScriptService(...)

The (*) statement has next syntaxes: either
   (1)   ScriptForge()
   (2)   ScriptForge(host: str = ..., port: int = ...)
   (3)   ScriptForge(pipe: str = ...)

Syntax (1) is implicit at the first invocation of
CreateScriptService() without a former call to
ScriptForge()

Syntax (2) exists in previous versions.

This commit implements syntax (3) to connect a Python
process to a LO process on the same system via a pipe
mechanism.

The change impacts only Python scripts.

The documentation should be upgraded to include
the new functionality.

Change-Id: I50457b6fffc8c9d6a9ad5c5289de1c363c6680e3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173252
Tested-by: Jenkins
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
2024-09-13 15:04:17 +02:00
Jean-Pierre Ledure 609a6dc2df ScriptForge New IsAlive property
When a document is closed inadvertently
by the user during a macro run, or between
two macros triggered by events, the actual
behaviour is an error message and a stop
of the execution of the macro.

As this can be counter-productive, the macro
may test at any moment if everything is ok
with the
   IsAlive As Boolean (True = OK)
property applied on next service instances:
   Document
   Base
   Calc
   FormDocument
   Writer
   Datasheet
   Dialog

The functionality is available both for
Basic and Python user scripts.

The user documentation should be completed
accordingly.

Change-Id: I0b055dacc06c9da70c611dbb4e7bf841160168fd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172970
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
2024-09-08 14:25:35 +02:00
Jean-Pierre Ledure d2d14c36d1 ScriptForge (Database) DMin, DMax return strings or dates
Python only:

Reset a flag in SF_Database.DMin and DMax methods
to allow dates to be returned.

Review typing hints to accept strings and dates

Integration of remarks from Microsoft/VSCode
about minor syntax issues in scriptforge.pyi
(syntax was accepted by PyCharm).
Now, syntax commonly accepted by both IDE's.

Change-Id: I752d9f1d7a5293222d81748f8fb2e8f46f4317de
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172912
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2024-09-05 15:21:53 +02:00
Jean-Pierre Ledure 3f3ea3351c scriptforge.py - Platform & TextStream
Since
  https://gerrit.libreoffice.org/c/core/+/172600
a better categorization of properties
has been done between 4 distinct levels.

The SF_Platform and SF_TextStream services
still needed an update to avoid
redundancy on some of their properties.

A choice had to be made, either:
- put them in the serviceproperties dict
- or define them explicitly with @Property
Not both, for clarity.

Change-Id: I787c7e57235622abf5deb5c7fd42c4c28aa82ec8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172863
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2024-09-04 17:22:09 +02:00
Jean-Pierre Ledure 87bfd87ecf ScriptForge (scriptforge.py) fine tune getattr/setattr()
Several minor changes
- comments
- 'cls' used where relevant i.o. class name
- dynamic getting/setting properties reviewed
- SF_Platform properties:
  set level = 1 i.o. 0 when returned
  by PythonHelper module

Change-Id: I4e9877bc16efd340dc14693833c032c998329b6e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172836
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2024-09-04 10:14:42 +02:00
Jean-Pierre Ledure f2f7dbb78c scriptforge.py Improve properties performance
When considering next python user script:
   a = CreateScriptService(...)
   a.prop = ...
   print(a.prop)
   print(a.prop)
so far, the evaluation of a.prop was done
either once or twice depending on
- a parameter of the class a is an instance of
- the read-only status of prop (True/False)

Now the recomputation of the expression
depends on a parameter of prop which can take
one of next values:
  0: prop is read-only and not re-evaluated
  1: prop is read-only but re-evaluated
     f.i. because a user action can change its value
  2: prop is editable and not re-evaluated
     f.i. because it can be changed only by code
  3: prop is editable and always re-evaluated

The change will decrease the number of useless
and more costly recomputations of properties.

Change-Id: I11412a58772147dab2e6b9b06c31477135932603
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172600
Tested-by: Jenkins
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
2024-08-30 10:21:31 +02:00
Jean-Pierre Ledure 8a4ee0fb39 ScriptForge (SFWidgets) new ContextMenu service
Complete a predefined context menu with new items
placed at its bottom.

A context menu is obtained by a right-click
on several areas of a document. Each area has
its own context menu.
Each component model has its own set of context menus.

A context menu is usually predefined at
LibreOffice installation. Customization is done
statically with the Tools + Customize dialog.
The actual new service provides a mean
to make temporary additions at the bottom of a
context menu. Those changes are lost when
the document is closed.

The name of a context menu is the last component
of the resource URL:
   "private:resource/popupmenu/the-name-here"

Context menu items are either usual items or
line separators. Checkboxes or radio buttons
are not supported.
Items run a command or a script when clicked.

The service implements 2 methods:
   AddItem() adds an entry in the menu hierarchy
   Activate() shows or hides the added entries

A context menu can be defined from both Basic
and Python user scripts.

An update of the documentation is required.

Change-Id: Id77f1f2565d75e36c09b13972330d0f83b3f1db4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172355
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2024-08-24 18:29:12 +02:00
Jean-Pierre Ledure e7aa613e75 ScriptForge - Upgrade to version 25.2
Change-Id: Icc7cbdeed7685118408896c52b0415310d7b20fd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171590
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2024-08-07 16:14:59 +02:00
Andrea Gelmini d845d151fd Fix typo
Change-Id: I5bece7e286f8ebced0f5f45fff7377037b546a37
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164918
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2024-03-16 19:47:47 +01:00
Andrea Gelmini 7c42fca202 Fix typo
Change-Id: I5c2075d5c3e87fe5e4f56d884bf7bcfb7371498b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164917
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Julien Nabet <serval2412@yahoo.fr>
2024-03-16 19:42:52 +01:00
Jean-Pierre Ledure c5e0c65bd2 ScriptForge - Python typing hints
Python typing hints may be stored either
- inside the original .py source file
- in a separate .pyi source file (aka. STUB).
Choice is made to create a new scriptforge.pyi file
- to allow hiding the private functions
- to specialize each module: technical doc
  vs. user doc
- to allow potential later translation
- to minimize the impact at run-time:
  stubs are active only during code edition.

The new scriptforge.pyi module
- provides the static type checking of all the public
  interfaces (methods/properties) of the ScriptForge API.
- when the user uses an IDE like PyCharm or VSCode,
  (s)he might benefit from the typing hints provided
  by the signatures and docstrings stored
  in the module.

Visually, while editing a user script:
- hovering an object instance, a method or a property
  displays its detailed description
- a "." after an object instance displays a drop-down
  box listing all available interfaces
- brackets after a method-name start code-completion
  by displaying its arguments.

Limitations: SF supports ProperCase, lowercase and
camelCase naming for methods and properties.
Only ProperCase is described in scriptforge.pyi.
Extending to the other 2 notations would be easy
but would also overload needlessly the drop-down lists.

The effective code (scriptforge.py) is completed
with a series of importable variable types,
corresponding roughly with the available service
instance names in uppercase. Example
       from scriptforge import CALC, RANGE
       def userfct(c: CALC, r: RANGE) -> RANGE:
           r1: RANGE = "A1:K10"
Objective: enrich the signatures in user scripts
and benefit from the same hints when the variable
types cannot be derived from the context.

The help documentation should be complemented
with the actual additional feature.

Change-Id: I6c39939a3cdbed94828e9449cd691fe15c24c923
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164867
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2024-03-15 17:27:00 +01:00
Jean-Pierre Ledure 5fc9908b95 ScriptForge - Upgrade to version 24.8
Copyright years are also reviewed to include 2024.

Change-Id: I1f30443922a6dc3b35c6f05616a5c4e56de1e396
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161277
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-12-25 14:10:36 +01:00
Jean-Pierre Ledure 9b5b313a2f ScriptForge (SF_Database) manage transactions
Transactions are managed by next UNO properties:
   XConnection.AutoCommit
   XConnection.TransactionIsolation
(They seem very easy to use but, in practice,
are not easy at all)

Usually all transactions are in auto-commit mode,
that means, a commit takes place after each
single SQL command.

Switching auto-commit off  means however that
the connection needs to be of type "ISOLATED"
and not of the default type "SHARED".

=> The usual shared connection must be closed.
   As a consequence, all rowsets/resultsets linked
   to the shared connection need to be closed as well.
=> Additionally the buffers must be emptied (flushed)
   to make committed data visible in the Base user
   interface.

All above aspects and constraints are managed in the
   database.SetTransactionMode(transactionmode)
   database.Commit()
   database.Rollback()
methods transparently for the user scripts.

The [transactionmode] argument has as value one of
the TransactionIsolation constants.
Without argument, database.SetTransactionMode()
restores the automatic mode.

The manual transaction mode is available for both
Basic and Python scripts.
Its implementation will require an update of the
documentation about the Database service.

Change-Id: I214bd91a1744d6d24609bc5efc987152c6e946c9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159867
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-11-24 09:54:59 +01:00
Jean-Pierre Ledure 5dac0fe157 ScriptForge (SFDatabases) fix dates processing in GetRows
The
   database.GetRows()
   dataset.GetRows()
methods return an array of data collected
in a database table or query.

When a column has the type DATE, the transmission
of their values through the Basic-Python bridge
require them to be converted upfront to UNO
DateTime structures.

The later conversion from UNO DateTime to the python
datetime.datetime structure has been added with
this patch.

No impact on Basic scripts.

The documentation does not need to be changed.

Change-Id: I7a6533aff70d2d1402bfc3f057b65a4940148cc4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159348
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-11-12 17:44:55 +01:00
Jean-Pierre Ledure 7b2a6f0444 ScriptForge (SFDatabases) new Dataset service
A dataset represents a set of tabular data
stored/produced by a database.
To use datasets, the database instance must exist
but the Base document may not be open.

A Dataset instance is create either with
- the (new) database.CreateDataset() method
- from an existing dataset with the (new)
  dataset.CreateDataset() method.

The proposed API supports next main purposes:
- browse for- and backward thru the dataset to get its content
- update any record with new values
- create new records or delete some.
In summary, the AKA "CRUD" operations
(create, read, update, delete).

The originality of the proposed API is the use
of a dense syntax to make insertions and updates
easy and readable:
Example:
(BASIC)
  Dim newID As Long
  newID = dataset.Insert("LastName", "Doe", "FirstName", "John")
  '     ... is equivalent to:
  Dim dict As Object, newID As Long
  Set dict = CreateScriptService("ScriptForge.Dictionary")
  dict.Add("LastName", "Doe")
  dict.Add("FirstName", "John")
  newID = dataset.Insert(dict)
(PYTHON) - next statements are equivalent
  newid = dataset.Insert('LastName', 'Doe', 'FirstName', 'John')
  newid = dataset.Insert({'LastName': 'Doe', 'FirstName': 'John'})
  newid = dataset.Insert(dict(LastName = 'Doe', FirstName = 'John'))
  newid = dataset.Insert(LastName = 'Doe', FirstName = 'John')

You will notice that the returned value is the AutoValue primery
key (when it exists) which makes it reuse as a foreign key
immediate.

The API is fully available both in Basic and Python user scripts.

The new service will require its inclusion in the user documentation.

Change-Id: I4f834c4234e5b96ec8fddfffbad791ecf31899df
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159325
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-11-11 18:20:15 +01:00
Jean-Pierre Ledure a29841ccbd ScriptForge (SFDocuments) Styles management
Introduction of new properties and methods:

- StyleFamilies
    List of available style families
    All document types except Base
- XStyle(family, stylename)
    UNO representation of given style
    All document types except Base
- Styles(family, [namepattern, used, userdefined,
         parentstyle, category)
    A list of styles matching the given criteria
    All document types except Base
- DeleteStyles(family, styleslist)
    Suppress the user-defined styles in the list
    All document types except Base and FormDocument
- ImportStylesFromFile(filename, families, overwrite)
    Load styles from a closed file
    Calc and Writer only

Example: to delete unused styles:
    a = doc.Styles("ParagraphStyles", used := False)
    doc.DeleteStyles("ParagraphStyles", a)

All functionalities are available from Basic and
Python scripts.

Documentation has to be completed.

Change-Id: I2533c14912257b58feb42bb11ff9d151c7b9531a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157563
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-10-04 18:50:16 +02:00
Jean-Pierre Ledure f9c4973ac6 ScriptForge - Upgrade version number (7.6 => 24.2)
Change-Id: I0e7ceeafcf4c5a802249125e6be44a71adb1456b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156480
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-09-03 14:49:17 +02:00
Jean-Pierre Ledure b3278aa41d ScriptForge (SF_Document) new XDocumentSettings property
The XDocumentSettings property returns a
   com.sun.star.XXX.DocumentSettings
UNO object.

XXX = sheet, text, drawing or presentation

It gives access to a bunch of UNO internal
properties, specific to the document(s type.

The property is available in Basic and Python
user scripts.

An update of the SF_Document service help
page is required.

Change-Id: I9d6db473c91ac5b1814def9cd100e874aa5490cd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156475
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-09-03 11:00:26 +02:00
Jean-Pierre Ledure 0bbe5b4f2a ScriptForge - Refactor Python <=> Basic protocol
Incremental changes had made the code in
   SF_PythonHelper.xba
   scriptforge.py
(which manage the protocol between the Python
user scripts and the ScriptForge services
implemented in Basic) less readable and efficient.

Next features have been reviewed:
- dict instances may be passed as arguments
  and returned. Conversions are done on-th-fly.
- dates may be passed as arguments
  and returned. Conversions are done on-th-fly.
  The lists of hardcoded methods have been removed.
- 2D arrays in standard modules may be passed
  as arguments and returned. Conversions are done
  on-th-fly. The lists of hardcoded methods have
  been removed.
- The hardcoded list of methods requiring a post-
  processing has been reduced.
- Methods in standard modules, when not returning
  an array, are also executed with CallByName().
- The unused 'localProperties' attribute in Python
  services has been removed.
- Flags about arrays in standard modules have been
  adapted in
   filesystem.Files()
   filesystem.SubFolders()
   session.UnoMethods()
   session.UnoProperties()
   string.SplitNotQuoted()
   string.Wrap()
   ui.Documents()
- The platform.UserData property became a usual
  property.

Dictionaries are admitted as arguments and return
values. As a consquence next functions are supported
in Python as well:
   session.GetPDFExportOpetions()
   session.SetPDFExportOptions()
   document, calc, writer.CustomProperties
   document, calc, writer.DocumentProperties
These changes require an update of the help pages.

Non-regression tests were run with success. All changes
are transparent for existing scripts.

Change-Id: Iae7a1f5090c590209cd3cb2314c919c44736eba9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155860
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-08-20 10:48:48 +02:00
Jean-Pierre Ledure 0f43960ec8 ScriptForge (SF_Platform) new UserData property
The UserData property lists the content of the
"User Data" oage of the Options dialog.

The content is returned:
- in Basic: in a SF_Dictionary instance
- in Python: in a dict[] instance.

The list of the available keys is:
 city, company, country, email, encryptionkey,
 encrypttoself, fax, firstname, homephone,
 initials, lastname, officephone, position,
 postalcode, signingkey, state, street, title
Many are different from the UNO/priginal values
to make them more user understandable.

This commit will require an update of the SF_Platform
help page.

Both Basic and Python user scripts are supported.

Change-Id: If645579ee9109a1b8180da5a5f3a71979bb5ca59
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155024
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-07-29 12:39:34 +02:00
Jean-Pierre Ledure c216a5fc49 ScriptForge (SF_FileSystem) IncludeSubfolders argument
In the FileSystem service, the
   - SubFolders()
   - Files()
methods receive an optional argument
   IncludeSubfolders (Boolean).

That argument determines whether or not only
the given FolderName is explored or also its subfolders
up to the bottom of the folders structure.

The argument must be used with caution as the number
of returned folders or files may increase rapidly.
anThis could consume excessive process time.

This patch will require an update of the
help page about the filesystem service.

The new argument is available both for Basic and Python
user scripts.

Change-Id: Id2a96cd63cb51f8681f20a203a711b47a636fc3a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154763
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-07-22 18:03:36 +02:00
Jean-Pierre Ledure 44334328f7 ScriptForge (SF_FileSystem) support document(s internal file structure
1. The SF_Document services (document, base, calc,
   formdocument, writer) receive a new FileSystem
   property that returns the "root" of the
   component's file structure under the format:
      "vnd.sun.star.tdoc:/XXX"
   XXX being the document's identifier.
   The implementation does not use the RuntimeUID
   (UNO property of the OfficeDocument service) which
   is optional and, f.i. not present for Base documents.
   Instead the
    css.frame.TransientDocumentsDocumentContentFactory
   service is used.

2. The SF_FileSystem and SF_TextStream modules have been
   reviewed to support the new context.
   Next restrictions have been met:
   - The FileNaming property is always cnsidered as 'URL'
   - CompareFiles() is not applicable
   - GetFileLen() always returns zero
   - HashFile() is not applicable
   - Normalize() always returns the input string unchanged
   - PickFile() is not applicable
   - PickFolder() is not applicable
   Additionally,
   - CreatetextFile()
   - OpenTextFile() in write or append modes
   copy or initialize the file in a temporary storage
   and write it back in the document when it is being closed.
   The process is transparent for the user.

3. The GetTempName() method accepts an option
      Extension
   argument, for better convenience.

The new functionalities are available in Basic and Python.

Changes require an update of the help documentation.

Change-Id: Ibf8dd9983656923cf6ab43d9f48398dc4d1e6307
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154443
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-07-15 09:54:01 +02:00
Jean-Pierre Ledure a83643dea9 ScriptForge (SF_Dialog) new CloneControl() method
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, Top: the coordinates of the new control
    expressed in "Map AppFont" units.
Returns:
  an instance of the SF_DialogControl class or Nothing

The method is available from Basic and Python user scripts

This change will require an update of the SF_Dialog help page.

Change-Id: I5c2a5404a14ad60b2d4df2ac7eabbf0ddd843170
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152333
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-05-26 19:06:07 +02:00
Jean-Pierre Ledure e7c4a88362 ScripForge (SF_Dialog) new OrderTabs() method
Set the tabulation index f a series of controls.
The sequence of controls are given as an array
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: an array of valid control names in the order of tabulation.
   Start: the tab index to be assigned to the 1st control in the list. Default = 1.
   Increment: the difference between 2 successive tab indexes. Default = 1.
Returns:
   True when successful.

The method is available from Basic and Python user scripts

This change will require an update of the SF_Dialog help page.

Change-Id: Ie854227691c4e182b49a521b1285deaa4de3d1ff
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152166
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-05-24 11:20:48 +02:00
Andrea Gelmini 60489faa6c Fix typo
Change-Id: Ic3f79113f09be10f6ff33183b09f80e269f77f93
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152122
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Julien Nabet <serval2412@yahoo.fr>
2023-05-22 20:45:22 +02:00
Jean-Pierre Ledure 0a1022b04c ScriptForge (SFDialogs: create dialogs on-the-fly
A dialog service is returned by next statement

  dialog = CreateScriptService("newdialog", dialogname, place)

All properties and methods applicable to predefined
dialogs are available for such new dialogs.
In particular the series of CreateXXX() methods for the addition
of ne dialog controls.

The functionality is available from Basic and Python user
scripts.

An update of the SFDialogs.SF_Dialog help page is required.

A display rendering unstability (flickerings, delays, ..) has
been observed when (all conditions must be met)
- the user script is run from Python
- from inside the LibreOffice process
- the dialog is non-modal

Change-Id: Id3f311cd04497fd79712ce712bdb2724b5caa861
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152071
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
2023-05-22 14:08:20 +02:00
Jean-Pierre Ledure f692b5c5e4 ScriptForge New method dialog.CreateHyperlink()
Method (Dialog service)
  CreateHyperlink(controlname, place, border, multiline,
                  align, verticalalign)

completes the set of available methods for
dynamic DialogControl creation.

Cfr. https://gerrit.libreoffice.org/c/core/+/151896

Change-Id: I162075ea39efdd2e1189fe8b16ac05316e6a13ff
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151954
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
2023-05-20 12:56:41 +02:00
Jean-Pierre Ledure 66a3b09fc3 ScriptForge (SFDialogs) create controls dynamically
The dialog service hosts now a bunch of methods
to create new controls dynamically in an existing
dialog predefined in the Basic IDE.

In other words, a dialog is initialized with controls
in the Basic IDE. New controls can be added at run-time
before or after the Execute() statement.

All the new methods have in common their first 2 arguments:
 ControlName
 Place: an (X, Y, Width, Height) array
        or a com.sun.star.awt.Rectangle

New methods:
 CreateButton(..., toggle, push)
 CreateCheckBox(..., multiline)
 CreateComboBox(..., border, dropdown, linecount)
 CreateCurrencyField(..., border, spinbutton, minvalue,
                     maxvalue, increment, accuracy)
 CreateDateField(..., border, dropdown, mindate, maxdate)
 CreateFileControl(..., border)
 CreateFixedLine(..., orientation)
 CreateFixedText(..., border, multiline, align, verticalalign)
 CreateFormattedField(..., border, spinbutton, minvalue,
                      maxvalue)
 CreateGroupBox(...)
 CreateImageControl(..., border, scale)
 CreateListBox(..., border, dropdown, linecount, multiselect)
 CreateNumericField(..., border, spinbutton, minvalue,
                    maxvalue, increment, accuracy)
 CreatePatternField(..., border, editmask, literalmask)
 CreateProgressBar(..., border, minvalue, maxvalue)
 CreateRadioButton(..., multiline)
 CreateScrollBar(..., orientation, border, minvalue, maxvalue)
 CreateTableControl(..., border, rowheaders, columnheaders,
                    scrollbars, gridlines)
 CreateTextField(..., border, multiline, maximumlength,
                 passwordcharacter)
 CreateTimeField(..., border, mintime, maxtime)
 CreateTreeControl(..., border)

All the methods return a SF_DialogControl instance.

The arguments have bben chosen based on functionality
rather than on layout. After the creatio of the control,
most properties and methods relevant to SF_DialogControl
objects are applicable. Also the XControlModel property
might contribute to layout refinements.

Other changes:
- The SF_DialogControl class receives next updatable
  properties: Border and TabIndex
- The dialogcontrol.SetTableData() receives an
  additional argument: rowheaderwidth
- The dialogcontrol.Resize() method without arguments
  resizes the control to its "preferred size", a size
  adjusted depending on its actual content

All the new functionalities are callable from both
Basic and Python user scripts.

Described changes will require a serios review of the
Dialog and DialogControl help pages.

Change-Id: I654eeae5456527bf14b1f4b43f04d176bbd830b6
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151896
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-05-18 10:30:45 +02:00
Jean-Pierre Ledure a58017d99c ScriptForge (SFDialogs) support hyperlink control types
Controls designated in english as "Hyperlink controls"
in the Basic IDE are from now on accepted as instances
of the SF_DialogControl service.

All generic properties are accepted.
The supported specific properties are:
   - Caption (the text that appears in the dialog box)
   - URL (the URL to activate when clicked)

The new control type is supported in Basic and Python
user scripts.

The SFDialogs.DialogControl help page needs to be updated.

Change-Id: I4827834ad8ef336c084ee51b5285b85745ceb1b9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150824
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-04-23 14:54:49 +02:00
Jean-Pierre Ledure 37a68d6ae3 ScriptForge (SFDialogs) dialogs and controls are sized in APPFONTs
Dimensioning a dialog in the Basic IDE is done
by using "Map AppFont" units.
Map AppFont units are device and resolution independent.
One Map AppFont unit is equal to one eighth of the average
character (Systemfont) height and one quarter of the average
character width.

A dialog or control model also uses AppFont units.
While their views use pixels.

This is confusing. It also complicates size prototyping
with the Basic IDE.

In ScriptForge, sizing and positioning a dialog or a control
is done from now on in AppFont units as well.

Additionally, X and Y positions accept now negative values.

Compatibility with past is ensured: dynamic change or
position and size is a new feature in 7.6.

The change is valid both for Basic and Python user scripts.
It requires a small change in the actual documentation
(pixels => AppFontunits)

Change-Id: Id80b0ccf473eb012b0a8c85d66f5a8ada9b26be5
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150704
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-04-21 11:02:01 +02:00
Jean-Pierre Ledure 3d94a43d28 ScriptForge - (SF_DialogControl) new Resize() method
Addition of method
   control.Resize(X, Y, Width, Height)
to selectively (arguments are applicable only when present)
update the position and/or the size of any
dialog control.

Addition of updatable properties:
   Height
   Width
   X
   Y
for the same purpose.

All measures are expressed in PIXELS.

The measures for dialogs are also as from now expressed
in pixels.

Changes are applicable to Basic and Python user scripts.

Documentation should be updated.

Change-Id: I03a6c819efa6a2a67c88403f1ae644d94eb7f2d7
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149174
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-03-21 06:35:19 +00:00
Jean-Pierre Ledure 0483b0a4bb ScriptForge (SFDialogs) make On properties editable
A dialog box and its controls may be associated
with scripts triggered by events (mouse moved,
key pressed, ...).

The link is usually preset in the Basic IDE when
the dialog is designed.

So far, ScriptForge did not offer the setting of
a link event-script by code.

The actual commit removes this limitation: every
On-property related to either a dialog or a dialog
control is now editbale.
With the important precision that such a property
may be updated ONLY IF it was NOT PRESET in the
Basic IDE.

Static (IDE) and dynamic (by code) definition of
a specific On property on a specific dialog or on
a specific dialog control are mutually exclusive.

The new capacity may be used both in Basic and Python scripts.

A short update of the help texts (dialog and dialogcontrol)
is needed with mention of above restriction.

Change-Id: Ia078aaab317ced7ade7ce69694504013f8e768a1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148800
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-03-14 10:46:15 +00:00
Jean-Pierre Ledure f36265ed0e ScriptForge (SFWidgets) new Toolbar and ToolbarButton services
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 by the application
  - or by a customization done by the user.
The definition of a toolbar can be stored
in the application configuration files
or in the current document.

Changes made by scripts to toolbars stored
in the application are persistent. They are valid
for all documents of the same type.

Note that the menubar and the statusbar
are not considered toolbars in this context.

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.

The "Toolbar" service is triggered from next
services: Document, Calc, Writer, Base, FormDocument
and Datasheet. All those components might host toolbars.

Proposed properties in the Toolbar service:
  BuiltIn
  Docked
  HasGlobalScope
  Name
  ResourceURL
  Visible (r/w)
  XUIElement
Proposed method:
  ToolbarButtons()

Proposed properties in the ToolbarButton service:
  Caption
  Height
  Index
  OnClick (r/w)
  Parent
  TipText (r/w)
  Visible (r/w)
  X
  Y
(The Height, Width, X, Y properties allow for
easy hook of a popup menu to tye button)
Proposed method:
  Execute()

Both services are available both from Basic and Python user scripts.
An update of the dcumentation help is required.

Change-Id: I43cb523b52e3d6362994557d74c4ef9faa220507
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147925
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-02-28 15:31:12 +00:00
Jean-Pierre Ledure 96302e0bba ScriptForge (SF_Document) Echo() method freezes screen updates
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.

Arguments:
  EchoOn: when False, the display updates are suspended.
          Default = True.
          Multiple calls with EchoOn = False are harmless.
  Hourglass: when True, the mouse pointer is changed
          to an hourglass. Default = False.
          The mouse pointer needs to be inside the actual
          document's window.
          Note that it is very likely that at the least
          manual movement of the mouse, the operating system
          or the LibreOffice process will take back
          the control of the mouse icon and its usual behaviour.

The method may be called from any document, including Calc and
Writer, or form document.

It may be invoked from Basic and Python user scripts.

Echo() should be documented in the sfdocument.xhp help page.

Change-Id: I4d669f5e332131bd1b2efcd33b7a98b304796ad1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146258
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-01-27 16:54:19 +00:00
Jean-Pierre Ledure 3563f2064a ScriptForge Upgrade version number to 7.6
Change-Id: Ifbf5ba5b28b7afff64ed36965eadfa68a750cfd9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145976
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-01-22 16:27:39 +00:00
Jean-Pierre Ledure ac21a5ee9b ScriptForge (SF_Calc) new RemoveDuplicates() method
Remove duplicate values from a range of values.

The comparison between rows is done 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.

Arguments of the method:
  Range: the range, as a string,
         from which the duplicate rows should be removed
  Columns: an array of column numbers to compare;
           items are in the interval [1 .. range width]
           Default = the first column in the range
  Header: when True, the first row is a header row.
           Default = False.
  CaseSensitive: for string comparisons.
                 Default = False.
  Mode: either "CLEAR" or "COMPACT" (Default)
        For large ranges, the "COMPACT" mode
        is probably significantly slower.

The method has been implemented for Basic
and Python user scripts.

The calc.xhp help page should be updated accordingly.

Change-Id: I352b2f3da98974d9482575850550cec4e27d2e01
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145954
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-01-21 16:48:19 +00:00
Jean-Pierre Ledure 88a67c50af ScriptForge - (SFDocuments) new FormDocument service
The SF_FormDocument service is focused on :
- The orchestration of Base form documents
  (aka Base Forms, but this is confusing)
  and the identification of and the access to their controls.
- Form documents are always contained in a Base document.

A form document may be opened either:
- via code or user interface from the Base file welcome page
- via code only, without having its Base container opened first
In any mode, a form document can be opened only in 1 single copy.

The FormDocument service is triggered either by
    base.OpenFormDocument(...)
    database.OpenFormDocument(...)
        ' Base file may be closed
    ui.GetDocument(...)

Specific methods:
    CloseDocument()
    Forms()
    GetDatabase()
    PrintOut()
Next methods are inherited from the Document superclass:
    Activate()
    CreateMenu(), RemoveMenu()
    ExportAsPdf()
    RunCommand()
    SaveCopyAs()
    SetPrinter()

As a consequence, next methods remain available
but should be declared as deprecated in the help:
    base.CloseFormDocument()
    base.Forms()
    base.PrintOut()
    base.SetPrinter()

Above changes have several more minor impacts :
- beside IsCalc, IsWriter, ... , a new IsFormDocument property
- the UI service identifies open form documents
- a new service means a new entry to register
  in the Services catalog
- management of form events has been reviewed
- the connection between Base, FormDocument, Form
  and Database services is reinforced
- menus were available on components, now also on sub-components

The new service is available for both Basic and Python user scripts.
It requires in the help
    - a new sf_formdocument page
    - a review of the sf_base, sf_database, sf_form, sf_ui pages

Change-Id: Ib06d1c4565ca093af2f068fa5b8082082641752e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145080
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2023-01-05 15:00:28 +00:00
Jean-Pierre Ledure 26511a8961 ScriptForge - (SF_Datasheet) Filter, OrderBy properties
For homogeneity with the Form service,
the
  ApplyFilter()
  OrderBy()
methods are replaced by the
  Filter
  OrderBy
updatable properties respectively.

Functionally there is no change.

This substitution is valid both for Basic and
Python user scripts.

Change-Id: I63a1d5c4554437b6a2cd634677e6eee246cb59ab
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142355
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2022-11-06 17:37:10 +01:00
Jean-Pierre Ledure 18638efa39 ScriptForge - (SF_Datasheet) new menu methods
Next 2 methods are added:
  CreateMenu()
  RemoveMenu()

They allow the addition of a menu entry in the menubar
of datasheets in the same way as in documents.

The implementation required to make the
  SFWidgets.SF_Menu
  SFWidgets.SF_MenuListener
  SFWidgets.SF_Register
classes and modules more generic to be applicable
in several contexts.

In addition, 2 properties are added:
  DatabaseFileName
  ParentDatabase
to better identify the database from which the datasheet
is derived.

New properties and methods are applicable both
for Basic and Python user scripts.

Change-Id: Iac6318287e89b18810a53ec5928a68e921ea96db
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142285
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2022-11-05 17:10:41 +01:00
Jean-Pierre Ledure 985c77b570 ScriptForge = (SFDatabases) New Datasheet service
A datasheet is the visual representation
of tabular data produced by a database.
In the user interface of LibreOffice
it is the result of the opening of a table or a query.
In this case the concerned Base document must be open.

In the context of ScriptForge, a datasheet
may be opened automatically by script code :
- either by reproducing the behaviour of the user interface
- or at any moment.
  In this case the Base document does not need to be open.
Additionally, any SELECT SQL statement
may define the datasheet display.

The proposed API allows for either datasheets
(opened manually of by code) in particular
to know which cell is selected and its content.

Properties:
  ColumnHeaders
  CurrentColumn
  CurrentRow
  LastRow
  Source
  SourceType
  XComponent
  XControlModel
  XTabControllerModel

Methods
  Activate
  ApplyFilter
  CloseDatasheet
  GetValue
  GetText
  GoToCell
  OrderBy

The Base and Database services are enriched with the
  OpenTable
  OpenQuery
methods. The Database service gets also a new
  OpenSql
method.

The whole set of properties and methods is available
both for Basic and Python scripts.

This new service requires a new help page dedicated
to this service, as well as an update of the
pages about the Base and Database services.

Change-Id: Ib409ce74d95de78f2792ba53e7ae554eab0867ab
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142118
Tested-by: Jenkins
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
2022-11-02 11:26:46 +01:00
Jean-Pierre Ledure a69bca0fda ScriptForge - (SF_Basic) new CreateUnoStruct() method
The method extends the set of functions compatible
with their corresponding Basic builtin functions.

BTW it might avoid the need for the user to
   import uno
in his/her Python scripts.
Of course (s)he remains free to prefer the latter.

Impact only on Python scripts. Basic part is unchanged.
An update of the help page about the Basic service is reuired.

Change-Id: I3b01eb76aa52f62fa54bae49ddb45755126bc3fe
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141429
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2022-10-16 18:25:59 +02:00
Jean-Pierre Ledure 55477bf4fd ScriptForge - (SF_Dialog) new SetPageManager method
The SetPageManager() method

Define how the dialog displays pages.
The page manager is an alternative to the direct use
of the Page property of the dialog and dialogcontrol objects.

The arguments define which controls are involved
in the orchestration of the displayed pages.
Possible options:
    - select a value in a list- or combobox
    - select an item in a group of radio buttons
    - select a button linked to a page
      placed side-by-side the buttons can simulate a tabbed interface
    - press a NEXT or BACK button like in many wizards
Those options may be combined.
The control updates will be synchronized.
The method will set the actual page number to 1.
Afterwards the Page property may be used to display any other page

The SetPageManager() method is to be run
only once and before the Execute() statement.
If invoked several times, subsequent calls will be ignored.
The method will define new listeners
on the concerned controls, addressing generic routines.
The corresponding events will be fired during the dialog execution.
Preset events (in the Basic IDE) will be preserved
and executed immediately AFTER the page change.
The listeners will be removed at dialog termination.

The implementation has next parts:
1. Store the arguments in the Dialog instance
2. Set appropriate listeners on involved controls
3. Page change synchronizes the values in the involved controls
   (be it by user code or by page manager)
4. Events triggered by listeners change page number

The method is available both in Basic and Python contexts.
This commit require the Dialog help page to be updated.

Change-Id: I00a0212414f283102c73de4ceb488aa1aeddf746
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141257
Tested-by: Jean-Pierre Ledure <jp@ledure.be>
Reviewed-by: Jean-Pierre Ledure <jp@ledure.be>
Tested-by: Jenkins
2022-10-12 17:52:59 +02:00