オプションは、オブジェクトの属性を格納するために使用します。オプションは、ダイアログ、フィールド、ボタン、シェイプなどの可視オブジェクト用に設計されています。属性にはオブジェクトの幅、高さ、色などの情報を格納できます。
Curl® 言語の可視オブジェクトには、オプションのサポートが組み込まれています。具体的には、オプションのサポートは
Visual を直接または間接に継承するクラスに組み込まれることになります。つまり、可視クラスを作成する場合には、組み込まれているグラフィック オプションの豊富なセットから選択して新しいクラスで使用するか、または下記に示すように新規のオプションを追加することができます。
可視クラスを継承しない新規のクラスを作成する場合には使用可能な組み込みのオプションはありませんが、必要ならばオプション メカニズムを拡張して非可視クラスで使用することができます。ただし、非可視クラスにオプションのサポートを追加するというのは高度なトピックであるため、このガイドでは触れていません。
オプションは、設定時にキーワードと値を指定する必要があるという点でキーワード引数に似ています。たとえば、
width と呼ばれるオプションを設定するには、キーワード
width および幅の実際値を指定する必要があります。クラスのインスタンスの作成時にオプションを設定するには、そのインスタンスの引数としてオプション設定を指定します。また、オブジェクトのインスタンスを作成した後で
set ステートメントでオプションを設定することもできます。
オプション バインディングの設定解除も可能です。オプションを設定すると、オプションに値がバインドされます。
unset 式を使用して、オプション バインディングを後で削除することができます。さらに、
set? 演算子を使用してオプションが設定されているかどうかを確認できます。
クラス メンバとして宣言されたオプションには通常は変更ハンドラが含まれています。
この変更ハンドラには、新しい値がオプションに代入される度に
(オブジェクトのインスタンス化中、set ステートメント、または
unset の呼び出し)評価されるコード ブロックです。
オプションはローカル オプションか非ローカル オプションのいずれかになります。
現可視オブジェクトのみに適用する属性に、ローカル オプションを使用してください。グラフィカルな子には適用できません。
非ローカル オプションは、オブジェクトとそのグラフィカルなすべての子に適用される属性に使用します。
このセクションでは、クラス作成のコンテキストにおけるオプションの使用について説明します。
可視クラスのオプション使用に関する詳細は、「
グラフィック オプション 」のセクションを参照してください。
ローカル オプションを宣言するには次の構文を使用します。
構文: | {local-option public option-name:option-type [= option-value] option-code } |
|
option-name | オプション名です。Curl 言語の命名規則により、小文字のみ使用します。オプション名に複数の単語を含める場合、単語間の空白をハイフンに置き換えます。オプション名が一意であり、同じクラスの他のメンバが使用していないことを確認します。 |
option-type | オプションのデータ型です。既定のデータ型は any です。データ型の詳細については、「データ型」を参照してください。 |
option-value | オプションの既定値です (省略可能)。Curl® 実行環境 (RTE) は、指定した値をコンパイル時に計算しなければなりません。オプションを 設定しない(unset) と、その値は option-value になります。option-value を指定せずにオプションを unset すると、そのオプションのデータ型 (option-type) の既定値に設定されます。 |
option-code | オプションの変更ハンドラを実装する任意のコード ブロックです。 |
|
注: | - オプションは、オプションをサポートするクラス内のみで宣言できます。すべての可視クラスはオプションをサポートしています。
- スーパークラスから継承されたオプションは、 option-value を記述してはいけません
|
次の例では
Visual クラスを作成し、
my-highlight? という名前でローカルの
bool オプションを作成しています。
既定では、
my-highlight? は
false に設定されています。
オプション値が true に設定されると、このオプション定義に関連するコードが実行され、オブジェクトの
background と
border-color を設定します。
例:
ローカルオプションの宣言 |
 |
