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="Layouter" script:language="StarBasic">Option Explicit 4 5Public oProgressbar as Object 6Public ProgressValue as Integer 7Public oDocument as Object 8Public oController as Object 9Public oForm as Object 10Public oDrawPage as Object 11Public oPageStyle as Object 12 13Public nMaxColRightX as Long 14Public nMaxTCWidth as Long 15Public nMaxRowRightX as Long 16Public nMaxRowY as Long 17Public nSecMaxRowY as Long 18Public MaxIndex as Integer 19Public CurIndex as Integer 20 21Public Const cVertDistance = 200 22Public Const cHoriDistance = 300 23 24Public nPageWidth as Long 25Public nPageHeight as Long 26Public nFormWidth as Long 27Public nFormHeight as Long 28Public nMaxHoriPos as Long 29Public nMaxVertPos as Long 30 31Public CONST SBALIGNLEFT = 0 32Public CONST SBALIGNRIGHT = 2 33 34Public Const SBNOBORDER = 0 35Public Const SB3DBORDER = 1 36Public Const SBSIMPLEBORDER = 2 37 38Public CurArrangement as Integer 39Public CurBorderType as Integer 40Public CurAlignmode as Integer 41 42Public OldAlignMode as Integer 43Public OldBorderType as Integer 44Public OldArrangement as Integer 45 46Public Const cColumnarLeft = 1 47Public Const cColumnarTop = 2 48Public Const cTabled = 3 49Public Const cLeftJustified = 4 50Public Const cTopJustified = 5 51 52Public Const cXOffset = 1000 53Public Const cYOffset = 700 54' This is the viewed space that we lose because of the symbol bars 55Public Const cSymbolMargin = 2000 56Public Const MaxFieldIndex = 200 57 58Public Const cControlCollectionCount = 9 59Public Const cLabel = 1 60Public Const cTextBox = 2 61Public Const cCheckBox = 3 62Public Const cDateBox = 4 63Public Const cTimeBox = 5 64Public Const cNumericBox = 6 65Public Const cCurrencyBox = 7 66Public Const cGridControl = 8 67Public Const cImageControl = 9 68 69Public Styles(100, 8) as String 70 71Public CurControlType as Integer 72Public CurFieldlength as Double 73Public CurFieldType as Integer 74Public CurFieldName as String 75Public CurControlName as String 76Public CurFormatKey as Long 77Public CurDefaultValue 78Public CurIsCurrency as Boolean 79Public CurScale as Integer 80Public CurHelpText as String 81 82Public FieldMetaValues(MaxFieldIndex, 8) 83' Description of this List: 84' CurFieldType = FieldMetaValues(Index,0) 85' CurFieldLength = FieldMetaValues(Index,1) 86' CurControlType = FieldMetaValues(Index,2) (ControlType eg. cLabel, cTextbox usw.) 87' CurControlName = FieldMetaValues(Index,3) 88' CurFormatKey = FieldMetaValues(Index,4) 89' CurDefaultValue = FieldMetaValues(Index,5) 90' CurIsCurrency = FieldMetaValues(Index,6) 91' CurScale = FieldMetaValues(Index,7) 92' CurHelpText = FieldMetaValues(Index,8) 93 94Public FieldNames(MaxFieldIndex) as string 95Public oModelService(cControlCollectionCount) as String 96Public oGridModel as Object 97 98 99Function InsertControl(oContainer as Object, oControlObject as object, aPoint as Object, aSize as Object) 100Dim oShape as object 101 oShape = oDocument.CreateInstance ("com.sun.star.drawing.ControlShape") 102 oShape.Size = aSize 103 oShape.Position = aPoint 104 oShape.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH 105 oShape.control = oControlObject 106 oContainer.Add(oShape) 107 InsertControl() = oShape 108End Function 109 110 111Function ArrangeControls() 112Dim oShape as Object 113Dim i as Integer 114 oProgressbar = oDocument.GetCurrentController.GetFrame.CreateStatusIndicator 115 oProgressbar.Start("", MaxIndex) 116 If oDBForm.HasbyName("Grid1") Then 117 RemoveShapes() 118 End If 119 ToggleLayoutPage(False) 120 Select Case CurArrangement 121 Case cTabled 122 PositionGridControl(MaxIndex) 123 Case Else 124 PositionControls(MaxIndex) 125 End Select 126 ToggleLayoutPage(True) 127 oProgressbar.End 128End Function 129 130 131Sub OpenFormDocument() 132Dim NoArgs() as new com.sun.star.beans.PropertyValue 133Dim oViewSettings as Object 134 oDocument = CreateNewDocument("swriter") 135 oProgressbar = oDocument.GetCurrentController.GetFrame.CreateStatusIndicator() 136 oProgressbar.Start("", 100) 137 oDocument.ApplyFormDesignMode = False 138 oController = oDocument.GetCurrentController 139 oViewSettings = oDocument.CurrentController.ViewSettings 140 oViewSettings.ShowTableBoundaries = False 141 oViewSettings.ShowOnlineLayout = True 142 oDrawPage = oDocument.DrawPage 143 oPageStyle = oDocument.StyleFamilies.GetByName("PageStyles").GetByName("Standard") 144End Sub 145 146 147Sub InitializeLabelValues() 148Dim oLabelModel as Object 149Dim oTBModel as Object 150Dim oLabelShape as Object 151Dim oTBShape as Object 152Dim aTBSize As New com.sun.star.awt.Size 153Dim aLabelSize As New com.sun.star.awt.Size 154Dim aPoint As New com.sun.star.awt.Point 155Dim aSize As New com.sun.star.awt.Size 156Dim oLocControl as Object 157Dim oLocPeer as Object 158 oLabelModel = CreateUnoService("com.sun.star.form.component.FixedText") 159 oTBModel = CreateUnoService("com.sun.star.form.component.TextField") 160 161 Set oLabelShape = InsertControl(oDrawPage, oLabelModel, aPoint, aLabelSize) 162 Set oTBShape = InsertControl(oDrawPage, oTBModel, aPoint, aSize) 163 164 oLocPeer = oController.GetControl(oLabelModel).Peer 165 XPixelFactor = 100000/oLocPeer.GetInfo.PixelPerMeterX 166 YPixelFactor = 100000/oLocPeer.GetInfo.PixelPerMeterY 167 aLabelSize = GetPeerSize(oLabelModel, oLocControl, "The quick brown fox...") 168 nTCHeight = (aLabelSize.Height+1) * YPixelFactor 169 aTBSize = GetPeerSize(oTBModel, oLocControl, "The quick brown fox...") 170 nDBRefHeight = (aTBSize.Height+1) * YPixelFactor 171 BasicLabelDiffHeight = Clng((nDBRefHeight - nTCHeight)/2) 172 oDrawPage.Remove(oLabelShape) 173 oDrawPage.Remove(oTBShape) 174End Sub 175 176 177Sub ConfigurePageStyle() 178Dim aPageSize As New com.sun.star.awt.Size 179Dim aSize As New com.sun.star.awt.Size 180 oPageStyle.IsLandscape = True 181 aPageSize = oPageStyle.Size 182 nPageWidth = aPageSize.Width 183 nPageHeight = aPageSize.Height 184 aSize.Width = nPageHeight 185 aSize.Height = nPageWidth 186 oPageStyle.Size = aSize 187 nPageWidth = nPageHeight 188 nPageHeight = oPageStyle.Size.Height 189 nFormWidth = nPageWidth - oPageStyle.RightMargin - oPageStyle.LeftMargin - 2 * cXOffset 190 nFormHeight = nPageHeight - oPageStyle.TopMargin - oPageStyle.BottomMargin - 2 * cYOffset - cSymbolMargin 191End Sub 192 193 194' Modify the Borders of the Controls 195Sub ChangeBorderLayouts(oEvent as Object) 196Dim oModel as Object 197Dim i as Integer 198Dim oCurModel as Object 199Dim sLocText as String 200Dim oGroupShape as Object 201Dim s as Integer 202 If Not bDebug Then 203 On Local Error GoTo WIZARDERROR 204 End If 205 oModel = oEvent.Source.Model 206 SwitchBorderMode(Val(Right(oModel.Name,1))) 207 ToggleLayoutPage(False) 208 If CurArrangement = cTabled Then 209 oGridModel.Border = CurBorderType 210 Else 211 If OldBorderType <> CurBorderType Then 212 For i = 0 To MaxIndex 213 If oDBShapeList(i).SupportsService("com.sun.star.drawing.GroupShape") Then 214 oGroupShape = oDBShapeList(i) 215 For s = 0 To oGroupShape.Count-1 216 oGroupShape(s).Control.Border = CurBorderType 217 Next s 218 Else 219 If oDBModelList(i).PropertySetInfo.HasPropertyByName("Border") Then 220 oDBModelList(i).Border = CurBorderType 221 End If 222 End If 223 Next i 224 End If 225 End If 226 ToggleLayoutPage(True) 227WIZARDERROR: 228 If Err <> 0 Then 229 Msgbox(sMsgErrMsg, 16, GetProductName()) 230 Resume LOCERROR 231 LOCERROR: 232 DlgFormDB.Dispose() 233 End If 234End Sub 235 236 237Sub ChangeLabelAlignments(oEvent as Object) 238Dim i as Integer 239Dim oSize as New com.sun.star.awt.Size 240Dim oModel as Object 241 If Not bDebug Then 242 On Local Error GoTo WIZARDERROR 243 End If 244 oModel = oEvent.Source.Model 245 SwitchAlignMode(Val(Right(oModel.Name,1))) 246 ToggleLayoutPage(False) 247 If OldAlignMode <> CurAlignMode Then 248 For i = 0 To MaxIndex 249 oTCShapeList(i).GetControl.Align = CurAlignmode 250 Next i 251 End If 252 If CurAlignmode = com.sun.star.awt.TextAlign.RIGHT Then 253 For i = 0 To Ubound(oTCShapeList()) 254 oSize = oTCShapeList(i).Size 255 oSize.Width = oDBShapeList(i).Position.X - oTCShapeList(i).Position.X - cHoriDistance 256 oTCShapeList(i).Size = oSize 257 Next i 258 End If 259 260WIZARDERROR: 261 If Err <> 0 Then 262 Msgbox(sMsgErrMsg, 16, GetProductName()) 263 Resume LOCERROR 264 LOCERROR: 265 End If 266 ToggleLayoutPage(True) 267End Sub 268 269 270Sub ChangeArrangemode(oEvent as Object) 271Dim oModel as Object 272 If Not bDebug Then 273 On Local Error GoTo WIZARDERROR 274 End If 275 oModel = oEvent.Source.Model 276 SwitchArrangementButtons(Val(Right(oModel.Name,1))) 277 oModel.State = 1 278 DlgFormDB.GetControl("cmdArrange" & OldArrangement).Model.State = 0 279 If CurArrangement <> OldArrangement Then 280 ArrangeControls() 281 Select Case CurArrangement 282 Case cTabled 283 ToggleBorderGroup(False) 284 ToggleAlignGroup(False) 285 Case Else ' cColumnarTop,cLeftJustified, cTopJustified 286 ToggleAlignGroup(CurArrangement = cColumnarLeft) 287 If CurArrangement = cColumnarTop Then 288 If CurAlignMode = com.sun.star.awt.TextAlign.RIGHT Then 289 DialogModel.optAlign0.State = 1 290 CurAlignMode = com.sun.star.awt.TextAlign.LEFT 291 OldAlignMode = com.sun.star.awt.TextAlign.RIGHT 292 End If 293 End If 294 ControlCaptionstoStandardLayout() 295 oDBForm.Load 296 End Select 297 End If 298WIZARDERROR: 299 If Err <> 0 Then 300 Msgbox(sMsgErrMsg, 16, GetProductName()) 301 Resume LOCERROR 302 LOCERROR: 303 End If 304End Sub 305 306 307Sub ToggleBorderGroup(bDoEnable as Boolean) 308 With DialogModel 309 .hlnBorderLayout.Enabled = bDoEnable 310 .optBorder0.Enabled = bDoEnable ' 0: No border 311 .optBorder1.Enabled = bDoEnable ' 1: 3D border 312 .optBorder2.Enabled = bDoEnable ' 2: simple border 313 End With 314End Sub 315 316 317Sub ToggleAlignGroup(ByVal bDoEnable as Boolean) 318 With DialogModel 319 If bDoEnable Then 320 bDoEnable = CurArrangement = cColumnarLeft 321 End If 322 .hlnAlign.Enabled = bDoEnable 323 .optAlign0.Enabled = bDoEnable 324 .optAlign2.Enabled = bDoEnable 325 End With 326End Sub 327 328 329Sub ToggleLayoutPage(bDoEnable as Boolean, Optional FocusControlName as String) 330 DialogModel.Enabled = bDoEnable 331 If bDoEnable Then 332 If Not bDebug Then 333 oDocument.UnlockControllers() 334 End If 335 ToggleOptionButtons(DialogModel,(bWithBackGraphic = True)) 336 ToggleAlignGroup(bDoEnable) 337 ToggleBorderGroup(bDoEnable) 338 Else 339 If Not bDebug Then 340 oDocument.LockControllers() 341 End If 342 End If 343 If Not IsMissing(FocusControlName) Then 344 DlgFormDB.GetControl(FocusControlName).SetFocus() 345 End If 346End Sub 347 348 349Sub DestroyControlShapes(oDrawPage as Object) 350Dim i as Integer 351Dim oShape as Object 352 For i = oDrawPage.Count-1 To 0 Step -1 353 oShape = oDrawPage.GetByIndex(i) 354 If oShape.ShapeType = "com.sun.star.drawing.ControlShape" Then 355 oShape.Dispose() 356 End If 357 Next i 358End Sub 359 360 361Sub SwitchArrangementButtons(ByVal LocArrangement as Integer) 362 OldArrangement = CurArrangement 363 CurArrangement = LocArrangement 364 If OldArrangement <> 0 Then 365 DlgFormDB.GetControl("cmdArrange" & OldArrangement).Model.State = 0 366 End If 367 DlgFormDB.GetControl("cmdArrange" & CurArrangement).Model.State = 1 368End Sub 369 370 371Sub SwitchBorderMode(ByVal LocBorderType as Integer) 372 OldBorderType = CurBorderType 373 CurBorderType = LocBorderType 374End Sub 375 376 377Sub SwitchAlignMode(ByVal LocAlignMode as Integer) 378 OldAlignMode = CurAlignMode 379 CurAlignMode = LocAlignMode 380End Sub</script:module>