Oberon space

General Category => Общий раздел => Тема начата: ilovb от Май 04, 2013, 12:40:47 pm

Название: Бинд к IUP
Отправлено: ilovb от Май 04, 2013, 12:40:47 pm
Сделал бинд к основной либе IUP (на 90%)

Во вложении бинд, сама либа и тестовый пример
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 04, 2013, 12:44:04 pm
Выглядит это вот так: https://dl.dropboxusercontent.com/u/31020212/Snap%202013-05-04%20at%2015.40.46.png
Название: Re: Бинд к IUP
Отправлено: valexey_u от Май 04, 2013, 12:57:33 pm
Работает.
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 04, 2013, 01:59:43 pm
Думаю придется таки ООП обвязку делать. Напрямую будет неудобно и небезопасно.
Название: Re: Бинд к IUP
Отправлено: valexey_u от Май 04, 2013, 02:06:39 pm
Думаю придется таки ООП обвязку делать. Напрямую будет неудобно и небезопасно.
Ну, это уже сверху и отдельно.
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 04, 2013, 03:10:53 pm
Еще чуток подпилил. Типы оканчивающиеся на "List" - это массив который обязательно должен иметь 0 в последнем элементе.
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 04, 2013, 09:34:34 pm
https://code.google.com/p/cp-iup/
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 05, 2013, 12:52:41 pm
Еще изменения:
* Теперь типы оканчивающиеся на "List" должны иметь NIL в последнем элементе.
* Введен тип Inull. Значение этого типа всегда должно быть равно NIL
Это нужно для процедур, которые имеют переменное число параметров в Си.
PROCEDURE [ccall] Vbox* ["IupVbox"] (child: Ihandle; null: Inull): Ihandle;
В CP такие процедуры следует использовать с одним параметром.
vbox := Iup.Vbox(elem, NIL);
Для списка элементов есть отдельные процедуры:
PROCEDURE [ccall] Vboxv* ["IupVboxv"] (children: IhandleList): Ihandle;
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 05, 2013, 01:26:22 pm
Пример:
MODULE IupTest;
    IMPORT
        Iup := IupLib,
        SYSTEM;
    CONST
        expand = "EXPAND";
    VAR
        ml: Iup.Ihandle;

PROCEDURE [ccall] BtnCB(self: Iup.Ihandle);
BEGIN
    Iup.SetAttribute(ml, "VALUE", "Hello!")     
END BtnCB; 
   
PROCEDURE Main*;
    VAR
        dlg, bt, split, vbox: Iup.Ihandle;
        res: INTEGER;
        prev: Iup.Icallback; (* the address of the previous function associated to the action. *)
BEGIN
    res := Iup.Open(NIL, NIL);
   
    bt := Iup.Button("Button", "btn_test");
    Iup.SetAttribute(bt, expand, "YES");
    prev := Iup.SetCallback(bt, "ACTION", SYSTEM.ADR(BtnCB));
   
    ml := Iup.MultiLine(NIL);
    Iup.SetAttributes(ml, "EXPAND = YES, VISIBLELINES = 5, VISIBLECOLUMNS = 10");
   
    split := Iup.Split(bt, ml);
    Iup.SetAttributes(split, "ORIENTATION = HORIZONTAL, COLOR = 127 127 255");
   
    vbox := Iup.Vbox(split, NIL);
    Iup.SetAttributes(vbox, "MARGIN = 10x10, GAP = 10");
   
    dlg := Iup.Dialog(vbox);
    Iup.SetAttribute(dlg, "TITLE", "IupSplit Example");
   
    res := Iup.Show(dlg);
    res := Iup.MainLoop();
    Iup.Close();
       
END Main;
       
BEGIN
    Main;
END IupTest.

^Q DevLinker.LinkExe
Simple.exe := IupTest ~
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 05, 2013, 02:07:10 pm
Поправил описание нескольких функций. И модифицировал пример соответственно:
MODULE IupTest;
    IMPORT
        Iup := IupLib,
        SYSTEM;
    CONST
        expand = "EXPAND";
    VAR
        ml: Iup.Ihandle;

PROCEDURE [ccall] BtnCB(self: Iup.Ihandle);
BEGIN
    Iup.SetAttribute(ml, "VALUE", "Hello!")     
END BtnCB; 
   
PROCEDURE Main*;
    VAR
        dlg, bt, split: Iup.Ihandle;
        res: INTEGER;
        ih: Iup.Ihandle;
        prev: Iup.Icallback; (* the address of the previous function associated to the action. *)
BEGIN
    res := Iup.Open(NIL, NIL);
   
    bt := Iup.Button("Button", "btn_test");
    Iup.SetAttribute(bt, expand, "YES");
    prev := Iup.SetCallback(bt, "ACTION", SYSTEM.ADR(BtnCB));
   
    ml := Iup.SetAttributes(Iup.MultiLine(NIL), "EXPAND = YES, VISIBLELINES = 5, VISIBLECOLUMNS = 10");
   
    split := Iup.Split(bt, ml);
    Iup.SetAttribute(split, "ORIENTATION", "VERTICAL");
    Iup.SetAttribute(split, "COLOR", "255 20 20");
   
    dlg := Iup.Dialog(Iup.SetAttributes(Iup.Vbox(split, NIL), "MARGIN = 10x10, GAP = 10"));
    Iup.SetAttribute(dlg, "TITLE", "IupSplit Example");
   
    res := Iup.Show(dlg);
    res := Iup.MainLoop();
    Iup.Close();
       
END Main;
       
BEGIN
    Main;
END IupTest.

DevLinker.LinkExe
Simple.exe := IupTest ~

ps Атрибут COLOR функцией SetAttributes не устанавливается почему-то
Название: Re: Бинд к IUP
Отправлено: Kemet от Май 05, 2013, 02:32:18 pm
ps Атрибут COLOR функцией SetAttributes не устанавливается почему-то
Не устанавливается -  в смысле нет реакции?
А прочитать атрибут это можно?
Может после установки цвета нужно выполнить какое-то действо для перерисовки?
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 05, 2013, 02:38:43 pm
Да. Нет реакции. Видимо в списке такие атрибуты (многозначные) нельзя установить. Наверно в документации про это сказано, но я не нашел.
С функцией SetAttribute все работает.
В общем не страшно.  :)
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 06, 2013, 09:39:45 pm
Бинд к XDS Oberon-2: https://code.google.com/p/o2-iup/
Зеркало: https://github.com/ilovb/o2-iup

Во вложении проект с биндом, библиотекой и примером.
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 10, 2013, 09:47:09 pm
Вышел IUP 3.8!
Цитировать
Hi All,
The 3.8 version of the IUP library has been released.
You can find the list of changes and files for download at:
http://www.tecgraf.puc-rio.br/iup/
We would like to highlight some of the improvements:
New: attribute TOGGLEVISIBLEid for IupTree when SHOWTOGGLE=Yes.
New: attribute TABVISIBLEid for IupTabs.
New: IupLink control that shows a clickable URL.
New: IupGridBox container to arrange elements in a regular grid.
New: IupScintilla control that shows a source code text editor based on the Scintilla library.
New: IupExpander container to interactively control the visibility of a child inside the dialog.
Changed: GTK stock images now uses the same size as the Windows and Motif images in IupImageLib
Best Regards,
Antonio Scuri
Название: Re: Бинд к IUP
Отправлено: ilovb от Май 26, 2013, 09:48:05 pm
http://forum.oberoncore.ru/viewtopic.php?f=28&t=4356&p=80401#p80401