Редактор свойств

Редактор свойств расположен в правой боковой панели раздела Front в виде вкладки с названием Properties.

Редактор свойств представляет собой таблицу из двух столбцов, разделённую по принципу ключ - значение: в левом столбце таблицы расположены названия свойств, в правом - значения этих свойств.

В верхней части редактора расположен заголовок вида Label_1 - Label, указывающий, что редактируемый компонент имеет имя Label_1 и является экземпляром класса Label. Ниже расположена первая строка таблицы instanceOf: Label, снабжённая иконкой класса.

Классы компонентов sFF создаются по всем правилам объектно-ориентированного программирования (ООП). Класс - шаблон для создания экземпляров классов (конкретных компонентов в модуле). В своём составе классы компонентов имеют свойства и методы. Свойства (property) - это поля (переменные) для хранения данных внутри класса. Методы (method) - поля для хранения функций внутри класса, оперирующие со свойствами класса.

Например, JS-класс (глобальный объект) Set содержит в себе свойство size, показывающее количество типа numeric содержащихся в нём элементов множества, и метод has(), возвращающий значение булева типа (true/false), показывая наличие/отсутствие в Set того или иного элемента.

Прочитать свойство size мы можем вызовом Set.size, а выполнить метод has() вызовом Set.has(). В данном случае, контейнером для size и has() является Set, внутри которого лежат и свойство и метод.

Пространство имен (namespace) - это объединение набора переменных, функций, объектов в пределах установленного контейнера. Обычно, обращение к свойствам и методам класса выполняется при двухуровневой адресации (сперва Set, затем size). Но с целью упорядочивания свойств и методов при наследовании классов, в sFF введён дополнительный уровень промежуточного контейнера-объекта (object). Данный объект при наследовании создаётся и в дочернем классе, сохраняя в ребёнке логику расположения свойств и методов родителя. Этот промежуточный контейнер назван включенным классом (includedClass), хотя часть из этих контейнеров являются объектами ({ }), а часть - невизуальными классами, создаваемыми при помощи оператора new (агрегатами).

При таком решении очевидно, что Panel.cursor - это всегда тип курсора, возникающего над компонентом, а верхний адрес Label.Panel.cursor и Panel.Panel.cursor показывает, что в первом случае это свойство типа курсора для компонента Label, а во втором - для компонента Panel.

Всё дальнейшее содержимое таблицы сгруппировано по именам включенных классов, а свойства внутри включенных классов отсортированы по алфавиту.

В Редакторе свойств верхний адрес (имя класса) свойства указан в заголовке таблицы (Label), средний адрес (имя включенного класса) в подзаголовках таблицы (Panel), а нижний адрес (имя свойства) - в левом столбце (key).

В верхней части следует обязательный для всех визуальных классов компонентов sFF включенный класс Panel. В самом низу расположены включенные классы (BgColor, Border, BorderColor, Shadow, ShadowColor, Hint, Menu, Signal и скрытый Anch), входящие в класс компонента. Между включенным классом Panel и ними располагаются включенные классы самого класса компонента (например, для компонента Label_1 это будут Label, LabelFont, LabelFontColor).

В Редакторе свойств отображаются только видимые свойства классов. Подробнее о свойствах классов компонентов - в разделе Компоненты базовой библиотеки.

Каждому типу свойств компонента в редакторе предназначен свой тип редактирования:

Строка (s) - поле текстового редактирования
Целое (i) - поле с кнопками выбора значения
Дробное (f) - поле с дробной частью и кнопками выбора значения
Булево (b) - поле с выбором из двух вариантов
Массив (a) - поле с выбором из нескольких вариантов
Цвет (clr) - селектор цвета

При нажатии на значение свойства Panel.name открывается окно редактирования имени компонента. В результате выполнения операции активный компонент будет переименован.

При нажатии на значение свойства Panel.parentPane открывается окно выбора нового родителя компонента. Этот древовидный список напоминает список Дерева объектов, однако в нём отсутствуют компоненты, являющиеся дочерними для активного компонента, чтобы исключить ненужную ошибку при попытке сделать родительский компонент дочерним для своего собственного дочернего компонента. В результате выполнения операции активный компонент получит нового родителя и переместится в него, если позволят существующие привязки.

Last updated