Руководство программиста в Photon (953920), страница 73
Текст из файла (страница 73)
ph -kill
в ответ на приглашение команды Windows.
Дополнительные опции
Если Вы хотите задать опции командной строки для pwm или сервера photon, Вы должны использовать следующие переменные окружения:
-
PWMOPTS
-
PHOTONOPTS
Чтобы установить эти переменные окружения, используйте ярлык "Environment" (в "system program" "Панели управления Windows"). Подробности об опциях командной строки для любой утилиты QNX см. в "Справочнике утилит QNX Neutrino".
Файловые имена с буквами в обоих регистрах
При переводе PhAB'овского проекта из QNX в Windows Вы можете столкнуться с проблемами, связанными с регистрами, в которых написаны имена файлов. QNX и UNIX-системы обращают внимание на регистры букв в именах файлов, тогда как Microsoft Windows – нет. Это приводит к следующим основным проблемам:
-
Потеря оригинальных регистров букв в именах файлов при переводе. Одним из способов "добиться" этого – копирование всех файлов одновременно с использованием FTR. Например, файл IntHandler.C может на компьютере-адресате стать INTHANDLER.C или inthandler.c, что приведёт к ошибкам компиляции или линковки.
Одним из способов избежать этого – это использование под QNX утилиты zip для создания единого сжатого файла, и затем использование Winzip под Windows для распаковки zip-файла. Winzip учитывает регистры букв распаковываемых файлов.
-
Потеря целых исходных файлов, чьи имена различаются только регистрами букв. Windows не хранит в одной директории несколько файлов, отличающихся только регистрами букв в именах. Здесь мы ничего не можем поделать, потому что это основа собственно Windows. Перед тем как переводить проекты из QNX в Windows, переименуйте такие файлы, так чтобы их имена отличались не только регистрами букв.
DDD – Отладчик Отображения Данных
DDD (Data Display Debugger) – это визуальный отладчик, предоставляющий графический интерфейс для GDB. Вы можете загрузить DDD для кросс-разработки QNX в Windows из экспериментального раздела на http://qdn.qnx.com.
Проверьте, что загружаемая версия совпадает с текущей версией Вашего пакета кросс-разработки QNX.
Более полную информацию о DDD см. на http://www.gnu.org/software/ddd.
Если Вы установили DDD, Вы можете изменить предустановки ("Preferences") PhAB'а, так чтобы использовать DDD как отладчик по умолчанию (вместо версии gdb, работающей из командной строки). Вы можете использовать DDD и вне PhAB, просто набрав в командной строке Windows команду ddd -debugger ntox86-gdb ...
DDD, равно как и PhAB, в настоящий момент не выполняется под Windows 95/98/Me.
DDD является приложением X Windows System, что подразумевает, что у Вас должен быть запущен на компьютере Х-сервер, для того чтобы отображать DDD. Когда DDD стартует, он использует любой Х-сервер, который уже запущен. Если ничего не запущено, стартует простой принимаемый по умолчанию Х-сервер.
Строка запуска отладчика
В диалоге "Build+Run" PhAB'а есть кнопка "Advanced Options", вызывающая диалог "Build Preferences" (более подробно см. главу "Генерация, компиляция кода и запуск на исполнение"). Здесь Вы можете определить команду отладчика, которую будет использовать PhAB. По умолчанию PhAB в Windows принимает команду:
gdb.bat -debugger nto$TPR-gdb --symbols
Она запускает команды пакетного файла gdb.bat. Если Вы установили DDD и хотите запускать его в качестве принимаемого по умолчанию отладчика, просто измените gdb.bat на ddd.bat и оставьте всё остальное как было.
PhAB автоматически устанавливает переменную окружения TPR перед вызовом команды отладки. Она содержит имя текущего целевого процессора, как он был определён при последнем исполнении построения проекта. В настоящий момент возможными значениями являются х86, ppc, mips, sh и arm. Наличие этой переменной в команде отладки приводит к автоматическому выбору нужного исполняемого файла отладчика для DDD.
Наконец, поскольку версия PhAB под Windows никогда не используется для хостинга самого себя, PhAB передаёт опцию --symbol в GDB по умолчанию. Это аналогично команде symbol отладчика GDB и делает символы загрузки gdb из PhAB исполняемыми, не делая его программой исполняемой, когда Вы используете команду run. Это позволяет Вам запустить исполняемый файл на удалённом компьютере. Вот команды инициализации из типичной сессии отладки после того, как был запущен DDD или GDB с использованием принятой по умолчанию командной строкой запуска:
(gdb) target qnx com1
(gdb) upload myprog
(gdb) run myprog
(gdb) break main
(gdb) continue
Мы здесь предполагаем, что мы подсоединены к целевой машине через последовательный порт com1 и что удалённый агент отладки pdebug на целевой машине уже запущен.
Функциональность панели управления ресурсами
Версия PhAB под Photon тормозит в сравнении с натуральной версией под QNX при заполнении панели управления ресурсами. Если панель управления ресурсами отображается и не перекрыта другой панелью управления, она обновляется каждый раз, когда Вы выбираете другой виджет.
Чтобы исключить эти нежелательные паузы и уменьшить время отклика при выборе виджета, Вам имеет смысл держать панель управления ресурсами скрытой под другой панелью управления до тех пор, пока Вам на самом деле она не понадобится.
Разработка индивидуальных виджетов и PhAB
Photon позволяет Вам создавать приложения, используя виджеты, которые Вы создали сами или получили от сторонних разработчиков. Вы можете встроить эти библиотеки "заказных" виджетов в своё приложение и запускать его на Вашей планируемой целевой машине.
Документация, описывающая написание исходного кода для разрабатываемых индивидуальных виджетов, получение их при работе Вашего приложения на целевой машине, и того, как добиться, чтобы PhAB распознавал Ваши индивидуальные виджеты, собрана в руководстве "Построение индивидуальных виджетов". Процесс, который делает все эти вещи, в сущности одинаков для всех платформ хост-машин.
PhAB умеет динамически подгружать индивидуальные виджеты и затем должным образом их отображать так, как Вы разработали Ваше приложение на хост-машине. До того как это стало возможным, Вы могли бы установить размеры и задать ресурсы и ответные реакции, но эти установки не будут в действительности иметь эффекта и отображаться до тех пор, пока Вы не запустите приложение на целевой машине.
Чтобы PhAB отображал индивидуальные виджеты корректно на хост-машине при разработке Вашего приложения, вам необходимо предпринять некоторые дополнительные шаги, которые зависят от платформы хост-машины. Вам понадобится перекомпилировать и слинковать исходный код индивидуальных виджетов под платформу и процессор хост-машины. Под OC QNX это означает построение библиотек совместного доступа, которые PhAB динамически погружает во время исполнения приложения. Под Windows процесс слегка отличается и работает, используя статическую линковку.
Статическое линкование Ваших индивидуальных виджетов
Для следующей ниже процедуры мы предполагаем, что Вы уже выполнили шаги, которые не являются специфическими для платформы хост-машины. Вам нужно:
-
Иметь исходный код индивидуальных виджетов
-
Построить целевые библиотеки из Ваших исходников индивидуальных виджетов
-
Добавить соответствующие входы в файлы определения палитры PhAB
-
Создать изображение иконки и файлы ресурсов по умолчанию в директории шаблонов templates.
После того как Вы сделали всё вышеперечисленное, выполните следующие шаги:
-
Загрузите и инсталлируйте окружение разработчика Cygwin из www.cygwin.com. Это Unix-подобная система с открытым кодом, предлагающая основанное на gcc окружение разработки под Windows.
-
Напишите функцию С, действующую как таблица для просмотра индивидуальных виджетов PhAB'а для всех индивидуальных виджетов. Вы должны присвоить ей имя get_custom_wgt(), и она должна проверять передаваемое ей имя класса виджета и возвращать соответствующий указатель на класс виджета. Например:
#include <Pt.h>
extern PtWidgetClassRef_t *MyWidget;
PtWidgetClassRef_t **get_custom_wgt( const char *name ) {
if (!strcmp(name, "MyWidget")) return &MyWidget;
else return NULL;
}
-
Откомпилируйте Вашу функцию индивидуального виджета и функцию таблицы просмотра, используя Cygwin'овский транслятор gcc:
gcc -c -D__LITTLEENDIAN__ -D__X86__ \
-I /usr/lib/gcc-lib/i686-pc-cygwin/*/include \
-I /usr/include \
-I $QNX_HOST/usr/include -I$QNX_TARGET/usr/include \
MyWidget.c get_custom_wgt.c
-
Сделайте резервную копию оригинального файла ab.exe, который имеется в поставке PhAB.
-
Слинкуйте Ваши объектные файлы индивидуальных виджетов, чтобы создать новую версию ab.exe:
ld $QNX_HOST/usr/photon/appbuilder/ab.o MyWidget.o \
get_custom_wgt.o -o ab.exe -lcygwin -lkernel32
-
Замените имеющийся исполняющийся файл PhAB новым, Вами построенным. Вы должны выйти из PhAB, чтобы это сделать.
cp ab.exe $QNX_HOST/usr/photon/appbuilder/ab.exe
В следующий раз, когда Вы запустите PhAB после выполнения этих шагов, Вы сможете увидеть индивидуальные виджеты, корректно отображаемые, когда Вы с ними будете работать.
Глоссарий
-
accelerate
Клавиша акселератор. - См. hotkey
-
activate
Активация (приведение в действие). Виджет обычно активирован, когда Вы отпускаете кнопку мыши в то время, когда указываете на взведенный (armed) виджет.
-
activate window
Активное окно. Окно, имеющее в данный момент фокус (focus)
-
anchor offset
Смещение привязки. Расстояние между краями некоторого виджета и родительского виджета, к которому он привязан (anchored).
-
anchor
Привязка. Механизм ограничения, использующийся для управления тем, что происходит с виджетом, когда его родитель расширяется или сужается. Например, панель, привязанная к сторонам окна, расширяется или сужается, когда изменяются размеры окна.
-
application region
Регион приложения. Регион (region), принадлежащий приложению Photon'а (в противоположность системным процессам Photon'а, таким как оконный менеджер, графические драйверы, прочая). Регион приложения обычно размещается позади региона устройств (device region). Также называется регионом окна (window region).
-
argument list
Список аргументов. Некий массив типа PtArg_t, используемый при установке и получении ресурсов виджета.
-
arm
Взведение (приведение в состояние готовности). Виджет обычно взводится (armed), когда Вы нажимаете кнопку мыши в момент, когда указатель мыши находится на виджете.
-
backdrop
Фон. Изображение, которое отображается в качестве фона на Вашем экране.
-
backdrop regin
Регион фона. Регион, размещённый позади всех окон для отображения фонового изображения.
-
balloon
Всплывающая подсказка. Маленький прямоугольник, который всплывает для того, чтобы охарактеризовать или объяснить часть пользовательского интерфейса. Всплывающая подсказка отображается, когда указатель мыши задерживается над виджетом.
-
bitmap
Побитовый образ. Цветная картинка, состоящая из одной или нескольких побитовых плоскостей (bitplanes)
-
bitplane
Побитовая плоскость. Массив битов, представляющих в побитовом образе (bitmap) пиксели одного цвета.
-
blit
Блитирование. Операция, перемещающая некую область графического контекста (напр., экран) в другую область с таким же или иным контекстом.
-
callback
Ответная реакция. Функция ответной реакции (callback function) или ресурс ответной реакции (callback resource).
-
callback function
Функция ответной реакции. Код, соединяющий некий пользовательский интерфейс приложения с кодом приложения. Например, ответная реакция вызывается при нажатии на кнопку.
-
callback resource
Ресурс ответной реакции. Ресурс (resource), который определяет список функций и их клиентские данные, вызываемых при совершении определённого действия.
-
canvas
Холст. Часть виджета, используемая под прорисовку. Для PtWidget это область внутри границ виджета. Для PtBasic и его потомков полотнищем является область границ виджета и окаймления (margins). Другие виджеты, такие как PtLabel, могут определять дополнительные окаймления.
-
class
Класс. См. класс виджета (class widget).
-
class hierarchy
Иерархия классов. Взаимосвязи между всеми классами виджетов.
-
client data
Данные клиента. Какие-либо произвольные данные, которые нужны приложению для выполнения функции ответной реакции.
-
clipping list
Список отсечений. Некий массив прямоугольников, используемый для ограничения вывода в определённые области .
-
clipping rectagle
Прямоугольник отсечения. Прямоугольник, использующийся для ограничения вывода в определённую область.
-
CMY value
Значение CMY. Цвет, выраженный в уровнях голубого, сиреневого и жёлтого (C[yan]M[agenta]Y[ellow])
-
CMYK value
Значение CMYK. Цвет, выраженный в уровнях голубого, сиреневого, жёлтого и чёрного.
-
code-type link callback
Связанная ответная реакция кодового типа. В приложении PhAB – некая функция, вызываемая при вызове списка ответных реакций.
-
color depth
Глубина цвета. Число битов на пиксель для экрана или попиксельного отображения.
-
Common User Access
Общепользовательский доступ. См. CUA.
-
compose sequence
Составная (формируемая) последовательность. Последовательность нажатий клавиш, которая может использоваться для набора символов, которых может не оказаться на клавиатуре.
-
console
Консоль. Один из девяти виртуальных экранов рабочего стола (desktop). Также называется рабочим пространством (workspase).
-
consume
Поглощение. Когда виджет обработал какое-то событие и взаимодействие других виджетов с этим событием не допускается, говорят, что первый виджет поглотил (consumed) событие.
-
container
Контейнер. Виджет, который может иметь другие виджеты в качестве потомков, например, PtWindow, PtGroup и PtOSContainer.
-
cooked event
Сотворённое событие. Событие нажатия клавиши или кнопки мыши, назначенное какой-то локации в пространстве событий Photon'а. Также называется сфокусированным событием (focused event).
-
CUA Common User Access
Общепользовательский доступ. Стандарт, определяющий, как Вы можете изменить фокус, используя клавиатуру.
-
cursor
Курсор. Некий указатель позиции на экране, такой как указатель мыши (pointer) или указатель вставки в текстовой области.
-
damaged
Повреждённость. Каждый раз, когда какой-то виджет требует перерисовки в окне (напр., виджет был изменён, перемещён или реализован (realized)), говорят, что виджет повреждён.
-
dead key
Пассивная клавиша. Клавиша, которая, будучи нажатой, не производит символ, а инициализирует составную последовательность (compose sequence).
-
default placement
Размещение по умолчанию. Размещение региона, когда для него не заданы братья. Противоположность заданному размещению (specific placement).
-
desktop
Рабочий стол. Виртуальный экран, состоящий из девяти консолей (consoles) или рабочих пространств (workspase).
-
device region
Регион устройств. Регион (region), расположенный в середине пространства событий (event space), с регионами приложений (application regions) позади него и регионами драйверов (drives regions) перед ним (с точки зрения пользователя).
-
dialog module
Модуль диалога. Модуль (module) PhAB, похожий на модуль окна (window module), за исключением того, что модуль диалога может существовать для каждого процесса только в одном экземпляре.
-
direct-color
Напрямую определённый цвет. Цветовая схема, в которой каждый пиксель представлен значением RGB. Противоположность цвету, основанному на палитре (palette-based).
-
disjoint parent
Отделённый родитель. Отделённый виджет (disjoint widget), являющийся прародителем другого виджета.
-
disjoinit widget
Отделённый виджет. Виджет, который может существовать без родителя. Если отделённый виджет имеет родителя, он может существовать вне полотнища своего родителя. Например, PtWindow, PtMenu и PtRegion являются отделёнными виджетами, а PtButton, PtBkgd, PtRect – нет.