|| A class that creates a box. The class inherits from
|| HVBox (a visual class).
{define-class MyBox {inherits HVBox}
|| A local option that, when set, changes the colors
|| of the box.
{local-option public my-highlight?:bool = false
{if self.my-highlight? == true then
set self.background="wheat"
set self.border-color="brown"
}
}
|| The constructor method creates a box with beige
|| background, 2-point wheat borders, and a 3-point
|| margin.
{constructor {default ...}
{construct-super
background="beige",
border-color="wheat",
border-width=2pt,
margin=3pt,
...
}
}
}
{value
|| box1 and box3 are instances of MyBox that do not
|| have the option set. box2 is an instance that
|| does have the option set.
let box1:MyBox = {MyBox "Box 1"}
let box2:MyBox = {MyBox my-highlight?=true, "Box 2"}
let box3:MyBox = {MyBox "Box 3"}
|| Display box1, box2, and box3 within a spaced-hbox.
{spaced-hbox box1, box2, box3}
}
| |
非ローカル オプションを設置するには、次の2つのプロセスに従います。
最初にオプションを定義します。
次にクラス定義内で宣言します。
非ローカル オプションを定義するには、次の構文を使用します。
構文: | {define-nonlocal-option public option-name:option-type [= option-value]}
|
|
option-name | オプション名です。
Curl 言語の命名規則により小文字のみを使用します。
オプション名が複数の単語で構成される場合、単語間の空白をハイフンに置き換えます。 |
option-type | ローカルオプションの説明を参照 |
option-value | ローカルオプションの説明を参照 |
|
非ローカル オプションを宣言するには、次の構文を使用します。
構文: | {nonlocal-option public option-name:option-type
option-code
}
|
|
option-name | 既に定義されているオプション。 |
option-type | オプション定義で指定されているオプションの型 |
option-code | オプションの変更ハンドラを実装する任意のコード ブロック |
|
例:
非ローカル オプションの定義と宣言 |
 |
{define-nonlocal-option public my-highlight?:bool = false}
{define-class MyBox {inherits HVBox}
{nonlocal-option public my-highlight?:bool
{if self.my-highlight? == true then
set self.border-color="brown"
else
set self.border-color = "wheat"
}
}
{constructor {default ...}
{construct-super
border-color="wheat",
border-width=2pt,
margin=3pt,
...
}
}
}
{value
let box4:MyBox = {MyBox "Box 4"}
let box5:MyBox = {MyBox "Box 5"}
let box6:MyBox = {MyBox my-highlight?=true, "Box 6"}
let box1:MyBox = {MyBox "Box 1", box4}
let box2:MyBox = {MyBox my-highlight?=true, "Box 2", box5}
let box3:MyBox = {MyBox "Box 3", box6}
{spaced-hbox box1, box2, box3,
{CommandButton
{on Action do
{unset box2.my-highlight?}
}
}
}
}
| |
コードのオプションのアクセスするには、クラスメンバに使用するのと同じドット表記を使います。
object name.option name
オプション定義内で現在のクラスのインスタンスを参照するには、オブジェクト名 self を使用します。
フィールド、アクセッサおよびオプションのアクセス構文は、クラスの内外で同じです。次の構文を常に使用します
instance-name.member-name
オプションが設定されたかどうかを確認するには、
set? 演算子を使用します。
他のプロパティと同様に、オプションはサブクラス化によって継承されます。ただし、すべてのオプションがそれを継承するクラスで意味を持つとは限りません。このような場合、オプションを設定または設定解除しても違いはありません。たとえば、
RadioButton は
GraphicOptions のサブクラスなので、
background および
cell-margin オプションを継承します。
background オプションは
RadioButton クラスでも効果がありますが、
cell-margin を使用しても意味がありません。
RadioButton の
cell-margin オプションを設定しても、次の例で明らかなように効果はありません。
例:
オプションの継承 |
 |
{value
|| Declare and initialize a radio button.
let rb:RadioButton = {RadioButton label="Hello World!"}
|| Set an inherited option that is relevant to
|| the class.
set rb.background = "beige"
|| Set an inherited option that is not relevant
|| to the class.
set rb.cell-margin = 1cm
|| Display the radio button.
{VBox rb}
}
| |
Copyright © 1998-2019 SCSK Corporation.
All rights reserved.
Curl, the Curl logo, Surge, and the Surge logo are trademarks of SCSK Corporation.
that are registered in the United States. Surge
Lab, the Surge Lab logo, and the Surge Lab Visual Layout Editor (VLE)
logo are trademarks of SCSK Corporation.