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

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

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

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

typedef struct Pt_callback_info {

unsigned long reason;

unsigned long reason_subtype;

PhEvent_t *event;

void *cbdata;

} PtCallbackInfo_t;

Элементы структуры PtCallbackInfo_t имеют следующий смысл:

  • reason

– указывает причину вызова ответной реакции; обычно это устанавливается на имя ресурса ответной реакции, чей список ответных реакций был вызван.

  • reason_subtype

– указывает конкретный тип ответной реакции, связанный с reason; для большинства ответных реакций это значение равно 0.

  • event

– указатель на структуру PhEvent_t (см. "Справочник библиотечных функций Photon'а"), которая описывает событие Photon'а, послужившее причиной вызова ответной реакции.

  • cbdata

– вызывает данные, которые являются специфическими для ресурса ответной реакции, послужившей причиной вызова функции ответной реакции.

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

Удаление ответных реакций

Вы можете удалить одну или более ответных реакций из списка ответных реакций, связанных с ресурсом виджета, используя функции PtRemoveCallbacks() и PtRemoveCallback().

Не пытайтесь удалять ответные реакции, которые были добавлены через PhAB; результатом может стать непредсказуемое поведение.

Функция PtRemoveCallbacks() берёт массив записей ответных реакций как аргумент и удаляет все ответные реакции, заданные ей в списке ответных реакций. Функция PtRemoveCallback() удаляет только одну функцию ответной реакции из списка ответных реакций. Обе функции берут виджет как первый аргумент и ресурс виджета как второй аргумент.

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

int push_button_cb( PtWidget_t *, void *, PtCallbackInfo_t *);

PtCallback_t callbacks[] = { {push_button_cb, NULL} };

PtRemoveCallbacks(button, Pt_CB_ACTIVATE, callbacks, 1);

или так:

int push_button_cb( PtWidget_t *, void *, PtCallbackInfo_t *);

