# addmenu

対話的にボタン/メニューを定義

## 呼び出し手順

    addmenu(button [,submenus] [,action])
                addmenu(gwin,button [,submenus] [,action])

## 引数

button

  文字列. ボタン名. キーボードショートカットで使用される名前の文字を前に &を置くことができます; この文字はGUIで下線が引かれます. MacOSXでは,同じ名前のサブメニューが自動的に追加されます (メニューバーにボタンは追加されません).

submenus

  文字列のベクトル. sub_menus項目名

action

  ２つの要素を有するリスト 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