This is how I get the manager using Basic: Get the type description manager from the default context; see section 10.4 Context, which also shows how to enumerate all of the singleton objects available. Function GetTypeDescriptionManager() Dim sTDMName$ ' Name of the type description manager. sTDMName = "/singletons/com.sun.star.reflection.theTypeDescriptionManager" GetTypeDescriptionManager() = GetDefaultContext().getValueByName(sTDMName) End Function
The following method enumerates all “things” in the com.sun.star.awt module. Sub EnumerateTypesTest Dim oTDM ' Type Description Manager. Dim oTDE ' Type Description Enumerations. Dim oTD ' One Type Description. Dim typeArray ' Types for which descriptions are returned. Dim s$ ' Utility string variable. REM All supported types. typeArray = Array(com.sun.star.uno.TypeClass.VOID, _ com.sun.star.uno.TypeClass.CHAR, _ com.sun.star.uno.TypeClass.BOOLEAN, _ com.sun.star.uno.TypeClass.BYTE, _ com.sun.star.uno.TypeClass.SHORT, _ com.sun.star.uno.TypeClass.UNSIGNED_SHORT, _ com.sun.star.uno.TypeClass.LONG, _ com.sun.star.uno.TypeClass.UNSIGNED_LONG, _ com.sun.star.uno.TypeClass.HYPER, _ com.sun.star.uno.TypeClass.UNSIGNED_HYPER, _ com.sun.star.uno.TypeClass.FLOAT, _ com.sun.star.uno.TypeClass.DOUBLE, _ com.sun.star.uno.TypeClass.STRING, _ com.sun.star.uno.TypeClass.TYPE, _ com.sun.star.uno.TypeClass.ANY, _ com.sun.star.uno.TypeClass.ENUM, _ com.sun.star.uno.TypeClass.TYPEDEF, _ com.sun.star.uno.TypeClass.STRUCT, _ com.sun.star.uno.TypeClass.UNION, _ com.sun.star.uno.TypeClass.EXCEPTION, _ com.sun.star.uno.TypeClass.SEQUENCE, _ com.sun.star.uno.TypeClass.ARRAY, _ com.sun.star.uno.TypeClass.INTERFACE, _ com.sun.star.uno.TypeClass.SERVICE, _ com.sun.star.uno.TypeClass.MODULE, _ com.sun.star.uno.TypeClass.INTERFACE_METHOD, _ com.sun.star.uno.TypeClass.INTERFACE_ATTRIBUTE, _ com.sun.star.uno.TypeClass.UNKNOWN, _ com.sun.star.uno.TypeClass.PROPERTY, _ com.sun.star.uno.TypeClass.CONSTANT, _ com.sun.star.uno.TypeClass.CONSTANTS, _ com.sun.star.uno.TypeClass.SINGLETON) oTDM = GetTypeDescriptionManager() Dim sBaseName$ : sBaseName = "com.sun.star.awt" ' Change com.sun.star.reflection.TypeDescriptionSearchDepth.ONE ' to com.sun.star.reflection.TypeDescriptionSearchDepth.INFINITE ' to traverse more than a single level. oTDE = oTDM.createTypeDescriptionEnumeration(sBaseName, _ typeArray, _ com.sun.star.reflection.TypeDescriptionSearchDepth.ONE) While oTDE.hasMoreElements() oTD = oTDE.nextTypeDescription() s$ = s & oTD.Name & CHR$(10) Wend MsgBox s End Sub To get the information on a specific fully qualified type, use the following macro (adapted from an example by Bernard Marcelly): Function GetOOoConst(constString) Dim sTDMName$ Dim oTDM sTDMName = "/singletons/com.sun.star.reflection.theTypeDescriptionManager" oTDM = GetDefaultContext().getValueByName(sTDMName) If oTDM.hasByHierarchicalName(constString) Then GetOOoConst = oTDM.getByHierarchicalName(constString) Else MsgBox "Unrecognized name : " & constString, 16, "OOo API constant or enum" End If End Function The method is usable to obtain constant and enumeration values from a text string Print GetOOoConst("com.sun.star.awt.FontSlant.ITALIC") This can also return an object that describes the type. This can be used to enumerate the values and the strings. Sub EnumerateEnumerations(sName$) Dim oTD ' One Type Description. Dim oTDE ' Element enumeration Dim s$ ' Utility string variable. Dim sNames Dim lValues Dim i As Long Dim iCount As Integer oTD = GetOOoConst(sName) If IsNull(oTD) OR IsEmpty(oTD) Then Exit Sub End If If HasUnoInterfaces(oTD, "com.sun.star.reflection.XEnumTypeDescription") Then 'MsgBox Join( oTD.getEnumNames(), CHR$(10)) sNames = oTD.getEnumNames() lValues = otd.getEnumValues() For i = LBound(sNames) To UBound(sNames) iCount = iCount + 1 If (iCount > 40) Then MsgBox(s) s = "" End If s = s & lValues(i) & CHR$(9) & sNames(i) & CHR$(10) Next ElseIf HasUnoInterfaces(oTD, "com.sun.star.reflection.XConstantsTypeDescription") Then lValues = oTD.getConstants() For i = LBound(lValues) To UBound(lValues) iCount = iCount + 1 If (iCount > 40) Then MsgBox(s) s = "" End If s = s & lValues(i).getConstantValue() & CHR$(9) & lValues(i).getName() & CHR$(10) Next Else 'Inspect oTD MsgBox "Unsupported type " & sName Exit Sub End If MsgBox s End Sub This can be used to see enumerations. EnumerateEnumerations("com.sun.star.awt.FontSlant") This can be used to see constant groups. EnumerateEnumerations("com.sun.star.awt.FontWeight") Hope this helps a little! On Friday, June 17, 2022 07:36 EDT, "Rony G. Flatscher (Apache)" <r...@apache.org> wrote: OK, it is possible using "/singletons/com.sun.star.reflection.theTypeDescriptionManager". (Will have to look further into it to maybe use it also for UNO_ENUM and the like.) ---rony On 17.06.2022 12:46, Rony G. Flatscher wrote: > In the process of creating a few nutshell examples using OLE/COM. > > One open problem is how to get to the UNO_CONSTANTS via the OLE/COM bridge. > Here a snippet and its > output (the tilde is the message operator in ooRexx and could be replaced by > a dot for JScript and > the like; .nil is the singleton object with the string value "The NIL object" > to represent null): > > factory = .OLEObject~new('com.sun.star.ServiceManager') > coreReflection = > factory~createInstance("com.sun.star.reflection.CoreReflection") > > clzName="com.sun.star.table.CellHoriJustify" > say clzName":" "(UNO_ENUM)" > type=coreReflection~forName(clzName) > say "type:" type "type~getName:" type~getname "(forName)" > do f over type~getFields -- iterate over all fields > say f~getName":" f~get(.nil) -- show name and get the value > end > say > type=coreReflection~getType(clzName) > say "type:" type "type~getName:" type~getname "(getType)" > > say "-"~copies(79) > say > clzName="com.sun.star.awt.FontWeight" > say clzName":" "(UNO_CONSTANTS)" > type=coreReflection~forName(clzName) > say "type:" type "(forName)" > say > type=coreReflection~getType(clzName) > say "type:" type "type~getName:" type~getname "(getType)" > > The output is: > > com.sun.star.table.CellHoriJustify: (UNO_ENUM) > type: an OLEObject type~getName: com.sun.star.table.CellHoriJustify > (forName) > STANDARD: 0 > LEFT: 1 > CENTER: 2 > RIGHT: 3 > BLOCK: 4 > REPEAT: 5 > > type: an OLEObject type~getName: string (getType) > ------------------------------------------------------------------------------- > > com.sun.star.awt.FontWeight: (UNO_CONSTANTS) > type: The NIL object (forName) > > type: an OLEObject type~getName: string (getType) > > So using CoreReflection does not allow one to reflect UNO_CONSTANTS > (forName() returns null). > > Using getType() will return "string" for both, UNO_ENUM and UNO_CONSTANTS. > > --- > > Would anyone have an idea how to use OLE/COM to get at the fields and values > for UNO_CONSTANTS > like FontWeight (getting the UNO_CONSTANT value for BOLD other than manually > via > <https://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/FontWeight.html>)? > > ---rony > > P.S.: In the process of creating OLE/COM nutshell examples for scalc, swriter > and simpress. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@openoffice.apache.org For additional commands, e-mail: dev-h...@openoffice.apache.org