понедельник, 24 апреля 2017 г.

Обновление Money Tracker 1.20

Весеннее настроение дало повод перерисовать все иконки в моем личном финансовом менеджере Money Tracker и попутно исправить несколько небольших ошибок.
Рисовал все в бесплатном векторном редакторе LibreOffice Draw. Пока делал иконки, много раз вспомнил CorelDraw, и как все было удобно в нем. LibreOffice Draw это как "Москвич" среди автомобилей - простой, крепкий, вроде едет, а удобства - в "Мерседесе" :).
Но не это главное. Главное, как я все в итоге автоматизировал.
На каждой странице в моем графическом файле ровно одна векторная иконка.
Макрос, находящийся в том же файле, обрабатывает каждую страницу и сохраняет ее в отдельную растровую картинку и присваивает ей такое же имя, какое присвоено странице. Таким образом, через секунду после запуска макроса я получаю набор иконок заданного размера. Остается только закинуть их в ресурсы проекта Money Tracker и пересобрать приложение.
Вот мой исходник иконок:
Что касается ошибок. Краш приложения происходил на Android 6 при попытке бэкапа на карту памяти, т. к. Android 6 и выше мало разрешений при установке, ему нужно дополнительно дать разрешения и после установки. Это разумно, поскольку позволяет как дать разрешения, так и в любую секунду отозвать их. Мне нравится.
От краша я избавился, написав обработчик ситуации. Теперь Money Tracker на старших Android сделает запрос на доступ к карте памяти при необходимости. Если разрешение ему не дадут, функция бэкапа на карту памяти заблокируется, и все будут довольны.
Вторая ошибка это даже не ошибка. На экране, где вводят курс валюты (если делать это вручную), поле масштабировалось как попало, и могло "поехать" на некоторых разрешениях и при повороте экрана. Теперь масштабируется хорошо.
Третья ошибка - черный цвет текста на экране плановых проводок. Вообще, в используемой мной теме оформления обычный текст слегка серый, и смотрится лучше. Теперь и на экране с плановыми проводками такой же серый.
Текст макроса на LibreOffice Basic, если интересно (очень трудно на нем писать, почти нет документации):

Sub ExportPNG

REM Задайте размер иконки
size = 128

sLocation = StarDesktop.CurrentComponent.getLocation()
If (Not GlobalScope.BasicLibraries.isLibraryLoaded("Tools")) Then
    GlobalScope.BasicLibraries.LoadLibrary("Tools")
End If
sDirectory = Tools.Strings.DirectoryNameoutofPath(sLocation, "/")    + "/"

Dim Page As Object

dim args2(6) as new com.sun.star.beans.PropertyValue
args2(0).Name  = "PixelWidth"        '
args2(0).Value = size
args2(1).Name  = "PixelHeight"
args2(1).Value = size
args2(2).Name  = "Compression"
args2(2).Value = 9
args2(3).Name  = "Interlaced"
args2(3).Value = 0
logicalSize = int(2540 * size / 96)
args2(4).Name  ="LogicalWidth"
args2(4).Value = logicalSize
args2(5).Name  ="LogicalHeight"
args2(5).Value = logicalSize
args2(6).Name  ="Translucent"
args2(6).Value = true

dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(1).Name = "MediaType"
args1(1).Value = "image/png"
args1(2).Name = "FilterData"
args1(2).Value = args2()
args1(3).Name = "SelectionOnly"
args1(3).Value = false

xExporter = createUnoService("com.sun.star.drawing.GraphicExportFilter")

For i = 1 To StarDesktop.CurrentComponent.drawPages.Count()
    Page = StarDesktop.CurrentComponent.drawPages(i - 1)
    args1(0).Value = sDirectory + size + "/" + Page.Name + ".png"
    xExporter.setSourceDocument(Page)
    xExporter.filter(args1())
Next

MsgBox "Экспорт успешно завершен"

End Sub

Комментариев нет:

Отправить комментарий