home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 March / PCWorld_2003-03_cd.bin / Software / Vyzkuste / openoffice / f_0146 / FormWizard.xba < prev    next >
Extensible Markup Language  |  2002-02-19  |  12KB  |  354 lines

  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="FormWizard" script:language="StarBasic">Option Explicit
  4.  
  5. Public DocumentName as String
  6. Public FormPath as String
  7. Public WizardPath as String
  8. Public WebWizardPath as String
  9. Public WorkPath as String
  10. Public TexturePath as String
  11. Public sQueryName as String
  12. Public NumberofStyles as Integer
  13. Public oDBConnection as Object
  14. Public bWithBackGraphic as Boolean
  15. Public bNeedFieldRefresh as Boolean
  16. Public oDBForm as Object
  17. Public oColumns() as Object
  18. Public sDatabaseList()
  19. Public TableNames() as String
  20. Public QueryNames() as String
  21. Public FieldNames() as String
  22. Public ImgFieldNames() as String
  23. Public oDBContext as Object
  24. Public oUcb as Object
  25. Public oDocInfo as Object
  26. Public WidthList(15,3)
  27. Public ImgWidthList(3,3)
  28. Public sDBName as String
  29. Public Tablename as String
  30. Public Const SBSIZETEXT = "The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog."
  31. Public bDisposeDoc as Boolean
  32. Public bDebug as Boolean
  33.  
  34. ' The macro can be called in 4 possible scenarios:
  35. ' Scenario 1. No parameters at given
  36. ' Scenario 2: Only Datasourcename is given, but no connection and no Content
  37. ' Scenario 3: a data source and a connection are given
  38. ' Scenario 4: all parameters (data source name, connection, object type and object) are given
  39.  
  40. Sub Main()
  41. Dim oLocDBContext as Object
  42. Dim oLocConnection as Object
  43.  
  44. ' Scenario 1. No parameters at given
  45.     MainWithDefault()
  46.  
  47. ' Scenario 2: Only Datasourcename is given, but no connection and no Content
  48. '    MainWithDefault("Bibliography")
  49.  
  50. ' Scenario 3: a data source and a connection are given
  51. '    oLocDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
  52. '    oLocConnection = oLocDBContext.GetByName("Bibliography").GetConnection("","")
  53. '    MainWithDefault("Bibliography", oLocConnection)
  54.  
  55. ' Scenario 4: all parameters (data source name, connection, object type and object) are given
  56. '    oLocDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
  57. '    oLocConnection = oLocDBContext.GetByName("Bibliography").GetConnection("","")
  58. '    MainWithDefault("Bibliography", oLocConnection, com.sun.star.sdb.CommandType.TABLE, "biblio")
  59. End Sub
  60.  
  61.  
  62. Sub MainWithDefault(Optional DatasourceName as String, Optional oConnection as Object, Optional CommandType as Integer, Optional sContent as String)
  63. Dim i as Integer
  64. Dim SelCount as Integer
  65. Dim RetValue as Integer
  66.     BasicLibraries.LoadLibrary("Tools")
  67.     BasicLibraries.LoadLibrary("WebWizard")
  68.     bDebug = False
  69.     If Not bDebug Then
  70.         On Local Error GoTo WIZARDERROR
  71.     End If
  72.     OpenFormDocument()
  73.     CurArrangement = 0
  74.     bControlsareCreated = False
  75.     bEnableBinaryOptionGroup = False
  76.     bDisposeDoc = True
  77.     MaxIndex = -1
  78.     If Not InitResources("Formwizard","dbw") Then
  79.         Exit Sub
  80.     End If
  81.     oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
  82.     oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  83.     FormPath = GetOfficeSubPath("Template","wizard/bitmap")
  84.     WebWizardPath = GetOfficeSubPath("Template","wizard/web")
  85.     WizardPath = GetOfficeSubPath("Template","wizard/")
  86.     TexturePath = GetOfficeSubPath("Gallery", "www-back/")
  87.     WorkPath = GetPathSettings("Work")
  88.     oDocument.GetCurrentController().Frame.ComponentWindow.Enable = False
  89.     oProgressBar.Value = 5
  90.     GetDatabaseNames()
  91.     oProgressBar.Value = 10
  92.     InitializeWidthList()
  93.     oProgressBar.Value = 20
  94.     LoadLanguage
  95.     InitializeLabelValues()
  96.     oProgressBar.Value = 30
  97.     bNeedFieldRefresh = True
  98.     With oDialogModel
  99.         .cmdBack.Enabled = False
  100.         .cmdGoOn.Enabled = False
  101.         .lblTables.Enabled = False
  102.         .lstSelFields.Tag = False
  103.         .Step = 1
  104.         .lstDatabases.StringItemList()= sDatabaseList()' = AddItem(sDatabaseList(i)
  105.     End With
  106.     If Not IsMissing(DataSourceName) Then
  107.         sDBName = DataSourceName
  108.         DlgFormDB.GetControl("lstDatabases").SelectItem(DataSourceName, True)
  109.         If Not IsMissing(oConnection) Then
  110.             ' Scenario 3: a data source and a connection are given
  111.             Set oDBConnection = oConnection
  112.             oDataSource = oDBContext.GetByName(DataSourceName)
  113.             oDialogModel.lstTables.Enabled = True
  114.             oDialogModel.lblTables.Enabled = True
  115.             If GetDBMetaData() Then
  116.                 oDialogModel.lstTables.StringItemList() = AddListToList(TableNames(), QueryNames())
  117.                 iCommandTypes = CreateCommandTypeList()
  118.                 If Not IsMissing(sContent) Then
  119.                     ' Scenario 4: all parameters (data source name, connection, object type and object) are given
  120.                     iCommandTypes() = CreateCommandTypeList()
  121.                     SelCount = CountItemsInArray(oDialogModel.lstTables.StringItemList(), sContent)
  122.                     If SelCount = 1 Then
  123.                         DlgFormDB.GetControl("lstTables").SelectItem(sContent, True)
  124.                     Else
  125.                         If CommandType = com.sun.star.sdb.CommandType.QUERY Then
  126.                             SelIndex = IndexInArray(sContent, QueryNames()
  127.                             DlgFormDB.GetControl("lstTables").SelectItemPos(SelIndex, True)
  128.                         ElseIf CommandType = com.sun.star.sdb.CommandType.TABLE Then
  129.                             SelIndex = IndexInArray(sContent, TableNames()
  130.                             DlgFormDB.GetControl("lstTables").SelectItemPos(Ubound(QueryNames()+1 + SelIndex, True)        
  131.                         End If
  132.                     End If
  133.                     CurCommandType = CommandType
  134.                     FillUpFieldsListbox(False)
  135.                 End If
  136.             End If
  137.         Else
  138.             ' Scenario 2: Only Datasourcename is given, but no connection and no Content
  139.             GetSelectedDBMetaData()
  140.         End If
  141.     Else
  142.         ' Scenario 1: No parameters are given
  143.         ToggleListboxControls(oDialogModel, False)
  144.     End If
  145.     oProgressBar.Value = 50
  146.     DlgFormDB.Title = WizardTitle(1)
  147.     NumberofStyles = FillupWebListbox(oUcb, "/stl", DlgFormDB, "lstStyles", Styles())
  148.     oProgressBar.Value = 60
  149.     CurIndex = GetCurIndex(oDialogModel.lstStyles, Styles(), NumberofStyles,8)
  150.     SetImportStyle()
  151.     oProgressBar.Value = 70
  152.     ConfigurePageStyle()
  153.     oProgressBar.Value = 80
  154.     oDocument.GetCurrentController().Frame.ComponentWindow.Enable = True
  155.     oProgressBar.Value = 90
  156.     oDialogModel.imgTheme.ImageURL = FormPath & "FormWizard_1.bmp"
  157.     ToggleDatabasePage(True)
  158.     oProgressBar.Value = 100
  159.     DlgFormDB.GetControl("lstDatabases").SetFocus()
  160.     oProgressbar.End
  161.     RetValue = DlgFormDB.Execute()
  162.     DlgFormDB.Dispose()
  163.     If Not IsNull(oDBConnection) Then
  164.         oDBConnection.Dispose()
  165.     End If
  166.     If bDisposeDoc Then
  167.         oDocument.Dispose()
  168.     ElseIf RetValue = 0 Then
  169.         RemoveNirwanaShapes()
  170.     End If
  171. WIZARDERROR:
  172.     If Err <> 0 Then    
  173.         Msgbox(sMsgErrMsg, 16, GetProductName())
  174.         Resume LOCERROR
  175.         LOCERROR:        
  176.     End If
  177. End Sub
  178.  
  179.  
  180. Sub FormGetFields()
  181. Dim i as Integer
  182.     ToggleDatabasePage(False)
  183.     FillUpFieldsListbox(True)
  184.     ToggleDatabasePage(True)
  185. End Sub
  186.  
  187.  
  188. Sub FillUpFieldsListbox(bGetCommandType as Boolean)
  189. Dim n as Integer
  190. Dim SelIndex as Integer
  191. Dim QueryIndex as Integer
  192.     If Not bDebug Then
  193.         On Local Error GoTo NOFIELDS
  194.     End If
  195.     n = Ubound(oDialogModel.lstTables.SelectedItems())
  196.     If n > -1 Then
  197.         SelIndex = oDialogModel.lstTables.SelectedItems(0)
  198.         If bGetCommandType Then
  199.             CurCommandType = iCommandTypes(SelIndex)
  200.         End If
  201.         If CurCommandType = com.sun.star.sdb.CommandType.QUERY Then
  202.             QueryIndex = SelIndex - Ubound(Tablenames()) - 1
  203.             Tablename = QueryNames(QueryIndex)
  204.             oColumns = oDBConnection.Queries.GetByName(TableName).Columns
  205.         Else
  206.             Tablename = Tablenames(SelIndex)
  207.             oColumns = oDBConnection.Tables.GetByName(Tablename).Columns
  208.         End If
  209.         If GetSpecificFieldNames() <> -1 Then
  210.             ToggleListboxControls(oDialogModel, True)            
  211.         Else
  212.             EmptyFieldsListboxes()
  213.         End If
  214.     Else
  215.         EmptyFieldsListboxes()
  216.     End If
  217. NOFIELDS:
  218.     If Err <> 0 Then
  219.         MsgBox sMsgErrCouldNotOpenObject, 16, sMsgWizardName
  220.     End If
  221. End Sub
  222.  
  223.  
  224. Sub PreviousStep()
  225.     If Not bDebug Then
  226.         On Local Error GoTo WIZARDERROR
  227.     End If
  228.     With oDialogModel
  229.         .Step = 1
  230.         .cmdBack.Enabled = False
  231.         .cmdGoOn.Enabled = True
  232.         .lstSelFields.Tag = Not bControlsareCreated
  233.         .cmdGoOn.Label = sGoOn
  234.         .imgTheme.ImageUrl = FormPath & "FormWizard_1.bmp"
  235.     End With
  236.     FormSetMoveRights()
  237. WIZARDERROR:
  238.     If Err <> 0 Then    
  239.         Msgbox(sMsgErrMsg, 16, GetProductName())
  240.         Resume LOCERROR
  241.         LOCERROR:        
  242.     End If
  243. End Sub
  244.  
  245.  
  246. Sub NextStep()
  247.     If Not bDebug Then
  248.         On Local Error GoTo WIZARDERROR
  249.     End If
  250.     Select Case oDialogModel.Step
  251.         Case 1
  252.             bControlsAreCreated = Not (cBool(oDialogModel.lstSelFields.Tag))
  253.             If Not bControlsAreCreated Then
  254.                 GetTableMetaData()
  255.                 CreateDBForm()
  256.                 RemoveShapes()
  257.                 InitializeLayoutSettings()
  258.                 oDBForm.Load
  259.             End If
  260.             oDialogModel.cmdGoOn.Label = sReady
  261.             oDialogModel.cmdBack.Enabled = True
  262.             oDialogModel.Step = 2
  263.             bDisposeDoc = False
  264.         Case 2
  265.             StoreForm()
  266.     End Select
  267.     oDialogModel.imgTheme.ImageUrl = FormPath & "FormWizard_" & oDialogModel.Step & ".bmp"
  268.     DlgFormDB.Title = WizardTitle(oDialogModel.Step)
  269. WIZARDERROR:
  270.     If Err <> 0 Then
  271.         Msgbox(sMsgErrMsg, 16, GetProductName())
  272.         Resume LOCERROR
  273.         LOCERROR:        
  274.     End If
  275. End Sub
  276.  
  277.  
  278. Sub InitializeLayoutSettings()
  279.     SwitchArrangementButtons(cTabled)
  280.     SwitchAlignMode(SBALIGNLEFT)
  281.     SwitchBorderMode(SB3DBORDER)
  282.     ToggleBorderGroup(bControlsAreCreated)
  283.     ToggleAlignGroup(bControlsAreCreated)
  284.     ArrangeControls()
  285.     If OldAlignMode <> 0 Then
  286.         DlgFormDB.GetControl("optAlign2").Model.State = 0
  287.     End If
  288. End Sub
  289.  
  290.  
  291. Sub ToggleDatabasePage(bDoEnable as Boolean)
  292.     With oDialogModel
  293.         .cmdBack.Enabled = False
  294.         .cmdHelp.Enabled = bDoEnable
  295.         .cmdGoOn.Enabled = Ubound(oDialogModel.lstSelFields.StringItemList()) <> -1
  296.         .hlnBinaries.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True))
  297.         .optIgnoreBinaries.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True))
  298.         .optBinariesasGraphics.Enabled = ((bDoEnable = True) And (bEnableBinaryOptionGroup = True))
  299.     End With
  300. End Sub
  301.  
  302.  
  303. ' This Sub is called from the Procedure "StoreDocument" in the "Tools" Library
  304. Sub CommitLastDocumentChanges(sTargetPath as String)
  305. Dim i as Integer    
  306. Dim sBookmarkName as String
  307. Dim oDBBookmarks as Object        
  308. Dim bLinkExists as Boolean
  309. Dim sBaseBookmarkName as String
  310.     sBookmarkName = GetFileNamewithoutExtension(FileNameoutofPath(sTargetPath))
  311.     sBaseBookmarkName = sBookmarkName
  312.     oDBBookmarks = oDataSource.GetBookmarks()
  313.     i = 1
  314.     Do
  315.         bLinkExists = oDBBookmarks.HasbyName(sBookmarkName)
  316.         If bLinkExists Then
  317.             i = i + 1
  318.             sBookmarkName = sBaseBookmarkName & "_" & i
  319.         Else
  320.             oDBBookmarks.insertByName(sBookmarkName, sTargetPath)
  321.         End If
  322.     Loop Until Not bLinkExists
  323.     bDisposeDoc = False
  324.     GroupShapesTogether()
  325.     ToggleDesignMode(oDocument)
  326.     oDBForm.Reload()
  327. End Sub
  328.  
  329.  
  330. Sub StoreForm()
  331. Dim sTargetPath as String
  332. Dim TypeNames(0,2) as String
  333. Dim oMasterKey as Object
  334. Dim oTypes() as Object
  335.     oMasterKey = GetRegistryKeyContent("org.openoffice.Office.TypeDetection/")
  336.     oTypes() = oMasterKey.Types
  337.     TypeNames(0,0) = oTypes.GetByName("writer_StarOffice_XML_Writer").UIName
  338.     TypeNames(0,1) = "*.sxw"
  339.     TypeNames(0,2) = ""
  340.     sTargetPath = StoreDocument(oDocument, TypeNames(), "Form_" & sDBName & "_" & TableName & ".sxw", WorkPath, 1)
  341.     If sTargetPath <> "" Then
  342.         DlgFormDB.EndExecute()
  343.     End If
  344. End Sub
  345.  
  346.  
  347. Sub EmptyFieldsListboxes()
  348. Dim NullList() as String
  349.     ToggleListboxControls(oDialogModel, False)
  350.     oDialogModel.lstFields.StringItemList() = NullList()
  351.     oDialogModel.lstSelFields.StringItemList() = NullList()
  352.     bEnableBinaryOptionGroup = False
  353. End Sub
  354. </script:module>