123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
- <!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
- <script:module xmlns:script="http://openoffice.org/2000/script" script:name="develop" script:language="StarBasic">REM ***** BASIC *****
- Option Explicit
- Public oDBShapeList() as Object
- Public oTCShapeList() as Object
- Public oDBModelList() as Object
- Public oGroupShapeList() as Object
- Public oGridShape as Object
- Public a as Integer
- Public StartA as Integer
- Public bIsFirstRun as Boolean
- Public bIsVeryFirstRun as Boolean
- Public bControlsareCreated as Boolean
- Public nDBRefHeight as Long
- Public nXTCPos&, nYTCPos&, nXDBPos&, nYDBPos&, nTCHeight&, nTCWidth&, nDBHeight&, nDBWidth&
- Dim iReduceWidth as Integer
- Function PositionControls(Maxindex as Integer)
- Dim oTCModel as Object
- Dim oDBModel as Object
- Dim i as Integer
- InitializePosSizes()
- bIsFirstRun = True
- bIsVeryFirstRun = True
- a = 0
- StartA = 0
- nMaxRowY = 0
- nSecMaxRowY = 0
- If CurArrangement = cLeftJustified Or cTopJustified Then
- DialogModel.optAlign0.State = 1
- End If
- For i = 0 To MaxIndex
- GetCurrentMetaValues(i)
- oTCModel = InsertTextControl(i)
- If CurFieldType = com.sun.star.sdbc.DataType.TIMESTAMP Then
- InsertTimeStampShape(i)
- Else
- InsertDBControl(i)
- bIsVeryFirstRun = False
- oDBModelList(i).LabelControl = oTCModel
- End If
- GetLabelDiffHeight(i+1)
- ResetPosSizes(i)
- oProgressbar.Value = i
- Next i
- ControlCaptionstoStandardLayout()
- bControlsareCreated = True
- End Function
- Sub ResetPosSizes(LastIndex as Integer)
- Select Case CurArrangement
- Case cColumnarLeft
- nYDBPos = nYDBPos + nDBHeight + cVertDistance
- If (nYDBPos > cYOffset + nFormHeight) Or (LastIndex = MaxIndex) Then
- RepositionColumnarLeftControls(LastIndex)
- nXTCPos = nMaxColRightX + 2 * cHoriDistance
- nXDBPos = nXTCPos + cHoriDistance + nMaxTCWidth
- nYDBPos = cYOffset
- bIsFirstRun = True
- StartA = LastIndex + 1
- a = 0
- Else
- a = a + 1
- End If
- nYTCPos = nYDBPos + LABELDIFFHEIGHT
- Case cColumnarTop
- nYTCPos = nYDBPos + nDBHeight + cVertDistance
- If nYTCPos > cYOffset + nFormHeight Then
- nXDBPos = nMaxColRightX + cHoriDistance
- nXTCPos = nXDBPos
- nYDBPos = cYOffset + nTCHeight + cVertDistance
- nYTCPos = cYOffset
- bIsFirstRun = True
- StartA = LastIndex + 1
- a = 0
- Else
- a = a + 1
- End If
- Case cLeftJustified,cTopJustified
- If nMaxColRightX > cXOffset + nFormWidth Then
- Dim nOldYTCPos as Long
- nOldYTCPos = nYTCPos
- CheckJustifiedPosition()
- Else
- nXTCPos = nMaxColRightX + CHoriDistance
- If CurArrangement = cLeftJustified Then
- nYTCPos = nYDBPos + LabelDiffHeight
- End If
- End If
- a = a + 1
- End Select
- End Sub
- Sub RepositionColumnarLeftControls(LastIndex as Integer)
- Dim aSize As New com.sun.star.awt.Size
- Dim aPoint As New com.sun.star.awt.Point
- Dim i as Integer
- aSize = GetSize(nMaxTCWidth, nTCHeight)
- bIsFirstRun = True
- For i = StartA To LastIndex
- If i = StartA Then
- nXTCPos = oTCShapeList(i).Position.X
- nXDBPos = nXTCPos + nMaxTCWidth + cHoriDistance
- End If
- ResetDBShape(oDBShapeList(i), nXDBPos)
- CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
- Next i
- End Sub
- Sub ResetDBShape(oLocDBShape as Object, iXPos as Long)
- Dim aSize As New com.sun.star.awt.Size
- Dim aPoint As New com.sun.star.awt.Point
- nYDBPos = oLocDBShape.Position.Y
- nDBWidth = oLocDBShape.Size.Width
- nDBHeight = oLocDBShape.Size.Height
- aPoint = GetPoint(iXPos,nYDBPos)
- oLocDBShape.SetPosition(aPoint)
- End Sub
- Sub InitializePosSizes()
- nXTCPos = cXOffset
- nTCWidth = 2000
- nDBWidth = 2000
- nDBHeight = nDBRefHeight
- iReduceWidth = 0
- Select Case CurArrangement
- Case cColumnarLeft, cLeftJustified
- GetLabelDiffHeight(0)
- nYTCPos = cYOffset + LABELDIFFHEIGHT
- nXDBPos = cXOffset + 3050
- nYDBPos = cYOffset
- Case cColumnarTop, cTopJustified
- nXDBPos = cXOffset
- nYTCPos = cYOffset
- End Select
- End Sub
- Function InsertTextControl(i as Integer) as Object
- Dim oShape as Object
- Dim oModel as Object
- Dim aPoint as New com.sun.star.awt.Point
- Dim aSize As New com.sun.star.awt.Size
- If bControlsareCreated Then
- Set oShape = oTCShapeList(i)
- Set oModel = oShape.GetControl
- If CurArrangement = cLeftJustified Then
- nTCWidth = GetPreferredWidth(oModel, True, CurFieldname)
- Else
- nTCWidth = oShape.Size.Width
- End If
- oShape.Position = GetPoint(nXTCPos, nYTCPos)
- If CurArrangement = cColumnarTop Then
- oModel.Align = com.sun.star.awt.TextAlign.LEFT
- End If
- Else
- oModel = CreateUnoService(oModelService(cLabel))
- aPoint = GetPoint(nXTCPos, nYTCPos)
- aSize = GetSize(nTCWidth,nTCHeight)
- Set oShape = InsertControl(oDrawPage, oModel, aPoint, aSize)
- Set oTCShapeList(i)= oShape
- If bIsVeryFirstRun Then
- If CurArrangement = cColumnarTop Then
- nYDBPos = nYTCPos + nTCHeight
- End If
- End If
- nTCWidth = GetPreferredWidth(oModel, True, CurFieldName)
- End If
- If CurArrangement = cColumnarLeft Then
- ' Note This If Sequence must be called before retrieving the outer Points
- If bIsFirstRun Then
- nMaxTCWidth = nTCWidth
- bIsFirstRun = False
- ElseIf nTCWidth > nMaxTCWidth Then
- nMaxTCWidth = nTCWidth
- End If
- End If
- CheckOuterPoints(oShape.Position.X, nTCWidth, nYTCPos, nTCHeight, False)
- Select Case CurArrangement
- Case cLeftJustified
- nXDBPos = nMaxColRightX
- Case cColumnarTop,cTopJustified
- oModel.Align = com.sun.star.awt.TextAlign.LEFT
- nXDBPos = nXTCPos
- nYDBPos = nYTCPos + nTCHeight
- If CurFieldLength = 20 And nDBWidth > 2 * nTCWidth Then
- iReduceWidth = iReduceWidth + 1
- End If
- End Select
- oShape.SetSize(GetSize(nTCWidth,nTCHeight))
- If CurHelpText <> "" Then
- oModel.HelpText = CurHelptext
- End If
- InsertTextControl = oModel
- End Function
- Sub InsertDBControl(i as Integer)
- Dim aPoint as New com.sun.star.awt.Point
- Dim aSize As New com.sun.star.awt.Size
- Dim oControl as Object
- Dim iColRightX as Long
- aPoint = GetPoint(nXDBPos, nYDBPos)
- If bControlsAreCreated Then
- oDBShapeList(i).Position = aPoint
- Else
- oDBModelList(i) = CreateUnoService(oModelService(CurControlType))
- oDBShapeList(i) = InsertControl(oDrawPage, oDBModelList(i), aPoint, aSize)
- SetNumerics(oDBModelList(i), CurFieldType)
- If CurControlType = cCheckBox Then
- oDBModelList(i).Label = ""
- End If
- oDBModelList(i).DataField = CurFieldName
- End If
- nDBHeight = GetDBHeight(oDBModelList(i))
- nDBWidth = GetPreferredWidth(oDBModelList(i),True)
- aSize = GetSize(nDBWidth,nDBHeight)
- oDBShapeList(i).SetSize(aSize)
- CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
- End Sub
- Function InsertTimeStampShape(i as Integer) as Object
- Dim oDateModel as Object
- Dim oTimeModel as Object
- Dim oDateShape as Object
- Dim oTimeShape as Object
- Dim oDateTimeShape as Object
- Dim aPoint as New com.sun.star.awt.Point
- Dim aSize as New com.sun.star.awt.Size
- Dim nDateWidth as Long
- Dim nTimeWidth as Long
- Dim oGroupShape as Object
- aPoint = GetPoint(nXDBPos, nYDBPos)
- If bControlsAreCreated Then
- oDBShapeList(i).Position = aPoint
- nDBWidth = oDBShapeList(i).Size.Width
- nDBHeight = oDBShapeList(i).Size.Height
- Else
- oGroupShape = oDocument.CreateInstance("com.sun.star.drawing.GroupShape")
- oGroupShape.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
- oDrawPage.Add(oGroupShape)
- CurFieldType = com.sun.star.sdbc.DataType.DATE
- oDateModel = CreateUnoService("com.sun.star.form.component.DateField")
- oDateModel.DataField = CurFieldName
- oDateShape = InsertControl(oGroupShape, oDateModel, aPoint, aSize)
- SetNumerics(oDateModel, CurFieldType)
- nDBHeight = GetDBHeight(oDateModel)
- nDateWidth = GetPreferredWidth(oDateModel,True)
- aSize = GetSize(nDateWidth,nDBHeight)
- oDateShape.SetSize(aSize)
- CurFieldType = com.sun.star.sdbc.DataType.TIME
- oTimeModel = CreateUnoService("com.sun.star.form.component.TimeField")
- oTimeModel.DataField = CurFieldName
- oTimeShape = InsertControl(oGroupShape, oTimeModel, aPoint, aSize)
- oTimeShape.Position = GetPoint(nXDBPos + 10 + nDateWidth,nYDBPos)
- nTimeWidth = GetPreferredWidth(oTimeModel)
- aSize = GetSize(nTimeWidth,nDBHeight)
- oTimeShape.SetSize(aSize)
- nDBWidth = nDateWidth + nTimeWidth + 10
- oGroupShape.Position = aPoint
- oGroupShape.Size = GetSize(nDBWidth, nDBHeight)
- Set oDBShapeList(i)= oGroupShape
- End If
- CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
- InsertTimeStampShape() = oDBShapeList(i)
- End Function
- ' Note: on all Controls except for the checkbox the Label has to be set
- ' a bit under the DBControl because its Height is also smaller
- Sub GetLabelDiffHeight(Index as Integer)
- If (CurArrangement = cLeftJustified) Or (CurArrangement = cColumnarLeft) Then
- If Index <= Ubound(FieldMetaValues()) Then
- If FieldMetaValues(Index,2) = cCheckBox Then
- LabelDiffHeight = 0
- Else
- LabelDiffHeight = BasicLabelDiffHeight
- End If
- End If
- End If
- End Sub
- Sub CheckJustifiedPosition()
- Dim nLeftDist as Long
- Dim nRightDist as Long
- Dim oLocDBShape as Object
- Dim oLocTextShape as Object
- Dim nBaseWidth as Long
- nBaseWidth = nFormWidth + cXOffset
- nLeftDist = nMaxColRightX - nBaseWidth
- nRightDist = nBaseWidth - nXTCPos + cHoriDistance
- If nLeftDist < 0.5 * nRightDist and iReduceWidth > 2 Then
- ' Fieldwidths in the line can be made smaller
- AdjustLineWidth(StartA, a, nLeftDist, - 1)
- If CurArrangement = cLeftjustified Then
- nYDBPos = nMaxRowY + cVertDistance
- nYTCPos = nYDBPos + LABELDIFFHEIGHT
- nXTCPos = cXOffset
- Else
- nYTCPos = nMaxRowY + cVertDistance
- nYDBPos = nYTCPos + nTCHeight
- nXTCPos = cXOffset
- nXDBPos = cXOffset
- End If
- bIsFirstRun = True
- StartA = a + 1
- Else
- Set oLocDBShape = oDBShapeList(a)
- Set oLocTextShape = oTCShapeList(a)
- If CurArrangement = cLeftJustified Then
- If nYDBPos + nDBHeight = nMaxRowY Then
- ' The last Control was the highest in the row
- nYDBPos = nSecMaxRowY + cVertDistance
- Else
- nYDBPos = nMaxRowY + cVertDistance
- End If
- nYTCPos = nYDBPos + LABELDIFFHEIGHT
- nXDBPos = cXOffset + nTCWidth
- oLocTextShape.Position = GetPoint(cXOffset, nYTCPos)
- oLocDBShape.Position = GetPoint(nXDBPos, nYDBPos)
- ' PosSizes for the next two Controls
- nXTCPos = oLocDBShape.Position.X + oLocDBShape.Size.Width + cHoriDistance
- bIsFirstRun = True
- CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
- nXDBPos = nMaxColRightX + cHoriDistance
- Else ' cTopJustified
- If nYDBPos + nDBHeight = nMaxRowY Then
- ' The last Control was the highest in the row
- nYTCPos = nSecMaxRowY + cVertDistance
- Else
- nYTCPos = nMaxRowY + cVertDistance
- End If
- nYDBPos = nYTCPOS + nTCHeight
- nXDBPos = cXOffset
- nXTCPos = cXOffset
- oLocTextShape.Position = GetPoint(cXOffset, nYTCPos)
- oLocDBShape.Position = GetPoint(cXOffset, nYDBPos)
- bIsFirstRun = True
- If nDBWidth > nTCWidth Then
- CheckOuterPoints(nXDBPos, nDBWidth, nYDBPos, nDBHeight, True)
- Else
- CheckOuterPoints(nXDBPos, nTCWidth, nYDBPos, nDBHeight, True)
- End If
- nXTCPos = nMaxColRightX + cHoriDistance
- nXDBPos = nXTCPos
- End If
- AdjustLineWidth(StartA, a-1, nRightDist, 1)
- StartA = a
- End If
- iReduceWidth = 0
- End Sub
- Function GetCorrWidth(StartIndex as Integer, EndIndex as Integer, nDist as Long, Widthfactor as Integer) as Integer
- Dim ShapeCount as Integer
- If WidthFactor > 0 Then
- ShapeCount = EndIndex-StartIndex + 1
- Else
- ShapeCount = iReduceWidth
- End If
- GetCorrWidth() = (nDist)/ShapeCount
- End Function
- Sub AdjustLineWidth(StartIndex as Integer, EndIndex as Integer, nDist as Long, Widthfactor as Integer)
- Dim i as Integer
- Dim oLocDBShape as Object
- Dim oLocTCShape as Object
- Dim CorrWidth as Integer
- Dim bAdjustPos as Boolean
- Dim iLocTCPosX as Long
- Dim iLocDBPosX as Long
- CorrWidth = GetCorrWidth(StartIndex, EndIndex, nDist, Widthfactor)
- bAdjustPos = False
- iLocTCPosX = cXOffset
- For i = StartIndex To EndIndex
- Set oLocDBShape = oDBShapeList(i)
- Set oLocTCShape = oTCShapeList(i)
- If bAdjustPos Then
- oLocTCShape.Position = GetPoint(iLocTCPosX, oLocTCShape.Position.Y)
- If CurArrangement = cLeftJustified Then
- iLocDBPosX = oLocTCShape.Position.X + oLocTCShape.Size.Width
- oLocDBShape.Position = GetPoint(iLocDBPosX, oLocDBShape.Position.Y)
- Else
- oLocDBShape.Position = GetPoint(iLocTCPosX, oLocTCShape.Position.Y + nTCHeight)
- End If
- Else
- bAdjustPos = True
- End If
- If CDbl(FieldMetaValues(i,1)) > 20 or WidthFactor > 0 Then
- If (CurArrangement = cTopJustified) And (oLocTCShape.Size.Width > oLocDBShape.Size.Width) Then
- oLocDBShape.Size = GetSize(oLocTCShape.Size.Width + WidthFactor * CorrWidth, oLocDBShape.Size.Height)
- Else
- oLocDBShape.Size = GetSize(oLocDBShape.Size.Width + WidthFactor * CorrWidth, oLocDBShape.Size.Height)
- End If
- End If
- iLocTCPosX = oLocDBShape.Position.X + oLocDBShape.Size.Width + cHoriDistance
- If CurArrangement = cTopJustified Then
- If oLocTCShape.Size.Width > oLocDBShape.Size.Width Then
- iLocTCPosX = oLocDBShape.Position.X + oLocTCShape.Size.Width + cHoriDistance
- End If
- End If
- Next i
- End Sub
- Sub CheckOuterPoints(nXPos, nWidth, nYPos, nHeight, bIsDBField as Boolean)
- Dim nColRightX as Long
- Dim nRowY as Long
- Dim nOldMaxRowY as Long
- If CurArrangement = cLeftJustified Or CurArrangement = cTopJustified Then
- If bIsDBField Then
- ' Only at DBControls you can measure the Value of nMaxRowY
- If bIsFirstRun Then
- nMaxRowY = nYPos + nHeight
- nSecMaxRowY = nMaxRowY
- Else
- nRowY = nYPos + nHeight
- If nRowY >= nMaxRowY Then
- nOldMaxRowY = nMaxRowY
- nSecMaxRowY = nOldMaxRowY
- nMaxRowY = nRowY
- End If
- End If
- End If
- End If
- ' Find the outer right point
- If bIsFirstRun Then
- nMaxColRightX = nXPos + nWidth
- bIsFirstRun = False
- Else
- nColRightX = nXPos + nWidth
- If nColRightX > nMaxColRightX Then
- nMaxColRightX = nColRightX
- End If
- End If
- End Sub
- Function PositionGridControl(MaxIndex as Integer)
- Dim oControl as Object
- Dim n as Integer
- Dim oColumn as Object
- Dim aPoint as New com.sun.star.awt.Point
- Dim aSize as New com.sun.star.awt.Size
- If bControlsareCreated Then
- ShapesToNirwana()
- End If
- oGridModel = CreateUnoService(oModelService(cGridControl))
- oGridModel.Name = "Grid1"
- aPoint = GetPoint(cXOffset, cYOffset)
- aSize = GetSize(nFormWidth, nFormHeight)
- oDBForm.InsertByName (oGridModel.Name, oGridModel)
- oGridShape = InsertControl(oDrawPage, oGridModel, aPoint, aSize)
- For n = 0 to MaxIndex
- GetCurrentMetaValues(n)
- If CurFieldType = com.sun.star.sdbc.DataType.TIMESTAMP Then
- oColumn = SetupGridColumn(oGridModel,"DateField", False, com.sun.star.sdbc.DataType.DATE, CurFieldName & " " & sDateAppendix)
- oColumn = SetupGridColumn(oGridModel,"TimeField", False, com.sun.star.sdbc.DataType.TIME, CurFieldName & " " & sTimeAppendix)
- Else
- If CurControlType = cImageControl Then
- oColumn = SetupGridColumn(oGridModel,"TextField", True, CurFieldType, CurFieldName)
- Else
- oColumn = SetupGridColumn(oGridModel, CurControlName, False, CurFieldType, CurFieldName)
- End If
- End If
- oProgressbar.Value = n
- next n
- End Function
- Function SetupGridColumn(oGridModel as Object, ControlName as String, bHidden as Boolean, iLocFieldType as Integer, ColName as String) as Object
- Dim oColumn as Object
- CurControlName = ControlName
- oColumn = oGridModel.CreateColumn(CurControlName)
- oColumn.Name = CalcUniqueContentName(oGridModel, CurControlName)
- oColumn.Hidden = bHidden
- SetNumerics(oColumn, iLocFieldType)
- oColumn.DataField = CurFieldName
- oColumn.Label = ColName
- oColumn.Width = 0 ' Width of column is adjusted to Columname
- oGridModel.insertByName(oColumn.Name, oColumn)
- End Function
- Sub ControlCaptionstoStandardLayout()
- Dim i as Integer
- Dim iBorderType as Integer
- Dim oCurModel as Object
- Dim oStyle as Object
- Dim iStandardColor as Long
- If CurArrangement <> cTabled Then
- oStyle = oDocument.StyleFamilies.GetByName("ParagraphStyles").GetByName("Standard")
- iStandardColor = oStyle.CharColor
- For i = 0 To MaxIndex
- oCurModel = oTCShapeList(i).GetControl
- If i = 0 Then
- If oCurModel.TextColor = iStandardColor Then
- Exit Sub
- End If
- End If
- oCurModel.TextColor = iStandardColor
- Next i
- End If
- End Sub
- Sub GroupShapesTogether()
- Dim i as Integer
- If CurArrangement <> cTabled Then
- For i = 0 To MaxIndex
- oGroupShapeList(i) = CreateUnoService("com.sun.star.drawing.ShapeCollection")
- oGroupShapeList(i).Add(oTCShapeList(i))
- oGroupShapeList(i).Add(oDBShapeList(i))
- oDrawPage.Group(oGroupShapeList(i))
- Next i
- Else
- RemoveNirwanaShapes()
- End If
- End Sub</script:module>
|