home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 April / PCWorld_2003-04_cd.bin / Software / Komercni / openoffice / f_0217 / HtmlAutoPilotBasic.xba < prev    next >
Extensible Markup Language  |  2002-11-01  |  14KB  |  416 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="HtmlAutoPilotBasic" script:language="StarBasic">' Variables must be declared
  4. Option Explicit
  5.  
  6. Public CurDocIndex as Integer
  7. Public CurWebPageIndex as Integer
  8.  
  9.  
  10. Public bWithBackGraphic as Boolean
  11. Public oStyle as Object
  12. ' Maximum number of content templates, style templates and bullets
  13. Const MaxLayouts = 100
  14. Const MaxStyles = 100
  15. Const MaxBullets = 10
  16.  
  17. Public NumberOfLayouts%, NumberOfStyles%
  18.  
  19. ' Filled with title, previous, next, home, top, bullet, background, file name
  20. Public Style(8, MaxStyles) as String
  21.  
  22. Public Layout$(2, MaxLayouts)
  23.  
  24. Public TextureDir$, BulletDir$, GraphicsDir$, GalleryDir$, PhotosDir$
  25. Public CurrentBullet$, CurrentPrev$, CurrentNext$, CurrentHome$, CurrentTop$
  26. Public FileStr as String
  27.  
  28. Public WebWiz_gWizardName$, WebWiz_gErrContentNotFound$, WebWiz_gErrStyleNotFound$
  29. Public WebWiz_gErrMainTemplateError$, WebWiz_gErrWhileReloading$
  30. Public WebWiz_gErrWhileLoadStyles$, WebWiz_gErrMsg$, WebWiz_gErrMainDocumentError$
  31.  
  32. Public ProgressBar as Object
  33. Public ProgressValue As Long
  34. Public oBaseDocument as Object
  35. Public oViewCursor as Object
  36. Public oViewSettings as Object
  37. Public NoArgs as New com.sun.star.beans.PropertyValue
  38.  
  39. Public oCursor as Object
  40. Public oBookmarks as Object
  41. Public oBookMark as Object
  42.  
  43. Public oUcb as Object
  44. Public MainDialog as Object
  45. Public DialogModel as Object
  46.  
  47.  
  48. Sub Main
  49. Dim RetValue
  50. 'On Local Error Goto GlobalErrorHandler
  51.     Dim SOBitmapPath,sBitmapPath as String
  52.     BasicLibraries.LoadLibrary("Tools")
  53.     oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  54.     oBaseDocument = StarDesktop.LoadComponentFromURL("private:factory/swriter/web", "_blank", 0, NoArgs())
  55.     oViewSettings = oBaseDocument.CurrentController.ViewSettings
  56.     oViewCursor = oBaseDocument.GetCurrentController.ViewCursor
  57.     ProgressBar = oBaseDocument.GetCurrentController.GetFrame.CreateStatusIndicator
  58.     ProgressBar.Start("", 100)
  59.     SetProgressValue(2)
  60.     oBaseDocument.LockControllers
  61.     oViewSettings.ShowTableBoundaries = False
  62.     oViewSettings.ShowTextBoundaries = False
  63.     MainDialog = LoadDialog("WebWizard","WebWzrd")
  64.     DialogModel = MainDialog.Model
  65.     LoadLanguage
  66.     SetProgressValue(10)
  67.     GetPaths()
  68.     NumberofLayouts = FillupWebListbox(oUcb, "/cnt", MainDialog, "lbTemplate", Layout$())
  69.     SetProgressValue(30)
  70.     GetCurIndex(DialogModel.lbTemplate, Layout(),NumberofLayouts,2)
  71.     oCursor = oBasedocument.Text.CreateTextCursor
  72.     oCursor.InsertDocumentfromURL(FileStr, NoArgs())
  73.     SetProgressValue(40)
  74.     NumberofStyles = FillupWebListbox(oUcb, "/stl", MainDialog, "lbStyles", Style())
  75.     SetProgressValue(50)
  76.     LoadWebPageStyles(oBaseDocument)
  77.     SetProgressValue(98)
  78.     SetProgressValue(0)
  79.     oBaseDocument.UnlockControllers    
  80.     SOBitmapPath = GetOfficeSubPath("Template", "wizard/bitmap")
  81.     sBitmapPath = SOBitmapPath & "webwizard.bmp"
  82.     DialogModel.ImagePreview.ImageURL = sBitmapPath
  83.     ToggleOptionButtons(DialogModel, bWithBackGraphic)
  84.     MainDialog.GetControl("lbTemplate").SetFocus()
  85.     DialogModel.cbGoOn.DefaultButton = True
  86.     RetValue = MainDialog.Execute
  87.     Select Case RetValue
  88.         Case 0
  89.             MainDialog.Dispose()
  90.             oBaseDocument.Dispose()
  91.         Case 1
  92.             EndDialog()
  93.             MainDialog.Dispose()
  94.     End Select
  95. GLOBALERRORHANDLER:
  96.     If Err <> 0 Then
  97.         MsgBox (WebWiz_gErrMsg$, 16, WebWiz_gWizardName$)
  98.         CancelHTMLWizard()
  99.     End If
  100. End Sub
  101.  
  102.  
  103. Function SetProgressValue(iValue as Integer)
  104.     If iValue = 0 Then
  105.         ProgressBar.End
  106.     End If
  107.     ProgressValue = iValue
  108.     ProgressBar.Value = iValue
  109. End Function
  110.  
  111.  
  112. Sub ReloadCurrentDocument()
  113. Dim OldDocIndex as Integer
  114. On Local Error Goto ErrorOcurred
  115.     OldDocIndex = CurDocIndex
  116.     CurDocIndex = GetCurIndex(DialogModel.lbTemplate, Layout(), NumberofLayouts%, 2)
  117.     If OldDocIndex <> CurDocIndex Then
  118.         oBaseDocument.LockControllers
  119.         ToggleDialogControls(False)
  120.         oCursor = oBaseDocument.Text.CreateTextCursor()
  121.         oCursor.GotoStart(False)
  122.         oCursor.GotoEnd(True)
  123.         oCursor.SetAllPropertiesToDefault()
  124.         oCursor.InsertDocumentfromURL(FileStr, NoArgs())
  125.         SetBulletAndGraphics
  126.         CheckControls(oBaseDocument.DrawPage)
  127.     ErrorOcurred:
  128.         If Err <> 0 Then
  129.             MsgBox(WebWiz_gErrWhileReloading$, 16, WebWiz_gWizardName$)
  130.         End If
  131.         oBaseDocument.UnlockControllers
  132.         oViewCursor.GotoStart(False)
  133.         ToggleDialogControls(True, "lbTemplate")
  134.     End If
  135. End Sub
  136.  
  137.  
  138.  
  139. Sub LoadWebPageStyles()
  140. Dim OldWebPageIndex as Integer
  141.     OldWebPageIndex = CurWebPageIndex
  142.     CurWebPageIndex = GetCurIndex(DialogModel.lbStyles, Style(), NumberofStyles%,8)
  143.     If OldWebPageIndex <> CurWebPageIndex Then
  144.         ToggleDialogControls(False)
  145.         oBaseDocument.LockControllers
  146.         bWithBackGraphic = LoadNewStyles(oBaseDocument, DialogModel, CurWebPageIndex, FileStr, Style(), TextureDir)
  147.         CurrentBullet$ = BulletDir + Style(6, CurWebPageIndex)
  148.         CurrentPrev$ = GraphicsDir + Style(2, CurWebPageIndex)
  149.         CurrentNext$ = GraphicsDir + Style(3, CurWebPageIndex)
  150.         CurrentHome$ = GraphicsDir + Style(4, CurWebPageIndex)
  151.         CurrentTop$ = GraphicsDir + Style(5, CurWebPageIndex)
  152.         With oBaseDocument.DocumentInfo
  153.             .GetUserFieldValue(0) = ExtractGraphicNames(CurWebPageIndex,2)
  154.             .GetUserFieldValue(1) = ExtractGraphicNames(CurWebPageIndex, 4)
  155.             .GetUserFieldValue(2) = Style(6, CurWebPageIndex)       ' Bullet
  156.             .GetUserFieldValue(3) = Style(7, CurWebPageIndex)       ' Background
  157.         End With
  158.         SetBulletAndGraphics()
  159.         CheckControls(oBaseDocument.DrawPage)
  160.         oViewCursor.GotoStart(False)
  161.         oBaseDocument.UnlockControllers
  162.         ToggleDialogControls(True, "lbStyles")
  163.     End If
  164. End Sub
  165.  
  166.  
  167. Function ExtractGraphicNames(CurIndex as Integer, i as Integer) as String
  168. Dim FieldValue as String
  169.     FieldValue = GetFileNameWithoutExtension(Style(i,CurIndex))
  170.     FieldValue = FieldValue & " " &    GetFileNameWithoutExtension(Style(i+1,CurIndex))
  171.     ExtractGraphicNames = FieldValue
  172. End Function
  173.  
  174.  
  175. Sub SetBulletAndGraphics
  176.     SetGraphic("Prev", CurrentPrev)
  177.     SetGraphic("Next", CurrentNext)
  178.     SetGraphic("Home", CurrentHome)
  179.     SetGraphic("Top", CurrentTop)
  180.     SetBulletGraphics(CurrentBullet)
  181.     SetGraphicsToOriginalSize()
  182. End Sub
  183.  
  184.  
  185. Sub SetGraphicsToOriginalSize()
  186. Dim oGraphics as Object
  187. Dim oGraphic as Object
  188. Dim i as Integer
  189. Dim aActSize as New com.sun.star.awt.Size
  190.     oGraphics = oBaseDocument.GraphicObjects
  191.     For i = 0 To oGraphics.Count-1
  192.         oGraphic = oGraphics.GetByIndex(i)
  193.         aActSize = oGraphic.ActualSize
  194.         If aActSize.Height > 0 And aActSize.Width > 0 Then
  195.             oGraphic.SetSize(aActSize)
  196.         End If
  197.     Next i
  198. End Sub
  199.  
  200.  
  201. Sub EndDialog()
  202.     If DialogModel.chkSaveasTemplate.State = 1 Then
  203.         ' Generating template? Set events later!
  204.         AttachBasicMacroToEvent(oBaseDocument,"OnNew", "WebWizard.HtmlAutoPilotBasic.SetEvent()")
  205.         ' Call the Store template dialog
  206.         DispatchSlot(5538)
  207.         AttachBasicMacroToEvent(oBaseDocument,"OnNew", "")
  208.     End If
  209.     SetEvent()
  210. End Sub
  211.  
  212.  
  213. Sub SetEvent()
  214. Dim oDocument as Object
  215. ' This sub links the events OnSaveDone and OnSaveAsDone to the procedure
  216. ' CopyGraphics. It is invoked when a document is created, either directly
  217. ' from the AutoPilot or from a template. It is not possible to set these
  218. ' links for the template created by the AutoPilot because then it is not
  219. ' possible to modify the template.
  220.     BasicLibraries.LoadLibrary("Tools")
  221.     oDocument = ThisComponent
  222.     AttachBasicMacroToEvent(oDocument,"OnSaveDone", "WebWizard.HtmlAutoPilotBasic.CopyGraphics()")
  223.     AttachBasicMacroToEvent(oDocument,"OnSaveAsDone", "WebWizard.HtmlAutoPilotBasic.CopyGraphics()")    
  224. End Sub
  225.  
  226.  
  227.  
  228. Sub CopyGraphics
  229. ' This sub copies all the graphics used in the document to the same directory the
  230. ' document has been copied into and changes the graphics links in the document.
  231. Dim oGraphicObjects as Object
  232. Dim oGraphic as Object
  233. Dim i as Integer
  234. Dim SavePath as String
  235.     BasicLibraries.LoadLibrary("Tools")
  236.     oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
  237.     GetPaths()
  238.     oBaseDocument = ThisComponent
  239. '    oBaseDocument.LockControllers()
  240.  
  241.     ' Note: The sub DirectoryNameoutofPath should be change, so that the last character is a slash
  242.     SavePath = DirectoryNameoutofPath(oBaseDocument.Url, "/") & "/"
  243.  
  244.     oGraphicObjects = oBaseDocument.GraphicObjects
  245.     For i = 0 to oGraphicObjects.Count-1
  246.         oGraphic = oGraphicObjects.GetbyIndex(i)
  247.         oGraphic.GraphicUrl = CopyFile(oGraphic.GraphicURL, SavePath)
  248.     Next i
  249.  
  250.     ChangeBackGraphicUrl(SavePath)
  251.     
  252.     BulletUrlsToSavePath(SavePath)
  253.  
  254.     With oBaseDocument.DocumentInfo
  255.         .GetUserFieldValue(0) = ""
  256.         .GetUserFieldValue(1) = ""
  257.         .GetUserFieldValue(2) = ""
  258.         .GetUserFieldValue(3) = ""
  259.     End With
  260.  
  261.     AttachBasicMacroToEvent(oBaseDocument,"OnSaveDone", "")
  262.     AttachBasicMacroToEvent(oBaseDocument,"OnSaveAsDone", "")
  263.     AttachBasicMacroToEvent(oBaseDocument,"OnNew", "")
  264.     oBaseDocument.Store
  265. '    oBaseDocument.UnlockControllers()
  266. End Sub
  267.  
  268.         
  269. Function CopyFile(ByVal SourceUrl as String, TargetDir as String)
  270. Dim sFileName as String
  271. Dim sNewFileUrl as String
  272.     sFileName = FileNameoutofPath(SourceUrl)
  273.     sNewFileUrl = TargetDir & sFileName
  274.     oUcb.Copy(SourceUrl, sNewFileUrl)
  275.     CopyFile() = sFileName
  276. End Function
  277.  
  278.  
  279.  
  280. Function FillupWebListbox(oUcb as Object, sFileFilter as String, oDialog as Object, ListboxName as String, List() as String)
  281. Dim oDocInfo as Object
  282. Dim oListboxControl as Object
  283. Dim Description as String
  284. Dim sField as String
  285. Dim sFieldList() as String
  286. Dim bItemFound as Boolean
  287. Dim MaxIndex as Integer
  288. Dim DirContent() as String
  289. Dim FileName as String
  290. Dim TemplatePath as String
  291. Dim FilterLen as Integer
  292. Dim i as Integer
  293. Dim m as Integer
  294. Dim n as Integer
  295. Dim s as Integer
  296. Dim a as Integer
  297. Dim SelList(0) as Integer
  298. Dim LocMaxIndex as Integer
  299. Dim InfoNames()
  300. Dim sExtension as String
  301.     oListboxControl = oDialog.GetControl(ListboxName)
  302.     oDocInfo = CreateUnoService("com.sun.star.document.DocumentProperties")
  303.     FilterLen = Len(sFileFilter)
  304.     bItemFound = False
  305.     TemplatePath = GetOfficeSubPath("Template", "wizard/web/")
  306.     DirContent() = oUcb.GetFolderContents(TemplatePath,True)
  307.         
  308.     LocMaxIndex = Ubound(DirContent())
  309.         
  310.     Dim SortList(LocMaxIndex,1)
  311.     For i = 0 to LocMaxIndex
  312.         SortList(i,0) = DirContent(i)
  313.         SortList(i,1) = RetrieveDocTitle(oDocInfo, DirContent(i))
  314.     Next i
  315.     SortList() = BubbleSortList(SortList(),True)
  316.     For i = 0 to LocMaxIndex
  317.         DirContent(i) = SortList(i,0)
  318.     Next i
  319.     a = 0
  320.     For i = 0 To LocMaxIndex
  321.         FileName = DirContent(i)
  322.         sExtension = GetFileNameExtension(FileName)
  323.         If (Instr(1,Filename, sFileFilter)) AND (Ucase(sExtension) = "STW") Then
  324.             bItemFound = True
  325.             Description = RetrieveDocTitle(oDocInfo, FileName)
  326.             oDocInfo.Read(FileName)
  327.             InfoNames = oDocInfo.ElementNames()
  328.             oListboxControl.AddItem(Description,a)
  329.             a = a + 1
  330.             List(1,i) = Description
  331.             If sFileFilter = "/cnt" Then
  332.                 List(2,i) = Filename
  333.             Else
  334.                 m = 2
  335.                 For n = 0 To 3
  336.                     sField = oDocInfo.GetByName(InfoNames(n))
  337.                     sFieldList() = ArrayoutofString(sField, " ", MaxIndex)
  338.                     For s = 0 To MaxIndex
  339.                         If m < 6 Then
  340.                             List(m,i) = sFieldList(s) & ".gif"
  341.                         Else
  342.                             List(m,i) = sFieldList(s)
  343.                         End If
  344.                         m = m + 1
  345.                     Next s
  346.                 Next n
  347.                 List(8,i) = FileName
  348.             End If
  349.         End If
  350.     Next i
  351.     If Not bItemfound Then
  352.         MsgBox(WebWiz_gErrContentNotFound$ , 16, WebWiz_gWizardName$)
  353.         oBaseDocument.Dispose()
  354.         Stop
  355.     End If
  356.     SelList(0) = 0
  357.     oListboxControl.Model.SelectedItems() = SelList()
  358.     FillupWebListbox = i
  359. End Function
  360.  
  361.  
  362. Sub SetGraphic(sWhich, sGraphicText as String)
  363. Dim oLocCursor as Object
  364. Dim oGraphic as Object
  365. Dim bGetGraphic as Boolean
  366.     oBookmarks = oBaseDocument.BookMarks
  367.     If oBookmarks.HasbyName(sWhich)Then
  368.         oBookMark = oBookmarks.GetbyName(sWhich)
  369.         oLocCursor = oBookMark.Anchor.Text.CreateTextCursorByRange(oBookMark.Anchor)
  370.         oGraphic = oBaseDocument.CreateInstance("com.sun.star.text.GraphicObject")
  371.         oLocCursor.GoRight(3,True)
  372.         oGraphic.AnchorType = 1
  373.         oGraphic.GraphicURL = ConverttoURL(sGraphicText)
  374.         oLocCursor.Text.InsertTextContent(oLocCursor, oGraphic, True)
  375.         oGraphic.Name = sWhich
  376.     ElseIf oBaseDocument.GraphicObjects.HasbyName(sWhich) Then
  377.         oGraphic = oBaseDocument.GraphicObjects.GetByName(sWhich)
  378.         oGraphic.GraphicUrl = sGraphicText
  379.     End If
  380. End Sub
  381.  
  382.  
  383. Sub CheckControls(oDrawPage as Object)
  384. Dim aForm as Object
  385. Dim m,n as integer
  386. Dim lColor as Long
  387. Dim oControl as Object
  388.     lColor = oBaseDocument.StyleFamilies.GetbyName("ParagraphStyles").GetByName("Standard").CharColor
  389.     'SearchFor all possible Controls
  390.     For n = 0 to oDrawPage.Forms.Count - 1
  391.         aForm = oDrawPage.Forms(n)
  392.         For m = 0 to aForm.Count-1
  393.             oControl = aForm.GetbyIndex(m)
  394.             oControl.TextColor = lColor
  395.         Next
  396.     Next
  397. End Sub
  398.  
  399.  
  400. Sub RepaintHeaderPreview()
  401. Dim Bitmap As Object
  402. Dim sBitmapPath as String
  403.     sBitmapPath = SOBitmapPath & "webwizard.bmp"
  404.     WebWzrd.ImagePreview.ImageURL = sBitmapPath
  405. End Sub
  406.  
  407.  
  408. Sub ToggleDialogControls(ByVal bDoEnable as Boolean, Optional FocusControlName as String)
  409.     DialogModel.Enabled = bDoEnable
  410.     If bDoEnable Then
  411.         ' Enable Controls referring to Background graphic only when this Property is set
  412.         bDoEnable = bWithBackGraphic
  413.         ToggleOptionButtons(DialogModel, bDoEnable)
  414.         MainDialog.GetControl(FocusControlName).SetFocus()
  415.     End If
  416. End Sub</script:module>