Вот что я собственно навоял, пока что перво-черная версия CWindow и вообще не работает в Kolibri.
Но реализована модель событий. Cобствено если убрать заглушку libc функций
пожалуй это будет работать (но пока не ручаюсь).
(Почему-то под виндами и MinGW libc наглухо отказался собиратся)
Инструкции для тех кто хочет подключится к проекту:
Инструкции по запуску всего этого. Привожу пока только пример который еще в KOS не работает (скоро поправлю).
1. Необходимый софт - установленная OS Window либо Linux.
2. libc - см. суда
http://diamondz.land.ru/hll/hll.htm#gcc
3. boost (если у вас Linux то с большой долей вероятности boost у вас уже есть установленный и лежит в папке
/usr/include/boost). В случае с Windows его нужно скачать с
http://www.boost.org (11MB) после чего
разархивировать в какую нибудь папку. Т.к я не использую библиотеки в cpp файлах то билдить его не нужно.
4.Code::Blocks (
http://www.codeblocks.org 2MB) т.к. пока что нет make файлов (ну и вообще рефактор потребуется в дальнейшем). Для большинства распространенных Linux есть пакет и есть версия для Windows. Если вы устанавливаете версию для Windows то советую качать сразу версию с встроенным mingw.
5. Компилятор gcc (хотя в пирнципе пойдет любой С++ копилятор поддерживающий стандарт) в Linux - gcc 3.3 or hi
в Windows сойдет MinGW.
Собственно и все.
После установки откройте проект - console.cbp из приатаченного к посту зипа.
1.Идите суда - Buid->Compiller options (в самом низу)
2. В открывшемся окне - переходите на вкладку Directories
3. Жмете add и прописываете путь к boost
В винде напирмер у меня это E:\boost\boost_1_34_1
В Linux обычно /usr/include/boost
4. Для libc дейсвия аналогичны boost (но пока вместо libc функций заглушки).
Все можно компилировать и запускать (думаю как разберетесь).
Собственно пример показывет как пользоватся CWindow классом. Для того что-бы обработать сообщение от операционной системы нужно создать функцию - обработчик. Она дожна иметь сигнатуру
void <function name>(void);
После чего прибиндить ее к функтору с помощью boost::bind см. main.cpp
Вначале следует прибиндить функцию которая инициализирует окно
window.setInitialization(boost::bind(oninit));
Это может быть функция - метод класса или просто функция как в demo (см. документацию по boost:bind а лучше сразу суда -
http://www.boost.org/libs/bind/bind.html#with_functions для начала).
Если вы вызовете handleEvent() до того как присоединили эту функцию - выбросится исключение.
Функция обязательно должна окончится вызовом из libc __menuet__window_redraw(2) если это будет рабочее
ПО для колибри. (Потом подумаю как исправить).
Заглушки висят в файле window.cpp где __menuet__wait_for_event() выдает что произошло событие EVENT_KEY т.е. нажата клавиша клавиатуры. И функции сигнализируют о том что произошла обработка события банальным методом
"cout<<". Если запустить получнный exe/a можно увидеть что событийная модель (а это патерн Command) работает.
Для тех кто будет писать "типа зачем выкладываеш то что в KOS не работает". Это собственно первая итерация разработки цель которой определить архитектуру и принцип работы библиотеки. Я не хочу чтоб потом все строилось на моем ИМХО. И возможно часть кода пока не правильная.
P.S. libc к сожалению - полная ж()па, ей можно пользоватся но это ИМХО маразм (покрайней мере те сорцы которые есть у меня) .Функции практически никак не документированы
. Посему я попросил у кого есть libc нормальном виде скинуть куда нить и дать линк.