397 lines
12 KiB
Java
397 lines
12 KiB
Java
<?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="Layouter" script:language="StarBasic">Option Explicit
|
|
|
|
Public oProgressbar as Object
|
|
Public ProgressValue as Integer
|
|
Public oDocument as Object
|
|
Public oController as Object
|
|
Public oForm as Object
|
|
Public oDrawPage as Object
|
|
Public oPageStyle as Object
|
|
|
|
Public nMaxColRightX as Long
|
|
Public nMaxTCWidth as Long
|
|
Public nMaxRowRightX as Long
|
|
Public nMaxRowY as Long
|
|
Public nSecMaxRowY as Long
|
|
Public MaxIndex as Integer
|
|
Public CurIndex as Integer
|
|
|
|
Public Const cVertDistance = 200
|
|
Public Const cHoriDistance = 300
|
|
|
|
Public nPageWidth as Long
|
|
Public nPageHeight as Long
|
|
Public nFormWidth as Long
|
|
Public nFormHeight as Long
|
|
Public nMaxHoriPos as Long
|
|
Public nMaxVertPos as Long
|
|
|
|
Public CONST SBALIGNLEFT = 0
|
|
Public CONST SBALIGNRIGHT = 2
|
|
|
|
Public Const SBNOBORDER = 0
|
|
Public Const SB3DBORDER = 1
|
|
Public Const SBSIMPLEBORDER = 2
|
|
|
|
Public CurArrangement as Integer
|
|
Public CurBorderType as Integer
|
|
Public CurAlignmode as Integer
|
|
|
|
Public OldAlignMode as Integer
|
|
Public OldBorderType as Integer
|
|
Public OldArrangement as Integer
|
|
|
|
Public Const cColumnarLeft = 1
|
|
Public Const cColumnarTop = 2
|
|
Public Const cTabled = 3
|
|
Public Const cLeftJustified = 4
|
|
Public Const cTopJustified = 5
|
|
|
|
Public Const cXOffset = 1000
|
|
Public Const cYOffset = 700
|
|
' This is the viewed space that we lose because of the symbol bars
|
|
Public Const cSymbolMargin = 2000
|
|
Public Const MaxFieldIndex = 200
|
|
|
|
Public Const cControlCollectionCount = 9
|
|
Public Const cLabel = 1
|
|
Public Const cTextBox = 2
|
|
Public Const cCheckBox = 3
|
|
Public Const cDateBox = 4
|
|
Public Const cTimeBox = 5
|
|
Public Const cNumericBox = 6
|
|
Public Const cCurrencyBox = 7
|
|
Public Const cGridControl = 8
|
|
Public Const cImageControl = 9
|
|
|
|
Public Styles(100, 8) as String
|
|
|
|
Public CurControlType as Integer
|
|
Public CurFieldlength as Double
|
|
Public CurFieldType as Integer
|
|
Public CurFieldName as String
|
|
Public CurControlName as String
|
|
Public CurFormatKey as Long
|
|
Public CurDefaultValue
|
|
Public CurIsCurrency as Boolean
|
|
Public CurScale as Integer
|
|
Public CurHelpText as String
|
|
|
|
Public FieldMetaValues(MaxFieldIndex, 8)
|
|
' Description of this List:
|
|
' CurFieldType = FieldMetaValues(Index,0)
|
|
' CurFieldLength = FieldMetaValues(Index,1)
|
|
' CurControlType = FieldMetaValues(Index,2) (ControlType, e.g., cLabel, cTextbox, etc.)
|
|
' CurControlName = FieldMetaValues(Index,3)
|
|
' CurFormatKey = FieldMetaValues(Index,4)
|
|
' CurDefaultValue = FieldMetaValues(Index,5)
|
|
' CurIsCurrency = FieldMetaValues(Index,6)
|
|
' CurScale = FieldMetaValues(Index,7)
|
|
' CurHelpText = FieldMetaValues(Index,8)
|
|
|
|
Public FieldNames(MaxFieldIndex) as string
|
|
Public oModelService(cControlCollectionCount) as String
|
|
Public oGridModel as Object
|
|
|
|
|
|
Function InsertControl(oContainer as Object, oControlObject as object, aPoint as Object, aSize as Object)
|
|
Dim oShape as object
|
|
oShape = oDocument.CreateInstance ("com.sun.star.drawing.ControlShape")
|
|
oShape.Size = aSize
|
|
oShape.Position = aPoint
|
|
oShape.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
|
|
oShape.control = oControlObject
|
|
oContainer.Add(oShape)
|
|
InsertControl() = oShape
|
|
End Function
|
|
|
|
|
|
Function ArrangeControls()
|
|
Dim oShape as Object
|
|
Dim i as Integer
|
|
oProgressbar = oDocument.GetCurrentController.GetFrame.CreateStatusIndicator
|
|
oProgressbar.Start("", MaxIndex)
|
|
If oDBForm.HasbyName("Grid1") Then
|
|
RemoveShapes()
|
|
End If
|
|
ToggleLayoutPage(False)
|
|
Select Case CurArrangement
|
|
Case cTabled
|
|
PositionGridControl(MaxIndex)
|
|
Case Else
|
|
PositionControls(MaxIndex)
|
|
End Select
|
|
ToggleLayoutPage(True)
|
|
oProgressbar.End
|
|
End Function
|
|
|
|
|
|
Sub OpenFormDocument()
|
|
Dim NoArgs() as new com.sun.star.beans.PropertyValue
|
|
Dim oViewSettings as Object
|
|
oDocument = CreateNewDocument("swriter")
|
|
oProgressbar = oDocument.GetCurrentController.GetFrame.CreateStatusIndicator()
|
|
oProgressbar.Start("", 100)
|
|
oDocument.ApplyFormDesignMode = False
|
|
oController = oDocument.GetCurrentController
|
|
oViewSettings = oDocument.CurrentController.ViewSettings
|
|
oViewSettings.ShowTableBoundaries = False
|
|
oViewSettings.ShowOnlineLayout = True
|
|
oDrawPage = oDocument.DrawPage
|
|
oPageStyle = oDocument.StyleFamilies.GetByName("PageStyles").GetByName("Standard")
|
|
End Sub
|
|
|
|
|
|
Sub InitializeLabelValues()
|
|
Dim oLabelModel as Object
|
|
Dim oTBModel as Object
|
|
Dim oLabelShape as Object
|
|
Dim oTBShape as Object
|
|
Dim aTBSize As New com.sun.star.awt.Size
|
|
Dim aLabelSize As New com.sun.star.awt.Size
|
|
Dim aPoint As New com.sun.star.awt.Point
|
|
Dim aSize As New com.sun.star.awt.Size
|
|
Dim oLocControl as Object
|
|
Dim oLocPeer as Object
|
|
oLabelModel = CreateUnoService("com.sun.star.form.component.FixedText")
|
|
oTBModel = CreateUnoService("com.sun.star.form.component.TextField")
|
|
|
|
Set oLabelShape = InsertControl(oDrawPage, oLabelModel, aPoint, aLabelSize)
|
|
Set oTBShape = InsertControl(oDrawPage, oTBModel, aPoint, aSize)
|
|
|
|
oLocPeer = oController.GetControl(oLabelModel).Peer
|
|
XPixelFactor = 100000/oLocPeer.GetInfo.PixelPerMeterX
|
|
YPixelFactor = 100000/oLocPeer.GetInfo.PixelPerMeterY
|
|
aLabelSize = GetPeerSize(oLabelModel, oLocControl, "The quick brown fox...")
|
|
nTCHeight = (aLabelSize.Height+1) * YPixelFactor
|
|
aTBSize = GetPeerSize(oTBModel, oLocControl, "The quick brown fox...")
|
|
nDBRefHeight = (aTBSize.Height+1) * YPixelFactor
|
|
BasicLabelDiffHeight = Clng((nDBRefHeight - nTCHeight)/2)
|
|
oDrawPage.Remove(oLabelShape)
|
|
oDrawPage.Remove(oTBShape)
|
|
End Sub
|
|
|
|
|
|
Sub ConfigurePageStyle()
|
|
Dim aPageSize As New com.sun.star.awt.Size
|
|
Dim aSize As New com.sun.star.awt.Size
|
|
oPageStyle.IsLandscape = True
|
|
aPageSize = oPageStyle.Size
|
|
nPageWidth = aPageSize.Width
|
|
nPageHeight = aPageSize.Height
|
|
aSize.Width = nPageHeight
|
|
aSize.Height = nPageWidth
|
|
oPageStyle.Size = aSize
|
|
nPageWidth = nPageHeight
|
|
nPageHeight = oPageStyle.Size.Height
|
|
nFormWidth = nPageWidth - oPageStyle.RightMargin - oPageStyle.LeftMargin - 2 * cXOffset
|
|
nFormHeight = nPageHeight - oPageStyle.TopMargin - oPageStyle.BottomMargin - 2 * cYOffset - cSymbolMargin
|
|
End Sub
|
|
|
|
|
|
' Modify the Borders of the Controls
|
|
Sub ChangeBorderLayouts(oEvent as Object)
|
|
Dim oModel as Object
|
|
Dim i as Integer
|
|
Dim oCurModel as Object
|
|
Dim sLocText as String
|
|
Dim oGroupShape as Object
|
|
Dim s as Integer
|
|
If Not bDebug Then
|
|
On Local Error GoTo WIZARDERROR
|
|
End If
|
|
oModel = oEvent.Source.Model
|
|
SwitchBorderMode(Val(Right(oModel.Name,1)))
|
|
ToggleLayoutPage(False)
|
|
If CurArrangement = cTabled Then
|
|
oGridModel.Border = CurBorderType
|
|
Else
|
|
If OldBorderType <> CurBorderType Then
|
|
For i = 0 To MaxIndex
|
|
If oDBShapeList(i).SupportsService("com.sun.star.drawing.GroupShape") Then
|
|
oGroupShape = oDBShapeList(i)
|
|
For s = 0 To oGroupShape.Count-1
|
|
oGroupShape(s).Control.Border = CurBorderType
|
|
Next s
|
|
Else
|
|
If oDBModelList(i).PropertySetInfo.HasPropertyByName("Border") Then
|
|
oDBModelList(i).Border = CurBorderType
|
|
End If
|
|
End If
|
|
Next i
|
|
End If
|
|
End If
|
|
ToggleLayoutPage(True)
|
|
WIZARDERROR:
|
|
If Err <> 0 Then
|
|
Msgbox(sMsgErrMsg, 16, GetProductName())
|
|
Resume LOCERROR
|
|
LOCERROR:
|
|
DlgFormDB.Dispose()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Sub ChangeLabelAlignments(oEvent as Object)
|
|
Dim i as Integer
|
|
Dim oSize as New com.sun.star.awt.Size
|
|
Dim oModel as Object
|
|
If Not bDebug Then
|
|
On Local Error GoTo WIZARDERROR
|
|
End If
|
|
oModel = oEvent.Source.Model
|
|
SwitchAlignMode(Val(Right(oModel.Name,1)))
|
|
ToggleLayoutPage(False)
|
|
If OldAlignMode <> CurAlignMode Then
|
|
For i = 0 To MaxIndex
|
|
oTCShapeList(i).GetControl.Align = CurAlignmode
|
|
Next i
|
|
End If
|
|
If CurAlignmode = com.sun.star.awt.TextAlign.RIGHT Then
|
|
For i = 0 To Ubound(oTCShapeList())
|
|
oSize = oTCShapeList(i).Size
|
|
oSize.Width = oDBShapeList(i).Position.X - oTCShapeList(i).Position.X - cHoriDistance
|
|
oTCShapeList(i).Size = oSize
|
|
Next i
|
|
End If
|
|
|
|
WIZARDERROR:
|
|
If Err <> 0 Then
|
|
Msgbox(sMsgErrMsg, 16, GetProductName())
|
|
Resume LOCERROR
|
|
LOCERROR:
|
|
End If
|
|
ToggleLayoutPage(True)
|
|
End Sub
|
|
|
|
|
|
Sub ChangeArrangemode(oEvent as Object)
|
|
Dim oModel as Object
|
|
If Not bDebug Then
|
|
On Local Error GoTo WIZARDERROR
|
|
End If
|
|
oModel = oEvent.Source.Model
|
|
SwitchArrangementButtons(Val(Right(oModel.Name,1)))
|
|
oModel.State = 1
|
|
DlgFormDB.GetControl("cmdArrange" & OldArrangement).Model.State = 0
|
|
If CurArrangement <> OldArrangement Then
|
|
ArrangeControls()
|
|
Select Case CurArrangement
|
|
Case cTabled
|
|
ToggleBorderGroup(False)
|
|
ToggleAlignGroup(False)
|
|
Case Else ' cColumnarTop,cLeftJustified, cTopJustified
|
|
ToggleAlignGroup(CurArrangement = cColumnarLeft)
|
|
If CurArrangement = cColumnarTop Then
|
|
If CurAlignMode = com.sun.star.awt.TextAlign.RIGHT Then
|
|
DialogModel.optAlign0.State = 1
|
|
CurAlignMode = com.sun.star.awt.TextAlign.LEFT
|
|
OldAlignMode = com.sun.star.awt.TextAlign.RIGHT
|
|
End If
|
|
End If
|
|
ControlCaptionstoStandardLayout()
|
|
oDBForm.Load
|
|
End Select
|
|
End If
|
|
WIZARDERROR:
|
|
If Err <> 0 Then
|
|
Msgbox(sMsgErrMsg, 16, GetProductName())
|
|
Resume LOCERROR
|
|
LOCERROR:
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Sub ToggleBorderGroup(bDoEnable as Boolean)
|
|
With DialogModel
|
|
.hlnBorderLayout.Enabled = bDoEnable
|
|
.optBorder0.Enabled = bDoEnable ' 0: No border
|
|
.optBorder1.Enabled = bDoEnable ' 1: 3D border
|
|
.optBorder2.Enabled = bDoEnable ' 2: simple border
|
|
End With
|
|
End Sub
|
|
|
|
|
|
Sub ToggleAlignGroup(ByVal bDoEnable as Boolean)
|
|
With DialogModel
|
|
If bDoEnable Then
|
|
bDoEnable = CurArrangement = cColumnarLeft
|
|
End If
|
|
.hlnAlign.Enabled = bDoEnable
|
|
.optAlign0.Enabled = bDoEnable
|
|
.optAlign2.Enabled = bDoEnable
|
|
End With
|
|
End Sub
|
|
|
|
|
|
Sub ToggleLayoutPage(bDoEnable as Boolean, Optional FocusControlName as String)
|
|
DialogModel.Enabled = bDoEnable
|
|
If bDoEnable Then
|
|
If Not bDebug Then
|
|
oDocument.UnlockControllers()
|
|
End If
|
|
ToggleOptionButtons(DialogModel,(bWithBackGraphic = True))
|
|
ToggleAlignGroup(bDoEnable)
|
|
ToggleBorderGroup(bDoEnable)
|
|
Else
|
|
If Not bDebug Then
|
|
oDocument.LockControllers()
|
|
End If
|
|
End If
|
|
If Not IsMissing(FocusControlName) Then
|
|
DlgFormDB.GetControl(FocusControlName).SetFocus()
|
|
End If
|
|
End Sub
|
|
|
|
|
|
Sub DestroyControlShapes(oDrawPage as Object)
|
|
Dim i as Integer
|
|
Dim oShape as Object
|
|
For i = oDrawPage.Count-1 To 0 Step -1
|
|
oShape = oDrawPage.GetByIndex(i)
|
|
If oShape.ShapeType = "com.sun.star.drawing.ControlShape" Then
|
|
oShape.Dispose()
|
|
End If
|
|
Next i
|
|
End Sub
|
|
|
|
|
|
Sub SwitchArrangementButtons(ByVal LocArrangement as Integer)
|
|
OldArrangement = CurArrangement
|
|
CurArrangement = LocArrangement
|
|
If OldArrangement <> 0 Then
|
|
DlgFormDB.GetControl("cmdArrange" & OldArrangement).Model.State = 0
|
|
End If
|
|
DlgFormDB.GetControl("cmdArrange" & CurArrangement).Model.State = 1
|
|
End Sub
|
|
|
|
|
|
Sub SwitchBorderMode(ByVal LocBorderType as Integer)
|
|
OldBorderType = CurBorderType
|
|
CurBorderType = LocBorderType
|
|
End Sub
|
|
|
|
|
|
Sub SwitchAlignMode(ByVal LocAlignMode as Integer)
|
|
OldAlignMode = CurAlignMode
|
|
CurAlignMode = LocAlignMode
|
|
End Sub</script:module> |