epublishing/ePublishing/Footnotes.xba

197 lines
7.2 KiB
Text
Raw Normal View History

2020-03-13 16:36:45 +01:00
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Footnotes" script:language="StarBasic" script:moduleType="normal">sub footMark2
2020-03-13 16:42:10 +01:00
End Sub
2020-03-13 16:40:24 +01:00
Sub openFootNotesDialog
2020-03-13 16:36:45 +01:00
Dim dialog As Object
DialogLibraries.LoadLibrary(&quot;ePublishing&quot;)
dialog = CreateUnoDialog(DialogLibraries.ePublishing.FootnotesConfig)
2020-05-05 14:01:41 +02:00
dialog.getControl(&quot;buttonOK&quot;).Label = getTranslation(&quot;buttonOk&quot;)
dialog.getControl(&quot;buttonCancel&quot;).Label = getTranslation(&quot;buttonCancel&quot;)
dialog.getControl(&quot;configText1&quot;).setText(getTranslation(&quot;configText1&quot;))
dialog.getControl(&quot;configText2&quot;).setText(getTranslation(&quot;configText2&quot;))
dialog.getControl(&quot;configText3&quot;).setText(getTranslation(&quot;configText3&quot;))
dialog.getControl(&quot;configText4&quot;).setText(getTranslation(&quot;configText4&quot;))
dialog.getControl(&quot;configText5&quot;).setText(getTranslation(&quot;configText5&quot;))
dialog.getControl(&quot;notesTypeLabel&quot;).setText(getTranslation(&quot;FootnotesConfigDialogNotesTypeLabel&quot;))
dialog.getControl(&quot;PerPageRangeLabel&quot;).setText(getTranslation(&quot;FootnotesConfigDialogNotesPerPageRangeLabel&quot;))
dialog.getControl(&quot;groupByPages&quot;).Model.Label = getTranslation(&quot;FootnotesConfigDialogNotesPerPage&quot;)
dialog.getControl(&quot;groupByHeadings&quot;).Model.Label = getTranslation(&quot;FootnotesConfigDialogNotesByHeadingsLabel&quot;)
2020-05-05 14:01:41 +02:00
dialog.Title = getTranslation(&quot;footnotesConfigDialogTitle&quot;)
Dim nCount As Integer
nCount = dialog.getControl(&quot;lb_notes_types&quot;).getItemCount()
dialog.getControl(&quot;lb_notes_types&quot;).addItem( getTranslation(&quot;FootnotesConfigDialogFootnotesName&quot;), nCount )
dialog.getControl(&quot;lb_notes_types&quot;).addItem( getTranslation(&quot;FootnotesConfigDialogEndnotesName&quot;), nCount + 1 )
dialog.getControl(&quot;lb_notes_types&quot;).selectItemPos( 0, True )
2020-05-05 14:01:41 +02:00
dialog.setVisible(true)
2020-03-13 16:36:45 +01:00
Select Case dialog.Execute()
Case 1
setFootnotesNumberingFrom(dialog)
Case 0
End Select
dialog.dispose()
End Sub
Sub setFootnotesNumberingFrom(dialog)
Dim statusIndicator as Object
Dim targetLevel As Integer
Dim stringLevelInput As String
Dim stringPageRangeInput As String
Dim noteType As Integer
2020-03-13 16:36:45 +01:00
statusIndicator = ThisComponent.getCurrentController.statusIndicator
dialog.setVisible(false)
doNotTrack
stringLevelInput = dialog.getControl(&quot;level&quot;).getText
stringPageRangeInput = dialog.getControl(&quot;pageRange&quot;).getText
noteType = dialog.getControl(&quot;lb_notes_types&quot;).getSelectedItemPos()
If (stringLevelInput &lt;&gt; &quot;&quot;) Then
targetLevel = CInt(stringLevelInput)
If targetLevel &gt; -1 AND targetLevel &lt; 11 Then
statusIndicator.Start(getTranslation(&quot;statusNumberingInProcess&quot;),100)
setFootnotesNumberingLevel(targetLevel,noteType)
Else
MsgBox getTranslation(&quot;numberingInputOutOfRange&quot;)
EndIf
EndIf
2020-03-13 16:36:45 +01:00
If (stringPageRangeInput &lt;&gt; &quot;&quot;) Then
2020-05-05 14:01:41 +02:00
statusIndicator.Start(getTranslation(&quot;statusNumberingInProcess&quot;),100)
setNotesPaginatedNumbering(noteType, pageArray)
2020-03-13 16:36:45 +01:00
EndIf
statusIndicator.end()
End Sub
Sub setFootnotesNumberingLevel(level As Integer,noteType As Integer)
2020-03-13 16:36:45 +01:00
Dim enum1Element As Object
Dim enum1 As Object
Dim enum2 As Object
Dim thisPortion As Object
Dim curNum As Integer
Dim footnoteText As Object
Dim label As String
Dim labelNum As Long
2020-03-13 16:36:45 +01:00
Dim i As Integer
Dim cell As Object
Dim cellEnum As Object
Dim cellEnum2 As Object
Dim statusIndicator as Object
statusIndicator = ThisComponent.getCurrentController.statusIndicator
2020-05-05 14:01:41 +02:00
statusIndicator.Start(getTranslation(&quot;statusNumberingInProcess&quot;),30)
2020-03-13 16:36:45 +01:00
curNum = 1
enum1 = ThisComponent.Text.createEnumeration
While enum1.hasMoreElements
enum1Element = enum1.nextElement
If enum1Element.supportsService(&quot;com.sun.star.text.Paragraph&quot;) Then
If enum1Element.OutlineLevel = level Then
curNum = 1
EndIf
enum2 = enum1Element.createEnumeration
While enum2.hasMoreElements
thisPortion = enum2.nextElement
If isTargetNote(thisPortion, noteType) Then
2020-03-13 16:36:45 +01:00
footnoteText = thisPortion.Footnote
label = footnoteText.getLabel
If label = &quot;&quot; Then
If level &gt; 0 Then
footnoteText.setLabel(CStr(curNum))
curNum = curNum + 1
EndIf
Else
labelNum = CLng(label)
2020-03-13 16:36:45 +01:00
If labelNum &gt; 0 Then
If level &lt; 1 Then
footnoteText.setLabel(&quot;&quot;)
Else
footnoteText.setLabel(CStr(curNum))
EndIf
curNum = curNum + 1
EndIf
EndIf
EndIf
Wend
ElseIf enum1Element.supportsService(&quot;com.sun.star.text.TextTable&quot;) Then
cellNames = enum1Element.cellNames
For i = LBound(cellNames) To Ubound(cellNames)
cell = enum1Element.getCellByName(cellNames(i))
cellEnum = cell.getText().createEnumeration()
While cellEnum.hasMoreElements
cellEnumElement = cellEnum.nextElement
If cellEnumElement.supportsService(&quot;com.sun.star.text.Paragraph&quot;) Then
If cellEnumElement.OutlineLevel = level Then
curNum = 1
EndIf
cellEnum2 = cellEnumElement.createEnumeration
While cellEnum2.hasMoreElements
thisPortion = cellEnum2.nextElement
If isTargetNote(thisPortion, noteType) Then
2020-03-13 16:36:45 +01:00
footnoteText = thisPortion.Footnote
label = footnoteText.getLabel
If label = &quot;&quot; Then
If level &gt; 0 Then
footnoteText.setLabel(CStr(curNum))
curNum = curNum + 1
EndIf
Else
labelNum = CLng(label)
2020-03-13 16:36:45 +01:00
If labelNum &gt; 0 Then
If level &lt; 1 Then
footnoteText.setLabel(&quot;&quot;)
Else
footnoteText.setLabel(CStr(curNum))
EndIf
curNum = curNum + 1
EndIf
EndIf
EndIf
Wend
EndIf
Wend
Next i
EndIf
Wend
statusIndicator.end()
2020-05-05 14:01:41 +02:00
MsgBox getTranslation(&quot;statusNumberingFinished&quot;)
2020-03-13 16:40:24 +01:00
End Sub
Function isTargetNote(portion As Object, noteType As Integer) As Boolean
If ( portion.TextPortionType = &quot;Footnote&quot; And isEndNote(portion) = CBool(noteType) ) Then
isTargetNote = true
Else
isTargetNote = false
EndIf
End Function
Function isEndNote(portion As Object) As Boolean
If (IsEmpty(portion.Start.EndNote)) Then
isEndNote = false
Else
isEndNote = true
EndIf
End Function
2020-03-13 16:40:24 +01:00
Private Sub doNotTrack
2020-03-21 16:35:38 +01:00
Dim dispatcher As Object
Dim document As Object
2020-03-13 16:40:24 +01:00
dispatcher = createUnoService(&quot;com.sun.star.frame.DispatchHelper&quot;)
document = ThisComponent.CurrentController.Frame
dim trackProperties(0) as new com.sun.star.beans.PropertyValue
trackProperties(0).Name = &quot;TrackChanges&quot;
trackProperties(0).Value = false
dispatcher.executeDispatch(document, &quot;.uno:TrackChanges&quot;, &quot;&quot;, 0, trackProperties())
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = &quot;ShowTrackedChanges&quot;
args1(0).Value = true
dispatcher.executeDispatch(document, &quot;.uno:ShowTrackedChanges&quot;, &quot;&quot;, 0, args1())
2020-03-13 16:36:45 +01:00
End Sub
2020-03-13 17:48:46 +01:00
</script:module>