“IUP.lua”モジュール改

2016-08-03 :  PCクリニック
本文の前に、
-・・・ -・-
現時点での blogramのランクインカテゴリは、
7、2、0、0、0、 1、0、0、0、0(40)で、換算ポイント 87pt 。
「Perl」「化学業界」「硝子業界」「FM COCOLO」「e-radio」「グルコサミン」、
「Python」「Firefox」bg値変動。「C言語」「FM青森」変化無し。
・-・ - -・

さて、本文。

4ヶ月前(2016-04-28)の記事「GSL Shell 学習:“IUP.lua”モジュール自作
で作った“IUP.lua”モジュールでは、

Index of /iup/en/elem」で学習し、
以下の5種類
  IupLabel( char* title );
  IupText( char* action );
  IupButton( char*title, char* action );
  IupVbox( Ihandle* child, ... );
  IupHbox( Ihandle* child, ... );
を実装した。

今回、いろいろ学習し、
“ラジオボタン”を使えるようにした。


それには、・・・・・

  IupRadio( Ihandle* child );

これは コンテナ なので、
これダケではなくて、
実体(?)である、

  IupToggle( char* title, char* action );

も必要だった。

そして、二択なら(二択しか考えないが、三択以上もある?)
一方が選択されているかを判定する。

このとき、対象のモノの属性('VALUE')が“ON”か“OFF”かをチェックする。


それで、この2つの関数も、追加した。
function  IUP.Radio( s )    return  iup.IupRadio( s  )   end
function IUP.Toggle( s1, s2 ) return iup.IupToggle( charA(s1), charA(s2) ) end
結果、
バージョンアップした“IUP.lua”モジュールは、・・・・・
local IUP = { }
local iup = ffi.load( 'iup' )

charA = |s| ffi.cast( 'char*', s )
voidA = |x| ffi.cast( 'void*', x )
-----
ffi.cdef[[
typedef struct Ihandle_ Ihandle;
typedef int (*Icallback)(Ihandle*);
int IupOpen( int ); // 正式には、int IupOpen( int *argc, char ***argv );
void IupClose( );
Ihandle* IupDialog( Ihandle* child );
void IupDestroy( void* );
void IupSetAttribute( Ihandle*, char* name, char* value );
char* IupGetAttribute( Ihandle*, char* name );
void IupSetCallback( Ihandle*, char*, Icallback func );
void IupPopup( void*, int, int );

Ihandle* IupLabel( char* title );
Ihandle* IupText( char* action );
Ihandle* IupButton( char* title, char* action );
Ihandle* IupToggle( char* title, char* action );
Ihandle* IupRadio( Ihandle* child );
Ihandle* IupVbox( Ihandle* child, ... );
Ihandle* IupHbox( Ihandle* child, ... );
]]

function IUP.Open( z ) return iup.IupOpen( z ) end
function IUP.Close( ) iup.IupClose( ) end
function IUP.Dialog( z ) return iup.IupDialog( z ) end
function IUP.Destroy( ) return iup.IupDestroy( z ) end

function IUP.Label( s ) return iup.IupLabel( charA(s) ) end
function IUP.Text ( s ) return iup.IupText ( charA(s) ) end
function IUP.Button( s1, s2 ) return iup.IupButton( charA(s1), charA(s2) ) end
function IUP.Toggle( s1, s2 ) return iup.IupToggle( charA(s1), charA(s2) ) end

function IUP.Radio( s ) return iup.IupRadio( s ) end
function IUP.Hbox( ... ) return iup.IupHbox( ... ) end
function IUP.Vbox( ... ) return iup.IupVbox( ... ) end

function IUP.SetAttribute( z, s1, s2 ) iup.IupSetAttribute( z, charA(s1), charA(s2) ) end
function IUP.GetAttribute( z, s ) return iup.IupGetAttribute( z, charA(s) ) end
function IUP.SetCallback( z, s, f ) iup.IupSetCallback( z, charA(s), f ) end

function IUP.Popup( z, x, y ) iup.IupPopup( z, x, y ) end

return IUP
でしょうか。

それで、この改訂版モジュールを使った最小(?)のテスト・メイン:
-------- test_Main.gsl
local Iup = require'IUP'
Iup.Open( 0 )
NULL=voidA(0)
s8 = ' ' -- 8文字空白

---------------------- BUTTON の 'ACTION'
Bcb = ffi.cast( 'Icallback', function( z )
T1 = ffi.string( Iup.GetAttribute( tT1, charA('VALUE') ) )
XY = ffi.string( Iup.GetAttribute( rTX, charA('VALUE') ) )
Iup.SetAttribute( tT2, charA('TITLE'), charA(T1..'/'..XY) )
return -2
end )
------------------------------------------
tT1 = Iup.Text( '' )
tT2 = Iup.Label( '' ); Iup.SetAttribute( tT2, 'TITLE', s8..s8..s8 )
Row1 = Iup.Hbox( Iup.Label(s8..'inp= '), tT1, Iup.Label(s8..'out= '), tT2, NULL )

Row2 = Iup.Hbox( Iup.Label(''), NULL ) -- 1行分空ける

rTX = Iup.Toggle('X', ''); rTY = Iup.Toggle('Y', '')
Row3 = Iup.Hbox( Iup.Label(s8..s8..'X or Y: '), Iup.Radio( Iup.Hbox( rTX, rTY, NULL ) ), NULL )

Row4 = Iup.Hbox( Iup.Label(''), NULL ) -- 1行分空ける

btn = Iup.Button( 'Go', '' )
Row5 = Iup.Hbox( Iup.Label(s8..s8..s8), btn, NULL )

dlg = Iup.Dialog( Iup.Vbox( Row1, Row2, Row3, Row4, Row5, NULL ) )

Iup.SetAttribute( dlg, 'SIZE', '150x100' ) -- 窓サイズ
Iup.SetAttribute( dlg, 'TITLE', 'test' ) -- 窓のタイトル
Iup.SetCallback( btn, 'ACTION', Bcb )

Iup.Popup( dlg, 300, 200 ) -- 窓表示左上隅
Iup.Close()
で確認OK?


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


160718
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
02 | 2017/03 | 03
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク