Calendar Control. Параметры компиляции
Данный документ описывает параметры, задаваемые при компиляции контрола календаря (Calendar Control) для получения различных по свойствам контролов. Документ написан для версии контрола 2.5.
Исходный код контрола создан таким образом, что позволяет получать в результате компиляции контролы с различными свойствами. Модификации поддаются внешний вид (интерфейс) контрола и язык интерфейса. Свойства получаемого контрола задаются параметрами компиляции в исходном коде.
Эти параметры учитывают существование операционных систем BeOS (принимались в расчет версии 5.0.X) и Zeta, имеющих отличающиеся по виду контролы и различные средства локализации. Наличие операционных систем BeOS версий 5.1 (Dano) не учтено в связи с тем, что у автора не было возможности проверить работу контрола в этих ОС. Рекомендации по компиляции контрола для Dano будут даны в конце данного текста.
Блок параметров, определяющих изменяемые свойства контрола, находится в начале файла CalendarControl.cpp (после информации о версии, авторе и лицензии контрола). Приведем его полностью:
// -------------------------------------------------------------------------------
// --------------- Parameters to compile controls (see Compile.html) -------------
// -------------------------------------------------------------------------------
// ----------------------------------- Languages ---------------------------------
//#define __LANG_LOCALE // to compile localized version (only for Zeta)
//#define __LANG_ENGLISH // to compile english version
//#define __LANG_RUSSIAN // to compile russian version
//#define __LANG_FRENCH // to compile french version
// If nothing is set then english version (if to compile in BeOS)
// or localized version (if to compile in Zeta) is compiled.
// ---------------------------------- Interfaces ---------------------------------
//#define __UNIVERSAL_INTERFACE // to compile with Zeta and BeOS interface
//#define __ZETA_INTERFACE // to compile only with Zeta interface
//#define __BEOS_INTERFACE // to compile only with BeOS interface
// If nothing is set then __UNIVERSAL_INTERFACE will be set if to compile in BeOS.
// But while compiling in Zeta only __ZETA_INTERFACE is set no matter
// what interface developer have defined indeed.
// -------------------------------------------------------------------------------
// ---------------------------- End of parameters --------------------------------
// -------------------------------------------------------------------------------
Первые четыре параметра, заданные опциями #define, определяют язык интерфейса контрола (в порядке их расположения в коде): локализованный, английский, русский или французский. Чтобы задать тот или иной язык, раскомментируйте соответствующий параметр. Если все параметры закомментированы, то контрол будет иметь язык по умолчанию. При компиляции в среде BeOS языком по умолчанию является английский. Если же компиляция происходит в среде Zeta, то контрол будет локализованным с использованием системных средств локализации Zeta.
Следует отметить, что сделать контрол полностью локализованным в Zeta не удалось, т.к. в этой системе нет строк перевода для сокращенных дней недели (они остаются на английском языке).
Не следует задавать параметр __LANG_LOCALE при компиляции в среде BeOS. Это будет сочтено ошибкой и контрол будет иметь английский интерфейс. То же самое относится к заданию нескольких параметров одновременно. В этом случае будет выбран только один из них в соответствии с порядком их следования в опциях #define.
Теперь рассмотрим вторую группу параметров, которые определяют интерфейс контрола.
Первый параметр (__UNIVERSAL_INTERFACE) декларирует, что в библиотеку с контролом включается код, позволяющий отобразить контрол как в виде, подобном виду контролов в BeOS, так и в виде, подобном виду контролов в Zeta. В этом случае остальные два параметра будут заданы автоматически. Окончательный вид контрола при выполнении программы будет определен флагом интерфейса в параметре внешнего вида конструктора контрола (вплоть до того, что при выполнении программы с контролом в среде BeOS контрол будет выглядеть подобно контролам в BeOS, а если та же программа будет запущена в Zeta, то и контрол приобретет соответствующий этой системе внешний вид).
Второй и третий параметр (если __UNIVERSAL_INTERFACE не задан) являются взаимоисключающими. При задании одного из них в библиотеку с контролом будет включен код, реализующий отображение контрола только в виде, свойственном для соответствующей параметру операционной системы. В этом случае контрол будет выглядеть одинаково вне зависимости от системы, в которой запущена программа с контролом.
При компиляции библиотеки в среде BeOS можно использовать все три параметра. Если же компиляция происходит в среде Zeta, то будет принудительно установлен параметр __ZETA_INTERFACE и отключены два других. Так сделано потому, что программа или библиотека, откомпилированные в Zeta, не могут быть использованы в BeOS (хотя наоборот как правило возможно), а значит, BeOS-интерфейс контрола не будет востребован (разве что по прихоти разработчика). Значит, нет смысла включать код, который только бесполезно увеличит размер библиотеки.
Операционная система BeOS версий 5.1 (Dano) обладает интерфейсом, похожим на интерфейс Zeta и так же, как в Zeta, программы, откомпилированные в Dano, не работают в BeOS 5.0.X. Поэтому при компиляции контрола календаря в среде Dano рекомендуется задавать __ZETA_INTERFACE для определения внешнего вида контрола. Что же касается языка интерфейса, то здесь применимы параметры, используемые при компиляции в BeOS (т.е. без __LANG_LOCALE).