Руководство программиста в Photon (1037671), страница 2
Текст из файла (страница 2)
Пример 294
Глава 21. "Тащить и бросать" 297
Механизм транспортировки 297
Использование "тащи и бросай" 298
Запуск операции "тащи и бросай" 298
Получение событий "тащи и бросай" 300
Отмена операции "тащи и бросай" 302
Регистрация новых транспортных типов 303
Простая структура данных 303
Более сложная структура 305
Транспортные функции 308
Глава 22. Регионы 310
Координатное пространство Photon'а 310
Координаты региона 311
Начало координат региона 311
Начальные размеры и расположение 311
О регионах потомка 312
Регионы и отсечение событий 313
Месторасположение и иерархия 313
Использование регионов 316
Открытие региона 316
Размещение регионов 317
Системная информация 318
Глава 23. События 319
События мыши 319
Генерирование событий 321
Нацеливание на определённые регионы 322
Нацеливание на определённые виджеты 322
События, генерируемые клавиатурными клавишами 322
Координаты события 323
Обработчики события – необработанные и отфильтрованные ответные реакции 324
Накопление событий 325
Сжатие событий 326
Перетаскивание 326
Инициализация перетаскивания 326
Контурное перетаскивание 327
Непрозрачное перетаскивание 328
Обработка событий перетаскивания 328
Глава 24. Управление окнами 331
Флаги управления окнами 331
Флаги отображения окна 331
Флаги управления окном 332
Оконные флаги уведомления 332
Ответная реакция уведомления 333
Получение и установка состояния окна 334
Управление несколькими окнами 336
Функции управления окнами 336
Запуск самостоятельного приложения 336
Модальные диалоги 337
Глава 25. Программирование в Photon'е без PhAB'а 341
Основные шаги 341
Компилирование и линковка не PhAB'овского приложения 341
Образец приложения 342
Что происходит 342
Подсоединение программного кода приложения к виджету 344
Ответные реакции 345
Обработка событий 345
Полный пример приложения 345
Приложение 1. Архитектура Photon'а 347
Пространство событий 347
Регионы и события 348
События 348
Начальный набор прямоугольников 348
Накопленный набор прямоугольников 348
Регионы 349
Чувствительность 350
Непрозрачность 350
Краткая сводка атрибутов 350
Регистрация событий (event logging) 350
Модификация событий 351
Взаимосвязь родитель/потомок 351
Координатное пространство Photon'а 351
Корневой регион 351
Типы событий 351
Как владельцы регионов уведомляются о событиях 352
Упорядоченный опрос 352
Синхронное уведомление 352
Асинхронное уведомление 352
Регион устройств 353
Фокусировка указателя 353
Фокусировка клавиатуры 353
События перетаскивания 353
Событие "тащи и бросай" 353
Драйверы фотона 354
Драйверы ввода 354
Драйверы вывода 354
Оконный менеджер Photon'а 355
Регионы оконных рамок 356
Регион фокусировки 356
Регион рабочей области 356
Регион фона 356
ПРИЛОЖЕНИЕ 2. ОБЗОР ВИДЖЕТОВ 357
Приложение 3. Поддержка многоязычности Unicode 360
Широкие и многобайтовые символы 360
Unicode 360
UTF-8 кодирование 361
Функции преобразования 362
Другие кодировки 362
Драйверы клавиатуры 363
Слепые клавиши (dead keys) и скомпонованные последовательности 363
Скомпонованные последовательности Photon'а 364
Приложение 4. Photon во встроенных системах 367
Принимаемые допущения 367
Введение 367
Шаг 1. Экспорт переменной окружения PHOTON_PATH 368
Шаг 2. Запуск сервера Photon'а 369
Шаг 3. Запуск драйверов ввода 369
Шаг 4. Запуск менеджера шрифтов 370
Конфигурирование шрифтов 370
Запуск сервера шрифтов 371
Шаг 5. Переключение в графический режим 372
Установка карты в правильный режим 372
Шаг 6. Запуск графического драйвера 373
Шаг 7. Запуск оконного менеджера 374
Необходимые файлы 374
Шаг 8. Запуск Вашего приложения 374
Необходимые файлы 374
Пояснения 374
Флэш-файловая система 375
Графика 375
Пример 376
Требуемые бинарные файлы 376
Требующиеся библиотеки 377
Требуемые шрифты 378
Службы шрифтов 379
Сборка всего этого в единое целое 380
Полезные советы 382
Приложение 5. Использование PhAB под Microsoft Windows 383
Photon в одиночном окне 383
Завершение PhAB 383
Дополнительные опции 384
Файловые имена с буквами в обоих регистрах 384
DDD – Отладчик Отображения Данных 384
Строка запуска отладчика 385
Функциональность панели управления ресурсами 385
Разработка индивидуальных виджетов и PhAB 386
Статическое линкование Ваших индивидуальных виджетов 386
Глоссарий 388
Ненеобходимое послесловие переводчика. 398
Небольшое пояснение переводчика
Это «Руководство программиста в Photon» представляет собой ну очень черновой вариант перевода, осуществлённый исключительно в ДСП-целях. Перевод писался, во-первых, в спешке, во-вторых, урывками. Поэтому читатель не найдёт здесь ни выверенных формулировок, ни корректного соответствия оригиналу, ни точности в терминах, ни… В общем, это просто “stub”, как выражаются в этой книге. Когда переводчик не понимал того, что написано, он не пытался вникать в суть, а, махнув рукой, писал что-то полувнятное и мчался дальше.
Кроме того, читатель вправе спросить, почему такие странные рисунки. Отвечаю: да, конечно, можно было просто скопировать в документ рисунки из оригинала, которые, в свою очередь, являются просто съёмками с экрана. Но. Такие рисунки плохо обрабатываются матричным принтером (счастливым обладателем какового является переводчик) – медленно и грязно. Поэтому оригинальные рисунки и заменены тем, что можно было бы назвать карикатурами, если бы не явное отсутствие таланта вышеупомянутого переводчика. Впрочем, мне кажется, произвести замену этих рисунков на оригинальные достаточно легко и быстро выполнимо. Было бы желание.
В заключение прошу прощения у всех тех, кому придётся читать это. Не надо ругать переводчика, ибо это даже не случай «не стреляйте в тапёра – он играет как может»: пресловутый переводчик совсем не может. Просто нужда заставила, соображения, что программистам, не владеющим английским, лучше прочитать это, чем вообще ничего.
Очень черновой перевод by Зайцев В.
От того, кто правил
Я постарался сделать этот текст более удобным для чтения как с экрана, так и в отпечатанном виде. Кроме того, где это было необходимо привел текст в соответствие с текущей редакцией на сайте QSSL. Для лучшего восприятия текста я все-таки заменил большую часть картинок в тексте на оригинальные – думаю так проще людям, впервые увидившим PhAB и иже с ним разобраться что к чему.
Горе-редактор Попелов М.
Введение
Итак, Вы уже, вероятно, увидели и испытали различные приложения Photon'а – оконный менеджер, просмотрщик Help'ов, игры и прочая – и готовы разрабатывать свои собственные приложения. Эта глава знакомит Вас с базовыми понятиями и концепциями, которые Вы будете использовать при разработке Photon'овских приложений.
В неё включены:
-
обзор архитектуры Photon'а;
-
построитель Photon'овских приложений – PhAB;
-
концепции виджетов;
-
образец программирования;
-
библиотеки Photon'а;
-
обзор построения приложений с помощью PhAB;
-
написание приложений без PhAB.
Обзор архитектуры Photon'а
Менеджер Photon'а функционирует, как маленький сервер-процесс, включающий лишь несколько основных примитивов. Он создаёт трёхмерное пространство событий, заполненное областями и событиями. Этот менеджер не способен рисовать что-либо или работать с мышью, клавиатурой, пером.
Внешние, необязательные процессы – включая драйверы устройств, оконный менеджер или другие менеджеры – обеспечивают высокоуровневое функционирование оконной системы. Они связываются путём генерации событий в Photon'овском пространстве событий. Приложение Photon'а состоит из одной или более плоских, прямоугольных областей, которые действуют как "агенты" приложений в пространстве событий. Приложение рисует внутри области. Области сложены одна поверх другой в пространстве событий Photon'а. Область может иметь родительскую область и область одного с ней уровня (сёстры-области). Пользователь пребывает вовне пространства событий, наблюдая его спереди. Глубоко сзади в пространстве событий расположена особая область, называемая корневой областью (см. рис. 1).
Когда Вы запускаете приложение, Вы взаимодействуете с ним, и оно взаимодействует с другими приложениями и Photon'ом различным образом:
-
Вы нажимаете клавиши и кнопки мыши;
-
приложение выполняет графические операции;
-
и т.д.
Эти взаимодействия называются событиями, и они перемещаются между областями в пространстве событий подобно фотонам света.
Пространство событий
Рис. 1. Пространство событий Photon'а с точки зрения пользователя
Например:
Когда Вы нажимаете кнопку мыши, драйвер устройства генерирует событие и отсылает его назад через пространство событий (в сторону корневой области). Область, которая интересуется событием, может его перехватить и обработать, например, активизировав нажатие кнопки.
Когда Ваше приложение желает что-либо нарисовать, оно генерирует событие и отсылает его вперёд (в сторону пользователя). Драйвер может перехватить событие и сформировать изображение на экране.
Каждая область может определить, в каких областях она заинтересована, путём установки своей чувствительности и непрозрачности:
Область, чувствительная к определённому типу событий, уведомляет приложение всякий раз, когда такое событие пройдёт сквозь неё.
Область, непрозрачная к определённому типу событий, блокирует его путём отсечения своей собственной зоны от области событий.
Для получения более полной информации см. приложение к Архитектуре Photon'а.
Построитель Photon'овских приложений – PhAB
microGUI (микроГрафический Пользовательский Интерфейс) включает очень мощный инструмент разработки, называемый Построитель Приложений Photon'а (Photon Application Builder, сокращённо PhAB или appBuilder). Это инструмент визуального проектирования, генерирующий базовый код С и/или С++, обеспечивающий пользовательский интерфейс для Ваших приложений. С помощью PhAB Вы можете в чрезвычайной степени уменьшить объём программирования, требуемый для построения Вашего приложения. Вы можете сэкономить не только время, необходимое для написания части Вашего кода, относящегося к пользовательскому интерфейсу, но также время на отладку и тестирование. PhAB поможет Вам получить Ваши приложения более быстро продаваемыми и с более профессиональными результатами.
PhAB берёт на себя задачу о проектировании и создании окон, меню, диалогов, иконок, виджетов (кнопок, меток и прочая), и обратной реакции виджетов со многими расширениями. PhAB даёт Вам возможность получить доступ и создавать модули PhAB внутри Вашего собственного кода. Он также предоставляет набор функций-утилит для установки базы данных виджетов, которые Вы сможете использовать многократно столько раз, сколько потребуется, а не создавать виджеты с нуля.
Получение немедленных результатов
PhAB позволяет Вам избежать процесса создания пользовательского интерфейса вручную методом проб и ошибок. Вместо написания кода для каждой кнопки, окна и иных виджетов, Вы создаёте желаемые вам виджеты просто "указав и кликнув1".
Как только вы создали виджет, PhAB отображает его на экране вместе со всеми ресурсами, управляющими тем, как данный виджет выглядит и ведёт себя. Изменить любой ресурс виджета легко – просто щёлкните на ресурсе, выберите новое значение, и дело сделано. Так же легко переместить виджет или изменить его размеры – просто укажите на виджет и перетащите его мышкой.
Концентрация на функциональности
Подобно другим средам разработки GUI (Графическим Пользовательским Интерфейсам), PhAB позволяет Вам прикрепить коды функций к ответным реакциям виджетов (callback – ответная реакция в вольном переводе, это термин PhAB, особая вкладка в PhAB. Прим. пер.), обеспечивая Вашему приложению функциональность. Например, Вы можете прикрепить код функции к кнопке, так что функция будет вызываться каждый раз, когда пользователь щёлкнет на кнопке.
Далее, PhAB не принуждает Вас писать и прикреплять код, необходимый для "склеивания" вместе различных частей Вашего интерфейса. Вместо этого Вы можете прикрепить ответные реакции виджетов непосредственно к любому окну, диалогу или меню. Единственный код, о котором Вам придётся беспокоится – это код, специфический для Вашего приложения.
Создание прототипов без написания кода
Как только Вы завершили любую часть пользовательского интерфейса, Вы можете, имея PhAB, сгенерировать весь С и/или С++ код, требуемый для того, чтобы оживить интерфейс, что означает, что Вы можете создать полностью прототип, не написав ни строчки кода.