1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> 3<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Listbox" script:language="StarBasic">Option Explicit 4Dim OriginalList() 5Dim oDialogModel as Object 6 7 8Sub MergeList(SourceListBox() as Object, SecondList() as String) 9Dim i as Integer 10Dim MaxIndex as Integer 11 MaxIndex = Ubound(SecondList()) 12 OriginalList() = AddListToList(OriginalList(), SecondList()) 13 For i = 0 To MaxIndex 14 SourceListbox = AddSingleItemToListbox(SourceListbox, SecondList(i)) 15 Next i 16 Call FormSetMoveRights() 17End Sub 18 19 20Sub RemoveListItems(SourceListbox as Object, TargetListbox as Object, RemoveList() as String) 21Dim i as Integer 22Dim s as Integer 23Dim MaxIndex as Integer 24Dim CopyList() 25 MaxIndex = Ubound(RemoveList()) 26 For i = 0 To MaxIndex 27 RemoveListboxItemByName(SourceListbox, RemoveList(i)) 28 RemoveListboxItemByName(TargetListbox, RemoveList(i)) 29 Next i 30 CopyList() = OriginalList() 31 s = 0 32 MaxIndex = Ubound(CopyList()) 33 For i = 0 To MaxIndex 34 If IndexInArray(CopyList(i),RemoveList())= -1 Then 35 OriginalList(s) = CopyList(i) 36 s = s + 1 37 End If 38 Next i 39 ReDim Preserve OriginalList(s-1) 40 Call FormSetMoveRights() 41End Sub 42 43 44' Note Boolean Parameter 45Sub InitializeListboxProcedures(oModel as Object, SourceListbox as Object, TargetListbox as Object) 46Dim EmptyList() 47 Set oDialogModel = oModel 48 OriginalList()= SourceListbox.StringItemList() 49 TargetListbox.StringItemList() = EmptyList() 50End Sub 51 52 53Sub CopyListboxItems(SourceListbox as Object, TargetListbox As Object) 54Dim NullArray() 55 TargetListbox.StringItemList() = OriginalList() 56 SourceListbox.StringItemList() = NullArray() 57End Sub 58 59 60Sub FormMoveSelected() 61 Call MoveSelectedListBox(oDialogModel.lstFields, oDialogModel.lstSelFields) 62 Call FormSetMoveRights() 63 oDialogModel.lstSelFields.Tag = True 64End Sub 65 66 67Sub FormMoveAll() 68 Call CopyListboxItems(oDialogModel.lstFields, oDialogModel.lstSelFields) 69 Call FormSetMoveRights() 70 oDialogModel.lstSelFields.Tag = True 71End Sub 72 73 74Sub FormRemoveSelected() 75 Call MoveOrderedSelectedListbox(oDialogModel.lstFields, oDialogModel.lstSelFields, False) 76 Call FormSetMoveRights() 77 oDialogModel.lstSelFields.Tag = True 78End Sub 79 80 81Sub FormRemoveAll() 82 Call MoveOrderedSelectedListbox(oDialogModel.lstFields, oDialogModel.lstSelFields, True) 83 Call FormSetMoveRights() 84 oDialogModel.lstSelFields.Tag = 1 85End Sub 86 87 88Sub MoveSelectedListBox(SourceListbox as Object, TargetListbox as Object) 89Dim MaxCurTarget as Integer 90Dim MaxSourceSelected as Integer 91Dim n as Integer 92Dim m as Integer 93Dim CurIndex 94Dim iOldTargetSelect as Integer 95Dim iOldSourceSelect as Integer 96 MaxCurTarget = Ubound(TargetListbox.StringItemList()) 97 MaxSourceSelected = Ubound(SourceListbox.SelectedItems()) 98 Dim TargetList(MaxCurTarget+MaxSourceSelected+1) 99 If MaxSourceSelected > -1 Then 100 iOldSourceSelect = SourceListbox.SelectedItems(0) 101 If Ubound(TargetListbox.SelectedItems()) > -1 Then 102 iOldTargetSelect = TargetListbox.SelectedItems(0) 103 Else 104 iOldTargetSelect = -1 105 End If 106 For n = 0 To MaxCurTarget 107 TargetList(n) = TargetListbox.StringItemList(n) 108 Next n 109 For m = 0 To MaxSourceSelected 110 CurIndex = SourceListbox.SelectedItems(m) 111 TargetList(n) = SourceListbox.StringItemList(CurIndex) 112 n = n + 1 113 Next m 114 TargetListBox.StringItemList() = TargetList() 115 SourceListbox.StringItemList() = RemoveSelected (SourceListbox) 116 SetNewSelection(SourceListbox, iOldSourceSelect) 117 SetNewSelection(TargetListbox, iOldTargetSelect) 118 End If 119End Sub 120 121 122 123Sub MoveOrderedSelectedListbox(lstSource as Object, lstTarget as Object, bMoveAll as Boolean) 124Dim NullArray() 125Dim MaxSelected as Integer 126Dim MaxSourceIndex as Integer 127Dim MaxOriginalIndex as Integer 128Dim MaxNewIndex as Integer 129Dim n as Integer 130Dim m as Integer 131Dim CurIndex as Integer 132Dim SearchString as String 133Dim SourceList() as String 134Dim iOldTargetSelect as Integer 135Dim iOldSourceSelect as Integer 136 If bMoveAll Then 137 lstSource.StringItemList() = OriginalList() 138 lstTarget.StringItemList() = NullArray() 139 Else 140 MaxOriginalIndex = Ubound(OriginalList()) 141 MaxSelected = Ubound(lstTarget.SelectedItems()) 142 iOldTargetSelect = lstTarget.SelectedItems(0) 143 If Ubound(lstSource.SelectedItems()) > -1 Then 144 iOldSourceSelect = lstSource.SelectedItems(0) 145 End If 146 Dim SelList(MaxSelected) 147 For n = 0 To MaxSelected 148 CurIndex = lstTarget.SelectedItems(n) 149 SelList(n) = lstTarget.StringItemList(CurIndex) 150 Next n 151 SourceList() = lstSource.StringItemList() 152 MaxSourceIndex = Ubound(lstSource.StringItemList()) 153 MaxNewIndex = MaxSelected + MaxSourceIndex + 1 154 Dim NewSourceList(MaxNewIndex) 155 m = 0 156 For n = 0 To MaxOriginalIndex 157 SearchString = OriginalList(n) 158 If IndexinArray(SearchString, SelList()) <> -1 Then 159 NewSourceList(m) = SearchString 160 m = m + 1 161 ElseIf IndexinArray(SearchString, SourceList()) <> -1 Then 162 NewSourceList(m) = SearchString 163 m = m + 1 164 End If 165 Next n 166 lstSource.StringItemList() = NewSourceList() 167 lstTarget.StringItemList() = RemoveSelected(lstTarget) 168 End If 169 SetNewSelection(lstSource, iOldSourceSelect) 170 SetNewSelection(lstTarget, iOldTargetSelect) 171 172End Sub 173 174 175Function RemoveSelected(oListbox as Object) 176Dim MaxIndex as Integer 177Dim MaxSelected as Integer 178Dim n as Integer 179Dim m as Integer 180Dim CurIndex as Integer 181Dim CurItem as String 182Dim ResultArray() 183 MaxIndex = Ubound(oListbox.StringItemList()) 184 MaxSelected = Ubound(oListbox.SelectedItems()) 185 Dim LocItemList(MaxIndex) 186 LocItemList() = oListbox.StringItemList() 187 If MaxSelected > -1 Then 188 For n = 0 To MaxSelected 189 CurIndex = oListbox.SelectedItems(n) 190 LocItemList(CurIndex) = "" 191 Next n 192 If MaxIndex > 0 Then 193 ReDim ResultArray(MaxIndex - MaxSelected - 1) 194 m = 0 195 For n = 0 To MaxIndex 196 CurItem = LocItemList(n) 197 If CurItem <> "" Then 198 ResultArray(m) = CurItem 199 m = m + 1 200 End If 201 Next n 202 End If 203 RemoveSelected = ResultArray() 204 Else 205 RemoveSelected = oListbox.StringItemList() 206 End If 207End Function 208 209 210Sub SetNewSelection(oListBox as Object, iLastSelection as Integer) 211Dim MaxIndex as Integer 212Dim SelIndex as Integer 213Dim SelList(0) as Integer 214 MaxIndex = Ubound(oListBox.StringItemList()) 215 If MaxIndex > -1 AND iLastSelection > -1 Then 216 If iLastSelection > MaxIndex Then 217 Selindex = MaxIndex 218 Else 219 SelIndex = iLastSelection 220 End If 221 Sellist(0) = SelIndex 222 oListBox.SelectedItems() = SelList() 223 End If 224End Sub 225 226 227Sub ToggleListboxControls(oDialogModel as Object, bDoEnable as Boolean) 228 With oDialogModel 229 .lblFields.Enabled = bDoEnable 230 .lblSelFields.Enabled = bDoEnable 231' .lstTables.Enabled = bDoEnable 232 .lstFields.Enabled = bDoEnable 233 .lstSelFields.Enabled = bDoEnable 234 .cmdRemoveAll.Enabled = bDoEnable 235 .cmdRemoveSelected.Enabled = bDoEnable 236 .cmdMoveAll.Enabled = bDoEnable 237 .cmdMoveSelected.Enabled = bDoEnable 238 End With 239 If bDoEnable Then 240 FormSetMoveRights() 241 End If 242End Sub 243 244 245' Enable or disable the buttons used for moving the available 246' fields between the two list boxes. 247Sub FormSetMoveRights() 248Dim bIsFieldSelected as Boolean 249Dim bSelectSelected as Boolean 250Dim FieldCount as Integer 251Dim SelectCount as Integer 252 bIsFieldSelected = Ubound(oDialogModel.lstFields.SelectedItems()) <> -1 253 FieldCount = Ubound(oDialogModel.lstFields.StringItemList()) + 1 254 bSelectSelected = Ubound(oDialogModel.lstSelFields.SelectedItems()) > -1 255 SelectCount = Ubound(oDialogModel.lstSelFields.StringItemList()) + 1 256 oDialogModel.cmdRemoveAll.Enabled = SelectCount>=1 257 oDialogModel.cmdRemoveSelected.Enabled = bSelectSelected 258 oDialogModel.cmdMoveAll.Enabled = FieldCount >=1 259 oDialogModel.cmdMoveSelected.Enabled = bIsFieldSelected 260 oDialogModel.cmdGoOn.Enabled = SelectCount>=1 261 ' This flag is set to '1' when the lstSelFields has been modified 262End Sub 263 264 265Function AddSingleItemToListbox(ByVal oListbox as Object, ListItem as String, Optional iSelIndex) as Object 266Dim MaxIndex as Integer 267Dim i as Integer 268 269 MaxIndex = Ubound(oListbox.StringItemList()) 270Dim LocList(MaxIndex + 1) 271' Todo: This goes faster with the Redim LocList(MaxIndex + 1) Preserve function 272 For i = 0 To MaxIndex 273 LocList(i) = oListbox.StringItemList(i) 274 Next i 275 LocList(MaxIndex + 1) = ListItem 276 oListbox.StringItemList() = LocList() 277 If Not IsMissing(iSelIndex) Then 278 SelectListboxItem(oListbox, iSelIndex) 279 End If 280 AddSingleItemToListbox() = oListbox 281End Function 282 283 284Sub EmptyListbox(oListbox as Object) 285Dim NullList() as String 286 oListbox.StringItemList() = NullList() 287End Sub 288 289 290Sub SelectListboxItem(oListbox as Object, iSelIndex as Integer) 291Dim LocSelList(0) as Integer 292 If iSelIndex <> -1 Then 293 LocSelList(0) = iSelIndex 294 oListbox.SelectedItems() = LocSelList() 295 End If 296End Sub 297 298 299Function GetSelectedListboxItems(oListbox as Object) 300Dim SelList(Ubound(oListBox.SelectedItems())) as String 301Dim i as Integer 302Dim CurIndex as Integer 303 For i = 0 To Ubound(oListbox.SelectedItems()) 304 CurIndex = oListbox.SelectedItems(i) 305 SelList(i) = oListbox.StringItemList(CurIndex) 306 Next i 307 GetSelectedListboxItems() = SelList() 308End Function 309 310 311' Note: When using this Sub it must be ensured that the 312' 'RemoveItem' appears only only once in the Listbox 313Sub RemoveListboxItemByName(oListbox as Object, RemoveItem as String) 314Dim OldList() as String 315Dim NullList() as String 316Dim i as Integer 317Dim a as Integer 318Dim MaxIndex as Integer 319 OldList = oListbox.StringItemList() 320 MaxIndex = Ubound(OldList()) 321 If IndexInArray(RemoveItem, OldList()) <> -1 Then 322 If MaxIndex > 0 Then 323 a = 0 324 Dim NewList(MaxIndex -1) 325 For i = 0 To MaxIndex 326 If RemoveItem <> OldList(i) Then 327 NewList(a) = OldList(i) 328 a = a + 1 329 End If 330 Next i 331 oListbox.StringItemList() = NewList() 332 Else 333 oListBox.StringItemList() = NullList() 334 End If 335 End If 336End Sub 337 338 339Function GetItemPos(oListBox as Object, sItem as String) 340Dim ItemList() 341Dim MaxIndex as Integer 342Dim i as Integer 343 ItemList() = oListBox.StringItemList() 344 MaxIndex = Ubound(ItemList()) 345 For i = 0 To MaxIndex 346 If sItem = ItemList(i) Then 347 GetItemPos() = i 348 Exit Function 349 End If 350 Next i 351 GetItemPos() = -1 352End Function 353</script:module>