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="ConvertRun" script:language="StarBasic">Option Explicit 4 5Public oPreSelRange as Object 6 7Sub Main() 8 BasicLibraries.LoadLibrary("Tools") 9 If InitResources("Euro Converter", "eur") Then 10 bDoUnProtect = False 11 bPreSelected = True 12 oDocument = ThisComponent 13 RetrieveDocumentObjects() ' Statusline, SheetsCollection etc. 14 InitializeConverter(oDocument.CharLocale, 1) 15 GetPreSelectedRange() 16 If GoOn Then 17 DialogModel.lstCurrencies.TabIndex = 2 18 DialogConvert.GetControl("chkComplete").SetFocus() 19 DialogConvert.Execute 20 End If 21 DialogConvert.Dispose 22 End If 23End Sub 24 25 26Sub SelectListItem() 27Dim Listbox as Object 28Dim oListSheet as Object 29Dim CurStyleName as String 30Dim oCursheet as Object 31Dim oTempRanges as Object 32Dim sCurSheetName as String 33Dim RangeName as String 34Dim oSheetRanges as Object 35Dim ListIndex as Integer 36Dim a as Integer 37Dim i as Integer 38Dim n as Integer 39Dim m as Integer 40Dim MaxIndex as Integer 41 Listbox = DialogModel.lstSelection 42 If Ubound(Listbox.SelectedItems()) > -1 Then 43 EnableStep1DialogControls(False, False, False) 44 oSelRanges = oDocument.createInstance("com.sun.star.sheet.SheetCellRanges") 45 46 ' Is the sheet the basis, then the sheetobject has to be created 47 If DialogModel.optDocRanges.State = 1 Then 48 ' Document is the basis for the conversion 49 ListIndex = Listbox.SelectedItems(0) 50 oCurSheet = RetrieveSheetoutofRangeName(Listbox.StringItemList(ListIndex)) 51 oDocument.CurrentController.SetActiveSheet(oCurSheet) 52 Else 53 oCurSheet = oDocument.CurrentController.ActiveSheet 54 End If 55 sCurSheetName = oCurSheet.Name 56 If DialogModel.optCellTemplates.State = 1 Then 57 Dim CurIndex as Integer 58 For i = 0 To Ubound(Listbox.SelectedItems()) 59 CurIndex = Listbox.SelectedItems(i) 60 CurStylename = Listbox.StringItemList(CurIndex) 61 oSheetRanges = oCursheet.CellFormatRanges.createEnumeration 62 While oSheetRanges.hasMoreElements 63 oRange = oSheetRanges.NextElement 64 If oRange.getPropertyState("NumberFormat") = 1 Then 65 If oRange.CellStyle = CurStyleName Then 66 oSelRanges.InsertbyName("",oRange) 67 End If 68 End If 69 Wend 70 Next i 71 Else 72 ' Hard Formatation is selected 73 a = -1 74 For n = 0 To Ubound(Listbox.SelectedItems()) 75 m = Listbox.SelectedItems(n) 76 RangeName = Listbox.StringItemList(m) 77 oListSheet = RetrieveSheetoutofRangeName(RangeName) 78 a = a + 1 79 MaxIndex = Ubound(SelRangeList()) 80 If a > MaxIndex Then 81 Redim Preserve SelRangeList(MaxIndex + SBRANGEUBOUND) 82 End If 83 SelRangeList(a) = RangeName 84 If oListSheet.Name = sCurSheetName Then 85 oRange = RetrieveRangeoutofRangeName(RangeName) 86 oSelRanges.InsertbyName("",oRange) 87 End If 88 Next n 89 End If 90 If a > -1 Then 91 ReDim Preserve SelRangeList(a) 92 Else 93 ReDim SelRangeList() 94 End If 95 oDocument.CurrentController.Select(oSelRanges) 96 EnableStep1DialogControls(True, True, True) 97 End If 98End Sub 99 100 101' Procedure that is called by an event 102Sub RetrieveEnableValue() 103Dim EnableValue as Boolean 104 EnableValue = Not DialogModel.lstSelection.Enabled 105 EnableStep1DialogControls(True, EnableValue, True) 106End Sub 107 108 109Sub EnableStep1DialogControls(bCurrEnabled as Boolean, bFrameEnabled as Boolean, bButtonsEnabled as Boolean) 110Dim bCurrIsSelected as Boolean 111Dim bObjectIsSelected as Boolean 112Dim bConvertWholeDoc as Boolean 113Dim bDoEnableFrame as Boolean 114 bConvertWholeDoc = DialogModel.chkComplete.State = 1 115 bDoEnableFrame = bFrameEnabled And (NOT bConvertWholeDoc) 116 117 ' Controls around the Selection Listbox 118 With DialogModel 119 .lblCurrencies.Enabled = bCurrEnabled 120 .lstCurrencies.Enabled = bCurrEnabled 121 .lstSelection.Enabled = bDoEnableFrame 122 .lblSelection.Enabled = bDoEnableFrame 123 .hlnSelection.Enabled = bDoEnableFrame 124 .optCellTemplates.Enabled = bDoEnableFrame 125 .optSheetRanges.Enabled = bDoEnableFrame 126 .optDocRanges.Enabled = bDoEnableFrame 127 .optSelRange.Enabled = bDoEnableFrame 128 End With 129 ' The CheckBox has the Value '1' when the Controls in the Frame are disabled 130 If bButtonsEnabled Then 131 bCurrIsSelected = Ubound(DialogModel.lstCurrencies.SelectedItems()) <> -1 132 ' Enable GoOnButton only when Currency is selected 133 DialogModel.cmdGoOn.Enabled = bCurrIsSelected 134 DialogModel.chkComplete.Enabled = bCurrIsSelected 135 If bDoEnableFrame AND DialogModel.cmdGoOn.Enabled Then 136 ' If FrameControls are enabled, check if Listbox is Empty 137 bObjectIsSelected = Ubound(DialogModel.lstSelection.SelectedItems()) <> -1 138 DialogModel.cmdGoOn.Enabled = bObjectIsSelected 139 End If 140 Else 141 DialogModel.cmdGoOn.Enabled = False 142 DialogModel.chkComplete.Enabled = False 143 End If 144End Sub 145 146 147Sub ConvertRangesOrStylesOfDocument() 148Dim i as Integer 149Dim ItemName as String 150Dim SelList() as String 151Dim oSheetRanges as Object 152 153 bDocHasProtectedSheets = CheckSheetProtection(oSheets) 154 If bDocHasProtectedSheets Then 155 bDocHasProtectedSheets = UnprotectSheetsWithPassWord(oSheets, bDoUnProtect) 156 DialogModel.cmdGoOn.Enabled = False 157 End If 158 If Not bDocHasProtectedSheets Then 159 EnableStep1DialogControls(False, False, False) 160 InitializeProgressBar() 161 If DialogModel.optSelRange.State = 1 Then 162 SelectListItem() 163 End If 164 SelList() = DialogConvert.GetControl("lstSelection").SelectedItems() 165 If DialogModel.optCellTemplates.State = 1 Then 166 ' Option 'Soft' Formatation is selected 167 AssignRangestoStyle(DialogModel.lstSelection.StringItemList(), SelList()) 168 ConverttheSoftWay(SelList(), True) 169 ElseIf DialogModel.optSelRange.State = 1 Then 170 oSheetRanges = oPreSelRange.CellFormatRanges.createEnumeration 171 While oSheetRanges.hasMoreElements 172 oRange = oSheetRanges.NextElement 173 If CheckFormatType(oRange) Then 174 ConvertCellCurrencies(oRange) 175 SwitchNumberFormat(oRange, oFormats, sEuroSign) 176 End If 177 Wend 178 Else 179 ConverttheHardWay(SelList(), False, True) 180 End If 181 oStatusline.End 182 EnableStep1DialogControls(True, False, True) 183 DialogModel.cmdGoOn.Enabled = True 184 oDocument.CurrentController.Select(oSelRanges) 185 End If 186End Sub 187 188 189Sub ConvertWholeDocument() 190Dim s as Integer 191 DialogModel.cmdGoOn.Enabled = False 192 DialogModel.chkComplete.Enabled = False 193 GoOn = ConvertDocument() 194 EmptyListbox(DialogModel.lstSelection()) 195 EnableStep1DialogControls(True, True, True) 196End Sub 197 198 199' Everything previously selected will be deselected 200Sub EmptySelection() 201Dim RangeName as String 202Dim i as Integer 203Dim MaxIndex as Integer 204Dim EmptySelRangeList() as String 205 206 If Not IsNull(oSelRanges) Then 207 If oSelRanges.HasElements Then 208 EmptySelRangeList() = ArrayOutofString(oSelRanges.RangeAddressesasString, ";", MaxIndex) 209 For i = 0 To MaxIndex 210 oSelRanges.RemovebyName(EmptySelRangeList(i)) 211 Next i 212 End If 213 oDocument.CurrentController.Select(oSelRanges) 214 Else 215 oSelRanges = oDocument.createInstance("com.sun.star.sheet.SheetCellRanges") 216 End If 217End Sub 218 219 220Function AddSelectedRangeToSelRangesEnum() as Object 221Dim oLocRange as Object 222 osheet = oDocument.CurrentController.GetActiveSheet 223 oSelRanges = oDocument.createInstance("com.sun.star.sheet.SheetCellRanges") 224 ' Check if a Currency-Range has been selected 225 oLocRange = oDocument.CurrentController.Selection 226 bPreSelected = oLocRange.SupportsService("com.sun.star.sheet.SheetCellRange") 227 If bPreSelected Then 228 oSelRanges.InsertbyName("",oLocRange) 229 AddSelectedRangeToSelRangesEnum() = oLocRange 230 End If 231End Function 232 233 234Sub GetPreSelectedRange() 235Dim i as Integer 236Dim OldCurrSymbolList(2) as String 237Dim OldCurrIndex as Integer 238Dim OldCurExtension(2) as String 239 oPreSelRange = AddSelectedRangeToSelRangesEnum() 240 241 DialogModel.chkComplete.State = Abs(Not(bPreSelected)) 242 If bPreSelected Then 243 DialogModel.optSelRange.State = 1 244 AddRangeToListbox(oPreSelRange) 245 Else 246 DialogModel.optCellTemplates.State = 1 247 CreateStyleEnumeration() 248 End If 249 EnableStep1DialogControls(True, bPreSelected, True) 250 DialogModel.optSelRange.Enabled = bPreSelected 251End Sub 252 253 254Sub AddRangeToListbox(oLocRange as Object) 255 EmptyListBox(DialogModel.lstSelection) 256 PreName = RetrieveRangeNamefromAddress(oLocRange) 257 AddSingleItemToListbox(DialogModel.lstSelection, Prename)', 0) 258 SelectListboxItem(DialogModel.lstCurrencies, CurrIndex) 259 TotCellCount = CountRangeCells(oLocRange) 260End Sub 261 262 263Sub CheckRangeSelection(Optional oEvent) 264 EmptySelection() 265 AddRangeToListbox(oPreSelRange) 266 oPreSelRange = AddSelectedRangeToSelRangesEnum() 267End Sub 268 269 270' Checks if a Field (LocField) is already defined in an Array 271' Returns 'True' or 'False' 272Function FieldinList(LocList(), MaxIndex as integer, ByVal LocField ) As Boolean 273Dim i as integer 274 LocField = Ucase(LocField) 275 For i = Lbound(LocList()) to MaxIndex 276 If Ucase(LocList(i)) = LocField then 277 FieldInList = True 278 Exit Function 279 End if 280 Next 281 FieldInList = False 282End Function 283 284 285Function CheckLocale(oLocale) as Boolean 286Dim i as Integer 287Dim LocCountry as String 288Dim LocLanguage as String 289 LocCountry = oLocale.Country 290 LocLanguage = oLocale.Language 291 For i = 0 To 1 292 If LocLanguage = LangIDValue(CurrIndex,i,0) AND LocCountry = LangIDValue(CurrIndex,i,1) Then 293 CheckLocale = True 294 Exit Function 295 End If 296 Next i 297 CheckLocale = False 298End Function 299 300 301Sub SetOptionValuestoNull() 302 With DialogModel 303 .optCellTemplates.State = 0 304 .optSheetRanges.State = 0 305 .optDocRanges.State = 0 306 .optSelRange.State = 0 307 End With 308End Sub 309 310 311 312Sub SetStatusLineText(sStsREPROTECT as String) 313 If Not IsNull(oStatusLine) Then 314 oStatusline.SetText(sStsREPROTECT) 315 End If 316End Sub 317</script:module>