GSL Shell 学習:“IUP.lua”モジュール自作

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

さて、本文。

GSL Shell 学習:“cv2.lua”モジュール自作
GSL Shell 学習:“IM.lua”モジュール自作
と同様に、
“IUP.lua”モジュール
を作った。

序でに、よく使う 'char*' や、'void*' へのキャスト関数も加えた。
これらは、
先月(2016-03-05)の記事:「GSL Shell 学習:ffi.cdef 二重定義は?
で書いた:
  関数プロトタイプ(?)の二重定義は可能だが、
  先に定義した方が有効。(後のものは無効)
とは異なり、
Lua の関数定義なので、

  後で定義した方が有効。(先のものは取り消し)

ですね。


序でついでに、
今月(2016-04-08)の記事:「GSL Shell 学習:フルパス名の分解
で書いた

  “split_path”関数も追加した。


結果: 'IUP.lua' モジュールは、・・・・・
local IUP = { }
local iup = ffi.load( 'iup' )

function split_path( p ) return string.match( p, "(.-)([^\\]-([^%.]+))$" ) end
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 );
// void IupSetAttributes( void*, char* ); // ----- 上記の複数一括指定版
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* 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.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
これを使うと、
前回(2016-04-26)の記事「GSL Shell 学習:IUP で GUI アプリ」のコードは、・・・・・
local Iup = require'IUP'
Iup.Open( 0 ) ------------ これ必須!!!
NULL=voidA(0)
---------------------- BUTTON の 'ACTION' コールバック関数
Bcb = ffi.cast( 'Icallback', function( z )
tt1 = ffi.string( Iup.GetAttribute( txt1, charA('VALUE') ) )
tt2 = ffi.string( Iup.GetAttribute( txt2, charA('VALUE') ) )
print( 'Button Clicked' )
print( tt1 )
print( tt2 )
return -2
end )
------------------------------------------
dm1 = Iup.Label( ' ' )
dm2 = Iup.Label( ' ' )
dm3 = Iup.Label( ' ' )
dm4 = Iup.Label( ' ' )
dm5 = Iup.Label( ' ' )
dm6 = Iup.Label( ' ' )
lbl1 = Iup.Label( 'TEXT1 : ' )
lbl2 = Iup.Label( 'TEXT2 : ' )
txt1 = Iup.Text( '' )
txt2 = Iup.Text( '' )
btn1 = Iup.Button( ' Go ', '' )

hbx1 = Iup.Hbox( dm1, NULL )
hbx2 = Iup.Hbox( dm2, lbl1, txt1, NULL )
hbx3 = Iup.Hbox( dm3, lbl2, txt2, NULL )
hbx4 = Iup.Hbox( dm4, NULL )
hbx5 = Iup.Hbox( dm5, dm6, btn1, NULL )
vbx = Iup.Vbox( hbx1, hbx2, hbx3, hbx4, hbx5, NULL )

dlg = Iup.Dialog( vbx )

Iup.SetAttribute( dlg, 'SIZE', '100x90' )
Iup.SetAttribute( dlg, 'TITLE', 'test' ) -- 窓のタイトル
Iup.SetCallback( btn1, 'ACTION', Bcb )

Iup.Popup( dlg, 350, 250 ) -- 窓表示左上隅
Iup.Close() -- <=== 右上[X]で終了。
------------------------------------------
print( tt1 )
print( tt2 )
_ = io.read(1) -- [Enter]キー待ち。
とすっきり(?)する。


本日はここまで。


Lua ( GSL Shell ) 学習は続く。


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


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

コメントの投稿

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

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



おきてがみ

最新記事
カレンダー
04 | 2017/05 | 06
- 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
ブックマーク