addmenu
対話的にボタン/メニューを定義
呼び出し手順
addmenu(button [,submenus] [,action])
addmenu(gwin,button [,submenus] [,action])
引数
button
文字列. ボタン名.
キーボードショートカットで使用される名前の文字を前に
&を置くことができます;
この文字はGUIで下線が引かれます.
MacOSXでは,同じ名前のサブメニューが自動的に追加されます
(メニューバーにボタンは追加されません).
submenus
文字列のベクトル. sub_menus項目名
action
2つの要素を有するリスト action=list(flag,proc_name)
flag
整数 (デフォルト値は 0)
flag==0
処理はscilab命令により定義される
flag==1
処理はCまたはFortran処理により定義される
flag==2
処理はscilab関数により定義される
proc_name
命令またはコールするプロシージャ名を有する
scilab変数名を指定する文字列.
gwin
整数. ボタンをインストールするグラフィックウインドウの
番号
説明
この関数によりメインウインドウまたは
グラフィックウインドウコマンドパネルに
ボタンまたはメニューをユーザーが追加できます.
action引数が指定されない場合,
ボタンに関連する処理を
文字列に指定したscilab命令により定義する必要があります.
この文字列の名前は,
+ button (メインウインドウコマンドの場合)
+ button_gwin
(グラフィックウインドウコマンドの場合)
action 引数に 0を指定した場合,
proc_name には,Scilab文字列ベクトル
の名前を指定します.
k番目のsub_menuに関連する処理は,
この文字列変数のk番目の要素に保存したscilab命令で定義します.
action引数に1を指定した場合,
proc_name はCまたはFortranプロシージャ
を指します.
このプロシージャはFortranサブルーチン(default/fbutn.f)
によりインターフェイスが作成されるか,
またはlink関数によりscilabに
動的にリンクされます.
Cの呼び出し手順は以下のようになります:
(char* button_name, int* gwin,int *k)
action引数に2を指定した場合,
proc_name はScilab関数を指します.
この関数の呼び出し手順は以下のようになります:
+ proc_name(k)
(メインウインドウコマンドの場合)
+ proc_name(k,gwin)
(グラフィックウインドウまたは
メインウインドウコマンドの場合)
例
if (getscilabmode() == "STD") then
addmenu('foo');
foo = 'disp(''hello'')';
addmenu('Hello',['Franck';'Peter'])
Hello = ['disp(''hello Franck'')';'disp(''hello Peter'')'];
addmenu('Bye',list(0,'French_Bye'));
French_Bye = 'disp(''Au revoir'')';
else
mprintf('This example requires to use scilab with GUI mode.\n');
end
addmenu(0,'Hello',['Franck';'Peter']);
Hello_0 = ['disp(''hello Franck'')';'disp(''hello Peter'')'];
//Cで定義したコールバック
// コールバックコードを作成
code=[ '#include ""machine.h""'
'#include ""sciprint.h""'
'void foo(char *name, int *win, int *entry)'
'{'
' if (*win==-1) '
' sciprint(""menu %s(%i) in Scilab window selected.\n"", name, *entry+1);'
' else'
' sciprint(""menu %s(%i) in window %i selected.\n"", name, *entry+1, *win);'
'}'];
// foo.cファイルを作成
current_dir = pwd();
chdir(TMPDIR);
mputl(code, TMPDIR+'/foo.c');
// Makefileを作成
ilib_for_link('foo','foo.c',[],'c');
exec('loader.sce');
chdir(current_dir);
// メニューを追加
addmenu(0,'foo',['a','b','c'],list(1,'foo'));
参照
setmenu
unsetmenu
delmenu