PtRemoveCallback(button, Pt_CB_ACTIVATE, push_button_cb,

[Прим.пер. – так в тексте, без последнего параметра. Вероятно, должнен быть равен 1].

Оба – указатель на функции ответной реакции и указатель на данные клиента – важны при удалении ответных реакций. Только первый элемент списка ответных реакций, который имеет одновременно и ту же функцию ответной реакции, и тот же указатель на данные клиента, будет удалён из списка ответных реакций.

Просмотр ответных реакций

Вы можете просмотреть список ответных реакций, чтобы получить значение соответствующего ресурса списка ответных реакций. Тип значения, которое Вы получаете из ресурса списка ответных реакций, отличается от значения, использованного для установки ресурса. Несмотря на то, что этот ресурс установлен на массив записей ответных реакций, значение, полученное при получении ресурса, является указателем на список записей ответных реакций. Типом этого списка является PtCallbackList_t. Каждый элемент списка содержит член cb (т.е. запись ответной реакции) и следующий указатель (который указывает на следующий элемент списка).

Следующий пример показывает, как Вы можете пройти по списку ответных реакций Pt_CB_ACTIVATE для виджета, чтобы найти все экземпляры конкретной функции ответной реакции cb:

...

PtCallbackList_t *cl;

PtGetResources(widget, Pt_CB_ACTIVATE, &cl, 0);

for ( ; cl; cl = cl->next )

{

if ( cl->cb.func == cb )

break;

}

Обработчики событий

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

 Описание необработанных и отфильтрованных ответных реакций, и то, как это используется, см. в разделе "Обработчики событий – необработанные и отфильтрованные ответные реакции" в главе "События".

Для получения более полной информации по добавлению обработчиков событий в PhAB см. раздел "Обработчики событий – необработанные и отфильтрованные ответные реакции" в главе "Редактирование ресурсов и ответных реакций в PhAB".

Добавление обработчиков событий

Как и в случае ответных реакций, Вы так же можете установить или просмотреть обработчики событий, чтобы выполнить установку или получить данные, в ресурсе обработчика событий. Следующие ресурсы в PtWidget позволяют Вам задавать обработчики для событий Photon'a:

  • Pt_CB_FILTER

  • Pt_CB_RAW

Для получения более полной информации по этим ресурсам ответных реакций см. "Справочник виджетов Photon'a".

Операция установки требует массива записей обработчиков событий типа PtRawCallback_t. Они похожи на записи ответных реакций, обсуждавшиеся выше, и имеют поля event_mask, event_f и data.

Поле event_mask – это маска типов событий Photon'a (см. описание PhEvent_t в "Справочнике библиотечных функций Photon'a"), указывающая, какие события будут являться причиной вызова функции ответной реакции [Прим. пер. Наверное, это неточность: не функции ответной реакции, а функции обработчика ]. Члены event_f и data – это функция обработчика события и данные клиента соответственно.

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

Если Вы добавляете обработчик событий перед тем, как реализовать виджет, Вы должны приспособить чувствительность региона сами, после того как виджет будет реализован. См. функцию PhRegionChange() в "Справочнике библиотечных функций Photon'a".

Операция получения данных получает список PtRawCallbackList* записей обработчиков событий. Как и в случае списка ответных реакций, список содержит два члена: next и cb. Член cb – это запись обработчика события.

Вы можете добавить обработчики событий Pt_CB_RAW, используя функции PtAddEventHandler() или PtAddEventHandlers(). Вы можете добавить обработчики событий Pt_CB_FILTER, используя функции PtAddFilterCallback() или PtAddFilterCallbacks(). Аргументами PtAddEventHandler() и PtAddFilterCallback() являются:

widget

Виджет, к которому должен быть добавлен обработчик события

event_mask

Маска событий определяет, какие события будут приводить к вызову обработчика событий

event_f

Функция обработки события

data

Указатель, передаваемый обработчику событий и указывающий на клиентские данные

Аргументами функций PtAddEventHandlers() и PtAddFilterCalbacks() являются:

widget

Виджет, к которому должны быть добавлены обработчики событий

handlers

Массив записей обработчиков событий

nhandlers

Число обработчиков событий, задаваемых в массиве

Удаление обработчиков событий

Вы можете удалить обработчики событий Pt_CB_RAW, вызвав функции PtRemoveEventHandler() или PtRemoveEventHandlers(). Вы можете удалить обработчики событий Pt_CB_FILTER, вызвав функции Pt_RemoveFilterCallback() или Pt_RemoveFilterCallbacks().

Не удаляйте обработчики событий, которые были добавлены через PhAB; результатом может стать непредсказуемое поведение.

Параметрами функций PtRemoveEventHandler() и PtRemoveFilterCallback() являются:

widget

Виджет, с которого удаляется обработчик событий

event_mask

Маска событий, задающая события, к которым чувствителен обработчик

event_f

Функция обработки события

data

Данные клиента, присоединённые к обработчику

Это выполняет поиск обработчика событий с такой сигнатурой – т.е. идентичными event_mask, data и event_f – в виджете и удалении такового, если он найден.

Параметрами функций PtRemoveEventHandlers() и PtRemoveFilterCallbacks() являются:

widget

Виджет, с которого удаляются обработчики событий

handlers

Массив записей обработчиков событий

nhandlers

Число обработчиков событий, определённых в массиве

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

Запуск обработчика событий

При запуске обработчики событий получают те же аргументы, что и функции ответных реакций, т.е. параметрами являются:

  • виджет, получивший событие (widget)

  • данные клиента, присоединённые к обработчику событий (client_data)

 Данные клиента, передаваемые обработчику событий, не являются такими, как и данные apinfo, передаваемые обработчику событий, добавленному через PhAB.

  • информация ответной реакции, связанная с конкретным событием (info).

Обработчики событий возвращают целое значение, которое обработчик события должен использовать для указания на то, должна ли или не должна производиться дальнейшая обработка события. Если обработчик событий возвращает значение Pt_END, это указывает, что дальнейшая обработка события Photon не выполняется, и событие исчерпано.

Член event параметра info содержит указатель на события, послужившие причиной запуска обработчика событий. Вы должны проверить для этого события член type, чтобы определиться, как поступить с этим событием. Это будет один из типов событий, определённых в event_mask, заданной при добавлении обработчика событий к виджету.

Для получения данных, присоединённых к конкретному событию, вызывается функция PhGetData() с указателем на событие в качестве параметра. Эта функция вернёт указатель на структуру с данными, специфическими для данного конкретного типа события. Этот тип структуры зависит от типа события.

Стили виджетов

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

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

Каждый экземпляр виджета может ссылаться на определённый стиль, обеспечиваемый его классом. Вы можете изменить стиль, которым какой-либо виджет сможет воспользоваться в любой момент, когда это Вам понадобится.

Каждый стиль имеет набор членов, включающих имя стиля и функции, которые заменяют или расширяют какие-либо методы класса виджета. Методы являются функциями уровня класса, определяющими, как виджет инициализирует себя, прорисовывает себя, вычисляет свои размеры и прочая. Для получения более полной информации о методах см. руководство "Построение подстраиваемых виджетов". Члены стиля определены следующими декларациями:

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

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

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

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