Copyright
(c) Prolog Development Center SPb
AppFrame CookBook
Встроенные функции
Язык
приложения
AppFrame включает
механизм выбора языка пользовательского интерфейса.
Выбор рабочего языка из
панели управления производится с помощью динамически формируемого меню.
Меню
активизируется вызовом предиката команды languageList_Menu() объекта fe_Command.
Для формирования списка поддерживаемых языков в xml-конфигурации
приложения узел language
должен содержать список как показано ниже
<language
...>
<support flag="ru" id="rus" title="Russian" />
<support flag="us" id="eng" title="English" />
<support flag="dk" id="dk" title="Danish" />
</language>
Аттрибут flag
определяет флаг какой страны должен быть ассоциирован с этим
языком. Аттрибут выбирается на основании суффикса имени иконки флага из
директории
Bin\febeAppData\pdcVipIcons\flags. Например, имя
флага государства Азорские
острова представлено как flag_azores.ico,
соответственно, имя флага в файле конфигурации должно быть указано как flag="azores".
Аттрибут title
определяет какой строкой язык будет представлен в меню, если не
применяется словарь.
Аттрибут id
определяет идентификатор, по которому будет определяться окончательный
выбор языка.
Фактический идентификатор команды активизации языка имеет строковую
структуру вида "ribbon.menu.language.cmd.<id>", где <id>
означает id,
указанный в списке языков файла конфигурации.
Соответственно,
идентификатор для tooltip будет иметь вид "ribbon.menu.language.cmd.<id>.tooltip", а идентификатор для menuLabel будет
иметь вид
"ribbon.menu.language.cmd.<id>.menulabel".
Определение команды в файле xml-панели должно выглядеть, например,
следующим образом (обязательные аттрибуты выделены)
<menu
cmdstyle="image-and-text-vertical"
enabled="true"
function="language-list"
id="ribbon.menu.language-list"
label="Language"
layout="render"
style="popupmenu">
<icon
file="$(pdc-external)\_license-cc\categories\applications-education-language.ico"
/>
<tooltip text="Change UI Language (Render)" />
При определении контекста для вызова команды, определенной в
xml-панели должно быть указано
...
ContextObj:setMenuRender("language-list",fe_Command():languageList_Menu),
...
Что и связывает
xml-панель c активизацией меню в объекте fe_Command.
Если
предусматривается применение словаря для меню команды выбора языка, то
должен быть активизирован словарь, определенный в файле
bin\febeAppData\ribbonLanguage_Dictionary.xml
c namespace="language".
Директория
bin\febeAppData
содержит файл xml-панели ribbonLanguageRender.xml,
который может быть использован.
Все
необходимые операции обмена данными между FrontEnd и BackEnd,
переименования элементов пользовательского интерфейса ядра выполняются
далее автоматически.
Для элементов пользовательского интерфейса,
активных на момент изменения языка должны быть инициированы операции
замены текстовых названий после выполнения операции загрузки словарей в
объекте fe_CoreTasks
clauses
setNewLanguage(NewLanguageID):-
request(methodChain,fe_UpdateUILanguage_C, s(NewLanguageID)),
fe_Dictionary():currentLanguage_P:=NewLanguageID,
% change here text titles for user-defined
active elements of the UI
success().
или в
объекте fe_Command
defaultHandler(CommandID,_NameSpace,_RibbonCmdID):-
string::hasPrefixIgnoreCase(CommandID,"ribbon.menu.language.cmd.",Language),
fe_CoreTasks():setNewLanguage(Language),
% change here text titles for user-defined
active elements of the UI
success().
Для работы механизма смены языков в файле конфигурации узел language должен
иметь аттрибут use-dictionary="yes".
Генерация
словаря для xml-панели
Ядро AppFrame включает
инструмент создания и модификации файла словаря для xml-панели.
Эту функцию выполняет
класс fe_CreateOrModifyRbnDictionary, который во FrontEnd создает
диалог, отвечающий за выполнение задачи.
Вызов диалога
из объекта класса fe_CoreTasks
fe_CreateOrModifyRbnDictionary::new(frontEnd_P):onCreateOrModifyRbnDictionary().
При
вызове этого предиката FrontEnd обращается к BackEnd и получает список
файлов xml-панелей и связанные с каждым из них словарем.
При этом появляется диалог как показано ниже
В выпадающем списке Ribbon Script
FileName представлен
набор xml-панелей, хранящихся в директории bin\<projectName>AppData в контексте BackEnd, а по кнопке Browse... можно выбрать файл из любой
директории в контексте FrontEnd.
Поле Dictionary
NameSpace
представляет имя NameSpace, свазянное с файлом xml-панели (пусто, если
не установлено).
Поле Dictionary
FileName
определяет относительное имя файла словаря (относительно
директории Bin, пусто если не установлено).
Флаг Modify Source
Script
устанавливает, надо ли корректировать имя файлв словаря и nameSpace в
файле xml-панели. Если флаг установлен, то содержимое файла панели
корректируется.
Для построения начальных
значений текстовых
фраз используются идентификаторы команд и меню и
соответствующие
текстовы фразы, которые представлены в файле
xml-панели.
Фразы
генерируются для всех языков, поддержка которых предусмотрена в файле
конфигурации. Для всех языков фраза генерируется та, которая указана в
файле xml-панели (на базовом языке приложения). Пользователь затем
должен вручную перевести фразы для соответствующего языка.
Одновременно в словаре
генерируются фразы для manuLabel и tooltip.
Если
текст xml-панели изменен, то при выполнении создания-модификации
словаря создаются текстовые фразы только новых элементов.
Существующе фразы не изменяются.
Расширение
панели управления
Ядро AppFrame включает
инструмент расширения панели управления.
Для расширения панели вызывается предикат addExtension() объекта
класса fe_CoreTasks.
Предикат
addExtension() вызывает процесс обмена сообщениями между FrontEnd и
BackEnd. В результате FrontEnd получает список файлов xml-панелей и
вызывает диалог, приведенный ниже
После выбора имени файла xml-панели справа к действующей панели
добавляется новый фрагмент панели.
Удаление
фрагментов панели в текущей версии не предусматривается и может быть
выполнено удалением подузлов <ext> в файле конфигурации
приложения.
Конфигурация
панели
Конфигурация панели
изменяется вызовом редактора конфигурации панели.
Вызов редактора
осуществляется предикатом designRibbonLayout() объекта класса fe_Comamnd.
Редактор конфигурации панели позволяет перемещать и удалять команды,
создавать новые и удалять секции панели.
После закрытия редактора новая конфигурация панели сохраняется в файле
конфигурации приложения.
При запуске приложения конфигурация панели восстанавливается до
положения закрытия.
Восстановление конфигурации панели, включающей все расширения,
осуществляется предикатом reloadRibbon()
объекта класса fe_Command.