OberonCore https://forum.oberoncore.ru/ |
|
Библиотеки виджетов для XDS? https://forum.oberoncore.ru/viewtopic.php?f=30&t=2446 |
Страница 2 из 2 |
Автор: | Александр Ильин [ Понедельник, 06 Май, 2013 10:44 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
ilovb писал(а): Большое спасибо! Это вам спасибо за интересный проект и, тем более, за поддержку XDS!ilovb писал(а): А насчет псевдонимов функций не подскажете? Подскажу, раз такое дело.Чтобы переименовать функции надо lib-файл создавать не сразу из DLL, а из IDF-файла (import definition). В этом самом IDF-файле задаёте переименования какие вам нужны. Удобнее всего получить IDF-файл из EDF-файла путём ручной или автоматической правки (я использовал SED). Например, получаем EDF-файл: xlib /edf iup.edf iup.dll Цитата: LIBRARY iup.dll EXPORTS IupAlarm IupAppend IupButton IupCanvas IupCbox IupCboxv ... Обрабатываем и создаём IDF-файл: Цитата: FROM iup.dll IMPORT Если что-то переименовывать не нужно, оставляете просто имя импортируемой функции, не добавляя часть "AS ...". То есть, это просто список импортируемых функций через запятую, в конце должна быть точка с запятой. IupAlarm AS Alarm, IupAppend AS Append, IupButton AS Button, IupCanvas AS Canvas, IupCbox, IupCboxv, ... ; Затем из этого текстового списка формируем бинарный lib-файл для линкера: xlib /implib iup.lib iup.idf |
Автор: | Димыч [ Понедельник, 06 Май, 2013 10:46 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
ilovb писал(а): Допилю этот бинд сегодня вечером и выложу на google code. Лучше на http://GitHub.com, там заметно удобнее. |
Автор: | ilovb [ Понедельник, 06 Май, 2013 10:59 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Александр, отлично! Спасибо еще раз. А я уж было подумал что никак Димыч, а чем github лучше? Мне google code нравится за: 1. высокая скорость работы 2. простота интерфейса 3. возможность писать описания к файлам 4. удобно делать ссылки на исходники 5. нет нужды делать readme.md 6. много настроек интерфейса 7. можно указывать ключевые слова для проекта и т.д. |
Автор: | Димыч [ Понедельник, 06 Май, 2013 11:22 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
ilovb писал(а): Димыч, а чем github лучше? Мне google code нравится за: ... и т.д. Это GIT, в первую очередь. Ну а все остальное - удобство и пр. - относится и к github. |
Автор: | ilovb [ Понедельник, 06 Май, 2013 12:23 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Так google code тоже GIT (и SVN и Mercurial) Я пользуюсь Mercurial (не знаю чем он отличается от GIT, но мне нравится оболочка http://tortoisehg.bitbucket.org/) Предлагаю всем заинтересованным проголосовать где лучше разместить, и под какую VCS. Размещу там, где большинству будет удобнее. |
Автор: | Димыч [ Понедельник, 06 Май, 2013 12:28 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
ilovb писал(а): Размещу там, где большинству будет удобнее. Размести там, где считаешь нужным, не спрашивая. |
Автор: | ilovb [ Понедельник, 06 Май, 2013 12:32 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
В таком случае я размещу на google code под GIT. А на github сделаю зеркало. |
Автор: | Роман М. [ Понедельник, 06 Май, 2013 13:47 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Все привязки к различным библиотекам я держу в одном проекте-репозитарии на BitBucket. Суть в том, что всё централизованно. Не создаю для каждого чиха новый репозиторий, а добавляю в папку ещё один binding. https://bitbucket.org/Romiras/bindings Принципиальной разницы в выборе хостинга для меня нет. Главное, чтобы поддерживались Subversion, Git и не был платным. Они примерно одинаковы. Один лишь нюанс (на любителя, конечно): исходники в репозитории я держу лишь в текстовом формате в кодировке UTF-8 (CpcUtf8Conv), для простоты просмотра людьми, броузером. И ещё для любой привязки к библиотеке я использую в имени модуля префикс "Libs" (потому что "Lib" уже занят в коллекции CPC). А поверх той API я строю КП компоненты в отдельной подсистеме (такие как Cairo). |
Автор: | ilovb [ Понедельник, 06 Май, 2013 19:57 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Люди, подскажите еще как в XDS адрес процедуры получить. SYSTEM.ADR процедуры не принимает. |
Автор: | ilovb [ Понедельник, 06 Май, 2013 20:26 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Получение адреса процедуры нужно для установки колбэков. Вот все их виды: Код: typedef int (*IFidle)(void); /* idle */
typedef void (*IFii)(int, int); /* globalkeypress_cb */ typedef void (*IFiis)(int, int, char*); /* globalmotion_cb */ typedef void (*IFiiiis)(int, int, int, int, char*); /* globalbutton_cb */ typedef void (*IFfiis)(float,int,int,char*); /* globalwheel_cb */ typedef int (*IFn)(Ihandle*); /* default definition, same as Icallback (ncols_cb, nlines_cb)*/ typedef int (*IFni)(Ihandle*, int); /* k_any, show_cb, toggle_action, spin_cb, branchopen_cb, branchclose_cb, executeleaf_cb, showrename_cb, rightclick_cb, extended_cb, height_cb, width_cb */ typedef int (*IFnii)(Ihandle*, int, int); /* resize_cb, caret_cb, matrix_mousemove_cb, enteritem_cb, leaveitem_cb, scrolltop_cb, dropcheck_cb, selection_cb, select_cb, switch_cb, scrolling_cb, vspan_cb, hspan_cb */ typedef int (*IFniii)(Ihandle*, int, int, int); /* trayclick_cb, edition_cb */ typedef int (*IFniiii)(Ihandle*, int, int, int, int); /* dragdrop_cb */ typedef int (*IFniiiiiiC)(Ihandle*, int, int, int, int, int, int, void*); /* draw_cb */ typedef int (*IFniiiiii)(Ihandle*, int, int, int, int, int, int); /* OLD draw_cb */ typedef int (*IFnff)(Ihandle*, float, float); /* canvas_action */ typedef int (*IFniff)(Ihandle*,int,float,float); /* scroll_cb */ typedef int (*IFnfiis)(Ihandle*,float,int,int,char*); /* wheel_cb */ typedef int (*IFnsCi)(Ihandle*, char*, void*, int); /* dragdata_cb */ typedef int (*IFnsCiii)(Ihandle*, char*, void*, int, int, int); /* dropdata_cb */ typedef int (*IFnsiii)(Ihandle*, char*, int, int, int); /* dropfiles_cb */ typedef int (*IFnnii)(Ihandle*, Ihandle*, int, int); /* drop_cb */ typedef int (*IFnnn)(Ihandle*, Ihandle*, Ihandle*); /* tabchange_cb */ typedef int (*IFnss)(Ihandle*, char *, char *); /* file_cb */ typedef int (*IFns)(Ihandle*, char *); /* multiselect_cb */ typedef int (*IFnsi)(Ihandle*, char *, int); /* copydata_cb */ typedef int (*IFnis)(Ihandle*, int, char *); /* text_action, multiline_action, edit_cb, rename_cb */ typedef int (*IFnsii)(Ihandle*, char*, int, int); /* list_action */ typedef int (*IFniis)(Ihandle*, int, int, char*); /* motion_cb, click_cb, value_edit_cb */ typedef int (*IFniiis)(Ihandle*, int, int, int, char*); /* touch_cb */ typedef int (*IFniiiis)(Ihandle*, int, int, int, int, char*); /* button_cb, matrix_action, mousemotion_cb */ typedef int (*IFniiiiiis)(Ihandle*, int, int, int, int, int, int, char*); /* mouseclick_cb */ typedef int (*IFnIi)(Ihandle*, int*, int); /* multiselection_cb, multiunselection_cb */ typedef int (*IFnd)(Ihandle*, double); /* mousemove_cb, button_press_cb, button_release_cb */ typedef int (*IFniiIII)(Ihandle*, int, int, int*, int*, int*); /* fgcolor_cb, bgcolor_cb */ typedef int (*IFniinsii)(Ihandle*, int, int, Ihandle*, char*, int, int); /* dropselect_cb */ typedef int (*IFnccc)(Ihandle*, unsigned char, unsigned char, unsigned char); /* drag_cb, change_cb */ typedef int (*IFniIIII)(Ihandle*, int, int*, int*, int*, int*); /* multitouch_cb */ typedef char* (*sIFnii)(Ihandle*, int, int); /* value_cb */ typedef char* (*sIFni)(Ihandle*, int); /* cell_cb */ |
Автор: | ilovb [ Понедельник, 06 Май, 2013 23:30 ] | ||
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? | ||
В общем я решил таки использовать Mercurial : https://code.google.com/p/o2-iup/ И сделал зеркало на github: https://github.com/ilovb/o2-iup Бинд почти готов к использованию. Осталось только с колбэками разобраться. Функции с переменным количеством параметров работают. Т.е. бинд можно использовать практически один в один как на Си. Во вложении проект с биндом, библиотекой и примером. ps Очень рекомендую попробовать вставить в примере такую строчку : ... Iup.Show(dlg); Iup.Show(Iup.LayoutDialog(dlg)); Iup.MainLoop(); ...
|
Автор: | Александр Ильин [ Вторник, 07 Май, 2013 09:27 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
ilovb писал(а): Люди, подскажите еще как в XDS адрес процедуры получить. SYSTEM.ADR процедуры не принимает. Покажите пример, как предполагается использовать колбэки. Куда их передавать или устанавливать?
|
Автор: | ilovb [ Вторник, 07 Май, 2013 09:49 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Вот как я в CP сделал: viewtopic.php?f=24&t=3865&p=79803#p79803 Колбэк в бинде определен так: Код: Icallback* = INTEGER; Функция установки колбэка так: Код: PROCEDURE [ccall] SetCallback* ["IupSetCallback" ] (ih: Ihandle; name: Istring; func: Icallback): Icallback; Используется так: Код: PROCEDURE [ccall] BtnCB(self: Iup.Ihandle); (* наш колбэк *) BEGIN Iup.SetAttribute(ml, "VALUE", "Hello!") END BtnCB; ... bt := Iup.Button("Button", "btn_test"); (* кнопка на форме *) prev := Iup.SetCallback(bt, "ACTION", SYSTEM.ADR(BtnCB)); (* действие при нажатии на кнопку *) В CP это возможно т.к. SYSTEM.ADR определена так: Цитата: ADR(v) любой INTEGER адрес переменной v ADR(P) P: PROCEDURE INTEGER адрес процедуры P В XDS же SYSTEM.ADR не принимает процедуры. В связи с этим на данный момент я определил колбэк только одного вида (для примера): Код: Icallback* = PROCEDURE ["C"] (self: Ihandle);
|
Автор: | Александр Ильин [ Вторник, 07 Май, 2013 10:10 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Спасибо за пример, вопрос стал гораздо понятнее. ilovb писал(а): Колбэк в бинде определен так: Будьте осторожны: тип INTEGER в XDS Oberon-2 имеет размер два байта, а адрес должен быть четырёхбайтовым. Размер типа INTEGER в XDS Modula-2 определяется директивой M2BASE16.Код: Icallback* = INTEGER; Для ваших целей нужно использовать приведение к типу LONGINT с помощью SYSTEM.VAL(LONGINT, <ProcName>). |
Автор: | ilovb [ Вторник, 07 Май, 2013 10:15 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Я это уже понял. В бинде к XDS Oberon-2 везде LONGINT https://code.google.com/p/o2-iup/source/browse/iup.ob2 |
Автор: | ilovb [ Вторник, 07 Май, 2013 16:56 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Победил колбэки: https://code.google.com/p/o2-iup/source ... 9e928ae6dc Самое смешное, что об этом сказано тут: viewtopic.php?f=27&t=4340&start=20#p79807 Цитата: ...pointer, address, opaque, and procedure type values are converted to ADDRESS ... |
Автор: | ilovb [ Вторник, 07 Май, 2013 17:35 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Александр Ильин писал(а): Спасибо за пример, вопрос стал гораздо понятнее. Для ваших целей нужно использовать приведение к типу LONGINT с помощью SYSTEM.VAL(LONGINT, <ProcName>). Вот я слепой Вы же написали решение, а я не обратил внимание на <ProcName> и вложил другой смысл в предложение. Теперь не знаю какое решение лучше... Ваше мне кажется более правильным. |
Автор: | ilovb [ Вторник, 07 Май, 2013 22:57 ] |
Заголовок сообщения: | Re: Библиотеки виджетов для XDS? |
Остановился на варианте с SYSTEM.VAL На github зеркало пересоздал. Что-то оно у меня никак не заводилось. Сейчас вроде заработало. |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |