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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
<?xml version="1.0" encoding="UTF-8"?>
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns4="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="addmenu" xml:lang="ja">
<refnamediv>
<refname>addmenu</refname>
<refpurpose>対話的にボタン/メニューを定義</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>呼び出し手順</title>
<synopsis>addmenu(button [,submenus] [,action])
addmenu(gwin,button [,submenus] [,action])
</synopsis>
</refsynopsisdiv>
<refsection>
<title>引数</title>
<variablelist>
<varlistentry>
<term>button</term>
<listitem>
<para>文字列. ボタン名.
キーボードショートカットで使用される名前の文字を前に
&を置くことができます;
この文字はGUIで下線が引かれます.
MacOSXでは,同じ名前のサブメニューが自動的に追加されます
(メニューバーにボタンは追加されません).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>submenus</term>
<listitem>
<para>文字列のベクトル. sub_menus項目名</para>
</listitem>
</varlistentry>
<varlistentry>
<term>action</term>
<listitem>
<para>2つの要素を有するリスト action=list(flag,proc_name)</para>
<variablelist>
<varlistentry>
<term>flag</term>
<listitem>
<para>整数 (デフォルト値は 0)</para>
</listitem>
</varlistentry>
<varlistentry>
<term>flag==0</term>
<listitem>
<para>処理はscilab命令により定義される</para>
</listitem>
</varlistentry>
<varlistentry>
<term>flag==1</term>
<listitem>
<para>処理はCまたはFortran処理により定義される</para>
</listitem>
</varlistentry>
<varlistentry>
<term>flag==2</term>
<listitem>
<para>処理はscilab関数により定義される</para>
</listitem>
</varlistentry>
<varlistentry>
<term>proc_name</term>
<listitem>
<para>
命令またはコールするプロシージャ名を有する
scilab変数名を指定する文字列.
</para>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
<term>gwin</term>
<listitem>
<para>整数. ボタンをインストールするグラフィックウインドウの
番号
</para>
</listitem>
</varlistentry>
</variablelist>
</refsection>
<refsection>
<title>説明</title>
<para>
この関数によりメインウインドウまたは
グラフィックウインドウコマンドパネルに
ボタンまたはメニューをユーザーが追加できます.
</para>
<variablelist>
<varlistentry>
<listitem>
<para>
<literal>action</literal>引数が指定されない場合,
ボタンに関連する処理を
文字列に指定したscilab命令により定義する必要があります.
この文字列の名前は,
</para>
<para>
+ <literal>button</literal> (メインウインドウコマンドの場合)
</para>
<para>
+ <literal>button_gwin</literal>
(グラフィックウインドウコマンドの場合)
</para>
</listitem>
</varlistentry>
<varlistentry>
<listitem>
<para>
<literal>action</literal> 引数に 0を指定した場合,
<literal>proc_name</literal> には,Scilab文字列ベクトル
の名前を指定します.
k番目のsub_menuに関連する処理は,
この文字列変数のk番目の要素に保存したscilab命令で定義します.
</para>
</listitem>
</varlistentry>
<varlistentry>
<listitem>
<para>
<literal>action</literal>引数に1を指定した場合,
<literal>proc_name</literal> はCまたはFortranプロシージャ
を指します.
このプロシージャはFortranサブルーチン(default/fbutn.f)
によりインターフェイスが作成されるか,
または<literal>link</literal>関数によりscilabに
動的にリンクされます.
Cの呼び出し手順は以下のようになります:
<literal>(char* button_name, int* gwin,int *k)
</literal>
</para>
</listitem>
</varlistentry>
<varlistentry>
<listitem>
<para>
<literal>action</literal>引数に2を指定した場合,
<literal>proc_name</literal> はScilab関数を指します.
この関数の呼び出し手順は以下のようになります:
</para>
<para>
+ <literal>proc_name(k)</literal>
(メインウインドウコマンドの場合)
</para>
<para>
+ <literal>proc_name(k,gwin)</literal>
(グラフィックウインドウまたは
メインウインドウコマンドの場合)
</para>
</listitem>
</varlistentry>
</variablelist>
</refsection>
<refsection>
<title>例</title>
<programlisting role="example">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'));
</programlisting>
</refsection>
<refsection role="see also">
<title>参照</title>
<simplelist type="inline">
<member>
<link linkend="setmenu">setmenu</link>
</member>
<member>
<link linkend="unsetmenu">unsetmenu</link>
</member>
<member>
<link linkend="delmenu">delmenu</link>
</member>
</simplelist>
</refsection>
</refentry>
|