Maplets のレイアウトに関する指針
|
目的
|
|
このワークシートは以下を目的としています。
•
|
Maplets で適用される「階層化されたリスト」の概念を理解する。
|
•
|
maplet のコード構造を定義および識別する。
|
•
|
テキスト、ボタン、テキストフィールド(入力または出力)を持つ maplet を作成する。
|
•
|
Window, BoxRow, GridLayout の各要素を用いて、洗練されたレイアウトを持つ maplet を作成する。
|
|
|
階層化されたリスト
|
|
ある mapet は、ボックスレイアウト構造を用いて定義されます。ボックスレイアウト構造は Maple の階層化されたリスト(リストリスト)の概念に基づいています。
Maple では、角括弧([ ])で囲まれたコンマ区切りの式からなる順に並んだ列のことをリストと呼びます。
例:
角括弧([ ])で囲まれたコンマ区切りの式からなる順に並んだ列のうち、それぞれの式がリストであるものを、階層化されたリストと呼びます。
例:
>
|
NestedList := [1, [2,3], [4, 5,6], 7, 8, [9,10]];
|
maplet を書く際に、テキストの文字列、ユーザプロンプト、テキストフィールドはそれぞれリスト内にある式として定義されます。
maplet ウィンドウの定義には、テキストの文字列、ユーザプロンプト、その他の要素を含む、メインリストが含まれます。
|
|
行と列
|
|
行
行を作成するためには、項目をコンマで区切り、一対の角括弧(メインリスト内)の中に収めて下さい。
([
[Item1, Item2]
])
>
|
with(Maplets[Elements]):
RowExample:= Maplet([
["Item1", "Item2", "Item3", "Item4"]
]):
Maplets[Display](RowExample);
|
列
列を作成するためには、各項目を角括弧の中に収め、それをコンマで区切って下さい。
([
[Item1],
[Item2],
])
>
|
with(Maplets[Elements]):
ColumnExample:= Maplet([
["Item1"],
["Item2"]
]):
Maplets[Display](ColumnExample);
|
項目がサブリストに追加される際には、列の幅は、最も多くの項目を含む行を定義するリストの大きさに拡張されます。
各行の項目は、列内における水平方向の中心位置に配置されます。
>
|
with(Maplets[Elements]):
ColumnExample2:= Maplet([
["Item1", "Item1a", "Item1b", "Item1c"],
["Item2", "Item2a"]
]):
Maplets[Display](ColumnExample2);
|
1 つのリストからなる列
以下の mapelt の定義は、リストのリストではない、ただ 1 つのリストだけを含みます。これにより、1 つの列が作成されます。個々の項目、あるいは項目のグループを角括弧で囲むことはありません。
>
|
with(Maplets[Elements]):
ListColumnExample1:= Maplet([
"Item1",
"Item2",
"Item3",
"Item4",
"Item5",
"Item6"
]):
Maplets[Display](ListColumnExample1);
|
注意: 上述の ListColumnExample1 mapelt は、1 つの行として書くことも可能です。これによりコードの行数を 10 から 5 に縮小します。
>
|
with(Maplets[Elements]):
ListColumnExample2:= Maplet([
"Item1","Item2", "Item3","Item4", "Item5","Item6"
]):
Maplets[Display](ListColumnExample2);
|
|
|
Maplet のコード構造の定義及び識別
|
|
Maplet の作成方法:
•
|
トップレベルの要素 Maplets により、maplet を開始する。
|
•
|
長いまたは複雑な maplet については、割り当ての記号(:=)を用いて、maplet に名前を割り当てることが可能です。以下は、helloworld という名前を割り当てられている実際の短い maplet の例です。
|
>
|
helloworld:= Maplet(["Hello World 1"]):
Maplets[Display](helloworld);
|
注意: 短い maplet に名前を割り当てる必要はありません。
>
|
Maplets[Display](Maplet([["Hello World 2"]]));
|
•
|
maplet の定義を、セミコロンまたはコロンで終了します。maplet の定義( Display コマンドの前にある maplet のコード)をセミコロンで終わらせた場合には、その maplet に関連する XML データ構造が、Maple のワークシート内に表示されます。
|
このコードは、maplet YourMapletName を実行します。
>
|
YourMapletName := Maplet([
"This is your Maplet."
]):
Maplets[Display](YourMapletName);
|
このコードは、maplet YourMapletName2 を実行し、関連する XML データ構造を表示します。
>
|
YourMapletName2 := Maplet([
"This is your Maplet."
]);
Maplets[Display](YourMapletName2);
|
|
|
Sample Maplet の調査
|
|
polycomp という名前の maplet を以下に示します。これは、ユーザの入力値において、指定の多項式の評価を行います。
空白、配置、その他の可視化に関する要素についてはデフォルトのインタフェース設定を使用して、この maplet を作成します。
•
|
テキスト文字列:"Evaluating the polynomial x^3 - x^2 + 3*x +4"
|
•
|
2 つのユーザに対する問いかけ: "Enter a value for x:" および "Click OK to see the result."
|
•
|
1 つの出力フィールド (30 文字の長さ)
重要: 出力フィールドは、編集ができない TextField です。
|
•
|
2 つのボタン: テキストの文字列と Button コマンドを用いて定義される OK と Close
|
•
|
Maple のエンジンを呼び出し、ユーザのが入力した数字における多項式の値の計算を実行します。
|
•
|
maplet を実行するための Display コマンド
|
•
|
コロンによる maplet 定義の終了。Display コマンドはセミコロンで終了します。
|
•
|
([
[Item1],
[Item2],
[ItemN]
])
|
>
|
#Invoke the Maplets Elements subpackage.
with(Maplets[Elements]):
# Define the Maplet. Assign it to an appropriate name.
polycomp := Maplet([
# By default, text strings are horizontally
# centered in the maplet window.
# To form a text string, enclose text in quotation marks.
# Enclose the text string in square brackets.
# End the line with a comma after the square
# bracket.
["Basic Maplet Example #1"],
# The purpose of the maplet is stated in a text
# string that is displayed.
["Evaluating the polynomial: x^3 - x^2 + 3*x +4"],
# The following is a text field. Enclose the
# associated text in quotation marks.
# The TextField['I1'](20) element creates an input field
# 20 characters long. The input field reference
# is defined as I1.
# This is the third item in the lists of lists.
# The column width expands to the size of this item.
["Enter a value for x: ", TextField['I1']( 20 )],
# The empty quotation marks in square brackets add
# a blank row between the text field and the
# following text string.
[" "],
# This is a text string that directs the user
# to click a button.
["Click OK to see the result"],
# The Button element creates a button
# labeled with the text specified
# in quotation marks and associated with the
# specified action.
# The Evaluate command element calls the Maple
# engine to evaluate the polynomial at the input
# value referenced by I1.
# The Shutdown command element closes the maplet.
[Button("OK", Evaluate( 'A2'=I1^3 - I1^2 + 3*I1 + 4)),
Button("Close", Shutdown())],
# The following text field displays the results
# of the polynomial evaluation assigned to A2.
# The TextField element with the not editable
# argument creates a display field in which the
# user cannot enter text.
# The final square bracket completes the body
# of the maplet program.
# Important: Do not place a comma at the end
# of the last list (row) in the Maple code.
[TextField['A2']('editable' = 'false', 'width' = 30)]
# The right square bracket completes the main list.
# The right parenthesis completes the maplet definition.
# The definition ends with a colon(:) so that the associated
# XML data structure is not displayed.
]):
# The Display command in square brackets runs the
# maplet assigned to polycomp.
Maplets[Display](polycomp);
|
|
|
レイアウト要素による Maplet の作成
|
|
Maple[Elements] サブパッケージ内に一覧表示されているレイアウト要素(?Maplets, LayoutElements) を使用することで、デザインの必要に応じて、インタフェース項目を配置あるいは定義します。列や行を角括弧で定義する代わりに、BoxRow および BoxColumn 要素を使用することが可能です。
行のレイアウト対 BoxRow 要素レイアウト
以下の例では、角括弧を用いて行を作成します。
>
|
with(Maplets[Elements]):
RowExample:= Maplet([
["Item1", "Item2", "Item3", "Item4"]
]):
Maplets[Display](RowExample);
|
以下の例では、角括弧の代わりに BoxRow 要素を用いて、行を作成します。式列 "Item1", "Item2", "Item3", "Item4" を、丸括弧で囲む必要があります。
コーディングの時点で、BoxRow 要素は表示される項目の構造を明確に定義します。
デバッグの時点で、 BoxRow 要素は多くのリストを持つ maplet において有用なマーカーとなります。
BoxRow 要素は、maplet の機能を高めるインタフェースオプションを受け付けます。
>
|
with(Maplets[Elements]):
BoxRowExample:= Maplet([
BoxRow("Item1", "Item2", "Item3", "Item4")
]):
Maplets[Display](BoxRowExample);
|
以下の BoxRowExample2 という maplet の定義では、黄色の背景色が指定されます。
>
|
with(Maplets[Elements]):
BoxRowExample2:= Maplet([
BoxRow('background'=yellow, "Item1", "Item2", "Item3", "Item4")
]):
Maplets[Display](BoxRowExample2);
|
列のレイアウト対 BoxColumn 要素のレイアウト
以下の例では、角括弧を用いて列を作成します。これは階層化されたリストとなります。
>
|
with(Maplets[Elements]):
ColumnExample:= Maplet([
["Item1"],
["Item2"],
["Item3"]
]):
Maplets[Display](ColumnExample);
|
以下の例では、角括弧の代わりに BoxColumn 要素が使用されます。式列 "Item1", "Item2", "Item3" を、丸括弧で囲む必要があります。
コーディングの時点で、BoxColumn 要素は表示される項目の構造を明確に定義します。
デバッグの時点で、BoxColumn 要素は多くのリストを持つ maplet において有用なマーカーとなります。
BoxColumn 要素は、maplet の機能を高めるインタフェースオプションを受け付けます。
>
|
with(Maplets[Elements]):
BoxColumnExample:= Maplet([
BoxColumn("Item1","Item2","Item3")
]):
Maplets[Display](BoxColumnExample);
|
以下の BoxColumnExample2 という maplet の定義では、白色の背景色が指定されます。
>
|
with(Maplets[Elements]):
BoxColumnExample2:= Maplet([
BoxColumn('background'=white, "Item1","Item2","Item3")
]):
Maplets[Display](BoxColumnExample2);
|
以下の BoxColumnExample3 という maplet は、リスト内の最も長い項目を元にした列の幅に、拡張されています。
>
|
with(Maplets[Elements]):
BoxColumnExample3:= Maplet([
BoxColumn('background'=white, "Item1","Item2","Item3xxxxxxx")
]):
Maplets[Display](BoxColumnExample3);
|
|
Window, BoxRow, GridLayoutの各要素を用いた高度なレイアウト
|
|
以下の maplet では、3つのレイアウト要素が使用されます:
例
以下の maplet では、項目の3つのボックスを表示します。この maplet は、角括弧を用いて構築されます。罫線や背景色といったオプションは、利用できません。レイアウトを理解するために、角括弧内のリストに必ず従ってください。チェックボックスおよびそれに関連するテキストは、並べないことに注意して下さい。
この maplet を表す式列は次の通りです:
Maplet(Window(item,[[item, item, item, item, item,[[item],[item],[item],item, item]]))
>
|
restart;
with (Maplets[Elements]):
Threeboxes1 := Maplet(Window( 'title' = "Using [] Brackets",
[
["ABC", Button("OK", Shutdown()), "More text...",TextField[TF1](5),
"Title Here",
[
[CheckBox['CB1'](), "red"],
[CheckBox['CB2'](), "blue"],
[CheckBox['CB3'](), "green"]
],
"Text Goes Here",TextField['TF2'](5)
]])):
Maplets[Display](Threeboxes1);
|
以下の例題では、前の例と似た、しかし視覚的に高度な内容をもつ maplet を作成します。
1つめの BoxRow 要素は、この maplet の内容全体を囲んでいます。そのボックスは、白い罫線で与えられます。
角括弧の代わりに、BoxRow および GridLayout 要素が使用されています。
この maplet を表す式列は次の通りです:
Maplet(Window(item),
BoxRow(item, BoxRow(item, item, item, item, item),
BoxRow(item, item, GridLayout(item, item, item)),
BoxRow(item, item)
))):
>
|
restart;
with (Maplets[Elements]):
Threeboxes2 := Maplet(Window( 'title' = "Using BoxRow and GridLayout Elements",
BoxRow('border'=true,
BoxRow('background'=blue,
"ABC", Button("OK", Shutdown()),
"More text...",TextField['TF1'](5)),
BoxRow('background'=white, "Title Here",
GridLayout([
[CheckBox['CB1'](), "red"],
[CheckBox['CB2'](), "blue"],
[CheckBox['CB3'](), "green"]
])),
BoxRow('background'=red, "Text Goes Here", TextField['TF2'](5))
))):
Maplets[Display](Threeboxes2);
|
複雑な maplet では、角括弧よりも、Maplets[Elements] パッケージから特定の要素を採用するようなコードを読み込むほうが、より簡単であることがしばしば起こります。また、要素のインタフェースオプションを使用して、maplet の高度な表現方法を用いることも可能です。
|
|
|