Hello Rony,

Alle 10:43, venerdì 13 luglio 2007, Rony G. Flatscher ha scritto:
[...]
> After reading the text you pointed me to and looking once more to the
> BasicAddonBuilder I finally looked through the "View -> Toolbars" and
> saw there was a Basic Addon Toolbar, which I found afterwards, and as
> you write, consists of one entry.

In effect the small toolbar is not easily visible because it initially appears 
docked in the top-left corner. I'll put it floating in a 
next version of the package


>
> In the meantime I looked over the code which is really impressive ans
> shows the high command Paolo has gained over that area of OOo!
>
> Unfortunately, at the moment it would be a little bit too much time
> consuming research effort to try to extend it to cater generically for
> all macro languages that happen to be installed on the system.
>
> Things like:
>
>     * how to get a list of the installed macro languages,
>           o what is the exact spelling of a macro language (E.g. "java"
>             vs. "Java"),
>           o what is the URL to indicate a specific macro from a specific
>             macro language should be used (with or without arguments),
>     * how to get a list of existing macro libraries
>           o "user-home"/user/Scripts
>           o "shared-hoome"/shared/Scripts
>     * how to get a list of
>           o existing macro files (in the Python case there are macros
>             right in "./Scripts/python", i.e., the home of macro
>             language directory contains already scripts.
>
> These questions are probably easy to answer by those in the know, which
> would help save quite some research time. (Maybe someone who knows could
> just give hints/pointers where to look into?)

All these information are accessible through the singleton:
"com.sun.star.script.browse.theBrowseNodeFactory"

I've put a basic example at the end of this post.
Copy the source in your StarBasic IDE and run the first macro.
It should create a spreadsheet with a hierarchical list of the macros for all 
supported languages. (it may take some time...)

>
> Once this knowledge is available, one could start to try to generalize
> the current BasicAddonBuilder to become a true "MacroAddonBuilder" (like
> having a choice for the desired macro language initially, and maybe even
> allow to pick any macro from any macro language to execute, if a toolbar
> button or menu option got chosen)?


All the necessary code is (more or less) already in the BasicAddonBuilder, but 
I've deliberately limited the choice to Starbasic only. Not only, I've used 
the old style macro URL's in the generated addons.xcu. ("macro:" protocol 
instead of the new and language agnostic "vnd.sun.star.script:" protocol)

This is because in my first experiments I got errors trying to install an 
addons.xcu with commands specified with the "vnd.sun.star.script:" protocol.

Anyway I think that it would be possibile (even if not so trivial) to make the 
BasicAddonBuilder language agnostic, removing limitations to basic only that 
I've introduced, but this would work only in the scripting domain, and not 
for deployng UNO components.
A more generic solution was suggested from Mathias Bauer in this post:
http://extensions.openoffice.org/servlets/ReadMsg?list=dev&msgNo=513

Until now I was oriented in this direction, but I'm open to any suggestions 
and contributions.
But, before to add new features I would like to finish my todo list:
- Localization of UI items in the generated Addons.xcu 
- Versioning support
- Licensing support
- Dependances support

and I really need help for the first entry! :-)
I've posted my question here some days ago but I didn't receive any reply ;-(
http://api.openoffice.org/servlets/ReadMsg?list=dev&msgNo=17858

Perhaps my question was not well explained?

ciao
Paolo M

-------------------------8<-------------------------


REM  *****  BASIC  *****

Dim oSheet As Object
Dim iRow As Integer

sub BrowseMacrosExample
  oDoc = StarDesktop.loadComponentFromUrl( _
    "private:factory/scalc","_default",0,Array())
  oSheet = oDoc.Sheets(0)
  
  oBrowseNodeFactory = GetDefaultContext.getValueByName( _
    "/singletons/com.sun.star.script.browse.theBrowseNodeFactory")
    
  iViewType = _
    com.sun.star.script.browse.BrowseNodeFactoryViewTypes.MACROORGANIZER
  aMasterProviders() = oBrowseNodeFactory.createView(iViewType).ChildNodes()
  
  iLevel = 0
  iRow = 0
  For Each oMasterProvider in aMasterProviders()
    oSheet.getCellByPosition(iLevel, iRow).String = oMasterProvider.Name
    PrintChildNodes(oMasterProvider, iLevel+1)
    iRow = iRow+1
  Next oMasterProvider

end sub

Sub PrintChildNodes(oParent, iLevel)
On error resume next
  For Each oChild In oParent.ChildNodes()
    iRow = iRow+1
    oSheet.getCellByPosition(iLevel, iRow).String = oChild.Name
    If HasUnoInterfaces(oChild, "com.sun.star.beans.XPropertySet") Then
      If oChild.PropertySetInfo.hasPropertyByName("URI") Then
        oSheet.getCellByPosition(iLevel+1, iRow).String = oChild.URI
      End If
    End If    
    If oChild.hasChildNodes() Then
      PrintChildNodes(oChild, iLevel+1)
    End If
  Next oChild

End Sub



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to