Программирование под Maemo Маличенко Дмитрий СПБ ГУАП

Содержание

Слайд 2

/20 План Что такое Maemo Программирование под Maemo Работа в Scratchbox-е

/20

План

Что такое Maemo
Программирование под Maemo
Работа в Scratchbox-е
Простой пример
Рисование в окне
Работа с

диалоговым окном
Что еще не рассмотрено
Ссылки
Слайд 3

/20 Что такое Maemo Maemo – это платформа для мобильных устройств

/20

Что такое Maemo

Maemo – это платформа для мобильных устройств основанная на

Debian
(www.maemo.org)
Устройства на базе Maemo:
N900
N810
N800
N770
Слайд 4

/20 Какие есть версии Предыдущая – 4 (Diablo) Библиотека GUI: GTK

/20

Какие есть версии

Предыдущая – 4 (Diablo)
Библиотека GUI: GTK
Интерфейс: стилус
Текущая – 5

(Fremantle)
Библиотека GUI: GTK
Интерфейс: палец + стилус
Будущая версия – 6 (Harmattan)
Библиотека GUI: Qt
Интерфейс: только палец
Слайд 5

/20 Целевое устройство N900 Умеет звонить Линукс внутри Многозадачность WiFi, bluetooth

/20

Целевое устройство

N900
Умеет звонить
Линукс внутри
Многозадачность
WiFi, bluetooth
GPS
Сенсоры

Интерфейс: палец + стилус
Клавиатура: настоящая + виртуальная
Слайд 6

/20 Программирование под Maemo: особенности Мобильное устройство Маленький экран Интерфейс: палец/стилус

/20

Программирование под Maemo: особенности

Мобильное устройство
Маленький экран
Интерфейс: палец/стилус
Сенсоры
Как облагородить интерфейс?
Библиотека Hildon –

надстройка над GTK+
Использование меньшего числа элементов управления
Слайд 7

/20 Программирование под Maemo: инструменты Требуется Основанный на Debian дистрибутив Linux

/20

Программирование под Maemo: инструменты

Требуется
Основанный на Debian дистрибутив Linux
Scratchbox – набор инструментов

для кросс компиляции (поддерживает ARM, X86)
Maemo SDK
Инструкция по установке
http://maemo.org/development/
Слайд 8

/20 Программирование под Maemo: связь с устройством Копирование файлов по USB

/20

Программирование под Maemo: связь с устройством

Копирование файлов по USB на встроенную

флешку (/home/user/MyDocs)
USB Networking
есть вспомогательные утилиты для запуска на устройстве
WiFi + ssh/scp
Слайд 9

/20 Работа в scratchbox - 1 Используются два окружения X86 для

/20

Работа в scratchbox - 1

Используются два окружения
X86 для разработки, тестирования

и отладки
ARM для компиляции под устройство
Представляет собой “песочницу”
$ /scratchbox/login
Welcome to Scratchbox, the cross-compilation toolkit!
Use 'sb-menu' to change your compilation target.
See /scratchbox/doc/ for documentation.
[sbox-FREMANTLE_X86: ~] >
Слайд 10

/20 Работа в scratchbox - 2 Запуск графического приложения в терминале

/20

Работа в scratchbox - 2

Запуск графического приложения
в терминале 1
$ Xephyr :2 -host-cursor

-screen 800x480x16 -dpi 96 -ac -kb &
в терминале 2
[sbox-FREMANTLE_X86: ~]> export DISPLAY=:2
[sbox-FREMANTLE_X86: ~]> af-sb-init.sh start
Возможна интеграция с eclipse
http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Development_Environment/Maemo_Eclipse_Integration
http://esbox.garage.maemo.org/2nd_edition/index.html
Слайд 11

/20 Простой пример #include int main(int argc, char *argv[]) { GtkWidget

/20

Простой пример

#include
int main(int argc, char *argv[])
{
GtkWidget *window;
hildon_gtk_init (&argc,

&argv);
g_set_application_name ("Simplest example");
program = hildon_program_get_instance ();
window = hildon_window_new ();
hildon_program_add_window (program, HILDON_WINDOW (window));
gtk_widget_show (window);
gtk_main ();
return 0;
}

Задаем имя программы

Создаем главное окно программы

Запуск главного цикла обработки событий

Слайд 12

/20 Как собрать в Scratchbox $ /scratchbox/login [sbox-FREMANTLE_X86: ~] > gcc

