Главная » Просмотр файлов » Руководство программиста в Photon

Руководство программиста в Photon (1037671), страница 24

Файл №1037671 Руководство программиста в Photon (Раздаточные материалы) 24 страницаРуководство программиста в Photon (1037671) страница 242017-12-25СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 24)

Следующий пример показывает, как располагаются несколько потомков, если группа использует вертикальную ориентацию с пятью пикселями свободного пространства между потомками:

Если ориентация изменена на горизонтальную, группа выглядит так:

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

Выстраивание виджетов построчно и в колонки

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

Интерпретация этого ресурса зависит от ориентации:

  • Когда ориентация вертикальная, этот ресурс определяет число отображаемых строк; число колонок вычисляется на основе числа виджетов, чтобы получить верное число строк:

  • В противном случае значение определяет число колонок, и виджет вычисляет число строк:

Последняя строка или колонка может иметь меньшее количество виджетов, чем остальные.

Когда элементы группы скомпонованы в строки и колонки, сами виджеты могут быть тесно упакованы или же они могут быть расставлены с равными интервалами построчно и/или колонками. Это управляется ресурсом Pt_ARG_GROUP_SPACING.

Использование флагов групп

Виджет 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. Выберите группу

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ресурсы анкеров

Ресурс Pt_ARG_ANCHOR_FLAGS (определённый для PtWidget) управляет прикреплением анкерами. Среди анкерных флагов имеются три, связанные с каждым краем виджета, эти три флага позволяют каждому краю быть прикреплёнными одним из трёх возможных способов:

  • прикрепиться к соответствующему краю его родителя

  • прикрепиться к противоположному краю его родителя

  • задать определённое местоположение, т.е. в какой-то пропорции от ширины или высоты виджета.

Эти флаги используют такие именующие схемы:

Pt_edge_ANCHORED_anchor

где

edge является именем закрепляемого края и должно быть TOP, LEFT, RIGHT или BOTTOM, т.е. верхний, левый, правый и нижний края соответственно;

anchor является именем родительского края, к которому производится прикрепление, т.е. родительского edge (см. выше), или принимать значение RELATIVE для пропорционального анкера.

Таким образом, определены следующие флаги (не, ну уже для совсем непонятливых!!! Прим. пер.):

  • Pt_LEFT_ANCHORED_LEFT

  • Pt_LEFT_ANCHORED_RELATIVE

  • Pt_LEFT_ANCHORED_RIGHT

  • Pt_RIGHT_ANCHORED_LEFT

  • Pt_RIGHT_ANCHORED_RELATIVE

  • Pt_RIGHT_ANCHORED_RIGHT

  • Pt_TOP_ANCHORED_BOTTOM

  • Pt_TOP_ANCHORED_RELATIVE

  • Pt_TOP_ANCHORED_TOP

  • Pt_BOTTOM_ANCHORED_BOTTOM

  • Pt_BOTTOM_ANCHORED_RELATIVE

  • Pt_BOTTOM_ANCHORED_TOP

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

Установка флагов анкеров в PhAB

Чтобы установить флаги анкера, щёлкните на ресурсе флагов анкера (Pt_ARG_ANCHOR_FLAGS) и используйте редактор флагов PhAB:

Установка флагов анкеров в программном коде Вашего приложения

Вы можете также установить эти флаги из Вашего программного кода, используя метод, описанный в главе "Манипулирование ресурсами в программном коде приложения". Для удобства каждый набор флагов имеет объединённую маску битов:

  • Pt_LEFT_IS_ANCHORED – выделяет биты, отвечающие за задание анкера для левого края

  • Pt_RIGHT_IS_ANCHORED – выделяет биты, отвечающие за задание анкера для правого края

  • Pt_TOP_IS_ANCHORED – выделяет биты, отвечающие за задание анкера для верхнего края

  • Pt_BOTTOM_IS_ANCHORED – выделяет биты, отвечающие за задание анкера для нижнего края.

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

PtSetArg(&arg[n], Pt_ARG_ANCHOR_FLAGS,

Pt_LEFT_ANCHORED_LEFT | Pt_RIGHT_ANCHORED_RIGHT |

Pt_TOP_ANCHORED_TOP,

Pt_LEFT_IS_ANCHORED | Pt_RIGHT_IS_ANCHORED |

Pt_TOP_IS_ANCHORED);

При установке анкерных флагов из программного кода Вашего приложения все смещения анкера задаются путём использования ресурса Pt_ARG_ANCHOR_OFFSETS. Этот ресурс берёт структуру PtRect_t (см. "Справочник по библиотеке Photon") как значение. Верхний левый угол прямоугольника используется для определения смещения анкера для верхнего и левого краёв виджета, и нижний правый угол прямоугольника указывает смещение анкера для правого и нижнего краёв.

Так, например, чтобы сделать рабочую область в 90% от ширины окна с равным размером обоих сторон, левый и правый края прикрепляются, используя следующий код:

PhRect_t offsets;

offsets.ul.x=50;

Характеристики

Тип файла
Документ
Размер
7,62 Mb
Тип материала
Высшее учебное заведение

Список файлов учебной работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее