Индикатор выполнения Отпечатка LibreOffice с квадратом/кругом

Я хотел бы добавить индикатор выполнения к своей презентации стажировки с Отпечатком LibreOffice, но я имею, только находят этот тип индикатора выполнения, с помощью макроса

enter image description here

Как Вы видите, может быть трудно знать сколько слайда, там находятся в этой части, сколько там прежде заканчивают презентацию, даже если я могу добавить процент прогресса. Этот макрос может быть находкой в этой ссылке:

https://github.com/dasaki/Impress-Progress-Bar

Теперь, я хочу что-то, что похоже на рев (извините, GIMP не является лучшим редактором изображения для проведения линии или квадрата):

enter image description here

Если у кого-либо есть решение или ссылка на макрос, которые делают что-то как этот, я не хочу делать ту квадратную/круговую прогрессию вручную, было бы грязно и действительно некоторое время для работы над ним.Спасибо

8
задан 31 August 2018 в 05:18

2 ответа

Ну, может быть не настолько сложным. Я надеялся запускаться путем разветвления того репозитория, но заканчиваю, пишущий с нуля.

Текущее состояние, это работает (LibreOffice v6.0.2.1). Однако Установка не представлена в GUI.

Установка

  1. Инструменты> Макросы> Организуют Макросы> Основной LibreOffice...
  2. Мои Макросы> Стандарт: Новое имя модуля это "ProgressLine" или что бы то ни было.
  3. Выберите его затем Редактирование, Копия ниже кода в него

    REM  *****  BASIC  *****
    
    Dim iFileNumber As Integer
    Dim iSectionCount As Integer
    Dim iSectionPage As Integer
    Dim iSectionIndex As Integer
    Dim iSectionIndexCurrent As Integer
    
    Dim oDocument As Object
    Dim oPage As Object
    Dim iPageCount As Integer
    Dim oPositionPageMark As New com.sun.star.awt.Point
    Dim oSizePageMark As New com.sun.star.awt.Size
    Dim oSizeSectionTitle As New com.sun.star.awt.Size
    
    
    Sub ProgressLine
    
        'Default values
        'sBulletShape = "com.sun.star.drawing.RectangleShape"
        sBulletShape = "com.sun.star.drawing.EllipseShape"
        'Values are fracture of page width
        oSizePageMark_Width = 0.02
        oSizePageMark_Height = 0.02
        oSizeSectionTitle_Width = 0.20
        oSizeSectionTitle_Height = 0.03
        dSeparationRatioSection = 3.0
        dMargin_Start = 0.05
        dMargin_End = 0.10
        dMargin_Side = 0.03
    
        oFillColorPageMarkActive = RGB(255,0,0)
        oFillColorPageMarkInactive = RGB(240, 200, 200)
        oCharColorSectionTitleActive = RGB(255, 0, 0)
        oCharColorSectionTitleInactive = RGB(150, 150, 150)
    
    
        ProgressLineRemove()
    
        oDocument = ThisComponent
        If oDocument.supportsService("com.sun.star.drawing.GenericDrawingDocument") Then
            'Load index
            sIndexPath = oDocument.URL
            sIndexPath = Mid( Left(sIndexPath, InStr(sIndexPath, ".odp")-1) & ".index",1,Len(sIndexPath)+2)
            iFileNumber = Freefile
            Open sIndexPath For Input As #iFileNumber
            'First line is section total count
            If Not eof(#iFileNumber) Then
                Line Input #iFileNumber, sLine
                If sLine<>"" Then
                    iSectionCount = Int(sLine)
                End If
            End If
            'Remaining lines for sections: page, title
            iPageCount = oDocument.DrawPages.Count
            Dim sSectionTitle(iPageCount) As String
            While Not eof(#iFileNumber)
                Line Input #iFileNumber, sLine
                If sLine<>"" Then
                    iSectionPage = Int(Left(sLine, InStr(sLine, ",")-1))
                    sSectionTitle(iSectionPage-1) = Right(sLine, Len(sLine)-InStr(sLine, ","))
                End If
            Wend
    
            'loop over pages
            iSectionIndex=-1
            For iPageIndex=0 To iPageCount-1
                If sSectionTitle(iPageIndex)<>"" Then
                    iSectionIndex = iSectionIndex+1
                End If
                oPage = oDocument.DrawPages(iPageIndex)
                oSizePageMark.Width = oPage.Width*oSizePageMark_Width
                oSizePageMark.Height = oPage.Width*oSizePageMark_Height
                dSeparation = (oPage.Width*(1-dMargin_Start-dMargin_End)-oSizePageMark.Width*iPageCount)/((iPageCount-iSectionCount)+(iSectionCount-1)*dSeparationRatioSection)
    
    
                'Place new shapes, loop over page for progress
                iSectionIndexCurrent=-1
                For iPageIndexCurrent=0 To iPageCount-1
                    If sSectionTitle(iPageIndexCurrent)<>"" Then
                        iSectionIndexCurrent = iSectionIndexCurrent+1
                    End If
                    oShape = oDocument.createInstance(sBulletShape)
                    oPositionPageMark.x = (iPageIndexCurrent+iSectionIndexCurrent*(dSeparationRatioSection-1))*dSeparation+iPageIndexCurrent*oSizePageMark.Width+oPage.Width*dMargin_Start
                    oPositionPageMark.y = oPage.Height-oPage.Width*dMargin_Side-oSizePageMark.Height
                    oShape.Size = oSizePageMark
                    oShape.Position = oPositionPageMark
                    oShape.LineStyle = none
                    If (iPageIndexCurrent=iPageIndex) Then
                        oShape.FillColor = oFillColorPageMarkActive
                    Else
                        oShape.FillColor = oFillColorPageMarkInactive
                    End If
                    oShape.Name = "Progress Line RS_" + (iPageIndex+1)+"_"+(iPageIndexCurrent+1)
                    oPage.add(oShape)
    
                    'Section titles, skip dummy title: "_"
                    If sSectionTitle(iPageIndexCurrent)<>"" And sSectionTitle(iPageIndexCurrent)<>"_" Then        
                        oShape = oDocument.createInstance("com.sun.star.drawing.RectangleShape")    
                        oShape.TextVerticalAdjust = com.sun.star.drawing.TextVerticalAdjust.TOP
                        oShape.TextHorizontalAdjust = com.sun.star.drawing.TextHorizontalAdjust.LEFT
                        oShape.TextLeftDistance = 0
                        oSizeSectionTitle.Width = oPage.Width*oSizeSectionTitle_Width
                        oSizeSectionTitle.Height = oPage.Width*oSizeSectionTitle_Height
                        oShape.Size = oSizeSectionTitle
                        oPositionPageMark.y = oPositionPageMark.y-oSizeSectionTitle.Height
                        oShape.Position = oPositionPageMark
                        oShape.LineStyle = none
                        oShape.FillStyle = none
                        oShape.Name = "Progress Line TS_" + (iPageIndex+1)+"_"+(iPageIndexCurrent+1)
                        oPage.add(oShape)
                        oShape.String = sSectionTitle(iPageIndexCurrent)
                        oShape.CharWeight = com.sun.star.awt.FontWeight.BOLD  
                        oShape.CharFontName = "Arial" 'todo: doesn't work
    
                        If iSectionIndexCurrent=iSectionIndex Then
                            oShape.CharColor = oCharColorSectionTitleActive
                        Else
                            oShape.CharColor = oCharColorSectionTitleInactive
                        End If 
    
                    End If
                Next iPageIndexCurrent
            Next iPageIndex
            Close #iFileNumber
        End If
    End Sub
    
    Sub ProgressLineRemove
        oDocument = ThisComponent
        If oDocument.supportsService("com.sun.star.drawing.GenericDrawingDocument") Then
            'loop over pages
            iSectionIndexCurrent=0
            For iPageIndex=0 To oDocument.DrawPages.Count-1
                oPage = oDocument.DrawPages(iPageIndex)
                'Cleanup old shapes
                iShapeIndex = oPage.getCount-1
                Do While (iShapeIndex>=0)
                    oShape = oPage.getByIndex(iShapeIndex)
                    If (InStr(oShape.Name, "Progress Line") <> 0) Then
                        oPage.remove(oShape)
                    End If
                    iShapeIndex = iShapeIndex-1
                Loop
            Next iPageIndex
        End If
    End Sub
    
  4. Сохраните его

Рабочий процесс

Добавьте ProgressLine

  1. Создайте индекс, текстовый файл, в той же папке с тем же именем, но с .index расширение

    5
    1,_
    2,H2_a
    4,H2_b
    7,H2_c
    10,_
    
    • Первая строка является общим количеством раздела
    • Остающиеся строки в этом формате: страница, заголовок раздела
    • _ особенный для раздела без заголовка
  2. Откройте свою презентацию

  3. Инструменты> Макросы> Организуют Макросы> LibreOffice, Основной...: Выполненный ProgressLine

Удалите ProgressLine

  • Инструменты> Макросы> Организуют Макросы> LibreOffice, Основной...: Выполненный ProgressLineRemove

Примечания

  • Большинство настроек сгруппировано наверху сценария, таким образом, должно быть так или иначе легко настроить его.

LibreOffice-OpenOffice Impress-Presentation Progress Bar with Sections Top Outline

1
ответ дан 23 November 2019 в 05:55

Прекрасная идея. Я вниз загрузил Индикатор выполнения также. Это действительно дает показатель Процента "x %", но ничто столь же тщательно продуманное как что находится в Вашем рисунке. Я не разработчик и просто вхождение в Макросы LibreOffice.

Мое Предположение является решением, при помощи Оглавления (TOC) Устройства записи LibreOffice, преобразованного для Предъявителя.

Если возможно отметить Элементы оглавления, как являющиеся 'камнями мили', и когда-то достигнутый, отправляет Сокращенное уменьшенное текстовое поле шрифта и переключенный Значок к заполнителю.

Я предположил бы, что много наборы шаблонов Заполнителя должны будут быть сделаны. Например, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100. И Шаблон, представленный на рассмотрение автоматически на инкременте слайда или декременте.

Цвет текста и Значков заполнителя переключателя был бы хитрой частью для преодоления. Если бы это было установлено на Основном слайде с начала, то он помог бы.

Я ожидаю (т.е. "Прогресс"!) кому-то, кто знает больше о макро-программировании, чем, я делаю, давая этому движение.

0
ответ дан 23 November 2019 в 05:55

Другие вопросы по тегам:

Похожие вопросы: