6efd763dfe
2005/03/17 16:32:04 va 1.12.256.1: #i40799# A minor bugfix.
353 lines
No EOL
10 KiB
XML
353 lines
No EOL
10 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Listbox" script:language="StarBasic">Option Explicit
|
|
Dim OriginalList()
|
|
Dim oDialogModel as Object
|
|
|
|
|
|
Sub MergeList(SourceListBox() as Object, SecondList() as String)
|
|
Dim i as Integer
|
|
Dim MaxIndex as Integer
|
|
MaxIndex = Ubound(SecondList())
|
|
OriginalList() = AddListToList(OriginalList(), SecondList())
|
|
For i = 0 To MaxIndex
|
|
SourceListbox = AddSingleItemToListbox(SourceListbox, SecondList(i))
|
|
Next i
|
|
Call FormSetMoveRights()
|
|
End Sub
|
|
|
|
|
|
Sub RemoveListItems(SourceListbox as Object, TargetListbox as Object, RemoveList() as String)
|
|
Dim i as Integer
|
|
Dim s as Integer
|
|
Dim MaxIndex as Integer
|
|
Dim CopyList()
|
|
MaxIndex = Ubound(RemoveList())
|
|
For i = 0 To MaxIndex
|
|
RemoveListboxItemByName(SourceListbox, RemoveList(i))
|
|
RemoveListboxItemByName(TargetListbox, RemoveList(i))
|
|
Next i
|
|
CopyList() = OriginalList()
|
|
s = 0
|
|
MaxIndex = Ubound(CopyList())
|
|
For i = 0 To MaxIndex
|
|
If IndexInArray(CopyList(i),RemoveList())= -1 Then
|
|
OriginalList(s) = CopyList(i)
|
|
s = s + 1
|
|
End If
|
|
Next i
|
|
ReDim Preserve OriginalList(s-1)
|
|
Call FormSetMoveRights()
|
|
End Sub
|
|
|
|
|
|
' Note Boolean Parameter
|
|
Sub InitializeListboxProcedures(oModel as Object, SourceListbox as Object, TargetListbox as Object)
|
|
Dim EmptyList()
|
|
Set oDialogModel = oModel
|
|
OriginalList()= SourceListbox.StringItemList()
|
|
TargetListbox.StringItemList() = EmptyList()
|
|
End Sub
|
|
|
|
|
|
Sub CopyListboxItems(SourceListbox as Object, TargetListbox As Object)
|
|
Dim NullArray()
|
|
TargetListbox.StringItemList() = OriginalList()
|
|
SourceListbox.StringItemList() = NullArray()
|
|
End Sub
|
|
|
|
|
|
Sub FormMoveSelected()
|
|
Call MoveSelectedListBox(oDialogModel.lstFields, oDialogModel.lstSelFields)
|
|
Call FormSetMoveRights()
|
|
oDialogModel.lstSelFields.Tag = True
|
|
End Sub
|
|
|
|
|
|
Sub FormMoveAll()
|
|
Call CopyListboxItems(oDialogModel.lstFields, oDialogModel.lstSelFields)
|
|
Call FormSetMoveRights()
|
|
oDialogModel.lstSelFields.Tag = True
|
|
End Sub
|
|
|
|
|
|
Sub FormRemoveSelected()
|
|
Call MoveOrderedSelectedListbox(oDialogModel.lstFields, oDialogModel.lstSelFields, False)
|
|
Call FormSetMoveRights()
|
|
oDialogModel.lstSelFields.Tag = True
|
|
End Sub
|
|
|
|
|
|
Sub FormRemoveAll()
|
|
Call MoveOrderedSelectedListbox(oDialogModel.lstFields, oDialogModel.lstSelFields, True)
|
|
Call FormSetMoveRights()
|
|
oDialogModel.lstSelFields.Tag = 1
|
|
End Sub
|
|
|
|
|
|
Sub MoveSelectedListBox(SourceListbox as Object, TargetListbox as Object)
|
|
Dim MaxCurTarget as Integer
|
|
Dim MaxSourceSelected as Integer
|
|
Dim n as Integer
|
|
Dim m as Integer
|
|
Dim CurIndex
|
|
Dim iOldTargetSelect as Integer
|
|
Dim iOldSourceSelect as Integer
|
|
MaxCurTarget = Ubound(TargetListbox.StringItemList())
|
|
MaxSourceSelected = Ubound(SourceListbox.SelectedItems())
|
|
Dim TargetList(MaxCurTarget+MaxSourceSelected+1)
|
|
If MaxSourceSelected > -1 Then
|
|
iOldSourceSelect = SourceListbox.SelectedItems(0)
|
|
If Ubound(TargetListbox.SelectedItems()) > -1 Then
|
|
iOldTargetSelect = TargetListbox.SelectedItems(0)
|
|
Else
|
|
iOldTargetSelect = -1
|
|
End If
|
|
For n = 0 To MaxCurTarget
|
|
TargetList(n) = TargetListbox.StringItemList(n)
|
|
Next n
|
|
For m = 0 To MaxSourceSelected
|
|
CurIndex = SourceListbox.SelectedItems(m)
|
|
TargetList(n) = SourceListbox.StringItemList(CurIndex)
|
|
n = n + 1
|
|
Next m
|
|
TargetListBox.StringItemList() = TargetList()
|
|
SourceListbox.StringItemList() = RemoveSelected (SourceListbox)
|
|
SetNewSelection(SourceListbox, iOldSourceSelect)
|
|
SetNewSelection(TargetListbox, iOldTargetSelect)
|
|
End If
|
|
End Sub
|
|
|
|
|
|
|
|
Sub MoveOrderedSelectedListbox(lstSource as Object, lstTarget as Object, bMoveAll as Boolean)
|
|
Dim NullArray()
|
|
Dim MaxSelected as Integer
|
|
Dim MaxSourceIndex as Integer
|
|
Dim MaxOriginalIndex as Integer
|
|
Dim MaxNewIndex as Integer
|
|
Dim n as Integer
|
|
Dim m as Integer
|
|
Dim CurIndex as Integer
|
|
Dim SearchString as String
|
|
Dim SourceList() as String
|
|
Dim iOldTargetSelect as Integer
|
|
Dim iOldSourceSelect as Integer
|
|
If bMoveAll Then
|
|
lstSource.StringItemList() = OriginalList()
|
|
lstTarget.StringItemList() = NullArray()
|
|
Else
|
|
MaxOriginalIndex = Ubound(OriginalList())
|
|
MaxSelected = Ubound(lstTarget.SelectedItems())
|
|
iOldTargetSelect = lstTarget.SelectedItems(0)
|
|
If Ubound(lstSource.SelectedItems()) > -1 Then
|
|
iOldSourceSelect = lstSource.SelectedItems(0)
|
|
End If
|
|
Dim SelList(MaxSelected)
|
|
For n = 0 To MaxSelected
|
|
CurIndex = lstTarget.SelectedItems(n)
|
|
SelList(n) = lstTarget.StringItemList(CurIndex)
|
|
Next n
|
|
SourceList() = lstSource.StringItemList()
|
|
MaxSourceIndex = Ubound(lstSource.StringItemList())
|
|
MaxNewIndex = MaxSelected + MaxSourceIndex + 1
|
|
Dim NewSourceList(MaxNewIndex)
|
|
m = 0
|
|
For n = 0 To MaxOriginalIndex
|
|
SearchString = OriginalList(n)
|
|
If IndexinArray(SearchString, SelList()) <> -1 Then
|
|
NewSourceList(m) = SearchString
|
|
m = m + 1
|
|
ElseIf IndexinArray(SearchString, SourceList()) <> -1 Then
|
|
NewSourceList(m) = SearchString
|
|
m = m + 1
|
|
End If
|
|
Next n
|
|
lstSource.StringItemList() = NewSourceList()
|
|
lstTarget.StringItemList() = RemoveSelected(lstTarget)
|
|
End If
|
|
SetNewSelection(lstSource, iOldSourceSelect)
|
|
SetNewSelection(lstTarget, iOldTargetSelect)
|
|
|
|
End Sub
|
|
|
|
|
|
Function RemoveSelected(oListbox as Object)
|
|
Dim MaxIndex as Integer
|
|
Dim MaxSelected as Integer
|
|
Dim n as Integer
|
|
Dim m as Integer
|
|
Dim CurIndex as Integer
|
|
Dim CurItem as String
|
|
Dim ResultArray()
|
|
MaxIndex = Ubound(oListbox.StringItemList())
|
|
MaxSelected = Ubound(oListbox.SelectedItems())
|
|
Dim LocItemList(MaxIndex)
|
|
LocItemList() = oListbox.StringItemList()
|
|
If MaxSelected > -1 Then
|
|
For n = 0 To MaxSelected
|
|
CurIndex = oListbox.SelectedItems(n)
|
|
LocItemList(CurIndex) = ""
|
|
Next n
|
|
If MaxIndex > 0 Then
|
|
ReDim ResultArray(MaxIndex - MaxSelected - 1)
|
|
m = 0
|
|
For n = 0 To MaxIndex
|
|
CurItem = LocItemList(n)
|
|
If CurItem <> "" Then
|
|
ResultArray(m) = CurItem
|
|
m = m + 1
|
|
End If
|
|
Next n
|
|
End If
|
|
RemoveSelected = ResultArray()
|
|
Else
|
|
RemoveSelected = oListbox.StringItemList()
|
|
End If
|
|
End Function
|
|
|
|
|
|
Sub SetNewSelection(oListBox as Object, iLastSelection as Integer)
|
|
Dim MaxIndex as Integer
|
|
Dim SelIndex as Integer
|
|
Dim SelList(0) as Integer
|
|
MaxIndex = Ubound(oListBox.StringItemList())
|
|
If MaxIndex > -1 AND iLastSelection > -1 Then
|
|
If iLastSelection > MaxIndex Then
|
|
Selindex = MaxIndex
|
|
Else
|
|
SelIndex = iLastSelection
|
|
End If
|
|
Sellist(0) = SelIndex
|
|
oListBox.SelectedItems() = SelList()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Sub ToggleListboxControls(oDialogModel as Object, bDoEnable as Boolean)
|
|
With oDialogModel
|
|
.lblFields.Enabled = bDoEnable
|
|
.lblSelFields.Enabled = bDoEnable
|
|
' .lstTables.Enabled = bDoEnable
|
|
.lstFields.Enabled = bDoEnable
|
|
.lstSelFields.Enabled = bDoEnable
|
|
.cmdRemoveAll.Enabled = bDoEnable
|
|
.cmdRemoveSelected.Enabled = bDoEnable
|
|
.cmdMoveAll.Enabled = bDoEnable
|
|
.cmdMoveSelected.Enabled = bDoEnable
|
|
End With
|
|
If bDoEnable Then
|
|
FormSetMoveRights()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
' Enable or disable the buttons used for moving the available
|
|
' fields between the two list boxes.
|
|
Sub FormSetMoveRights()
|
|
Dim bIsFieldSelected as Boolean
|
|
Dim bSelectSelected as Boolean
|
|
Dim FieldCount as Integer
|
|
Dim SelectCount as Integer
|
|
bIsFieldSelected = Ubound(oDialogModel.lstFields.SelectedItems()) <> -1
|
|
FieldCount = Ubound(oDialogModel.lstFields.StringItemList()) + 1
|
|
bSelectSelected = Ubound(oDialogModel.lstSelFields.SelectedItems()) > -1
|
|
SelectCount = Ubound(oDialogModel.lstSelFields.StringItemList()) + 1
|
|
oDialogModel.cmdRemoveAll.Enabled = SelectCount>=1
|
|
oDialogModel.cmdRemoveSelected.Enabled = bSelectSelected
|
|
oDialogModel.cmdMoveAll.Enabled = FieldCount >=1
|
|
oDialogModel.cmdMoveSelected.Enabled = bIsFieldSelected
|
|
oDialogModel.cmdGoOn.Enabled = SelectCount>=1
|
|
' This flag is set to '1' when the lstSelFields has been modified
|
|
End Sub
|
|
|
|
|
|
Function AddSingleItemToListbox(ByVal oListbox as Object, ListItem as String, Optional iSelIndex) as Object
|
|
Dim MaxIndex as Integer
|
|
Dim i as Integer
|
|
|
|
MaxIndex = Ubound(oListbox.StringItemList())
|
|
Dim LocList(MaxIndex + 1)
|
|
' Todo: This goes faster with the Redim LocList(MaxIndex + 1) Preserve function
|
|
For i = 0 To MaxIndex
|
|
LocList(i) = oListbox.StringItemList(i)
|
|
Next i
|
|
LocList(MaxIndex + 1) = ListItem
|
|
oListbox.StringItemList() = LocList()
|
|
If Not IsMissing(iSelIndex) Then
|
|
SelectListboxItem(oListbox, iSelIndex)
|
|
End If
|
|
AddSingleItemToListbox() = oListbox
|
|
End Function
|
|
|
|
|
|
Sub EmptyListbox(oListbox as Object)
|
|
Dim NullList() as String
|
|
oListbox.StringItemList() = NullList()
|
|
End Sub
|
|
|
|
|
|
Sub SelectListboxItem(oListbox as Object, iSelIndex as Integer)
|
|
Dim LocSelList(0) as Integer
|
|
If iSelIndex <> -1 Then
|
|
LocSelList(0) = iSelIndex
|
|
oListbox.SelectedItems() = LocSelList()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Function GetSelectedListboxItems(oListbox as Object)
|
|
Dim SelList(Ubound(oListBox.SelectedItems())) as String
|
|
Dim i as Integer
|
|
Dim CurIndex as Integer
|
|
For i = 0 To Ubound(oListbox.SelectedItems())
|
|
CurIndex = oListbox.SelectedItems(i)
|
|
SelList(i) = oListbox.StringItemList(CurIndex)
|
|
Next i
|
|
GetSelectedListboxItems() = SelList()
|
|
End Function
|
|
|
|
|
|
' Note: When using this Sub it must be ensured that the
|
|
' 'RemoveItem' appears only only once in the Listbox
|
|
Sub RemoveListboxItemByName(oListbox as Object, RemoveItem as String)
|
|
Dim OldList() as String
|
|
Dim NullList() as String
|
|
Dim i as Integer
|
|
Dim a as Integer
|
|
Dim MaxIndex as Integer
|
|
OldList = oListbox.StringItemList()
|
|
MaxIndex = Ubound(OldList())
|
|
If IndexInArray(RemoveItem, OldList()) <> -1 Then
|
|
If MaxIndex > 0 Then
|
|
a = 0
|
|
Dim NewList(MaxIndex -1)
|
|
For i = 0 To MaxIndex
|
|
If RemoveItem <> OldList(i) Then
|
|
NewList(a) = OldList(i)
|
|
a = a + 1
|
|
End If
|
|
Next i
|
|
oListbox.StringItemList() = NewList()
|
|
Else
|
|
oListBox.StringItemList() = NullList()
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Function GetItemPos(oListBox as Object, sItem as String)
|
|
Dim ItemList()
|
|
Dim MaxIndex as Integer
|
|
Dim i as Integer
|
|
ItemList() = oListBox.StringItemList()
|
|
MaxIndex = Ubound(ItemList())
|
|
For i = 0 To MaxIndex
|
|
If sItem = ItemList(i) Then
|
|
GetItemPos() = i
|
|
Exit Function
|
|
End If
|
|
Next i
|
|
GetItemPos() = -1
|
|
End Function
|
|
</script:module> |