/20

Как собрать в Scratchbox

$ /scratchbox/login
[sbox-FREMANTLE_X86: ~] > gcc –o hello_world `pkg-config

--libs --cflags hildon-1` hello_world.c
[sbox-FREMANTLE_X86: ~] > ./hello_world

pkg-config – возвращает пути к заголовочным файлам и к файлам библиотеки

Слайд 13

/20 Усложненный пример - 1 Цель: написать приложение для рисования Потребуется:

/20

Усложненный пример - 1

Цель: написать приложение для рисования
Потребуется:
Создать главное окно программы
Создать

область для рисования
Поставить фильтр на требуемые события
Зарегистрировать обработчики событий
Требуемые события: нажатие, перемещение, отпускание
Написать логику обработчиков событий
Слайд 14

/20 Рисование в окне: функция main #include int main (int argc,

/20

Рисование в окне: функция main

#include
int main (int argc, char **argv)
{

// Здесь идет код инициализации как в предыдущей программе
. . . .
g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL);
GtkWidget *drawing_area = gtk_drawing_area_new ();
g_signal_connect (G_OBJECT (drawing_area), "motion_notify_event",
(GtkSignalFunc) motion_event_callback, NULL);
// Далее так же задаем функции обработки для button_press_event
// и button_release_event
. . . . .
gtk_widget_set_events (drawing_area, GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK );
gtk_container_add (GTK_CONTAINER (window), drawing_area);
// Код показа окна и запуск главного цикла обработки
. . . .
}

Обработка сигнала при закрытии окна

Создание области для рисования на все окно

Добавляем обработчик события «перемещение указателя мыши»

Указываем какие события хотим обрабатывать

Слайд 15

/20 Рисование в окне: обработка событий static gboolean button_press_event( GtkWidget *widget,

/20

Рисование в окне: обработка событий

static gboolean button_press_event( GtkWidget *widget, GdkEventButton *event

)
{
if (event->button == 1 ) pressed=1;
return TRUE;
}
static gboolean button_release_event( GtkWidget *widget, GdkEventButton *event )
{
if (event->button == 1 ) pressed=0;
return TRUE;
}
gboolean motion_event_callback (GtkWidget *widget, GdkEventMotion *event){
if (pressed)
gdk_draw_line(widget->window,
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
x, y, event->x,event->y);
x = event->x;
y = event->y;
return TRUE;
}

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

Обновление координат

Слайд 16

/20 Усложненный пример - 2 Цель: написать приложение с кнопками Потребуется

/20

Усложненный пример - 2

Цель: написать приложение с кнопками
Потребуется
Разобраться с расположением элементов
Создать

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

/20 Работа с диалоговым окном int main (int argc, char **argv)

/20

Работа с диалоговым окном

int main (int argc, char **argv)
{
// Инициализационная часть

. . . .
table = gtk_table_new(3,3,TRUE);
for (i=0;i<3;i++) {
for (j=0;j<3;j++) {
button = hildon_button_new_with_text (HILDON_SIZE_AUTO,
HILDON_BUTTON_ARRANGEMENT_VERTICAL,
" ",
NULL);
gtk_table_attach((GtkTable*)table, button,i,i+1,j,j+1,
GTK_EXPAND, GTK_EXPAND,0,0);
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (button_clicked), NULL);
}
}
gtk_container_add (GTK_CONTAINER (window),table);
gtk_widget_show_all (GTK_WIDGET (window));
gtk_main ();
return 0;
}

Выделенные аргументы:
левый край кнопки
правый край кнопки
верхний край
нижний край

Слайд 18

/20 Что еще не рассмотрено Элементы управления GtkRadioButtons Меню (HildonAppMenu) Диалоги

/20

Что еще не рассмотрено

Элементы управления
GtkRadioButtons
Меню (HildonAppMenu)
Диалоги (HildonNote, HildonBanner, HildonPickerDialog, HildonWizardDialog)


Работа в сети
WiFi, Bluetooth
Выход в интернет

библиотека LibConIC

Слайд 19

/20 Ссылки Главная ссылка :) www.maemo.org Руководство для разработчиков Maemo http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide

/20

Ссылки

Главная ссылка :)
www.maemo.org
Руководство для разработчиков Maemo
http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide
Туториал по GTK для

новичков
http://zetcode.com/tutorials/gtktutorial/
Где разместить проект
https://garage.maemo.org/