Tobias Krais wrote:
> Hi together,
> 
> I am currently implementing a little dialog with an
> UnoControlListBoxModel. Now I want to preselect an entry of the list.
> How can I do this? I tried the SelectedItems option, but it did not work.
> 
> As a workaround, I tried to set an item with the
> XListBox.selectItemsPos() function. But it had no affect, only selecting
> it from the action listener had the wished effects.
> 

selectItem*s*Pos(seq_short, boolSelect) selects one or more items of a
multi-select box on a visible dialog.
selectItemPos(short, boolSelect) works for me if the list box is not
multi-selectable and the dialog is visible.

Then there is property SelectedItems of a box's model, which can be set
before loading the dialog like in the StarBasic dialog editor.

I wrote a quick and dirty Python script for testing.
Start your office like this:
> /opt/openoffice.org2.3/program/scalc 
> -accept="socket,host=localhost,port=2002;urp;"

Save the script with unix-linefeeds(!) and run it with OOo's Python
runtime passing one or two optional arguments:
1. (integer) a single item to select (or -1)
2. (anything) use a multi-select box instead of a plain list.

Single-select list, pre-select none:
> /opt/openoffice.org2.3/program/python ~/ooopy/listbox.test.py 
Single-select list, pre-select item 0:
> /opt/openoffice.org2.3/program/python ~/ooopy/listbox.test.py 0
Multi-select list, select all:
> /opt/openoffice.org2.3/program/python ~/ooopy/listbox.test.py -1 1
Multi-select list, select item 0
> /opt/openoffice.org2.3/program/python ~/ooopy/listbox.test.py 0 1


> import uno, sys
> 
> # get item no. from first argument:
> try:
>     nSelect = int(sys.argv[1])
> except:
>     nSelect = -1
> 
> # create a multi-select list if there is any second argument:
> try:
>     boolMulti = sys.argv[2] and True
> except:
>     boolMulti = False
> 
> strConnect = 
> "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext"
> localContext = uno.getComponentContext()
> resolver = localContext.ServiceManager.createInstanceWithContext(
>     "com.sun.star.bridge.UnoUrlResolver", localContext )
> ctx = resolver.resolve(strConnect)
> smgr = ctx.ServiceManager
> seqItems = ('Item 0', 'Item 1', 'Item 2', 'Item 3', 'Item 4',)
> # sequence (0,1,2,3,4):
> seqIDs = tuple(range(len(seqItems)))
> 
> oDlgModel = smgr.createInstance('com.sun.star.awt.UnoControlDialogModel')
> oDlgModel.Height = 100
> oDlgModel.Width = 100
> oCtrlModel = 
> oDlgModel.createInstance('com.sun.star.awt.UnoControlListBoxModel')
> oCtrlModel.PositionX = 5
> oCtrlModel.PositionY = 5
> oCtrlModel.Height = 80
> oCtrlModel.Width = 80
> oCtrlModel.MultiSelection = boolMulti
> oCtrlModel.StringItemList = seqItems
> 
> if boolMulti:
>     # select all items by default:
>     oCtrlModel.SelectedItems = seqIDs
> else:
>     # select no item by default:
>     pass
> 
> # c.s.s.container.XNameContainer
> oDlgModel.insertByName('box', oCtrlModel)
> 
> oDlg = smgr.createInstance('com.sun.star.awt.UnoControlDialog')
> # c.s.s.awt.XControl
> oDlg.setModel(oDlgModel)
> 
> # the "living" dialog must be visible before we select an item:
> # c.s.s.awt.XWindow
> oDlg.setVisible(True)
> 
> try:
>     if nSelect > -1:
>         # c.s.s.awt.XControlContainer
>         oBox = oDlg.getControl('box')
>         if boolMulti:
>             # Deselect all items before selecting a single one:
>             # c.s.s.awt.XListBox
>             oBox.selectItemsPos(seqIDs, False)
>             oBox.selectItemsPos((nSelect,), True)
>         else:
>             oBox.selectItemPos(nSelect, True)
> except:
>     print 'Err: Can not select item #'+ str(nSelect)
> # c.s.s.awt.XDialog
> oDlg.execute()

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

Reply via email to