123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- <?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="ReadDir" script:language="StarBasic">Option Explicit
- Public Const SBPAGEX = 800
- Public Const SBPAGEY = 800
- Public Const SBRELDIST = 1.3
- ' Names of the second Dimension of the Array iLevelPos
- Public Const SBBASEX = 0
- Public Const SBBASEY = 1
- Public Const SBOLDSTARTX = 2
- Public Const SBOLDSTARTY = 3
- Public Const SBOLDENDX = 4
- Public Const SBOLDENDY = 5
- Public Const SBNEWSTARTX = 6
- Public Const SBNEWSTARTY = 7
- Public Const SBNEWENDX = 8
- Public Const SBNEWENDY = 9
- Public ConnectLevel As Integer
- Public iLevelPos(1,9) As Long
- Public Source as String
- Public iCurLevel as Integer
- Public nConnectLevel as Integer
- Public nOldWidth, nOldHeight As Long
- Public nOldX, nOldY, nOldLevel As Integer
- Public oOldLeavingLine As Object
- Public oOldArrivingLine As Object
- Public DlgReadDir as Object
- Dim oProgressBar as Object
- Dim oDocument As Object
- Dim oPage As Object
- Sub Main()
- Dim oStandardTemplate as Object
- BasicLibraries.LoadLibrary("Tools")
- oDocument = CreateNewDocument("sdraw")
- If Not IsNull(oDocument) Then
- oPage = oDocument.DrawPages(0)
- oStandardTemplate = oDocument.StyleFamilies.GetByName("graphics").GetByName("standard")
- oStandardTemplate.CharHeight = 10
- oStandardTemplate.TextLeftDistance = 100
- oStandardTemplate.TextRightDistance = 100
- oStandardTemplate.TextUpperDistance = 50
- oStandardTemplate.TextLowerDistance = 50
- DlgReadDir = LoadDialog("Gimmicks","ReadFolderDlg")
- oProgressBar = DlgReadDir.Model.ProgressBar1
- DlgReadDir.Model.TextField1.Text = ConvertFromUrl(GetPathSettings("Work"))
- DlgReadDir.Model.cmdGoOn.DefaultButton = True
- DlgReadDir.GetControl("TextField1").SetFocus()
- DlgReadDir.Execute
- End If
- End Sub
- Sub TreeInfo()
- Dim oCurTextShape As Object
- Dim i as Integer
- Dim bStartUpRun As Boolean
- Dim CurFilename as String
- Dim BaseLevel as Integer
- Dim oController as Object
- Dim MaxFileIndex as Integer
- Dim FileNames() as String
- ToggleDialogControls(False)
- oProgressBar.ProgressValueMin = 0
- oProgressBar.ProgressValueMax = 100
- bStartUpRun = True
- nOldHeight = 200
- nOldY = SBPAGEY
- nOldX = SBPAGEX
- nOldWidth = SBPAGEX
- oController = oDocument.GetCurrentController
- Source = ConvertToURL(DlgReadDir.Model.TextField1.Text)
- BaseLevel = CountCharsInString(Source, "/", 1)
- oProgressBar.ProgressValue = 5
- DlgReadDir.Model.Label3.Enabled = True
- FileNames() = ReadSourceDirectory(Source)
- DlgReadDir.Model.Label4.Enabled = True
- DlgReadDir.Model.Label3.Enabled = False
- oProgressBar.ProgressValue = 12
- FileNames() = BubbleSortList(FileNames())
- DlgReadDir.Model.Label5.Enabled = True
- DlgReadDir.Model.Label4.Enabled = False
- oProgressBar.ProgressValue = 20
- MaxFileIndex = Ubound(FileNames(),1)
- For i = 0 To MaxFileIndex
- oProgressBar.ProgressValue = 20 + (i/MaxFileIndex * 80)
- CurFilename = FileNames(i,1)
- SetNewLevels(FileNames(i,0), BaseLevel)
- oCurTextShape = CreateTextShape(oPage, CurFilename)
- CheckPageWidth(oCurTextShape.Size.Width)
- iLevelPos(iCurLevel,SBBASEY) = oCurTextShape.Position.Y
- If i = 0 Then
- AdjustPageHeight(oCurTextShape.Size.Height, MaxFileIndex + 1)
- End If
- ' The Current TextShape has To be connected with a TextShape one Level higher
- ' except for a TextShape In Level 0:
- If Not bStartUpRun Then
- ' A leaving Line Is only drawn when level is not 0
- If iCurLevel<> 0 Then
- ' Determine the Coordinates of the arriving Line
- iLevelPos(iCurLevel,SBOLDSTARTX) = iLevelPos(nConnectLevel,SBNEWSTARTX)
- iLevelPos(iCurLevel,SBOLDSTARTY) = oCurTextShape.Position.Y + 0.5 * oCurTextShape.Size.Height
- iLevelPos(iCurLevel,SBOLDENDX) = iLevelPos(iCurLevel,SBBASEX)
- iLevelPos(iCurLevel,SBOLDENDY) = oCurTextShape.Position.Y + 0.5 * oCurTextShape.Size.Height
- oOldArrivingLine = DrawLine(iCurLevel, SBOLDSTARTX, SBOLDSTARTY, SBOLDENDX, SBOLDENDY, oPage)
- ' Determine the End-Coordinates of the last leaving Line
- iLevelPos(nConnectLevel,SBNEWENDX) = iLevelPos(nConnectLevel,SBNEWSTARTX)
- iLevelPos(nConnectLevel,SBNEWENDY) = oCurTextShape.Position.Y + 0.5 * oCurTextShape.Size.Height
- Else
- ' On Level 0 the last Leaving Line's Endpoint is the upper edge of the TextShape
- iLevelPos(nConnectLevel,SBNEWENDY) = oCurTextShape.Position.Y
- iLevelPos(nConnectLevel,SBNEWENDX) = iLevelPos(nConnectLevel,SBNEWSTARTX)
- End If
- ' Draw the Connectors To the previous TextShapes
- oOldLeavingLine = DrawLine(nConnectLevel, SBNEWSTARTX, SBNEWSTARTY, SBNEWENDX, SBNEWENDY, oPage)
- Else
- ' StartingPoint of the leaving Edge
- bStartUpRun = FALSE
- End If
- ' Determine the beginning Coordinates of the leaving Line
- iLevelPos(iCurLevel,SBNEWSTARTX) = iLevelPos(iCurLevel,SBBASEX) + 0.5 * oCurTextShape.Size.Width
- iLevelPos(iCurLevel,SBNEWSTARTY) = iLevelPos(iCurLevel,SBBASEY) + oCurTextShape.Size.Height
- ' Save the values For the Next run
- nOldHeight = oCurTextShape.Size.Height
- nOldX = oCurTextShape.Position.X
- nOldWidth = oCurTextShape.Size.Width
- nOldLevel = iCurLevel
- Next i
- ToggleDialogControls(True)
- DlgReadDir.Model.cmdGoOn.Enabled = False
- End Sub
- Function CreateTextShape(oPage as Object, Filename as String)
- Dim oTextShape As Object
- Dim aPoint As New com.sun.star.awt.Point
- aPoint.X = CalculateXPoint()
- aPoint.Y = nOldY + SBRELDIST * nOldHeight
- nOldY = aPoint.Y
- oTextShape = oDocument.createInstance("com.sun.star.drawing.TextShape")
- oTextShape.LineStyle = 1
- oTextShape.Position = aPoint
- oPage.add(oTextShape)
- oTextShape.TextAutoGrowWidth = TRUE
- oTextShape.TextAutoGrowHeight = TRUE
- oTextShape.String = FileName
- ' Configure Size And Position of the TextShape according to its Scripting
- aPoint.X = iLevelPos(iCurLevel,SBBASEX)
- oTextShape.Position = aPoint
- CreateTextShape() = oTextShape
- End Function
- Function CalculateXPoint()
- ' The current level Is lower than the Old one
- If (iCurLevel< nOldLevel) And (iCurLevel<> 0) Then
- ' ClearArray(iLevelPos(),iCurLevel+1)
- Elseif iCurLevel= 0 Then
- iLevelPos(iCurLevel,SBBASEX) = SBPAGEX
- ' The current level Is higher than the old one
- Elseif iCurLevel> nOldLevel Then
- iLevelPos(iCurLevel,SBBASEX) = iLevelPos(iCurLevel-1,SBBASEX) + nOldWidth + 100
- End If
- CalculateXPoint = iLevelPos(iCurLevel,SBBASEX)
- End Function
- Function DrawLine(nLevel, nStartX, nStartY, nEndX, nEndY As Integer, oPage as Object)
- Dim oConnect As Object
- Dim aPoint As New com.sun.star.awt.Point
- Dim aSize As New com.sun.star.awt.Size
- aPoint.X = iLevelPos(nLevel,nStartX)
- aPoint.Y = iLevelPos(nLevel,nStartY)
- aSize.Width = iLevelPos(nLevel,nEndX) - iLevelPos(nLevel,nStartX)
- aSize.Height = iLevelPos(nLevel,nEndY) - iLevelPos(nLevel,nStartY)
- oConnect = oDocument.createInstance("com.sun.star.drawing.LineShape")
- oConnect.Position = aPoint
- oConnect.Size = aSize
- oPage.Add(oConnect)
- DrawLine() = oConnect
- End Function
- Sub GetSourceDirectory()
- GetFolderName(DlgReadDir.Model.TextField1)
- End Sub
- Function ReadSourceDirectory(ByVal Source As String)
- Dim i as Integer
- Dim m as Integer
- Dim n as Integer
- Dim s as integer
- Dim FileName as string
- Dim FileNameList(100,1) as String
- Dim DirList(0) as String
- Dim oUCBobject as Object
- Dim DirContent() as String
- Dim SystemPath as String
- Dim PathSeparator as String
- Dim MaxFileIndex as Integer
- PathSeparator = GetPathSeparator()
- oUcbobject = createUnoService("com.sun.star.ucb.SimpleFileAccess")
- m = 0
- s = 0
- DirList(0) = Source
- FileNameList(n,0) = Source
- SystemPath = ConvertFromUrl(Source)
- FileNameList(n,1) = FileNameoutofPath(SystemPath, PathSeparator)
- n = 1
- Do
- Source = DirList(m)
- m = m + 1
- DirContent() = oUcbObject.GetFolderContents(Source,True)
- If Ubound(DirContent()) <> -1 Then
- MaxFileIndex = Ubound(DirContent())
- For i = 0 to MaxFileIndex
- FileName = DirContent(i)
- FileNameList(n,0) = FileName
- SystemPath = ConvertFromUrl(FileName)
- FileNameList(n,1) = FileNameOutofPath(SystemPath, PathSeparator)
- n = n + 1
- If n > Ubound(FileNameList(),1) Then
- ReDim Preserve FileNameList(n + 10,1) as String
- End If
- If oUcbObject.IsFolder(FileName) Then
- s = s + 1
- ReDim Preserve DirList(s) as String
- DirList(s) = FileName
- End If
- Next i
- End If
- Loop Until m > Ubound(DirList())
- ReDim Preserve FileNameList(n-1,1) as String
- ReadSourceDirectory() = FileNameList()
- End Function
- Sub CloseDialog
- DlgReadDir.EndExecute
- End Sub
- Sub AdjustPageHeight(lShapeHeight, FileCount)
- Dim lNecHeight as Long
- Dim lBorders as Long
- oDocument.LockControllers
- lBorders = oPage.BorderTop + oPage.BorderBottom
- lNecHeight = SBPAGEY + (FileCount * SBRELDIST * lShapeHeight)
- If lNecHeight > (oPage.Height - lBorders) Then
- oPage.Height = lNecHeight + lBorders + 500
- End If
- oDocument.UnlockControllers
- End Sub
- Sub SetNewLevels(FileName as String, BaseLevel as Integer)
- iCurLevel= CountCharsInString(FileName, "/", 1) - BaseLevel
- If iCurLevel <> 0 Then
- nConnectLevel = iCurLevel- 1
- Else
- nConnectLevel = iCurLevel
- End If
- If iCurLevel > Ubound(iLevelPos(),1) Then
- ReDim Preserve iLevelPos(iCurLevel,9) as Long
- End If
- End Sub
- Sub CheckPageWidth(TextWidth as Long)
- Dim PageWidth as Long
- Dim BaseX as Long
- PageWidth = oPage.Width
- BaseX = iLevelPos(iCurLevel,SBBASEX)
- If BaseX + TextWidth > PageWidth - 1000 Then
- oPage.Width = 1000 + BaseX + TextWidth
- End If
- End Sub
- Sub ToggleDialogControls(bDoEnable as Boolean)
- With DlgReadDir.Model
- .cmdGoOn.Enabled = bDoEnable
- .cmdGetDir.Enabled = bDoEnable
- .Label1.Enabled = bDoEnable
- .Label2.Enabled = bDoEnable
- .TextField1.Enabled = bDoEnable
- End With
- End Sub</script:module>
|