VLE でレイアウトを構築する場合は、VLE パレットと共に [レイアウト ツリー] ペインと [レイアウト] ペインを使用して、オブジェクトをレイアウトに追加したりオブジェクトのサイズや位置を変更したりします。次に、[プロパティ] ペインを使用してオブジェクトのプロパティを編集します。この章では、VLE の UI の使用方法と作業時の VLE からのフィードバックについて説明します。
「
レイアウトの編集」のセクションでは、オブジェクトのレイアウトへの追加方法、およびそれらのオブジェクトの操作方法について説明します。「
プロパティの編集」のセクションでは、レイアウトに追加したオブジェクトのプロパティの編集方法について説明します。これら2つのセクションでは、レイアウト内でのすべてのオブジェクトに共通の問題について述べています。それに続くいくつかのセクションでは、レイアウト内での特定のオブジェクトの使用に関する特有の問題について述べています。
VLE レイアウトの構築手順の概要を以下に示します。
[レイアウト ツリー] ペインと [レイアウト] ペインは、UI レイアウトの構築に役立つ 2 つのビューを提供します。[レイアウト ツリー] は、レイアウト内のコンテナ、コントロールおよび他の UI オブジェクトの階層ツリー ビューを表示し、[レイアウト] ペインは UI オブジェクトの外観をビジュアル表示します。どちらのペインでも UI オブジェクトに対して多数の操作を実行することができ、両方のペインはさまざまな場面で連動します。
[レイアウト ツリー] ペインでは、コンテナ内の子オブジェクトの順位も示されます。
VBox などの場合、子オブジェクトの順位はオブジェクトがレイアウトに現れる順番にもなります。たとえば、
VBox の子オブジェクト順位で最初にあるオブジェクトは、レイアウトではボックスの最上位に現れます。
Canvas など、コンテナ内のオブジェクトの位置が子オブジェクトの順位に関係しないオブジェクトもあり、この場合、子オブジェクトの順位は UI コントロールのタブ順序などに反映されるだけです。
オブジェクトを追加するには、[パレット] でオブジェクト アイコンをクリックし、[レイアウト ツリー] または [レイアウト] ペインをクリックしてレイアウトに挿入します。VLE には、新規オブジェクトの挿入場所を示すインジケータが現れます。次の図では、HBox のオブジェクトが右端の ListBox の右側に挿入されるようにカーソルが置かれています。ターゲット オブジェクトを囲むオレンジ色の境界線と、新規オブジェクトの位置を示す緑色の線 (両方のペインにあります) に注目してください。
上図を次の図と比べてみてください。次の図のカーソルは、HBox を含む Canvas にオブジェクトが挿入されることを示しています。[レイアウト ツリー] ペインの緑色の線の長さと位置に注意してください。
オブジェクトを追加するときにクリックしてドラッグし、レイアウト内でオブジェクトのサイズを指定できます。ドラッグせずにクリックするだけの場合、オブジェクトは明示的なサイズ指定なしで追加されます。オブジェクトには、ドラッグせずに挿入した場合に既定のサイズで配置されるもの (CommandButton など) と、実質上サイズ指定のないもの (VBox など) があります。このようなオブジェクトの実際のサイズは、中のオブジェクトのサイズによって決まります。多くの場合、どのようなオブジェクトにも対応できるように、特定の 横幅 や 高さ を指定せずにコンテナを追加する方が便利です。たとえば、VBox を追加した結果は、次の図のようになります。
左側の HBox には寸法が明示的に設定されていますが、VBox には設定されていません。このようなオブジェクトの内部にオブジェクトを配置してみましょう。次の図では、上図で追加した VBox にオブジェクトが挿入されるようにカーソルが置かれています。[レイアウト ツリー] にある緑色の線の位置を見てください。これは、オブジェクトが VBox の内部に挿入されることを示しています。[レイアウト] ペインでは、サイズ指定のない VBox を囲むオレンジ色の境界線によりこれを確認できます。
VLE でアイテムを選択すると、[レイアウト ツリー] ペインでは太字で表示され、[レイアウト] ペインではそのオブジェクトに選択ハンドルが表示されます。[レイアウト ツリー] ペインでアイテムの上にカーソルを移動すると、そのオブジェクト名は緑色で表示され、[レイアウト] ペインではオブジェクトがオレンジ色の境界線で囲まれます。次の図では、左端の ListBox が選択されていて、右端の ListBox の上にカーソルがあります。
一度に複数のオブジェクトを選択できます。Shift キーを押しながらクリックすると、オブジェクトをグループ選択できます。[編集] メニューの [すべて選択] を使用してグループ選択を行うこともできます。次の図はグループ選択を示しています。
最後に選択されたオブジェクトには白い選択ハンドルが付き、グループの主選択アイテムになります。これは、グループ フォーマット コマンド ([フォーマット] メニューの [同じ幅] など) を使用する場合に、他のアイテムの基準となるオブジェクトです。
また、選択されたオブジェクトは灰色の点線のボーダーラインで囲われます。このボーダーラインをドラッグすることで、オブジェクトの移動が可能です。これは子要素を持つコンテナの移動などに役立ちます。
また、拡大/縮小機能を使って、レイアウト全体を確認することが出来ます。[レイアウト] ペイン左下の
DropdownListを使用して倍率を指定してください。 この
DropdownListは、以下の2つの特別な機能を提供する子アイテムを持っています。
VLE では、オブジェクトを移動する場合にも同様のインジケータが表示されます。次の図は、左から 2 番目の ListBox が選択され、3 番目と 4 番目の間に移動することを示しています。ここでも緑色の線とオレンジ色の境界線に注目してください。
上図を次の図と比べてみてください。この図では、2 番目の ListBox が HBox の外側、Canvas 内部に配置されることを示しています。
[レイアウト ツリー] または [レイアウト] ペインでオブジェクトを選択して、コピーおよび貼り付けを行うことができます。また、オブジェクトをドラッグ中にCtrlキーを押す事でもコピー・貼り付けを行う事が出来ます。この時、オブジェクトがコピー可能である場合はマウスカーソルの横に「プラス」アイコンが表示されます。貼り付け操作では、現在選択されているオブジェクトによって貼り付けられる位置が決まります。さらに、貼り付け操作の後は選択アイテムが変わり、前に選択されていたオブジェクトの選択が解除され、貼り付けた内容が新たに選択されます。現在 1 つのオブジェクトが選択されていて (ほとんどの場合は今コピーしたばかりの、貼り付けようとするオブジェクト)、これがコンテナでない場合、貼り付ける内容は選択オブジェクトの兄弟になり、これを含むコンテナの子オブジェクト順位において、選択オブジェクトの直後に置かれます。
現在 1 つのオブジェクトが選択されていて、これがコンテナの場合、そのコンテナ内部の、子オブジェクト順位の最後に貼り付けられます。特に、コンテナでないと考えていたオブジェクトが実際コンテナであった場合などは、この動作が予期せぬ結果となる場合があります(ラベルを含むコンテナである
CommandButton など)。
このような結果を避け、先に示した図のような結果を得るには、貼り付け操作の前に
CommandButton を中に含んでいるオブジェクトを選択するか、貼り付け後にオブジェクトを並べ替える必要があります。
複数のオブジェクトが選択されている場合、貼り付ける内容はこれらのオブジェクトの親にあたるコンテナ内に挿入され、そのコンテナの子オブジェクト順位において、最後の選択オブジェクトの直後に置かれます。
VLE でオブジェクトを貼り付けるときには、他にも注意する点があります。たとえば、コンテナに他の複数のコンテナが子として含まれている場合、外側のコンテナの子オブジェクト順位の特定位置にオブジェクトを直接貼り付けることはできません。外側のコンテナを選択した場合、貼り付けるオブジェクトは他の既存の子オブジェクトの最後に置かれます。子オブジェクトの 1 つを選択した場合、貼り付けるオブジェクトはその子オブジェクトの中に置かれます。このような場合、該当コンテナの子オブジェクト順位の最後にオブジェクトを貼り付けてから、ドラッグ アンド ドロップ操作で適切な位置に移動するのが最良の方法です。
[プロパティ] ペインでは、[レイアウト ツリー] または [レイアウト] ペインで現在選択されているオブジェクトのプロパティ値を設定したり、イベント ハンドラを作成できます。[プロパティ] タブにはこのオブジェクトの利用可能なプロパティのリストが表示され、[イベント ハンドラ] タブには利用可能なイベント ハンドラのリストが表示されます。ペイン上部のタイトル バーには、現在選択されているオブジェクトのタイプが表示されます。
イベント ハンドラとプロパティのリストは、名前またはカテゴリ順にソートでき、カテゴリ ノードを展開したり折りたたむこともできます。タブの下方の領域には、選択したプロパティまたはイベント ハンドラの名前が表示されます。プロパティの場合、簡単な説明も表示されます。プロパティが非ローカル オプションの場合、この表示領域の右側の、プロパティ名とは反対側の端に [非ローカル オプション] と表示されます。
プロパティ値の多くは、プロパティ名の右側にある値フィールドに直接入力して編集できます。VLE のツールで入力可能な値より、もっと複雑な値を指定する必要がある場合は、選択したプロパティ値を IDE で編集することができます。[編集] メニューから [コードの編集] を選択するか、F7 を押します。またはプロパティを右クリックして、[コードの編集] を選択します。ビジュアル レイアウト エディタで解釈および表示できないコードで構成されるプロパティ値の場合は、プロパティ値フィールドの右側に [コードの編集] ボタンが表示されます。ボタンの リアクティブ ラベル など、プロパティの性質上 VLE で解釈できないために、[コードの編集] ボタンが常に表示されているプロパティもあります。
[プロパティ] ペインでプロパティ値を変更すると、[レイアウト] ペインにも新しい値が反映され、プロパティの名前が太字で表示されます。ビジュアル レイアウト エディタが値を解釈できない場合は、[レイアウト] ペインの表示は変わりません。
文字列を取るプロパティ、または文字列を列挙型の値に変換するプロパティでは、Curl コードの記述では通常は必要な二重引用符を使用せずに入力してください。たとえば、Frame の背景色プロパティを値フィールドで #aaff33 に設定すると、IDE エディタでは "#aaff33" という設定に変換されます。
VLE では、特定の型の値を必要とするプロパティには、適切なプロパティ値を選択する特別のメカニズムが用意されています。
色 や 背景色 など、値として色を選択するプロパティでは、色選択のダイアログが提供されます。値フィールドの右端にあるアイコン (...) をクリックすると、[色選択] ダイアログが開きます。
高さ や
横幅 などのプロパティは値として
Elastic を取ることができ、専用の
[プロパティ エディタ] を提供します。このエディタでは以下の選択が可能です。
TextField の VLE プロパティ シートには、2 つのプロパティ
検証方法 と
メッセージの表示 があります。これらのプロパティを使用して、フィールドへのユーザー入力を検証できます。
検証方法 プロパティを使用すると、
TextField に検証機能を追加できます。データ検証の詳細については、「
コントロールにおけるデータ検証」を参照してください。値フィールドの右端にあるアイコン (...) をクリックすると、
[検証方法 設定] ダイアログが開きます。このダイアログでは以下の選択が可能です。
- Validator : このドロップダウン リストでは、このフィールドに使用する検証機能のタイプを選択できます。次の選択肢があります。
- [検証] ドロップダウン リストの下のセクションでは、選択した検証機能のタイプに固有のプロパティ値を入力できます。
- 文字列 : StringValidator には次の選択肢があります。
- 正規表現 : RegExpValidator には次の選択肢があります。
- パターン : さまざまな目的で定義された正規表現のリストから選択できます。このリストの詳細については、ValidationPattern を参照してください。リストの中に必要な正規表現がない場合は、パターンとして [その他] を選択します。
- 正規表現 : 選択した正規表現が表示されます。[パターン] リストから [その他] を選択した場合、このフィールドは空白になります。定義済みのパターンを編集の開始点として使用できます。正規表現を編集し始めたときは、[パターン] の値が [その他] に変わります。
必須値 : このボックスをオンにすると、このフィールドへの値の入力が必須になります。ValidationController.required? を設定します。ValueFinished のダイアログを許可する : 検証メッセージの表示にダイアログを使用すると、この設定がダイアログの表示頻度を制御します。このボックスをオンにすると、ValueFinished イベントが発生するたびにダイアログが表示されます。オフにすると、validate-dialog が呼び出されたときだけダイアログが表示されます。ValidationController.dialog-on-finished? を設定します。検証失敗後にフォーカスを元に戻す : このボックスをオンにすると、検証エラー後にフォーカスがこのフィールドに戻ります。ValidationController.refocus? を設定します。エラー メッセージ : このフィールドを使用して、ユーザーが無効な値を入力したときに表示されるエラー メッセージを指定してください。メッセージを入力しなければ、検証システムでは既定のメッセージが使用されます。ValidationController.message を設定します。欠落しているエントリのメッセージ : このフィールドを使用して、必要な値をユーザーが入力していないときに表示されるメッセージを指定してください。メッセージを入力しなければ、検証システムでは既定のメッセージが使用されます。ValidationController.missing-entry-message を設定します。メッセージの表示 プロパティでは、
MessageDisplay を
TextField に関連付けます。このプロパティを設定するには、まず
[コントロール] パレット タブの
[MessageDisplay] ボタンを使用して
MessageDisplay オブジェクトをレイアウトに追加する必要があります。また、メッセージ表示には
デザイン名を付ける必要があります。
メッセージの表示 フィールドの右端にある矢印ボタンをクリックすると、レイアウト内のすべての
MessageDisplay オブジェクトの名前がリストに表示されます。
水平起点 や 垂直起点 など、特定の値しか指定できないプロパティの場合は、有効な値を含むドロップダウン リストを提供します。フィールドに直接入力することも、IDE で編集することも可能ですが、入力する値は有効な値でなければなりません。
レイアウトでオブジェクトをまず作成すると、プロパティ シートにはそのプロパティの既定値が表示されます。既定の状態が値指定なしの場合もあります。
プロパティを編集した後で既定値に戻すときは、値の復帰を行う必要があります。
[編集] メニューの
[プロパティを元に戻す] を選択するか、プロパティを右クリックして
[プロパティ値を元に戻す] を選択します。状況によっては、プロパティ値を元に戻しても、入力した値を削除するのとは同じ効果が得られない場合があります。たとえば、
ComboBox の
value プロパティに入力したテキストを削除すると、
value = "" になりますが、これと初期化されていない状態とは異なります。初期化されていない状態のプロパティ値に戻った場合は、プロパティ名が太字で表示されなくなることから判断できます。
x や y などの特定のプロパティの値は元に戻せないことに注意してください。
[パレット] の [
シェイプ] タブを使用して、
Shape オブジェクトをレイアウトに追加できます。シェイプの一般的な情報については、「
シェイプ」を参照してください。シェイプのサイズと位置に関連するプロパティについては、「
シェイプのプロパティの編集」を参照してください。
レイアウトにシェイプを追加するには、VLE の[シェイプ]パレットのボタンを使用します。シェイプはその起点を中心に構築されます。[レイアウト] ペインにシェイプをドロップすると、十字カーソルを置いた位置がシェイプの起点になるように 平行移動 プロパティが調整されます。シェイプのドロップ後は、カーソルはオブジェクト移動カーソルに変わります。
[レイアウト ツリー] ペインにシェイプをドロップすると、シェイプの起点はキャンバスの起点に合わせて配置されます。これにより、シェイプの中心はキャンバスの左上隅になります。次の図に示すように、キャンバスの境界線の外側にシェイプの大部分がはみ出します。
ドラッグ アンド ドロップによってキャンバス内でシェイプを移動できます。これにより、シェイプの 平行移動 プロパティが変更されます。
ArrowShape の終点と始点の位置を個々に設定できます。次の図のカーソルは、2D 領域で矢印の終点を任意の方向にクリック アンド ドラッグできることを示す特殊なカーソルです。
ShapeBox は、グラフィック階層のシェイプのコンテナで、通常はその中に含まれるコンテンツに合わせてサイズが調整されます。
Canvas と同様に、ShapeBox 自体はシェイプではありません。
ShapeBox は、シェイプやシェイプグループを囲む境界線などのグラフィック要素を追加する場合に使用できます。グラフィック階層にシェイプを配置するために
ShapeBox をレイアウトに明示的に追加する必要はありません。
次の図は、中に何も含まれていない
ShapeGroup を示しています。平行移動は
36pt, 36pt に設定されています。
[レイアウト] ペインでは、ドラッグ アンド ドロップ操作によりシェイプを
ShapeGroup に移動できますが、同様の操作でシェイプを削除することはできません。
ShapeGroup に追加したシェイプを
[レイアウト] ペインでドラッグすると、
ShapeGroup を基準にしてシェイプの平行移動が変更されます。次の図は、2 つ目の
ArrowShape を下と左にドラッグした結果を示しています。
[分割して挿入] を使用すると、
ShapeGroup を簡単にレイアウトに追加できます。この場合、シェイプの平行移動によってグループ内のシェイプの位置が変わることはありません。
シェイプグループからシェイプを削除するには、[レイアウト ツリー] ペインでドラッグ アンド ドロップ操作を行うか、[レイアウト ツリー] ペインまたは [レイアウト] ペインで切り取りと貼り付け操作を行います。この操作はサブキャンバスにグラフィックを移動して削除する場合などにも当てはまりますが、シェイプとシェイプグループを操作する場合によく行われます。
GUI オブジェクトとは異なり、シェイプは回転およびスケーリングをサポートします。[レイアウト] ペイン内の操作でシェイプのスケーリングを行うことはできません。プロパティ シートの
スケール プロパティを編集する必要があります。「
シェイプのプロパティの編集」を参照してください。
シェイプの回転は [レイアウト] ペインで行います。いずれかの隅のサイズ変更ハンドルの近くにカーソルを置くと、カーソルが特殊な曲線状の回転カーソルに変わります。このカーソルは、シェイプをクリック アンド ドラッグによって回転できることを示します。次の図は、回転カーソルと時計回りに回転した
RectangleShape を示しています。
シェイプは起点を中心に回転します。VLE 内のシェイプは、
四角形 プロパティを編集しなければ、シェイプの中心を起点として描画されます。
TextShape には、
水平配置方法 プロパティと
垂直配置方法 プロパティがあります。これらのプロパティを使用して、シェイプの起点を基準にしてテキストの位置を変更できます。
TextShape の配置を変更すると、
平行移動と
回転に対する反応も変わります。
次の図は、テキストの水平方向の配置と垂直方向の配置が起点にある場合のテキストの回転を示しています。
次の図は、水平方向の配置を左に設定した結果を示しています。
次の図に示すように、イメージは回転中は正しくレンダリングされませんが、回転の完了後に正しくレンダリングされます。
オブジェクトのサイズ変更ハンドルをドラッグしてサイズを変更すると、VLE によって 四角形 および 平行移動 プロパティが編集されます。起点はオブジェクトの中心のままで、オブジェクトの位置は変わりません。
次の図は、
RectangleShape とそのプロパティを示しています。
四角形 プロパティの 4 つの距離値がすべて同じ値であるため、オブジェクトの起点を中心に正方形が均等に描かれています。
次の図は、オブジェクトの右端を右方向にドラッグしてサイズを変更した結果を示しています。四角形 プロパティの lextent と rextent の値が両方とも同じ量だけ増えます。起点は四角形の中心のままですが、右側に移動しています。平行移動 プロパティの x コンポーネントの値が大きくなり、四角形の左、上、および下の辺は移動していません。
平行移動 プロパティを編集せずに 四角形 プロパティを編集して元の値に戻すと、変更された起点が中心となるように新しい寸法が設定されるため、四角形は右方向に移動します。
シェイプはキャンバス内のどこにでも配置できるため、あるシェイプを別のシェイプで部分的または完全に隠すことができます。[レイアウト ツリー] ペイン内のオブジェクトのリスト順は、レイアウト内のオブジェクトの Z オーダーを反映しています。つまり、リストの先頭にあるオブジェクトは、Z オーダーでは最背面です。[フォーマット] メニューの [前面に移動] コマンドと [背面に移動] コマンドを使用して、レイアウトにおけるオブジェクトの Z オーダーを調整できます。これらのコマンドによってレイアウト ツリー内のリスト順が調整されます。オブジェクトをリストの下方向に移動して前面に表示することもできます。
注意: グラフィックとシェイプは、キャンバス内の Z オーダー レイヤがそれぞれ異なります。すべてのシェイプは、相対的な Z オーダーに関係なくすべてのグラフィックの上に描かれます。この動作はキャンバスのプロパティで、VLE レイアウトに特有のものではありません。シェイプをキャンバス内のグラフィックの下に配置する必要がある場合は、シェイプを
ShapeBox にラップできます。
次の図は、
over というシェイプで完全に隠される、
under という
RectangleShape を示しています。レイアウト ツリーで、隠されたオブジェクト
under を選択すると、そのオブジェクト自体を選択しなくても、サイズ変更ハンドルが表示されます。
次の図は、under を前面に移動した結果を示しています。オブジェクトが表示され、レイアウト ツリーでは over の下にリストされています。
VLE レイアウトのほとんどのオブジェクトのサイズと位置は、高さと幅、
Canvas などのコンテナにおける
x と
y の位置、およびレイアウトを制御する
HBox などのコンテナ内の位置で決まります。
シェイプのサイズと位置は 2 次元空間の座標で決まるため、VLE プロパティ シートにおけるシェイプのプロパティは、他の GUI オブジェクトのプロパティとは異なります。
サイズと位置に関係するシェイプのプロパティの要約を次に示します。
VLE レイアウトに
CommandButton などの GUI オブジェクトをドラッグ アンド ドロップで配置すると、その起点の
x 座標と
y 座標が変更されます。これらの変更は、オブジェクトのプロパティ シートの
[シェイプ] セクションにある
x と
y の値に反映されます。シェイプを移動すると、x 位置と y 位置に関連する
Shape.transformation のコンポーネントである
平行移動 が変更されます。変更は、オブジェクトのプロパティ シートにある
平行移動 プロパティに反映されます。
サイズ変更ハンドルをドラッグして GUI オブジェクトの寸法を変更すると、オブジェクトの高さと幅が変わります。
RectangleShape などのシェイプの寸法もサイズ変更ハンドルをドラッグして変更できますが、実際に変更されるのはその下にある
GRect の寸法です。変更は、オブジェクトのプロパティ シートにある
四角形 プロパティに反映されます。シェイプの位置は
GRect とそれに適用されている平行移動の影響を受けるため、シェイプのサイズ変更ハンドルをドラッグすると、通常は
四角形 プロパティと
平行移動 プロパティの両方が変更されます。
GUI オブジェクトとは異なり、シェイプは回転およびスケーリングをサポートします。
スケール プロパティと
回転 プロパティは、これらのパラメータの現在の値を示します。シェイプは、
[レイアウト] ペインでドラッグ アンド ドロップ操作により回転できます。回転操作中は、カーソルが特殊な形になります。詳細については、「
レイアウトにおけるシェイプの使用」を参照してください。
[レイアウト] ペインで スケール プロパティを変更することはできません。プロパティ シートまたは Curl IDE で値を編集する必要があります。
ShapeGroup を使用すると、シェイプをグループ化して、グループ単位で移動したり、グループ内のすべてのシェイプにプロパティを適用したりできます。
ShapeGroup のプロパティ シートには、グループに設定することで子シェイプに適用できるプロパティがすべて含まれています。
ShapeGroup のプロパティ シートでは、
回転 または
スケール プロパティは使用できません。これは、VLE では
ShapeGroup の回転を設定できないためです。IDE で スケール または 回転 を設定した場合は、アプレットを実行すると変更を確認できますが、VLE でレイアウトを表示している間は確認できません。
[パレット] の [
メニュー] タブを使用して、メニューやメニューに関連するオブジェクトをレイアウトに追加できます。メニューの一般的な情報については、「
メニュー」を参照してください。
MenuBar はコンテナで、
[新規レイアウト] と
[新規複合オブジェクト] コンテナ リストに表示されます。ただし、
MenuBar には、メニュー関連のオブジェクトである
SubMenu、
MenuAction、および
menu-separator のみ含めることができます。このセクションでは、VLE でメニューを構築する場合の UI 操作や表示について説明します。
[MenuBar] ボタンを使用して、
MenuBar をレイアウトに追加できます。メニュー バーはクリック アンド ドラッグにより特定のサイズに変更できますが、サイズを指定せずに
MenuBar をドロップし、その中のサブメニューやメニュー アクションによりサイズを制御することをお勧めします。
横幅 プロパティ エディタの
add-stretch オプションを使用して、
MenuBar の伸長性を高めることができます。「
寸法のプロパティ」を参照してください。
次の図は
MenuBar に
SubMenu が配置され、
SubMenu が選択されている様子を示しています。サブメニューの左下の空のサブメニュー ペインに注目してください。このペインにサブメニューやメニューアクションを追加できます。
メニュー バーの既存のコンテンツの左または右にオブジェクトを追加できます。メニュー バーに既に存在するオブジェクトの上または下には追加できません。
MenuBar の幅をコンテンツに合わせて広げられない場合は、
MenuBar は
RasterBox と同じように動作し、コンテンツを折り返して表示します。
次の図では、2 つ目のサブメニューが最初のサブメニューの右側に追加されるようにカーソルが置かれています。緑色の線は
SubMenu の挿入先を示しています。
次の図では、2 つ目のサブメニューが最初のサブメニューの右側に配置されています。
次の図は、新しいサブメニューが配置された様子を示しています。右向きの矢印は、サブメニューが親サブメニューに含まれていることを示し、アプリケーションにおけるサブメニューとそのサブメニューの外観を表現しています。
メニュー バーのサブメニューがまったく選択されていない場合は、アプリケーションでいずれのメニュー項目も使用されていない場合と同様に、
[レイアウト] ペインにメニュー バーが表示されます。つまり、
MenuBar の直接の子のみ表示されます。[レイアウト ツリー] ペインには、常に階層構造全体が表示されます。次の図は、レイアウト ビューで構造が非表示になっているメニュー バーを示しています。
メニューを作成するときに、[レイアウト] ペインで非表示になっているメニュー階層に、オブジェクトの追加が必要となる場合があります。[レイアウト] ペインのオブジェクトの上にカーソルを移動すると、次の図に示すように、そのオブジェクトと祖先が表示されます。
メニューに追加するメニュー オブジェクトを選択すると、オレンジ色と緑色の線によって、新しいオブジェクトの配置先を確認できます。次の図は、新しいオブジェクトを sub-menu-3 と同じレベルに追加する様子を示しています。オレンジ色のボックスは、新しいオブジェクトが sub-menu-1 の子であることを示し、緑色の線はそのオブジェクトが sub-menu-3 の上に配置されることを示します。
次の図は、新しいサブメニューが sub-menu-1 の子として配置された様子を示しています。
次の図は、オブジェクトを sub-menu-3 の子として追加する様子を示しています。オレンジ色と緑色のボックスは、新しいオブジェクトが sub-menu-3 の子であることを示します。
次の図は、新しいサブメニューが sub-menu-3 の子として配置された様子を示しています。
メニュー構造の非表示の部分を表示すると、メニュー構造でカーソルの下にあるオブジェクトまでのパスが黄色で示されます。メニューにアイテムを追加できる場合は、オブジェクト追加の印も表示されます。次の図では、sub-menu-5 にオブジェクトが挿入されるようにカーソルが置かれています。
[パレット] の [
表] タブを使用して、表や表に関連するオブジェクトをレイアウトに追加できます。表の一般的な情報については、「
表」を参照してください。
表 はコンテナで、
[新規レイアウト] と
[新規複合オブジェクト] コンテナ リストに表示されます。VLE レイアウトに表と表コンポーネントを追加すると、実際には Curl コード のインストラクションが追加され、RTE がこれに従って表を作成します。
Table API のこの点に関する詳細については、
TableContentPrototype、
row-prototype、および
column-prototype を参照してください。このセクションでは、VLE で表を構築する場合の UI 操作や表示について説明します。
レイアウトに表を追加するには [表] ボタンを使います。次に、グラフィック、コントロールやその他の VLE オブジェクトを、レイアウトの他の部分に追加するのと同じ方法で表に追加します。オブジェクトを表に追加すると、表の内部でこれらのオブジェクトを含む構造が作成されます。行われる作業に応じて、VLE エディタは基礎となる Curl® 言語 API を用いてこれらを記述していきます。
表はその使い方に応じて、行の集まり、列の集まり、または個々のセルの集まりと見なすことができます。VLE の表ツールは、表を本質的には行の集まりとして扱いますが、開発者は他の方法でも扱うことができます。
次の図は、
Canvas に
Table が含まれている VLE レイアウトで、表にコントロールが追加される直前の様子を示しています。何も追加しない限り、表は完全に空であることに注意してください。
次の図は、表に
TextField が追加された後のレイアウトを示しています。表には、
TextField だけでなく、
行 0 と
列 0 も含まれていることに注目してください。表にオブジェクトを追加すると、VLE によりこのような構造が作成されます。
[レイアウト ツリー] には、表の行内のノードとして
TextField が表示されます。表内のオブジェクトは列内に存在しているとも言えますが、VLE ではすべて行ノードの子オブジェクトとして一覧表示されます。
既存オブジェクトの右または左側にオブジェクトを追加すると、そのオブジェクトを含む列が新たに作成されます。列がいつどのように追加されたかに関係なく、列には左から右に 0 から n の番号が付けられます。
次の図は、表内の既存のオブジェクトの右側にカーソルが置かれ、その位置に追加のオブジェクトが挿入される様子を示しています。太い緑色の線は新しいオブジェクトの挿入位置を示しています。
次の図は操作が完了した様子を示しています。行 0 には 2 番目のテキスト フィールド オブジェクトが含まれ、このオブジェクトの列が作成されています。
既存オブジェクトの上または下にオブジェクトを追加すると、そのオブジェクトを含む行が新たに作成されます。行がいつどのように追加されたかに関係なく、行には上から下に 0 から n の番号が付けられます。
次の 2 つの図は、既存オブジェクトの下にオブジェクトが追加され、新しい行が作成されることを示しています。
オブジェクトを追加して、新規の行と列を同時に作成することも可能です。次の図はこの操作を表しています。緑色の四角形は、新規オブジェクトが既存オブジェクトの右下に挿入されることを示しています。
次の図では、新しいテキスト フィールドが 行 1 の 列 1 に配置されたことを示しています。行 1 の 列 0 には スキップ が追加されています。この スキップ は、行 1 の 列 0 をスキップしてから、行 1 の 列 1 に TextField を挿入するよう RTE に指示しています。
既存行の上に行を追加する場合、または既存列の左側に列を追加する場合にも、同様の領域が生成されます。
他のレイアウト オブジェクトと同様に、表の行や列に移動してこれらを選択することができます。[レイアウト ツリー] で行または列のラベルの上にカーソルを移動すると、対応するオブジェクトがオレンジ色の境界線で囲まれます。次の図は行がハイライト表示されている様子を示しています。
次の図は列がハイライト表示されている様子を示しています。
行または列を選択するには [レイアウト ツリー] でクリックします。次の図は列が選択された様子を示しています。
表内のオブジェクトは、ドラッグ アンド ドロップ操作によって移動できます。次の図は、一番上の行にあるテキスト フィールドを右にドラッグしている様子を示しています。緑色の四角形はフィールドの移動先を示しています。
次の図はドラッグ アンド ドロップ操作が完了した様子を示しています。行 0 と 行 1 の 行 0 にそれぞれ スキップ が含まれていることに注意してください。矢印カーソルが 列 0 の上に置かれています。[レイアウト] ペインで列幅がゼロに折りたたまれていて、カーソル位置を表すオレンジ色の境界線で囲まれた四角形も同様に狭められている点に注意してください。
表内のオブジェクトは別のオブジェクトに置き換えることができます。置き換えるオブジェクトは緑色の四角形で示されます。次の図は、TextField が置き換えられる様子を示しています。
次の図は、TextField が CommandButton に置き換えられた様子を示しています。
VLE で表のオブジェクトを追加および削除しているうちに、何もコンテンツを含まない行や列、または
skip しか含まない行や列が生成される可能性があります。このようなオブジェクトは、不要であれば削除することができます。または、次の図に示すように、このような行または列にオブジェクトを追加することもできます。小さな緑色の四角形は、新しいオブジェクトの挿入先を示しています。
次の図は操作が完了した様子を示しています。
表にコンテンツが追加されていくと、VLE は行や列を追加して必要な表構造を作成していきます。[表] パレット タブのボタンを使用して、行、列、およびスキップオブジェクトを明示的に追加することもできます。
セル を追加するには
[セル] パレット ボタンか、
[分割して挿入] を使用します。セルを追加することにより、そのセルのプロパティを設定できます。「
表のプロパティの編集」を参照してください。
表オブジェクトのプロパティを編集する場合には、いくつか注意すべき点があります。1 つは、表 オブジェクトには デザイン名 プロパティがありますが、行、列、および セル オブジェクトにはないということです。IDE エディタで デザイン名 プロパティの追加を行ってみても、望ましい結果は得られません。
表、行、列、および セル オブジェクトではプロパティ値を設定できます。セル の設定値は 行、列、または 表 の設定値を無効にし、行 または 列 の設定値は 表 の設定値を無効にします。表のセルに対し、その列と行の両方のプロパティ設定が存在してこれらの影響を受ける場合、コードで最後に適用された設定が実行時に使用されます。VLE により生成された表構造では、これは常に列のプロパティになります。
次の図は、プロパティが複数レベルで設定されていることを示しています。
Canvas では、
フォントサイズ プロパティが
12pt に設定されています。表では
フォント強調表示 プロパティが
bold に設定されていて、表の内部のすべてのテキストに適用されます。
行 0 ではテキストの色が赤に設定され、その行の内部のセルでは青に設定されています。
VLE エディタで 表 を操作すると 行 や 列 オブジェクトは自動的に生成されますが、セル オブジェクトは自動的に生成されません。セルのプロパティを設定する必要がある場合は、セル を直接追加するか、[分割して挿入] で追加しなければなりません。
行スパン と 列スパン の 2 つのプロパティは セル のみで利用できます。列スパン を増加すると、次の図で示すように、対応するセルの数だけ行内の既存のオブジェクトが右に移動し、必要に応じて列が追加されます。
行スパン を増加すると、次の図で示すように、列内で対応する数のオブジェクトが スキップ に置き換えられます。行スパン の値を 1 に戻しても、置き換えられたオブジェクトは元に戻りません。
TabContainer はコントロールですが、
[Tab container] ボタンは VLE
[パレット] の「
コンテナ」タブ上に配置されています。この配置は
TabContainer の主な機能が他のコントロールを格納するということにあるためです。ユーザーがいくつかの関連するコントロールのグループを切り替えられるようにすることが、このコントロールの主要な機能です。
VLE での
TabContainer の操作は、IDE エディタで直接コードを書き込んで
TabContainer を使用するのといくらか異なります。タブ コンテナの作成についての詳細は、「
タブ コンテナ」を参照してください。主な違いは
TabPane オブジェクトを明示的に追加しない点であり、 VLE パレット上には
[TabPane] ボタンがありません。
TabContainer にコンテナを追加する場合は、タブ コンテナ ペインは VLE によって暗黙的に作成されます。IDE エディタ内で VLE によって生成されたコードを編集する際には、実装時、および実行時ともにタブ コンテナの機能性をフルに使用していても、タブ コンテナ内には
TabPane オブジェクトが見えません。VLE によって生成されたコードの解釈についての詳細は、「
レイアウトの使い方」を参照してください。
次の図は、VLE レイアウトにおけるタブ コンテナ使用のプロセスを示しています。
他の多くのコンテナと同様に、ほとんどの場合、タブ コンテナをレイアウトに追加する際に特定の寸法を与えないことが最善の方法となります。この方法だと、コンテナの中身がサイズを決定することができます。次の図では、タブ コンテナのあるレイアウトを示しています。この時点では、タブが表示されず、寸法のないコンテナであることに注意してください。
次のコード フラグメントは、
VBox を追加する際に VLE がレイアウトに追加するコードを示しています。レイアウトは
TabContainer の
layout-container を格納しています。タブ コンテナ内の
layout-container は
VBox です。
{define-layout-class MyContainer
|| Begin meta-data DO NOT EDIT
format-version = 2,
design-time-class = "Canvas",
run-time-class = "Canvas",
|| End meta-data
width = 188.99pt,
height = 154.76pt,
background = "#D4D0C8",
border-width = 1.5pt,
border-color = "#D4D0C8",
border-style = "raised",
font-size = 8pt,
control-appearance-changeable? = true,
{layout-container void:TabContainer
|| Begin meta-data DO NOT EDIT
anchor = "top-left",
x = 12pt,
y = 12pt,
|| End meta-data
{TabContainer
{layout-container void:VBox
|| Begin meta-data DO NOT EDIT
tab-label = "tab1",
|| End meta-data
{VBox
}
}
}
}
{constructor {default}
{self.initialize-components}
}
}
VBox にコントロールを追加するとタブ表示領域が書き込まれます。
VBox はタブ コンテナ内にあるので、タブに表示されるテキストを定義する tab-label プロパティを持っています。次の図では、Tab 1 に設定された tab-label を示します。
タブ コンテナにコンテナを追加することによって、追加のタブを作成します。次の図では、VBox を追加した結果を示しています。
この最後の図では、コンテンツとタブ ラベルのある2番目のタブを示しています。
このサンプル データを使用すると、フォントサイズ や ツリー コネクタの色 などの他のコントロール プロパティの編集結果を確認できます。
VLE の複合オブジェクトを使用できる場合は、レイアウトの構築でも使用できます。複合オブジェクトは VLE に組み込まれたグラフィック階層で、VLE パレット アイテムからアクセスできます。複合オブジェクトのパレット機能拡張をインストールする必要がある場合は、「
VLE 機能拡張ファイルのインストールとアンインストール」を参照してください。複合オブジェクトの作成方法については、「
複合オブジェクトの構築」を参照してください。
Curl IDE ドキュメントには、複合オブジェクトを使用する拡張例があります。拡張例の使用方法については、「
拡張例」を参照してください。
拡張例は次のファイルに含まれています。
d:\automated-build-temp\build\win32-atom\docs\default\examples\layout-editor\CompoundObject.zip
このアーカイブ ファイルにはいくつかのディレクトリが含まれています。
display-panes ディレクトリには
DISPLAY-PANES というプロジェクトがあり、スロットを使用する複合オブジェクトを定義しています。このセクションでは、VLE レイアウトでこれらのオブジェクトを使用する方法について説明します。これらの複合オブジェクトの作成方法については、「
例 : 複合オブジェクトのスロット」セクションで説明されています。
display-panes-example ディレクトリには DISPLAY-PANES-EXAMPLE というプロジェクトがあり、DISPLAY-PANES の複合オブジェクトを使用しています。このアプレットはブラウザで実行できます。パレット機能拡張ファイル display-panes-ext.scurl を VLE パレットにロードすると、複合オブジェクトを使用するレイアウトを表示することもできます。このプロジェクトは、複合オブジェクトを定義するプロジェクトのマニフェストにデリゲートします。2 つのプロジェクトの相対位置を変更した場合は、デリゲート先 を置き換える必要があります。
vle-container.scurl ファイルには、次のレイアウトが定義されています。
- FourImages : 複合オブジェクト FourPane を使用する単純な例で、4 つの旗のイメージを表示します。スロットには、RecordGrid、Table、Shape を含む Canvas など、より複雑なコンテンツを含めることができます。
- PicturesAndText : 複合オブジェクト TwoPaneHoriz の複数のインスタンスを使用してイメージをテキストと共に表示します。このようなレイアウトを使用すると、スタッフの写真を簡単な紹介付きで表示できます。
- ChooseFlag : スロットを含む TwoPaneVert のインスタンスを FourPane のスロットに挿入します。その結果、ドロップダウン リストを使用して FourPanes の各ペインに表示する旗のイメージを選択できます。
このプロジェクトを使用して、複合オブジェクトの動作を確認したり、新しいオブジェクトを作成したりできます。
次の図は、パレットに表示された DISPLAY-PANES 複合オブジェクトと、レイアウト内の TwoPaneVert のインスタンスを示しています。[レイアウト ツリー] ペインに、複合オブジェクトのスロットとしてマークされたオブジェクトが表示されています。これらのオブジェクトは、タイプとデザイン名で一覧表示され、スロットであることを示す小さなダイヤ形のマークが付いています。複合オブジェクトでプレース ホルダとして機能する Fill オブジェクトは表示されていません。
次の図に示すように複合オブジェクトを選択できます。ただし、複合オブジェクト内のスロット オブジェクトを選択することはできません。[レイアウト ツリー] ペインでスロットの上にカーソルを移動すると、次の図に示すように、スロットがハイライト表示されます。
オブジェクトをパレットから複合オブジェクトのスロットに挿入できます。次の図では、スロット
upper に
CommandButton を挿入するようにカーソルが置かれた様子を示しています。オレンジ色と緑色の四角形は、コントロールが配置されたことを示します。
次の図は、スロット upper のコマンド ボタンを示しています。コマンド ボタンは、プレース ホルダの Fill オブジェクトを置き換えたものです。
オブジェクトは、あるスロットから別のスロットにドラッグできます。次の図は、コマンド ボタンが upper からドラッグされて lower にドロップされる様子を示しています。
複合オブジェクトのスロットは選択できないため、オブジェクトをスロットに貼り付けることはできません。コマンド ボタンを切り取った (ctrl-c) 場合も、スロットには貼り付けできません。オブジェクトをレイアウト内の別の場所に貼り付けてからスロットにドラッグする必要があります。
イベント ハンドラは、オブジェクトにアタッチされているイベントの発生に応答する形で実行されます。[プロパティ] ペインの [イベント ハンドラ] タブには、選択したオブジェクトで使用できるイベント ハンドラが一覧表示されます。
動的なイベント ハンドラの記述や編集には IDE エディタを使います。イベント ハンドラの値フィールドには、イベント ハンドラのコードの先頭部分が表示され、フィールドの右側に [コードの編集] ボタンが表示されます。[コードの編集] ボタンをクリックすると、IDE でファイルが開かれ、イベント ハンドラの位置までスクロールされます。イベント ハンドラが存在しない場合は、次のようにスケルトン状態で挿入されます。
{on event-type do}
UI の別のオブジェクトを参照するには、そのオブジェクトの デザイン名 プロパティを設定します。次の構文を使用してこれを参照します。
self.design-name
トップレベルのレイアウト コンテナにアクセスするには、次の構文を使用します。
self.container
self が現在のレイアウトを参照することに注意してください。
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.