Пункт меню
Меню состоит из пунктов. Каждый пункт должен быть определен следующим образом
menuItem Имя_переменной Текстовая_строка
checked:Логическое_выражение enabled:Логическое_выражение
filter:Функция
Обязательны только первые два параметра. Первый – имя переменной, которая после определения будет содержать ссылку на созданный пункт меню. Второй – текстовая строка, которая будет выводиться в меню. Параметр checked позволяет установить (значение true) или не устанавливать (false) галочку напротив определяемого пункта меню. Возможность доступа к пункту меню определяется параметром enabled. Значение true соответствует разрешенному пункту, false – недоступному. Последний параметр, filter, должен быть ссылкой на функцию без параметров, которая будет автоматически вызываться при открытии меню. Если она возвращает true, пункт добавляется к меню, в противном случае – нет.
Пункт меню, как и всякий объект имеет свойства. Текст пункта доступен через свойство
Пункт_меню.text
Наличие флажка возле пункта определяется свойством
Пункт_меню.checked
а за возможность пункта отвечает свойство
Пункт_меню.enabled
При выборе пользователем пункта меню генерируется событие
on Пункт_меню picked do
Разделитель
Разделитель представляет собой горизонтальную черту, которая призвана разделять собой логические группы пунктов меню. В силу своей достаточно пассивной роли, разделитель не имеет свойств и событий, а определяется следующим образом
separator Имя_переменной filter:Функция
В первый параметр, как обычно заносится ссылка на созданный объект, а второй, необязательный, является функцией-фильтром. Его применение полностью аналогично работе с одноименным параметром для пункта меню.
Подменю
Подменю описывает новое меню, которое откроется, если Вы выберете некий пункт меню. Оно определяется следующим образом
subMenu Текстовая_строка filter:Функция
Первый параметр – текст пункта, при выборе которого раскроется подменю. Второй параметр необязателен и представляет собой уже знакомую нам функцию фильтр. После такого определения должно следовать тело подменю, которое состоит из пунктов, разделителей и новых подменю. Как видите, подменю является скорее синтаксическим объектом, поэтому в его определении нет даже переменной. В качестве примера можно привести определение меню, в котором есть и разделители и подменю.
rcmenu MyRCmenu
( -- Функции-фильтры
-- Наличие выделенных объектов
fn flt_objects = ($ != undefined)
-- Принадлежность выделенных объектов к классу фигур
fn flt_shapes = (isKindOf $ Shape)
-- Пункты меню
menuItem mi_cs "Cast Shadows" checked:false
menuItem mi_rs "Receive Shadows" checked:false
-- разделитель
separator sep2 filter:flt_objects
-- Подменю добавляется, если есть выделенные объекты
subMenu "Modifiers" filter:flt_objects
(
-- Пункты подменю для объектов
menuItem mi_bend "Bend"
menuItem mi_twist "Twist"
-- Разделитель и подменю только для фигур
separator sep3 filter:flt_shapes
subMenu "Shape" filter:flt_shapes
(
menuItem mi_extrude "Extrude"
menuItem mi_EditSpline "Edit Spline"
)
)
-- Здесь должны быть обработчики событий
)
registerRightClickMenu MyRcmenu -- Регистрация меню
