Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
76
Добавлен:
02.04.2015
Размер:
8.79 Mб
Скачать
          1. Использование флагов групп

Виджет Pt_Group включает набор флагов Pt_ARG_GROUP_FLAGS, которые могут быть использованы для управления тем, как порождённые виджеты могут быть выбраны, изменены в размерах и растянуты:

Pt_GROUP_EXCLUSIVE

Позволяет быть одновременно установленным только одному потомку. Этот флаг может использоваться, чтобы сделать группу кнопок-переключателей радиокнопками (т.е. установить взаимоисключающий выбор).

Pt_GROUP_ EQUAL_SIZE

Размещает все виджеты в сетке, используя выбранный для группы размер ячейки, основанный на ширине самого широкого потомка и высоте самого высокого. Размеры всех потомков при компоновке устанавливаются в эти размеры.

Pt_GROUP_ EQUAL_SIZE_HORIZONTAL

Делает все виджеты шириной, равной ширине самого широкого виджета.

Pt_GROUP_ EQUAL_SIZE_VERTICAL

Делает все виджеты высотой, равной высоте самого высокого виджета.

Pt_GROUP_ NO_SELECT_ALLOWED

Устанавливает этот флаг для исключающей группы, если обоснованно не иметь никакого набора потомков. Пользователь может снять выбор текущего набора потомков, щёлкнув на нём ещё раз.

Pt_GROUP_ NO_KEYS

Не позволяет пользователю перемещаться внутри группы с помощью клавиш со стрелками.

Pt_GROUP_NO_KEY_WRAP_HORIZONTAL

Не позволяет автоматически переходить на другую сторону группы при использовании клавиш с левой и правой стрелками (т.е. например, перейти в начало, достигнув конца. Прим. пер.).

Pt_GROUP_ NO_KEY_WRAP_VERTICAL

Не позволяет автоматически переходить в вершину или вниз группы при использовании клавиш со стрелками вверх и вниз.

Pt_GROUP_ STRETCH_VERTICAL

Растягивает нижнюю строку виджетов при расширении группы

Pt_GROUP_ STRETCH_HORIZONTAL

Растягивает правую колонку виджетов при расширении группы

Pt_GROUP_ STRETCH_FILL

Растягивает последний (ие) виджеты так, чтобы заполнить доступное свободное пространство в направлении, указанном в ориентации

 Не устанавливайте флаги Pt_GROUP_EQUAL_SIZE_... и Pt_GROUP_STRETCH_... для одного и того же направления – группа будет расширяться каждый раз, когда будет вычисляться его величина.

Для получения более полной информации см. описание виджета PtGroup в "Справочнике виджетов".

          1. Расщепление группы на составляющие

Чтобы расщепить группу на отдельные виджеты:

  1. Выберите группу

  2. Сделайте одно из следующего:

  • Выберите пункт "Split Apart" из меню "Edit"

  • Нажмите <Ctrl>+<P>

  • Щёлкните на иконке "Split" на панели инструментов PhAB:

PhAB разберёт группу на составляющие виджеты и удалит контейнер PtGroup.

    1. Управление привязкой с использованием анкеров – средств привязки

Вот общая ситуация компоновки, которая не управляется какой-бы то ни было политикой компоновки, рассматривавшейся нами. Предположим, что контейнер разделён на ряд панелей, ограниченных в своих размерах и местоположении. Обычно мы не желаем, чтобы панели перекрывались, и мы хотим управлять тем, как панели изменяют свои размеры, если сам контейнер увеличивается в размерах или сжимается. Механизм привязки обеспечивает это управление.

Анкеры предоставляются как механизм привязки позиции и размеров любого виджета внутри контейнера. Атрибут позиции и анкеры каждого потомка всегда используются для определения их позиций.

 В текущей версии microGUI Photon'а виджеты немедленно прикрепляются при создании. В более ранних версиях закрепление делалось, когда виджет реализовывался.

Анкер может быть задан для любой стороны порождённого виджета. Анкер прикрепляется к одной из сторон родителя. Он удерживает соответствующую сторону потомка на фиксированном расстоянии – смещении анкера от крепящей стороны родителя. Смещение анкера может быть также выражено как количественное соотношение ширины или высоты холста родителя.

Возможно – но не всегда желательно – прикреплять края виджетов за пределами холста его родителя.

Каждый раз при изменении размеров родителя позиция потомка (и возможно, его размеры) изменяются, чтобы сохранить это взаимоотношение. Если какая-либо сторона потомка не прикреплена к родителю, это позволяет ей свободно "плавать". Если Вы явно установили размеры и/или позицию для закреплённого виджета, смещения его анкера пересчитываются автоматически.

 При использовании PhAB Вы не задаёте смещения анкера. Вместо этого Вы позиционируете виджеты на желаемом смещении путём установки ресурсов позиции (Pt_ARG_POS) и размеров (Pt_ARG_DIM). PhAB вычисляет смещение анкера автоматически, основываясь на относительных размерах и позициях родителя и закреплённых потомков.

На ширину порождённого виджета влияют анкеры для его левой и правой сторон; на высоту – анкеры для верха и низа. Если любой из противоположных пар краёв позволено "плавать", стеснённость встречается при выборе только позиционировании виджета в соответствующих размерах. Это означает, что виджет может скользить в любом их четырёх направлений для удовлетворения анкерных ограничений. Если оба края "заякорены", виджет также должен изменять свои размеры в этом направлении.

              1. Рис. 7-1. Пример закрепления

 Если политика изменения размеров конфликтует с анкерами, флаги Pt_ARG_RESIZE_FLAGS переписывают Pt_ARG_ANCHOR_OFFSETS и Pt_ARG_ANCHOR_FLAGS.

Создание главного окна приложения представляет из себя простой пример использования анкерных ресурсов. В общем случае окно состоит по меньшей мере из двух частей: панель меню и рабочая область. Если рассматривать приложение, имеющее групповой виджет в рабочей области, мы можем идентифицировать типы анкеров, необходимые для того, чтобы сделать изменение его размеров в ответ на изменение размеров виджета окна корректным. Каждый край рабочей области прикреплён к соответствующему краю окна. Смещение левого и верхнего анкеров установлены такими же, как атрибуты позиции для виджета. Они должны быть вычислены, чтобы разместить рабочую область под панелью меню. Размеры виджета установлены в соответствии с желаемым объёмом рабочего пространства.

При реализации окно размещает рабочую область там, где это задано в её атрибутах позиционирования. Размеры окна устанавливаются настолько большими, чтобы вместить рабочую область. Если окно изменяет размеры, ширина и высота рабочей области меняет свои размеры соответственно, поскольку все края закреплены. Если смещения анкера были определены корректно, позиция виджета не изменится.

Мы ничего не делаем с панелью меню, поскольку она автоматически прикрепляется к вершине и сторонам окна.

Соседние файлы в папке Литература_1