UniFM/Добавление модулей

Материал из Project D8
Перейти к навигации Перейти к поиску

UniFM v1.3 и более новые

Рассмотрим процесс добавления модулей на примере модуля VIArt. Этот модуль содержится в полной версии UniFM, в его состав входит:

  • VectorModule — класс, отвечающий за открытие существующих векторных изображений
  • VectorFileSource — класс, отвечающий за создание новых векторных изображений
  • OptionsEditor — класс, отвечающий за хранение и редактирование настроек модуля
  • Прочие классы модуля
  • Папка lang — содержит файлы с локализованными строками, используемыми модулем
  • Папка img — содержит значок модуля и векторную заставку

Модуль целиком находится в папке viart, всю эту папку нужно поместить в JAR с программой. Куда именно — зависит от разработчика модуля (для удобства лучше размещать все модули в папке modules). Эту операцию можно выполнить с помощью любого ZIP архиватора, например, с помощью самого UniFM.

Далее нужно добавить модуль в конфигурационные файлы, чтобы его можно было использовать. Начать лучше с добавления языковых файлов модуля в список языков и указания смещения для номеров строк. Это делается в файле lang/lang.ini в архиве программы. Это обычный INI файл, который содержит три секции:

  • [List] — список языков в формате код_локали = Название_языка
  • [Custom] — список дополнительных файлов, из которых будут загружаться списки строк, в формате путь/к/файлу/файл_со_строками = смещение
    • Смещение прибавляется ко всем номерам строк, определенных в файле. То есть, если файл содержит строки с номерами от 0 до 100 и смещение равно 500, то эти строки будут загружены с номерами от 500 до 600.
    • Последовательность %L заменяется на код локали, установленной в программе. То есть, если в программе установлен русский язык, имя strings_%L.ini превратится в strings_ru.ini.
  • [Offset] — список смещений для строк, используемых классами программы, в формате маска_имен_классов = смещение
    • Маска может содержать *, которые при сравнении обозначают любой набор символов. Для сравнения используются полные имена классов. Например, маске modules.viart.* соответствуют все классы модуля VIArt.
    • Смещение прибавляется ко всем номерам строк, используемых классами, попадающими под маску. Например, если класс использует строки с номерами от 0 до 100 и смещение равно 500, то класс будет использовать строки с номерами от 500 до 600.

В случае с модулем VIArt в файл lang.ini нужно добавить следующее:

  • в секции [Custom] — modules/viart/lang/strings_%L.ini = 500
  • в секции [Offset] — modules.viart.* = 500

Смещение, в данном случае 500, можно выбирать произвольно, единственное, за чем следует следить — чтобы списки строк разных модулей не перекрывались, иначе можно получить на экране абракадабру.

Дальнейшие действия будут происходить в папке config.

Для того, чтобы модуль появился в списке модулей, его нужно добавить в файл modules.ini. За открытие файлов отвечают модули в секции [Application], за создание новых файлов — в секции [FileSource]. Все записи имеют формат имя.пакета.ИмяКласса = <имя_модуля | #номер_строки_с_именем_модуля> [, файл_значка [@ x, y, ширина, высота]]. При указании имени в виде номера строки его следует указывать без учета смещений — они учитываются позднее самой программой. При указании значка возможны варианты:

  • icon.png — в качестве значка модуля будет использован файл img/icon.png целиком
  • /modules/viart/img/icon.png — то же самое, только указан полный путь к файлу значка, вместо стандартной папки img
  • icons.png @ 32, 0, 16, 16 — значок размером 16x16 будет вырезан из файла img/icons.png в точке (32, 0)
  • /modules/icons.png @ 32, 0, 16, 16 — то же самое, только с указанием полного пути

Порядок следования модулей в этом файле сохраняется при выведении на экран списка модулей.

В случае с модулем VIArt в файл modules.ini нужно добавить следующее:

  • в секции [Application] — modules.viart.VectorModule = # 133, icons.png @ 32, 0, 16, 16
  • в секции [FileSource] — modules.viart.VectorFileSource = # 134, /modules/viart/img/icon.png

Для того, чтобы настройки модуля сохранялись при закрытии программы, а также для редактирования этих настроек, необходимо добавить в файл options.ini хранилище настроек модуля. Формат этого файла аналогичен файлу modules.ini, за тем исключением, что здесь не указываются значки. Для модуля VIArt добавляем modules.viart.OptionsEditor = # 133. Порядок следования модулей в этом файле также сохраняется при выведении на экран списка модулей.

На этом обязательная часть заканчивается — можно устанавливать и использовать UniFM с добавленным модулем VIArt. Однако новый модуль изначально не будет связан ни с одним расширением файла, и эту связь придется задавать через меню «Модули», что не слишком удобно. Другой вариант — задать связи в файле types.ini. Данный файл содержит три секции:

  • [Open] — связь расширений файлов с модулями, которые используются для открытия таких файлов. Записи имеют формат список_расширений = модуль, где список_расширений содержит расширения без точки, разделенные пробелами либо табуляцией.
  • [Create] — связь модулей с расширениями файлов, которые создаются такими модулями. Записи имеют формат, зеркальный относительно секции [Open], и разрешено только одно расширение вместо списка.
  • [Special] — на эту секцию можно временно не обращать внимания…

Файл types.ini используется программой только при первом запуске, в дальнейшем список типов берется из RMS.

Для модуля VIArt добавляем:

  • в секции [Open] — mvi = modules.image.VectorModule
  • в секции [Create] — modules.viart.VectorFileSource = mvi