
Функции пользовательского интерфейса.
Окна, формы, меню
Есть три типа меню, которые можно создать, используя Skill:
-
popup menus – всплывающие меню
-
fixed menus – фиксированные меню
-
pulldown menus – выпадающие меню
Функции для создания popup menus
hiCreateSimpleMenu – для создания меню с текстовыми полями. В подобных меню имеется единственный уровень, содержащий лишь текстовые элементы и не одного элемента, позволяющего обратится к подменю. Если меню однажды создано, вы можете отобразить его с помощью hiDisplayMenu или связать с окном, используя hiSetWindowMenu.
hiCreateSimpleMenu(
s_menuHandie ; это символ используемый для обращения к этому меню.
t_menuTitle ;текст, который будет в заголовке меню.
l_menuItems ; список, элементов меню (кнопок).
l_menuItemsCallbacks ; функции, которые будут выполнятся кнопками.
)
=>r_hiMenu
Пример:
hiCreateSimpleMenu(
'Menu1
"MyMenu"
'( "One" "Two" )
'( "println( \"One\" )" "println( \"Two\" )" )
)
hiDisplayMenu(Menu1)
Будет создано меню следующего вида:
hiCreateMenu – создает меню с текстовыми кнопками, иконками или элементами слайдер меню.
hiCreateMenu(
s_menuHandie ; это символ используемый для обращения к этому меню.
t_menuTitle ; текст, который будет в заголовке меню.
l_menuItems ; список,элементов меню (кнопок). Элементы меню должны быть уже созданы с помощью функций hiCreateMenuItem и hiCreateSliderMenuItem или hiCreateSeparatorMenuItem.
)
=>r_hiMenu
Для отображения меню (появления его на экране) используется функция hiDisplayMenu.
или ассоциировать его с каким-либо окном с помощью hiSetWindowMenu
В результате получится меню с реальными полями, а не текстовыми кнопками.
hiCreateMenuItem – создает кнопки меню. Кнопки необходимо создать до создания меню.
hiCreateMenuItem(
?name s_itemHandle ; символ для обращения к этому элементу меню.
?itemText t_menuItemText; название элемента
[?itemIcon l_menuIcon]; список кнопок меню
[?disable g_disabled]; возможность сделать пункт меню неактивным. (t/nil).
)
=> r_hiMenuItem
Пример:
trMenuItemOne = hiCreateMenuItem(
?name 'trMenuItemOne
?itemText "One"
?callback "println( \"One\" )"
)
trMenuItemTwo = hiCreateMenuItem(
?name 'trMenuItemTwo
?itemText "Two"
?callback "println( \"Two\" )"
)
hiCreateSliderMenuItem – создает слайдер меню. Также перед созданием слайдер меню необходимо создать кнопки меню функцией hiCreateMenuItem.
hiCreateSliderMenuItem(
?name s_itemHandle ; символ для обращения к этому элементу меню.
?itemText t_menuItemText ; название элемента.
?subMenu r_pulldownMenu ; меню, создаваемое функцией hiCreatePulldownMenu; выводится, когда выбран этот элемент меню.
[?itemIcon l_menuIcon] ; список кнопок меню.
[?disable g_disabled]
) => r_hiSliderItem
hiCreate2DМenu – для создания своих полей, кнопок и т.д., располагая их по координатам.
Этот тип меню позволяет указывать точное место расположения каждого элемента меню, благодаря списку атрибутов с указанием создания каждого элемента.
hiCreate2DМenu (
s_menuHandie ; это символ используемый для обращения к этому меню.
t_menuTitle ; текст, который будет в заголовке меню.
l_menuItems ; список, элементов меню (кнопок). Каждый элемент списка включает в себя три составляющих:
кнопки меню должны быть созданы с помощью функций hiCreateButton или hiCreateLabel
точку, в которой должен быть расположен верхний левый угол этой кнопки
список, содержащий ширину и высоту кнопки
)
=>r_hiMenu
Для отображения меню (появления его на экране) используется функция hiDisplayMenu.
Функции для создания fixed menus:
Статическое меню типично занимает весь верх, низ или одну сторону экрана. Вертикальное фиксированное меню может также появляться внутри графического окна. Вы можете указать номер строки и столбца при создании.
hiCreateVerticalFixedMenu – для создания вертикальных фиксированных меню. Например меню списка топологических слоев.
hiCreateVerticalFixedMenu(
s_menuHandie ; это символ используемый для обращения к этому меню.
l_menuItems ; список,элементов меню (кнопок) которые должны быть созданы с помощью функции hiCreateMenuItem
x_rows ; количество строк в фиксированном меню.
x_cols ; количество столбцов в фиксированном меню.
)
=>r_hiMenu
Для отображения меню используется функция hiDisplayFixedMenu.
hiDisplayFixedMenu(
r_hiMenu ;меню, созданное с помощью функций hiCreateVerticalFixedMenu и ;СreateHorizontalFixedMenu
g_menuLocation ;месторасположение меню “top”, “bottom”, “right”, “left”
[x_width] ; ширина меню
[x_height] ; высота меню
)
=> t | nil
hiCreateHorizontalFixedMenu – для создания горизонтальных фиксированных меню.
При добавлении некоторых кнопок они располагаются строго сверху вниз или справа налево.
hiCreateHorizontalFixedMenu –полностью подобна функции hiCreateVerticalFixedMenu
и связана с теме же функциями для отображения строк.
Пример:
hiCreateHorizontalFixedMenu(
'trExampleHorizontalFixedMenu
list( trMenuItemOne trMenuItemTwo )
1
2
)
hiCreateVerticalFixedMenu(
'trExampleVerticalFixedMenu
list( trMenuItemOne trMenuItemTwo )
2
1
)
hiDisplayFixedMenu(trExampleHorizontalFixedMenu "top")
hiDisplayFixedMenu(trExampleVerticalFixedMenu "bottom")
Функции для создания pulldown menus:
hiCreateРulldownMenu- создает меню и строго указывает место где оно будет находится.
hiCreateРulldownMenu(
s_menuHandie ; это символ используемый для обращения к этому меню.
g_menuTitle ; текст, который будет в заголовке меню.
l_menuItems ; список, элементов меню (кнопок) которые должны быть созданы с помощью функции hiCreateMenuItem и hiCreateSliderMenuItem или hiCreateSeparatorMenuItem.
)
=>r_hiMenu
Для отображения выпадающего меню в окне необходимо использовать функцию hiInsertBannerMenu, также вы можете встроить выпадающее меню как подменю с помощью функции hiDisplayFixedMenu.
hiInsertBannerMenu(
w_windowId ; окно в котором мы хотим отобразить меню
g_menu ; меню которое мы хотим вставить
x_menuPosition ; местоположение меню
)
=> t | nil
Местоположение в заголовке, где будет размещено меню. Позиции меню пронумерованы от 0, начиная с крайнего левого меню. Данная функция не переписывает меню заголовка. Если в этой позиции меню уже существует, функция вставляет новое меню в указанную позицию и перемещает любой оставшийся файл вправо. Если x_menuPostion имеет больший номер чем меню, определенное пользователем, функция прибавляет новое меню в конце (справа) всех остальных меню, за исключением кнопки Help.
hiDeleteBannerMenu(
w_windowId ; окно, в которм хотим удалить меню
x_menuPosition ; местоположение меню
)
-
t | nil
Удаление меню из заголовка окна.
Пример:
menu=hiCreatePulldownMenu(
'trPulldownMenu
"Example Menu"
list( trMenuItemOne trMenuItemTwo )
)
hiInsertBannerMenu(window(1) menu 0)
полученное меню будет добавлено в CIW окно.
Следующий пример показывает создание слайдер меню:
;;; creating menu items for the slider menu
trA_MenuItem = hiCreateMenuItem(
?name 'trA_MenuItem
?itemText "A"
?callback "println('A)" ;;; prints A in the CIW
)
trB_MenuItem = hiCreateMenuItem(
?name 'trB_MenuItem
?itemText "B"
?callback "println('B)" ;;; prints B in the CIW
)
trC_MenuItem = hiCreateMenuItem(
?name 'trC_MenuItem
?itemText "C"
?callback "println('C)" ;;; prints C in the CIW
)
;;; building the slider menu
hiCreatePulldownMenu(
'trSubMenu
""
list( ; the list of menu items in the slider menu
trA_MenuItem
trB_MenuItem
trC_MenuItem
)
)
;;; creating the first menu item for the pulldown menu
trSliderMenuItem = hiCreateSliderMenuItem(
?name 'trSliderMenuItem
?itemText "Print"
?subMenu trSubMenu
)
;;; creating the second menu item for the pulldown menu
trMenuItemResize = hiCreateMenuItem(
?name 'trMenuItemResize
?itemText "Resize"
?callback "hiResizeWindow( window(1) list(0:0 500:500))"
)
;;; creating the Example Menu pulldown menu
hiCreatePulldownMenu(
'trPulldownMenu
"Example Menu"
list( trSliderMenuItem trMenuItemResize )
)
;;; inserting the pulldown menu in the CIW
hiInsertBannerMenu( window(1) trPulldownMenu 0 )
Формы и горячие клавиши.
Стандартные формы
Стандартные формы используются для получения информации от пользователя во время работы. Каждая стандартная форма создается с баннером, содержащим имя формы, и имеет пять кнопок выбора. Эти кнопки выполняют следующие функции.
OK - применить операции, описанные в этой форме и убрать форму с экрана.
Cancel - отменить операции, описанные в этой форме и убрать форму с экрана.
Defaults - установить все значения формы по умолчанию.
Apply - применить операции, описанные в этой форме и оставить форму на экране.
Help - выводит документ, содержащий дополнительную информацию.
Алгоритм создания форм.
Алгоритм создания форм – обратный. Сначала задаются поля, а затем сами формы:
-
Создаются поля, необходимые для формы, функциями для создания полей.
-
Создается сама форма, функцией hiCreateAppForm.
-
Используется функция hiDisplayForms, для отображения формы на экране или форма помещается в какое-либо окно c помощью функции hiOpenWindow.
Функции для создания полей форм:
hiCreateStringField - создает строковые поля.
hiCreateIntField - создает поле ввода целых чисел.
hiCreateFloatField - создает поле ввода чисел c плавающей точкой.
hiCreateCyclicField - создает циклическое поле.
hiCreateToggleField - создает переключательное поле.
hiCreateScrollRegion - создает линия прокрутки.
Все формы, и одномерные, и двумерные, создаются функцией hiCreateAppForm(…).
hiCreateAppForm(
?name s_name ; название формы
?fields l_fieldEntries ; список дескрипторов созданных полей
[?attachmentList l_fieldattachments] ; список подключенных полей
[?formTitle s_formTitle] ; имя, появляющееся в баннере данной формы
[?callback g_callback] ; выполняемая процедура
[?initialSize g_initialSize] ; размер формы при первом появлении на экране
)
У двумерных форм существуют следующие параметры:
list(
r_fildDescription ; дескриптор формы.
x_pos : y_pos ; координаты в пикселях, от левого верхнего угла.
x_width : y_height ; ширина и длина в пикселях.
[x_promptBoxWidth] ; ширина диалогового окна в пикселях )
x_pos : y_pos, x_width : y_height - эти параметры относятся только к двухмерным формам, если любого из них нет, то форма одномерная.
Почти все функции создания полей имеют одинаковый синтаксис.
Например, функция hiCreateIntField
hiCreateIntField(
?name s_fieldname ;название поля, ссылка на данное поле formHandle->hiFieldSym->value
[?prompt t_fieldPrompt] ; текст перед полем, ссылка на это значение
;formHandle->hiFieldSym->value
[?value x_currentValue] ; первоначальное и текущее значение поля, доступ к значению ;formHandle->hiFieldSym->value
[?defValue x_ defaultValue] ; значение поля по умолчанию
[?font t_font] ; шрифт
[?modifyCallback t_modifyCallback] ; имя вызываемой процедуры (исп. Для строковых ;полей)
[?editable g_editable] ; возможность редактирования (значения nil и t)
[?enabled g_enabled] ; делает поле активным (nil и t, по умолчанию t).
Отдельно стоит синтаксис функции hiCreateCyclicField:
hiCreateCyclicField(
?name s_fieldname ;название поля
?choices l_enumerations ; список строк и/или символов, которые должны быть ;зациклены.
[?prompt t_fieldPrompt] ; текст перед полем
[?value x_currentValue] ; первоначальное и текущее значение поля
[?defValue x_ defaultValue] ; значение поля по умолчанию
[?font t_font] ; шрифт
[?modifyCallback t_modifyCallback] ; имя вызываемой процедуры
[?enabled g_enabled] ; делает окно активным.
В форме можно создавать дополнительные кнопки, с помощью следующей функции:
hiCreateButton(
?name s_fieldname ;название поля
?buttonText t_buttonText ; текст кнопки
?callback t_callback ; выполняемая процедура, при нажатии данной кнопки
[?font t_font] ; шрифт
[?enabled g_enabled] ; делает кнопку активной
)
Пример:
someInt = hiCreateIntField(
?name 'numScoops
?prompt "Number of scoops (0..5)"
?value 2
?defValue 1
?range '(0 5) )
myCyclic = hiCreateCyclicField(
?name 'flavor
?prompt "Flavor"
?value "chocolate"
?choices list("chocolate"
"strawberry" "vanilla"
"peppermint" "coffee"
"green_tea") )
hiCreateAppForm( ?name 'iceCreamForm1
?formTitle "Ice Cream"
?callback "buildIceCreamCone()"
?fields list( someInt myCyclic )
?help "cream" )
status = hiDisplayForm( iceCreamForm1 )
Получится форма, в которой будет два поля Number of scoops и Flavor. При нажатии OK будет выполняться процедура buildIceCreamCone() с выбранными значениями.
Для отображения форм используется функция hiDisplayForm
hiDisplayForm(
r_form ; форма, с которой ведется работа
)
=> t / nil
Окна.
Окно – это прямоугольная область на экране, которая позволяет видеть графические выходные данные. Окна на экране могут накладываться друг на друга, быть вложенными.
Все окна имеют:
Границу, ширина которой 0 или более пикселей
Произвольный фон
Лист свойств
можно выбрать цвет границы и заголовка окна.
Каждое приложение может создавать свое собственное окно. Когда окно отображается на экране, для него генерируется уникальный номер окна, который отображается в правом углу заголовка. Строка меню окна находящаяся слева в заголовке может содержать определенные пользователем меню. Каждое окно содержит кнопку Help, которая находится слева от номера окна.
Для работы с окнами существует большое количество функций.
“Горячие” клавиши (bind keys)
Для удобства работы SKILL позволяет создавать комбинации горячих клавиш. Отобразить имеющиеся комбинации горячих клавиш позволяет функция
hiShowBindKeys(
[g_appTypeOrWindow] ; идентификатор приложений
)
=> t / nil
Примеры идентификаторов:
Command Interpreter (CIW окно),
Schematic (окно schematic )
Layout (окно layout )
Show File
Идентификатор можно не указывать, тогда на экране появиться форма, в которой можно выбрать приложение. После выбора отобразится список горячих клавиш.
Для задания горячих клавиш:
hiSetBindKey(
[t_application_type] ; Эта строка может быть идентификатором (см. выше).
[t_key ] ; строка, определяющая последовательность клавиш.
[t_skill_cmd] ;выполняемая SKILL функция.
)
=> t / nil
Если одновременно задавать несколько горячих клавиш, то необходимо использовать функцию hiSetBindKeys().
Могут быть применимы модификаторы:
Ctrl
Shift
Alt
Пример:
“Shift<key>3” Shift 3
“Alt<key>B” Alt B
“Alt<key>F2” Alt F2
Пример:
hiSetBindKey(
“Schematic”
“Shift<key>Z”
“hiZoomIn(hiGetCurrentWindow())”
)
При нажатии ShiftZ будет увеличиваться окно Schematic.
При создании горячих клавиш необходимо соблюдать некоторые ограничения. Например, нельзя использовать комбинацию Control-C. Все ограничения можно найти в документации.