| <?xml version="1.0" encoding="UTF-8"?> |
| <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> |
| <!--*********************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| ***********************************************************--> |
| <script:module xmlns:script="http://openoffice.org/2000/script" script:name="FormWizard" script:language="StarBasic">Option Explicit |
| |
| Public DocumentName as String |
| Public FormPath as String |
| Public WizardPath as String |
| Public WebWizardPath as String |
| Public WorkPath as String |
| Public TempPath as String |
| Public TexturePath as String |
| Public sQueryName as String |
| Public oDBConnection as Object |
| Public bWithBackGraphic as Boolean |
| Public bNeedFieldRefresh as Boolean |
| Public oDBForm as Object |
| Public oColumns() as Object |
| Public sDatabaseList() as String |
| Public TableNames() as String |
| Public QueryNames() as String |
| Public FieldNames() as String |
| Public ImgFieldNames() as String |
| Public oDBContext as Object |
| Public oUcb as Object |
| Public oDocInfo as Object |
| Public WidthList(15,3) |
| Public ImgWidthList(3,3) |
| Public sDBName as String |
| Public Tablename as String |
| Public Const SBSIZETEXT = "The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog." |
| Public bDisposeDoc as Boolean |
| Public bDebug as Boolean |
| 'Public bStartUp as Boolean |
| Public bConnectionIsovergiven as Boolean |
| Public FormName As String |
| Public sFormUrl as String |
| Public oFormDocuments |
| |
| |
| ' The macro can be called in 4 possible scenarios: |
| ' Scenario 1. No parameters at given |
| ' Scenario 2: Only Datasourcename is given, but no connection and no Content |
| ' Scenario 3: a data source and a connection are given |
| ' Scenario 4: all parameters (data source name, connection, object type and object) are given |
| |
| Sub Main() |
| Dim oLocDBContext as Object |
| Dim oLocConnection as Object |
| |
| ' Scenario 1. No parameters at given |
| MainWithDefault() |
| |
| ' Scenario 2: Only Datasourcename is given, but no connection and no Content |
| ' MainWithDefault("Bibliography") |
| |
| ' Scenario 3: a data source and a connection are given |
| ' oLocDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") |
| ' oLocConnection = oLocDBContext.GetByName("Bibliography").GetConnection("","") |
| ' MainWithDefault("Bibliography", oLocConnection) |
| |
| ' Scenario 4: all parameters (data source name, connection, object type and object) are given |
| ' oLocDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") |
| ' oLocConnection = oLocDBContext.GetByName("Bibliography").GetConnection("","") |
| ' MainWithDefault("Bibliography", oLocConnection, com.sun.star.sdb.CommandType.TABLE, "biblio") |
| End Sub |
| |
| |
| Sub MainWithDefault(Optional DatasourceName as String, Optional oConnection as Object, Optional CommandType as Integer, Optional sContent as String) |
| Dim i as Integer |
| Dim SelCount as Integer |
| Dim RetValue as Integer |
| Dim SelList(0) as Integer |
| Dim LocList() as String |
| SelList(0) = 0 |
| BasicLibraries.LoadLibrary("Tools") |
| BasicLibraries.LoadLibrary("WebWizard") |
| bDebug = False |
| If Not bDebug Then |
| On Local Error GoTo WIZARDERROR |
| End If |
| OpenFormDocument() |
| CurArrangement = 0 |
| bControlsareCreated = False |
| bEnableBinaryOptionGroup = False |
| bDisposeDoc = True |
| MaxIndex = -1 |
| If Not InitResources("Formwizard","dbw") Then |
| Exit Sub |
| End If |
| oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext") |
| oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess") |
| If GetFormWizardPaths() = False Then |
| Exit Sub |
| End If |
| oDocument.GetCurrentController().Frame.ComponentWindow.Enable = False |
| oProgressBar.Value = 10 |
| LoadLanguage() |
| oProgressBar.Value = 20 |
| InitializeWidthList() |
| oProgressBar.Value = 30 |
| Styles() = getListBoxArrays(oUcb, "/stl") |
| CurIndex = GetCurIndex(DialogModel, Styles(), 2) |
| oProgressBar.Value = 40 |
| ConfigurePageStyle() |
| oProgressBar.Value = 50 |
| InitializeLabelValues() |
| bNeedFieldRefresh = True |
| SetDialogLanguage() |
| ' bStartUp = true |
| With DialogModel |
| .cmdBack.Enabled = False |
| .cmdGoOn.Enabled = False |
| .lblTables.Enabled = False |
| .lstSelFields.Tag = False |
| .Step = 1 |
| End With |
| oProgressBar.Value = 60 |
| bConnectionIsovergiven = Not IsMissing(oConnection) |
| If Not IsMissing(DataSourceName) Then |
| sDBName = DataSourceName |
| If Not IsMissing(oConnection) Then |
| ' Scenario 3: a data source and a connection are given |
| Set oDBConnection = oConnection |
| oDataSource = oDBContext.GetByName(DataSourceName) |
| DialogModel.lstTables.Enabled = True |
| DialogModel.lblTables.Enabled = True |
| If GetDBMetaData() Then |
| LocList() = AddListToList(TableNames(), QueryNames()) |
| iCommandTypes = CreateCommandTypeList() |
| If Not IsMissing(sContent) Then |
| ' Scenario 4: all parameters (data source name, connection, object type and object) are given |
| DialogModel.lstTables.StringItemList() = LocList() |
| iCommandTypes() = CreateCommandTypeList() |
| SelCount = CountItemsInArray(DialogModel.lstTables.StringItemList(), sContent) |
| If SelCount = 1 Then |
| DlgFormDB.GetControl("lstTables").SelectItem(sContent, True) |
| Else |
| If CommandType = com.sun.star.sdb.CommandType.QUERY Then |
| SelIndex = IndexInArray(sContent, QueryNames() |
| DlgFormDB.GetControl("lstTables").SelectItemPos(SelIndex, True) |
| ElseIf CommandType = com.sun.star.sdb.CommandType.TABLE Then |
| SelIndex = IndexInArray(sContent, TableNames() |
| DlgFormDB.GetControl("lstTables").SelectItemPos(Ubound(QueryNames()+1 + SelIndex, True) |
| End If |
| End If |
| CurCommandType = CommandType |
| FillUpFieldsListbox(False) |
| Else |
| LocList() = AddListToList(Array(sSelectDBTable), LocList()) |
| DialogModel.lstTables.StringItemList() = LocList() |
| ' bSelectContent = True |
| DialogModel.lstTables.SelectedItems() = Array(0) |
| |
| End If |
| End If |
| Else |
| ' Scenario 2: Only Datasourcename is given, but no connection and no Content |
| GetSelectedDBMetaData(sDBName) |
| End If |
| Else |
| ' Scenario 1: No parameters are given |
| ToggleListboxControls(DialogModel, False) |
| End If |
| oProgressBar.Value = 80 |
| bWithBackGraphic = LoadNewStyles(oDocument, DialogModel, CurIndex, Styles(CurIndex, 8), Styles(), TexturePath) |
| DlgFormDB.Title = WizardTitle(1) |
| DialogModel.lstStyles.StringItemList() = ArrayfromMultiArray(Styles, 1) |
| DialogModel.lstStyles.SelectedItems() = SelList() |
| ControlCaptionsToStandardLayout() |
| oDocument.GetCurrentController().Frame.ComponentWindow.Enable = True |
| oProgressBar.Value = 90 |
| DialogModel.imgTheme.ImageURL = FormPath & "FormWizard_1.bmp" |
| DialogModel.imgTheme.BackGroundColor = RGB(0,60,126) |
| ToggleDatabasePage(True) |
| oProgressBar.Value = 100 |
| DlgFormDB.GetControl("lstTables").SetFocus() |
| oProgressbar.End |
| RetValue = DlgFormDB.Execute() |
| DlgFormDB.Dispose() |
| If bDisposeDoc Then |
| Dim aPropertyValues(2) as new com.sun.star.beans.PropertyValue |
| oFormDocuments = oDataSource.getFormDocuments() |
| DlgFormDB.Dispose() |
| oDocument.dispose() |
| Dim bLinkExists as Boolean |
| i = 1 |
| Dim FormBaseName as String |
| FormBaseName = FormName |
| Do |
| bLinkExists = oFormDocuments.HasbyHierarchicalName(FormName) |
| If bLinkExists Then |
| i = i + 1 |
| FormName = FormBaseName & "_" & i |
| End If |
| Loop Until Not bLinkExists |
| aPropertyValues(0).Name = "Name" |
| aPropertyValues(0).Value = FormName |
| aPropertyValues(1).Name = "Parent" |
| aPropertyValues(1).Value = oFormDocuments() |
| aPropertyValues(2).Name = "URL" |
| aPropertyValues(2).Value = sFormUrl |
| Dim oDBDocument |
| oDBDocument = oFormDocuments.createInstanceWithArguments("com.sun.star.sdb.DocumentDefinition", aPropertyValues()) |
| oFormDocuments.insertbyName(FormName, oDBDocument) |
| ElseIf RetValue = 0 Then |
| RemoveNirwanaShapes() |
| End If |
| If ((Not IsNull(oDBConnection)) And (Not bConnectionIsovergiven)) Then |
| oDBConnection.Dispose() |
| End If |
| WIZARDERROR: |
| If Err <> 0 Then |
| Msgbox(sMsgErrMsg, 16, GetProductName()) |
| Resume LOCERROR |
| LOCERROR: |
| End If |
| End Sub |
| |
| |
| Sub FormGetFields() |
| Dim i as Integer |
| ' If bSelectContent Then |
| ' bSelectContent = False |
| ' Exit Sub |
| ' End If |
| DeleteFirstListBoxEntry("lstTables", sSelectDBTable) |
| ToggleDatabasePage(False) |
| FillUpFieldsListbox(True) |
| ToggleDatabasePage(True) |
| End Sub |
| |
| |
| Sub FillUpFieldsListbox(bGetCommandType as Boolean) |
| Dim SelIndex as Integer |
| Dim QueryIndex as Integer |
| If Not bDebug Then |
| On Local Error GoTo NOFIELDS |
| End If |
| SelIndex = DlgFormDB.GetControl("lstTables").getSelectedItemPos() '.SelectedItems()) |
| If SelIndex > -1 Then |
| If bGetCommandType Then |
| CurCommandType = iCommandTypes(SelIndex) |
| End If |
| If CurCommandType = com.sun.star.sdb.CommandType.QUERY Then |
| QueryIndex = SelIndex - Ubound(Tablenames()) - 1 |
| Tablename = QueryNames(QueryIndex) |
| oColumns = oDBConnection.Queries.GetByName(TableName).Columns |
| Else |
| Tablename = Tablenames(SelIndex) |
| oColumns = oDBConnection.Tables.GetByName(Tablename).Columns |
| End If |
| If GetSpecificFieldNames() <> -1 Then |
| ToggleListboxControls(DialogModel, True) |
| Exit Sub |
| End If |
| End If |
| EmptyFieldsListboxes() |
| NOFIELDS: |
| If Err <> 0 Then |
| MsgBox sMsgErrCouldNotOpenObject, 16, sMsgWizardName |
| End If |
| End Sub |
| |
| |
| Sub PreviousStep() |
| If Not bDebug Then |
| On Local Error GoTo WIZARDERROR |
| End If |
| With DialogModel |
| .Step = 1 |
| .cmdBack.Enabled = False |
| .cmdGoOn.Enabled = True |
| .lstSelFields.Tag = Not bControlsareCreated |
| .cmdGoOn.Label = sGoOn |
| .imgTheme.ImageUrl = FormPath & "FormWizard_1.bmp" |
| End With |
| FormSetMoveRights() |
| WIZARDERROR: |
| If Err <> 0 Then |
| Msgbox(sMsgErrMsg, 16, GetProductName()) |
| Resume LOCERROR |
| LOCERROR: |
| End If |
| End Sub |
| |
| |
| Sub NextStep() |
| If Not bDebug Then |
| On Local Error GoTo WIZARDERROR |
| End If |
| Select Case DialogModel.Step |
| Case 1 |
| bControlsAreCreated = Not (cBool(DialogModel.lstSelFields.Tag)) |
| If Not bControlsAreCreated Then |
| GetTableMetaData() |
| CreateDBForm() |
| RemoveShapes() |
| InitializeLayoutSettings() |
| oDBForm.Load |
| End If |
| DialogModel.cmdGoOn.Label = sReady |
| DialogModel.cmdBack.Enabled = True |
| DialogModel.Step = 2 |
| bDisposeDoc = False |
| Case 2 |
| StoreForm() |
| DlgFormDB.EndExecute() |
| exit Sub |
| End Select |
| DialogModel.imgTheme.ImageUrl = FormPath & "FormWizard_" & DialogModel.Step & ".bmp" |
| DlgFormDB.Title = WizardTitle(DialogModel.Step) |
| WIZARDERROR: |
| If Err <> 0 Then |
| Msgbox(sMsgErrMsg, 16, GetProductName()) |
| Resume LOCERROR |
| LOCERROR: |
| End If |
| End Sub |
| |
| |
| Sub InitializeLayoutSettings() |
| SwitchArrangementButtons(cTabled) |
| SwitchAlignMode(SBALIGNLEFT) |
| SwitchBorderMode(SB3DBORDER) |
| ToggleBorderGroup(bControlsAreCreated) |
| ToggleAlignGroup(bControlsAreCreated) |
| ArrangeControls() |
| If OldAlignMode <> 0 Then |
| DlgFormDB.GetControl("optAlign2").Model.State = 0 |
| End If |
| End Sub |
| |
| |
| Sub ToggleDatabasePage(bDoEnable as Boolean) |
| With DialogModel |
| .cmdBack.Enabled = False |
| .cmdHelp.Enabled = bDoEnable |
| .cmdGoOn.Enabled = Ubound(DialogModel.lstSelFields.StringItemList()) <> -1 |
| .hlnBinaries.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True)) |
| .optIgnoreBinaries.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True)) |
| .optBinariesasGraphics.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True)) |
| End With |
| End Sub |
| |
| |
| ' This Sub is called from the Procedure "StoreDocument" in the "Tools" Library |
| Sub CommitLastDocumentChanges(sTargetPath as String) |
| Dim i as Integer |
| Dim sBookmarkName as String |
| Dim oDBBookmarks as Object |
| Dim bLinkExists as Boolean |
| Dim sBaseBookmarkName as String |
| sBookmarkName = GetFileNamewithoutExtension(FileNameoutofPath(sTargetPath)) |
| sBaseBookmarkName = sBookmarkName |
| oDBBookmarks = oDataSource.GetBookmarks() |
| i = 1 |
| Do |
| bLinkExists = oDBBookmarks.HasbyName(sBookmarkName) |
| If bLinkExists Then |
| i = i + 1 |
| sBookmarkName = sBaseBookmarkName & "_" & i |
| Else |
| oDBBookmarks.insertByName(sBookmarkName, sTargetPath) |
| End If |
| Loop Until Not bLinkExists |
| bDisposeDoc = False |
| GroupShapesTogether() |
| ToggleDesignMode(oDocument) |
| oDBForm.Reload() |
| End Sub |
| |
| |
| Sub StoreFormInDatabase() |
| Dim NoArgs() as new com.sun.star.beans.PropertyValue |
| FormName = "Form_" & sDBName & "_" & TableName & ".sxw" |
| sFormUrl = TempPath & "/" & FormName |
| oDocument.StoreAsUrl(sFormUrl, NoArgs()) |
| bdisposeDoc = true |
| DlgFormDB.Endexecute() |
| End Sub |
| |
| |
| |
| Sub StoreForm() |
| Dim sTargetPath as String |
| Dim TypeNames(0,2) as String |
| Dim oMasterKey as Object |
| Dim oTypes() as Object |
| oMasterKey = GetRegistryKeyContent("org.openoffice.TypeDetection.Types/") |
| oTypes() = oMasterKey.Types |
| TypeNames(0,0) = GetFilterName("StarOffice XML (Writer)") |
| TypeNames(0,1) = "*.sxw" |
| TypeNames(0,2) = "" |
| StoreFormInDatabase() |
| ' sTargetPath = StoreDocument(oDocument, TypeNames(), "Form_" & sDBName & "_" & TableName & ".sxw", WorkPath, 1) |
| End Sub |
| |
| |
| |
| Sub EmptyFieldsListboxes() |
| Dim NullList() as String |
| ToggleListboxControls(DialogModel, False) |
| DialogModel.lstFields.StringItemList() = NullList() |
| DialogModel.lstSelFields.StringItemList() = NullList() |
| bEnableBinaryOptionGroup = False |
| End Sub |
| |
| |
| Sub DeleteFirstTableListBoxEntry() |
| DeleteFirstListBoxEntry("lstTables", sSelectDBTable) |
| End Sub |
| |
| Sub DeleteFirstListboxEntry(ListBoxName as String, DelEntryName as String) |
| Dim oListbox as Object |
| Dim sFirstItem as String |
| dim iSelPos as Integer |
| oListBox = DlgFormDB.getControl(ListBoxName) |
| sFirstItem = oListBox.getItem(0) |
| If sFirstItem = DelEntryName Then |
| iSelPos = oListBox.getSelectedItemPos() |
| oListBox.removeItems(0, 1) |
| If iSelPos > 0 Then |
| oListBox.selectItemPos(iSelPos-1, True) |
| End If |
| End If |
| End Sub |
| </script:module> |