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