本章では、ウィジェットパレットにある各 Motif ウィジェットの概要と、効果的な使用方法について説明します。また、各ウィジェットの特徴についても説明します。ただし、ここでは基本的な情報のみを提供するものとします。各ウィジェットのすべてのリソースを含む詳細な記述については、『 Motif プログラマーズ・リファレンス』を参照してください。
各ウィジェットについて、リソースパネルのページごとにリソースを分類して記述しています。また、そのウィジェットに対して使用できるコールバックも記述しています。ウィジェットに対するコールバックは、厳密に言えばリソースの一部ですが、コールバックダイアログを使用して個別に編集および表示することができます。
繰り返しを防ぐため、コアリソースは含まれていません。太字で示されているリソースは頻繁に設定されるものであり、経験のレベルとは関係なく、どのユーザーにも重要です。標準の字体で示されているリソースは、太字のリソースに比べると設定される頻度が少なく、効果的に使いこなすためにはある程度の知識を必要とするものです。「ラバーポジショニング」のように小さい文字サイズで示されているリソースは、そのクラスには使用できません。リソースパネルではグレー表示されていて、選択することはできません。
矢印ボタンウィジェットは、テキストラベルの代わりに矢印を持つボタンを提供します。この矢印は、上下左右を指すことができます。図 27-1 に示す矢印ボタンリソースパネルのオプションメニューから適切な方向を選択して、4 方向の中から 1 つを選択します。
他のボタンウィジェットとは異なり、矢印ボタンはラベルから派生するものではありません。したがって、テキストまたはピックスマップラベルを表示することはできません。
ブリテンボードウィジェットは、最も基本的なコンテナウィジェットです。このウィジェットは、フォーム、選択ボックスおよびメッセージボックスなど、他のコンテナまたはコンポジットウィジェットを Motif で実装するために、最も一般的に内部で使用されます。多くの場合、これらの派生ウィジェットの方が、ブリテンボードそのものよりも便利です。
ブリテンボードは、コンテナウィジェットとして、子に特定の配置を強制しません。 ブリテンボードは絶対位置とマージンの制約を提供し、その内部のウィジェットのオーバーラップを可能にするかどうかはユーザーが指定します。ブリテンボードのサイズ変更を行なっても、内部のウィジェットの移動あるいはサイズ変更は行われません。
ブリテンボードは、サイズ変更を行うことのない一時的ダイアログに対して大変役に立ちます。サイズ変更が可能なダイアログに対しては、フォームまたはダイアログテンプレートを使用してください。また、複雑な位置決めのために C コードの作成が必要である場合にもブリテンボードを使用することができます。
配置エディタでは、移動とサイズ変更オプションのみを使用することができます。ウィジェット間のアタッチメントおよび位置アタッチメントは使用できません。柔軟性の高い配置オプションが必要な場合には、フォームウィジェットを使用してください。
ブリテンボードがシェルの子である場合は、そのブリテンボードの「タイトル」リソースは、 シェルウィンドウのタイトルとして使用されます。
ブリテンボードがフォームの子である場合は、「タイトル」、「ダイアログのスタイル」、「デフォルトの位置」、「サイズ変更なし」は使用できなくなります。
「自動アンマネージ」リソースが「はい」に設定されていると、 ブリテンボードの子であるボタンをクリックするとダイアログが非表示になります。Motif でのデフォルト動作であるこの動作は、一時的ダイアログに対しては便利ですが、メインウィンドウにおいては混乱を招く場合があります。Sun WorkShop Visual は、ブリテンボードおよびその 2 個の派生ウィジェット (ダイアログテンプレートおよびフォーム) に対し、このリソースを明示的に「いいえ」に設定します。ブリテンボードから派生したその他のウィジェットに対しては、Sun WorkShop Visual はデフォルトの「はい」という設定の書き換えは行わないため、ユーザーが何らかのボタンをクリックするとダイアログは非表示になります。ダイナミックディスプレイを復元するためには、シェルをリセットするか、あるいはウィンドウ保持領域にあるシェルアイコンを選択します。
「デフォルトの位置」リソースは、画面上のウィンドウの位置がどのように決定されるかを制御します。シェルの子であるブリテンボード (または派生ウィジェット) 上でこのリソースを「いいえ」に設定すると、ウィンドウはシェルではなくブリテンボードの X および Y リソースが決定した位置に表示されます。この動作はウィンドウマネージャにより異なるため、一貫性はありません。
カスケードボタンウィジェットは、メニューを表示するために使用されます。カスケードボタンは、メニューバーまたはメニューの子としてのみ使用することができます。メニューバーの子である場合にはメニューを表示し、メニューの子である場合にはプルライトメニューを表示します。メニューウィジェットの記述には、このようなカスケードボタンの使用法を示した簡単な階層例があります。
カスケードボタンでは、メニューだけを子として持つことができます。ユーザーがカスケードボタンをクリックすると、メニューが表示されます。
Motif においては、メニューはカスケードボタンの子ではなく、カスケードボタンの親の子です。これを示すため、カスケードボタンとそのメニューの間の接続は通常の実線ではなく、点線で描かれています。
カスケードボタンにキーボードニーモニックを設定し、ユーザーがマウスを使用することなくメニュー間を行き来できるようにすることが可能です。
コマンドウィジェットは、コマンド履歴のスクロール可能リストからコマンドを選択するために使用するコンポジットウィジェットです。コマンドは、ウィジェットの下部にあるテキスト領域にタイプ入力することができます。コマンドが入力された場合、そのコマンドは履歴リストの末尾に追加されます。コマンドは、選択ボックスから派生しています。また、一部のブリテンボードのリソースを継承します。ブリテンボードのリソースパネルを表示するためには、リソースパネル内の「ブリテンボードのリソース」をクリックします。
コマンドは、コマンド履歴領域に対するスクロールリストウィジェット、コマンド行プロンプトのためのラベル、コマンド入力領域のためのテキストウィジェットを含んでいます。これらの構成要素は、デザイン階層には表示されていないブリテンボードウィジェットに含まれています。構成要素ウィジェットに対するデフォルトリソース設定は変更することができますが、削除することはできません。プロンプトを変更するためには、その子であるラベルのリソースパネルではなく、コマンドのリソースパネルのラベルページにある「プロンプト文字列」リソースを修正します。
コマンドは、通常、シェルまたはメインウィンドウ内で使用されます。
コマンドには複数の子を追加することができます。最初の子は作業領域になります。これは、追加のウィジェットを含むコンテナウィジェットとすることができます。図 27-2 では、作業領域がコマンドウィジェットの階層の最後に表示されていますが、ダイアログに作業領域が表示される場所は「作業領域の場所」リソースが制御します。追加の子には、メニューバーおよび任意の数のプッシュボタンウィジェットを持たせることができます。
ダイアログテンプレートウィジェットは、通常シェルの子として多様な種類のダイアログに対して使用されます。このウィジェットは、上から、メニューバー、作業領域、セパレータ、ボタンボックスとする標準配置を提供します。
ダイアログテンプレートは、特別に構成されているメッセージボックスであり、 メッセージボックスのリソースパネルを共有します。また、一部のブリテンボードのリソースを継承しています。ブリテンボードのリソースパネルを表示するには、リソースパネルにある「ブリテンボードのリソース」をクリックします。
セパレータは、ダイアログテンプレートの構成要素部品です。セパレータを使用する場合には、図 27-3 のようにメニューバー、作業領域に対しての何らかの型のウィジェット、ボタンボックスのための任意の型のボタンなど、他の標準配置の要素を追加する必要があります。作業領域は、フォームなどのように、子を持つコンテナウィジェットとすることができます。ダイアログテンプレートは、階層に追加する順序とは関係なく、常に下から上への標準順序で子を配列します。
標準配置の領域は、強制的に同じ幅になり、ボタンボックス内のボタンは 1 行または複数行に等間隔で配置されます。ウィンドウがサイズ変更されると、必要に応じてボタンは自動的に並べ替えられます。
描画領域ウィジェットは、アプリケーションが出力グラフィックスを表示する領域を提供します。たとえば、Sun WorkShop Visual メインウィンドウにあるデザイン階層は、スクロールウィンドウに含まれている描画領域に描かれます。
配置エディタを表示するには、ウィジェットメニューから「配置」を選択するか、またはツールバーの「配置」ボタンを押します。配置エディタでは移動およびサイズ変更オプションのみを使用することができます。ウィジェット間のアタッチメントおよび位置アタッチメントは使用できません。
リソースパネルを表示するには、ウィジェットメニューから「リソース」を選択するか、またはウィジェットをダブルクリックします。
描画領域は、任意の数の任意の型の子を持つことができますが、他のウィジェットの物理的な配置の管理にはあまり役に立ちません。この目的のためには、フォームなどの他のコンテナウィジェットを使用してください。
Sun WorkShop Visual では、描画領域内での描画は使用できません。描画領域内で描画を行うためには、X グラフィックス・コールを含んでいるコードを作成する必要があります。このコードは、通常「露出 (expose)」コールバックに入れられます。
描画ボタンウィジェットは、プッシュボタンに似ていますが、ボタン面が自動的に描かれるのではなく、アプリケーションで描画しなければならないという点が異なります。このウィジェットを使用して、状況に応じた外観を持つボタンを提供することができます。
ボタン上に絵を表示する場合は、通常、プッシュボタンとイメージのピックスマップを一緒に使用して実行できます。描画ボタンに絵を描くためには、X グラフィックス・コールを含んでいるコードを作成する必要があります。このコードは、通常「露出 (expose)」コールバックに入れられます。
ファイル選択ボックスウィジェットは、ユーザーがファイルシステム内でブラウズおよびファイルの選択を行うためのコンポジットウィジェットです。Sun WorkShop Visual のファイルブラウザは、ファイル選択ボックスの 1 つの例です。生成ダイアログは、子として作業領域を持っているファイル選択ボックスです。ファイル選択ボックスは、選択ボックスから派生され、そのリソースパネルを共有します。
ファイル選択ボックスの組み合せは、2 個のスクロールリスト、2 個のテキストフィールド、4 個のラベル、1 個のセパレータ、4 個のプッシュボタンを含んでいます。これらはガジェットです。その構成要素は、デザイン階層には表示されていないブリテンボードウィジェットに含まれています。ブリテンボードから継承されたリソースを表示するためには、リソースパネル内の「ブリテンボードのリソース」をクリックします。
ファイル選択ボックスは、ブリテンボードが使用できる場所であれば、どの場合でも使用することができますが、通常はファイル選択のためにポップアップされるダイアログシェルに配置されます。
ボタンのラベルまたはラベルウィジェットのデフォルトを変更するためには、個々のウィジェットのリソースパネルではなく、ファイル選択ボックスのリソースパネルにあるリソースを修正します。
ファイル選択ボックスには、複数の子を追加することができます。最初の子は作業領域になります。この作業領域は、追加のウィジェットを含むコンテナウィジェットとすることができます。また、作業領域はファイル選択ボックスウィジェットの階層の最後に表示されますが、ダイアログに作業領域が表示される場所は「作業領域の場所」リソースによって制御されます。追加された子にはメニューバーおよび任意の数のプッシュボタンウィジェットを持たせることができます。
フォームウィジェットは、その子ウィジェットの絶対および相対位置を提供するコンテナウィジェットです。通常は、ダイアログ内にシェルの子として、あるいはダイアログテンプレートの類のウィジェットにある作業領域として、ウィジェットを配置するために使用されます。
フォーム内でのウィジェットの配置は、フォームの子についてのアタッチメントを使用して指定されます。異なる種類のアタッチメントを使用すると、フォーム内での固定位置、フォーム内での相対位置、あるいはウィジェット間の固定間隔など、さまざまな位置関係を指定することができます。これらの機能により、ウィジェットやウィンドウがサイズ変更された場合に、柔軟で確実な対応をすることができます。Sun WorkShop Visual では、配置エディタを使用して、これらのアタッチメントを対話的に指定することができます。詳細は、第 4 章「配置エディタ」を参照してください。
コンストレイントパネルを使用すると、フォームの子に設定されているアタッチメントを表示することができます。フォームの任意の子を選択し、「ウィジェット」メニューをプルダウンして「コンストレイント」を選択します。このパネルの使用方法は、第 3 章「リソース」に説明されています。「コンストレイント」パネルは、あるウィジェットを別のウィジェットに付加したい場合に大変便利です。
「自動アンマネージ」リソースが「はい」に設定されていると、フォームの子であるボタンをクリックするごとにダイアログが消去されます。Motif でのデフォルト動作であるこの動作は、一時的に表示されるダイアログに対しては便利です。しかし、フォームはメインウィンドウに対して使用される場合が多いため、Sun WorkShop Visual はフォームに対しては、このリソースを意図的に「いいえ」に設定しています。フォームを自動アンマネージするためには、「はい」に設定してください。
詳細は、「ブリテンボード (BulletinBoard)」を参照してください。
フレームウィジェットは、他には何もないウィジェットの周辺に境界枠 (タイトルが一緒の場合もある) を提供します。ウィジェットがすでに境界フレームを持っている場合にはそのフレームを強調するか、ウィジェットグループの周辺に境界フレームを作成します。フレームを使用すると、描画領域がへこんでいるように表示させるなどの 3 次元的な効果を提供することができます。
フレームには 2 個の子を持たせることができます。最初の子はフレームの内側に置かれ、次の子 (任意) はタイトルとして使用されます。2 番目の子は通常はラベルです。
ウィジェットグループの周辺に境界フレームを作成するには、図 27-4 に示すように、
それらのウィジェットがフレームの子であるローカラムまたはフォームなどのコンテナウィジェットに置かれている必要があります。
ラベルウィジェットは、テキストまたはピックスマップイメージに対しての静的表示領域を提供します。ラベルは、一般に、記述的なテキスト文字列、アイコンあるいはロゴの表示に使用されます。ラベルをメニュー内に配置して、メニュー項目のグループを表すタイトル (選択不能) にすることができます。
ラベル内の文字列には、複数の行およびフォントを使用することができます。複数のフォントは、コンパウンド文字列エディタを使用してサポートされます。コンパウンド文字列エディタについては、「コンパウンド文字列」を参照してください。
ラベルに対してピックスマップを設定した場合、ラベルは「種類」の設定を「ピックスマップ」に変更するまで、ピックスマップを表示しません。
リストウィジェットは、テキスト項目のリストを表示するために使用されます。テキスト項目は、「選択の方針」リソースの設定にもとづき、単一の、あるいは複数の選択が可能となります。
テキスト項目のスクロールリストが必要な場合は、 リストウィジェットを含むコンポジットウィジェットである、スクロールリストウィジェットを使用してください。
リストのリソースパネルの「項目」ページを使用すると、リストに項目を追加することができ、リストがどのように表示されるかを確認することができます。項目を追加するには、テキストを「項目」リソースボックスに入力し、「追加」を選択します。リストから項目を削除するには、テキストを「項目」リソースボックスに入力し、「削除」を選択します。項目の追加は、表示したい順序で行う必要がありますが、削除はどのような順序で行なってもかまいません。
追加の項目を確認するには、「可視項目数」リソースを変更します。
Motif ツールキットは、項目の追加、削除、置換など、リストを操作するための多数の関数を提供しています。詳細は、Motif のマニュアルを参照してください。
リスト内の各項目はコンパウンド文字列 (XmString) であることに注意してください。このため、理論的には項目ごとに、あるいは単一項目内の部分ごとに異なるフォントを使用することが可能です。しかし、実際にはMotif ツールキットの制限があるため、複数のフォントを使用することはお勧めできません。
メインウィンドウウィジェットを使用すると、アプリケーションのメインウィンドウ用の標準的な配置を行うことができます。標準配置には、上から下へ順番に、次のものが含まれています。
メインウィンドウは、3 個のセパレータと 2 個のスクロールバーを持つコンポジットウィジェットです。標準配置の各要素に対して、ウィジェットを追加する必要があります。メニューバーにはメニューバーウィジェットを、コマンド領域にはコマンドウィジェットを使用します。メッセージ領域には、通常、テキストまたはテキストフィールドウィジェットが使用されます。メッセージ領域には、変数名を与え、その名前をメインウィンドウの「メッセージウィンドウ」リソースとして指定する必要があります。
その他、ほとんどの種類のウィジェットは作業領域にすることができます。子として他のウィジェットを持つコンテナウィジェットも、作業領域として使用することができます。メインウィンドウは通常、サイズが固定されている作業領域上にスクロールウィンドウを表示します。作業領域がフォームである場合は、「スクロールの方針」リソースを「アプリケーションにより設定」に変更する必要があるかもしれません。リソースの変更を行うと、スクロールバーが取り除かれ、ウィンドウとともにフォームのサイズ変更が可能となります。したがって、ユーザーが配置エディタの機能を使用して、サイズ変更動作を制御することができるようになります。
メインウィンドウに作業領域を追加しない場合は、生成されたコードは実行時に警告メッセージを発します。
リソースを効果的に使用することにより、フォームにメインウィンドウの動作をエミュレートさせることができます。多くの場合、この方法がより便利なようです。
ポップアップ可 1 |
|||
アクセラレータ 1 メニューポスト 1 |
メニューウィジェットは、プルダウン、プルライトおよびポップアップメニューを持つ、特別に構成されたローカラムウィジェットです。
メニューの動作項目は、プッシュボタン、トグルボタン、またはカスケードボタンです。メニューは、表示の目的でセパレータおよびラベルを含むことができます。
メニューを作成するためには、メニューバーまたはオプションメニューの子であるカスケードボタンの子としてメニューを追加します。ユーザーがカスケードボタンをクリックすると、メニューが表示されます。
プルライトメニューを作成するためには、メニューの子であるカスケードボタンの子としてメニューを追加します。ユーザーがカスケードボタンをクリックすると、メニューが表示されます。プルライトメニューは、オプションメニューからではなく、メニューバーからプルダウンされるメニューでのみ使用することができます。
ポップアップメニューを作成するためには、描画領域の子としてメニューを追加します。ユーザーが右側のマウスボタンで描画領域をクリックすると、メニューが表示されます。描画領域には、子として複数のポップアップメニューを持たせることができます。この場合、ダイナミックディスプレイでポップアップするメニューは、デザイン階層でどのメニューが選択されているかによって異なります。
ティアオフメニューを作成するためには、ティアオフリソースを可に設定します。Motif バージョンではバグがあるため、このリソースがハードコードされておらず、しかもアプリケーションリソースファイルの一部である場合にこのリソースを有効にするためには、 XmRepTypeInstallTearOffModalConverter() への呼び出しは、メインプログラムまたはメニューでの作成の前プレリュードから行われる必要があります。
図 27-5 に、3 種類のメニューを使用したデザイン階層を示します。
プルダウンおよびプルライトメニューとは異なり、ポップアップメニューは生成コードによって明示的にマネージ (管理) される必要があります。多くのアプリケーションにおいて、ポップアップメニューは状況に依存するため、Sun WorkShop Visual はこのマネージを自動的に行うことはありません。ユーザーは、描画領域の入力コールバックを使用して、メニューの位置を決めてマネージするか、あるいはトランスレーションメカニズムを使用するアクション関数を使用します。通常は、メニューは XmMenuPosition() を使用して位置が決定され、 XtManageChild() を使用してマネージされます。
相互排他的なトグルボタンを持つメニューを作成するには、「ラジオボタン動作」リソースを「はい」に設定します。
Motif の場合、「メニュー」は厳密には表示が行われる描画領域またはカスケードボタンの子ではなく、兄弟です。しかし、描画領域またはカスケードボタンの動作は、親ウィジェットの動作と同じようにメニューに影響するため、 Sun WorkShop Visual ではメニューがこれらのウィジェットの子であるかのように階層を表示します。Sun WorkShop Visual は、カスケードボタンまたは描画領域へのメニューの接続に、実線ではなく点線を使用します。点線は、その接続が本当の Motif の親子関係ではないことを示します。
メニューバーウィジェットは、メニューをプルダウンすることができるカスケードボタンの集合を表示します。メニューバーは、特別に構成されたローカラムです。
メインウィンドウ、ダイアログテンプレートおよび選択ボックスは、メニューバーを含むことができる標準配置を提供します。これらのウィジェットを使用せずにメニューバーを含ませる場合は、フォームを使用してその上部、左右にメニューバーをアタッチしなければなりません。上記ウィジェットの違いについては、メインウィンドウ、ダイアログテンプレート、選択ボックスおよびフォームの記述を参照してください。代表的な子の構成を持つメニューバーを含んでいるデザイン階層については、図 27-5 を参照してください。
デフォルトのリソース設定により、『 Motif スタイル・ガイド』に定義されている通りの標準メニューバーが提供されます。「間隔設定方法」リソースの設定は、「密」から「列」に変更することができます。「密」は、テキストを収めるために、すべてのボタンを最小サイズにします。「列」は、すべてのボタンを同じサイズにします。
「列」間隔設定方法を使用する場合は、「整列方法」リソースを設定してボタンをラベルの中央に設定することができます。他のリソースの変更は、お勧めできません。
メニューバーは、そのすべてのカスケードボタンを左側から狭い間隔で配置します。メニューバーが「ヘルプ」ボタンを持っている場合、『 Motif スタイル・ガイド』ではそのボタンをメニューバーの右端に配置するように勧めています。カスケードボタンを「ヘルプ」ボタンに指定するためには、その変数名をメニューバーの「ヘルプウィジェット」リソースとして入力します。
メッセージボックスウィジェットは、ユーザーにメッセージを表示します。
Sun WorkShop Visual のエラーメッセージはメッセージボックスの例です。メッセージボックスは、3 個のプッシュボタンガジェット、2 個のラベル、1 個のセパレータで構成されているコンポジットウィジェットです。これらの構成要素は、デザイン階層では表示されないブリテンボードに含まれています。継承されるブリテンボードのリソースを確認するためには、リソースパネルの「ブリテンボードのリソース」をクリックします。
メッセージボックスは、ブリテンボードが使用できる場所であれば、どの場所でも使用することができますが、通常はユーザーに警告を行うためにポップアップされるダイアログシェルに配置されます。
メッセージ領域にメッセージまたはピックスマップを表示する、あるいはボタンのラベルを変更するためには、構成要素ウィジェットのリソースパネルではなく、メッセージボックスのリソースパネルでリソースを変更します。
メニューバーおよび任意の数のボタンウィジェットをメッセージボックスの子として追加することができます。さらに、作業領域として、別の型の単一のウィジェットを追加できます。作業領域は、フォームのような、子を持つコンテナウィジェットにすることができます。
オプションメニューウィジェットは、複数のラジオボタンの場合に必要な画面スペースを使用せずに、多数の選択肢から 1 つの選択を表示するために使用されます。
Sun WorkShop Visual のリソースパネルにあるページセレクタは、オプションメニューの例です。オプションメニューは、特別に構成されたローカラムです。
オプションメニューは、ラベルとカスケードボタンを含んでいるコンポジットウィジェットです。 カスケードボタンには、メニューを子として追加し、選択ごとにプッシュボタンを追加します。セパレータを使用して、オプションのグループを分けることができます。
図 27-6 に階層の例を示します。カスケードするオプションメニューは持たせることができません。
ラベルのリソースパネルにある「ラベル」リソースを変更することにより、オプションメニューを識別するラベルを設定します。カスケードボタンのラベルは、オプションメニューの現在の設定を表示しているため、変更しないようにしてください。
区画ウィンドウ・ウィジェットは、ウィジェットの集合を同じ幅の縦の列に配置するために使用されます。ウィンドウサッシのような可動セパレータにより、隣接する子と分離される区画内それぞれに、子ウィジェットが配置されます。ユーザーは、サッシを移動してそれぞれの子に割り当てる垂直方向のスペースを決定することができます。区画ウィンドウの高さは、子の高さを合計したものよりも少ないので、本来の機能を損なうことなく垂直方向のスペースを節約することができます。区画ウィンドウの子は、他のウィジェットの配置を制御するコンテナウィジェットにすることができます。
区画ウィンドウは、コンストレイントウィジェットです。コンストレイントパネルは、区画ウィンドウそのものではなく、区画ウィンドウの子に適用します。コンストレイントパネルの表示は、区画ウィンドウの子の 1 つが選択された場合にウィジェットから「コンストレイント」を選択することによって行います。このパネルの使用方法については、第 3 章「リソース」を参照してください。
コンストレイントパネルを使用すると、子に対しての「最小」および「最大」の高さのリソースを設定することができます。これらのリソースは、ウィジェットの区画およびサッシの位置の高さを制限します。
アクセラレータ 2 アクセラレータテキスト 2 ニーモニック 2 ニーモニック文字セット 2 |
プッシュボタンウィジェットは、その上でマウスボタンをクリックして「押す」ことのできるボタンを表示します。ラベルと同様に、テキストまたはピックスマップのどちらかを表示することができます。
ボタンは、矢印ボタンや描画ボタンのように、用途によって種類が異なります。メニューをポップアップするボタンには、カスケードボタンを使用します。
「デフォルトとして表示」リソースの設定はお勧めできません。これは、親であるブリテンボードがこの設定を頻繁に変更するためです。デフォルトにするボタンの決定は、ブリテンボードが行います。
メニューポスト |
ラジオボックスウィジェットは、相互排他的なラジオボタンとして動作する、トグルボタンのグループを収めるために使用されます。グループ内のトグルを選択すると、以前に選択されていたトグルが解除されます。「間隔設定方法」、「列数」、「配置方向」リソースを設定して、ローカラムに対して複数の列を作成することができます。
ローカラムの「ラジオボタン動作」リソースを「はい」に設定すると、ローカラムをラジオボックスのように動作させることもできます。この構成のローカラムは、ラジオボックスよりも高い柔軟性を得ることができます。たとえば、トグルボタンを持つボックス内にラベル、セパレータ、その他のウィジェットを持たせたり、ガジェットの代わりにトグルボタンのウィジェット版を使用することができます。
ローカラムウィジェットは、子ウィジェットを網目状に配列するために使用されます。多くの場合、ボタンあるいはトグルのグループなどの項目の配列に使用されます。たとえば、メニューは特別に構成されているローカラムウィジェットです。 ローカラムに基づいているその他のウィジェットには、オプションメニュー、メニューバー、メニューそしてラジオボックスがあります。
ローカラムには、任意の数の子を持たせることができます。ローカラム項目のデフォルト配列は、縦に 1 列です。複数の列を作成するためには、「間隔設定方法」リソースを「列」に設定し、その後「列数」リソースを設定します。
項目の順番は、「配置方向」リソースの設定が「垂直」の場合は、最初の列から下方向に、「方向」リソースの設定が「水平」の場合は、最初の行から横方向となります。「方向」リソース設定が「水平」の場合は、「列数」設定は垂直方向の行数を表わします。
ローカラムウィジェットは、配置が動的に変更されるようには設計されていないため、意図した変更を表示しない場合があります。ダイナミックディスプレイにおいて子の大きさが正しくない場合は、ローカラムをリセットしてください。
注 - 複数の列を使用する場合、ローカラムはすべての項目を強制的に同じ幅にします。しかし、これにより図 27-7 の「変更前」に表示されている (左の列が短いラベルであり、右の列が長いテキストフィールドである) ように、スペースを無駄にしてしまう場合があります。この場合、テキストフィールドをラベルの幅に合わせてサイズ変更することができます。ただし、新しい値がリソースパネルで受け入れられても、テキストフィールドのすべての値を変更するまでは、幅の変更は (図 27-7 の「変更後」のように) ダイナミックディスプレイには表示されません。
幅が等しくない列を作成するには、ローカラムの代わりにフォームを使用します。また、ローカラムを入れ子にして行と列よりもさらに複雑な配置を作成することもできます。
ローカラム内にラジオボタンのグループを作成するには、トグルボタンを使用して、 ローカラムの「ラジオボタン動作」リソースを「はい」に設定します。
スケールウィジェットは、選択可能な値の範囲を提供し、現在の値を変更するために移動させるスライダを表示します。スライダは、クリックして連続的に移動、左マウスボタンで矩形の溝をクリックして単位ごとに移動、あるいは中央のマウスボタンで矩形の溝をクリックしてカーソル位置に移動させることができます。
スケールには、ほとんどのタイプの子を持たせることができます。通常は、ラベルが子となり、子はその長さに合わせて均等に配置されます。
スケールの配置方向を変更すると、動作が異常になる場合があります。問題が発生した場合は、スケールまたはその親をリセットしてみてください。
スクロールバーウィジェットを使用すると、提供される表示領域よりも多くのスペースを必要とするデータを表示することができます。スクロールバーは、単独で使用されることはほとんどありません。スクロールウィンドウ、スクロールリスト、またはスクロールテキストなどのコンポジットウィジェットの一部として使用することが最も簡単です。
各スクロールバーは、両端に外側を向いた矢印を持ち、内側にスライダを持つ矩形として表わされます。表示領域は、スライダの移動あるいは矢印のクリックによってスクロールされます。スライダは、クリックして連続的に移動、左マウスボタンで矩形の溝をクリックして単位ごとに移動、あるいは中央のマウスボタンで矩形の溝をクリックしてカーソル位置に移動させることができます。リソースを編集して、1 回のスクロールアクションにスクロールする表示領域の量を制御することができます。
スクロールリストウィジェットは、スクロール可能な項目リストを表示するコンポジットウィジェットです。スクロールリストは、特別に構成されたスクロールウィンドウであり、リストウィジェットを含んでいます。子であるリストウィジェットのリソースは、通常の方法で設定することができます。
スクロールリストは、リストに項目を追加または削除するごとに自動的にサイズ変更を行なって、リスト内で最も幅の広い項目に幅を合わせます。Motif ツールキットのバージョンによっては、スクロールリストが正しい幅に調整されない場合があります。
不要なサイズ変更を避けるためには、何らかの方法でスクロールリストに制限を付ける必要があります。アタッチメントおよび位置アタッチメントを使用して、スクロールリストをフォームに制約することができます。しかし、フォームがまた他のウィジェットを含んでいる場合には、この制約によって異常な結果が生じる場合があります。これを避けるためには、図 27-8 に示すように、 スクロールリスト以外は何も含んでいないフォームでスクロールリストを使用してください。
また、このフォームを他のウィジェットと一緒に別のフォームに入れることができます。スクロールリストを親フォームの 4 辺全部にアタッチし、 フォームの「サイズ変更方針」を「拡大のみ」あるいは「固定サイズ」に設定します。アタッチメントを使用することによってフォームの幅と高さを設定し、スクロールリストに適切なサイズを定義、あるいはフォームの初期サイズを固定することができます。その結果、アタッチメントを使用して中に含むスクロールリストのサイズを固定することができます。
フォーム用に設定されている制約は、スクロールリストの「可視項目数」リソース設定およびリスト内の個々の項目の幅より優先されます。
スクロールテキストウィジェットは、スクロール可能なテキスト領域を提供するコンポジットウィジェットです。スクロールテキストは、特別に構成されているスクロールウィンドウで、テキストウィジェットを含んでいます。子であるテキストウィジェットのリソースは、通常の方法で設定することができます。
スクロールウィンドウ・ウィジェットは、使用可能な表示領域よりも多くのスペースを必要とするデータの表示に使用されます。 スクロールウィンドウウィジェットは、 可視オブジェクト上に 2 個のスクロールバーと 1 個の表示領域を持つコンポジットウィジェットです。可視オブジェクトはスクロールウィンドウよりもサイズが大きい場合もあります。スクロールウィンドウには、どのような種類の子でも 1 個持たせることができます。
可視オブジェクトはどのような型のウィジェットでも構いませんが、通常は描画領域または他のウィジェットを含んでいるコンポジットウィジェットが使用されます。たとえば、 フォームまたはローカラムウィジェットをスクロールウィンドウ内に配置することにより、ウィジェットの書式や表のスクロールに使用することができます。スクロール可能なリストまたはテキスト表示の場合は、スクロールリストまたはスクロールテキストウィジェットを使用します。
スクロールウィンドウに子を追加しない場合は、生成されたコードが実行時に警告メッセージを発します。
「スクロールの方針」リソースが「自動」に設定されている場合は、ツールキットがスクロールを処理して自動的にスクロールバーを作成します。
「スクロールの方針」リソースが「アプリケーションにより設定」に設定されている場合は、 ユーザーがスクロールウィンドウの子に表示される情報を変更して、スクロールバーの動きに応答する必要があります。この場合、何らかのリソース、コールバックまたは名前が設定されていると、Sun WorkShop Visual はスクロールバーを作成するコードを生成します。
スクロールバーの動作を制御するリソース (「スクロールの方針」、「スクロールバー表示方針」) の作用は、ダイナミックディスプレイには反映されませんが、生成されたコードでは正常に動作します。
選択ボックスウィジェットは、スクロール可能リストから 1 個あるいは複数の項目を選択するために使用されるコンポジットウィジェットです。選択ボックスの組み合せには、項目リストのためのスクロールリスト、2 個のラベル、1 個のセパレータ、4 個のプッシュボタンが含まれています。これらの構成要素はガジェットで、デザイン階層では表示されないブリテンボードに含まれています。継承されるブリテンボードのリソースを確認するためには、リソースパネルの「ブリテンボードのリソース」をクリックします。
選択ボックスはブリテンボードが使用できる場所であれば、どの場所でも使用することができますが、通常はユーザーからの選択を獲得するためにポップアップされるダイアログシェルに配置されます。
ボタンまたはラベルウィジェットのラベルを変更するためには、個々のウィジェットのリソースパネルではなく、選択ボックスのリソースパネルにあるリソースを変更します。
選択ボックスには複数の子を追加することができます。最初の子は作業領域になります。これには、複数の子を持つコンテナウィジェットを使用することもできます。作業領域は選択ボックスウィジェットの階層の最後に表示されていますが、ダイアログに作業領域が表示される場所は「作業領域の場所」リソースが制御します。追加された子にはメニューバーおよび任意の数のプッシュボタンウィジェットを持たせることができます。
提供されるプッシュボタンには、「了解」、「適用」、「取消し」、「ヘルプ」のラベルが付けられています。「適用」プッシュボタンは、 プッシュボタンのコアリソースパネルにある「マネージ」トグルを設定すると表示されます。
選択プロンプトウィジェットは、テキスト入力用のプロンプトを表示するために使用します。このウィジェットは、質問またはプロンプトに使用するラベル、答えを入力するためのテキストボックス、3 個のプッシュボタン (「了解」、「取消し」、「ヘルプ」) で構成されるコンポジットウィジェットです。「適用」プッシュボタンも用意されています。このボタンは、 プッシュボタンのコアリソースパネルにある「マネージ」トグルを設定すると表示されます。これらの構成要素は、デザイン階層では表示されないブリテンボードに含まれています。継承されるブリテンボードのリソースを確認するためには、リソースパネルの「ブリテンボードのリソース」をクリックします。
選択プロンプトの内容は、選択ボックスとほとんど同じです。ただし、選択プロンプトにはリストが含まれていません。選択プロンプトは、 ブリテンボードが使用できる場所であれば、どこでも使用することができますが、通常はユーザーに入力を要求するためにポップアップされるダイアログシェルに配置されます。選択プロンプトまたはボタンのラベルを変更するためには、個々のウィジェットのリソースパネルではなく、選択プロンプトのリソースパネルにあるリソースを変更します。選択プロンプトには複数の行を設定することができます。
選択プロンプト内にあるプッシュボタンは、ガジェットです。選択プロンプトには複数の子を追加することができます。最初の子は作業領域になります。これには、コンテナウィジェットを利用することもできます。作業領域はプロンプトウィジェットの階層の最後に表示されていますが、ダイアログに作業領域が表示される場所は「作業領域の場所」リソースによって制御されます。追加された子にはメニューバーおよび任意の数のプッシュボタンウィジェットを持たせることができます。
セパレータウィジェットは、オブジェクトを視覚的に分離するために使用される線です。セパレータには子を持たせることはできません。線の配置方向 (垂直または水平) を指定するためには、「配置方向」リソースを設定します。線の種類 (二重線または単破線など) を指定するためには、「種類」リソースを設定します。
セパレータを使用して、メニューまたはローカラムにある項目の分離、またはダイアログボックス内のウィジェットも分離することができます。フォームにあるウィジェットを分離するには、セパレータをその他のウィジェットとともにフォームの子にします。セパレータは、何らかの方法で制約を加えられるまでは、非常に小さなウィジェットとして表示されています。 セパレータの長さ、または幅をフォームにあわせて伸ばすには、フォームの両側あるいは他のウィジェットのそれぞれの端にセパレータをアタッチします。セパレータのサイズを明示的に設定することはお勧めできません。セパレータの「種類」を「線なし」に設定すると、目に見えないウィジェットとして使用することができます。
多くの場合、セパレータはメニュー内で項目をグループ化するために使用されます。この場合、図 27-9 に示されているように、隣接する兄弟間において表示されます。
セパレータは、ローカラム内でも使用することができます。図 27-10 には階層例とその結果のダイナミックディスプレイを示します。セパレータをローカラム内で使用するには、セパレータの配置方向を明示的に「垂直」あるいは「水平」に設定します。 ローカラム内にあるセパレータは、配列内のその他すべての要素のサイズにセルを伸ばします。しかし、この場合は望ましくない空白のスペースがセパレータ周辺に生じる可能性があります。割合を変更する場合は、列配置にフォームを使用します。
ローカラムの「間隔」リソースを 0 に設定すると、隣接するセパレータ間の隙間がなくなります。
アイコン状態 3 |
|||
シェルウィジェットは、デザインと Motif ウィンドウマネージャとのインタフェースとなります。Sun WorkShop Visual デザイン階層のルートウィジェットは、シェルでなければなりません。
Sun WorkShop Visual のパレットには、ダイアログシェル、最上位シェル、アプリケーションシェルの 3 種類のシェルウィジェットの型があります。シェルリソースパネルでいずれかのトグルをオンにして、任意のシェルに切り替えることができます。
アプリケーションシェルは、アプリケーションのメインウィンドウに使用されます。アプリケーションは、少なくとも 1 つ (通常は 1 つだけ) のアプリケーションシェルを持っていなければなりません。最上位シェルはその外観も動作もアプリケーションシェルに似ています。通常は、最初のウィンドウを除くアプリケーションのすべての一次的ウィンドウに使用されます。ダイアログシェルは、ポップアップダイアログなどの二次的ウィンドウに使用されます。アプリケーションまたは最上位シェルが閉じられたりアイコン化された場合は、関連するすべてのダイアログウィンドウも消滅します。
アプリケーションまたは最上位シェルは、ダイナミックディスプレイにはダイアログシェルとして現れますが、生成されたコードでは正確な種類のシェルが作成されます。アイコンピックスマップを確かめるには、「迂回」リソースを「いいえ」に設定し、その後シェルをリセットします。これにより、完全な装飾が作成されるため、ダイナミックディスプレイ・ウィンドウをアイコン化することができるようになります。
シェルは任意の種類の子を 1 つだけ持つことができます。しかし、シェルは、その子孫の物理的な配置を管理しないため、シェルの動作の多くは、子がブリテンボード、フォーム、あるいは類似したコンテナウィジェットであるという仮定に依存しています。シェルは、子を持ってはじめて可視状態になります。
シェルの幅と高さをコアリソースパネル上で設定しても、ウィンドウのサイズを制御することにはなりません。初期ウィンドウサイズを制御するためには、シェルの最小の幅と高さを設定する、あるいはシェルの子の幅と高さを設定します。
ウィンドウの初期位置を制御するには、シェルの子の「デフォルトの位置」リソースを「いいえ」に設定し、シェルではなく、子の X および Y リソースを設定します。
テキストウィジェットは、複数行のテキストを入力するための領域を提供します。入力の確認および検証を実行するために、広範囲のコールバックが用意されています。
複数行のテキストを使用するには、「編集モード」リソースを「複数行」に設定しなければなりません。「行数」リソース設定を 1 よりも大きな値に変更すると、テキストウィジェットの高さを変更して複数行のテキストを表示することができます。行数の変更の効果の有無は、 テキストウィジェットの親として使用されるウィジェットの型に依存します。
スクロール可能なテキスト編集領域を作成するには、テキストウィジェットを含むコンポジットウィジェットである、スクロールテキストを使用します。テキストウィジェットはスクロールウィンドウの子となることができますが、この構成は効果的ではありません。この構成を使用する場合は、「編集モード」リソースを「複数行」に変更し、行および列数をスクロールウィンドウの表示領域サイズよりも大きな値にします。
Motif ツールキットは、ウィジェット内のテキストを呼び出して変更するための関数を提供しています。詳細は、Motif のマニュアルを参照してください。
テキストフィールドウィジェットは、 テキストウィジェットの変形で、単一行のテキストのみを入力するための領域を提供します。テキストフィールドウィジェットは、複数行機能を除くすべてのテキストの編集機能を持っています。
トグルを使用して、テキストフィールドからテキストに変更することができます。しかし、複数行機能を使用するためには、「編集モード」リソースを「複数行」に設定する必要があります。
Motif ツールキットは、ウィジェット内のテキストを呼び出して変更するための関数を提供しています。詳細は、Motif のマニュアルを参照してください。「X および Motif に関する資料」に参考文献についての記述があります。
アクセラレータ 4 アクセラレータテキスト 4 ニーモニック 4 ニーモニック文字セット 4 |
トグルボタンウィジェットは、「はい/いいえ」の選択を示すための簡単なオン/オフトグルを提供します。
トグルボタンは、ラジオボックス内、あるいは「ラジオボタン動作」リソースが「はい」に設定されているメニューまたはローカラム内に配置することにより、相互排他的なラジオボタンにすることができます。ラジオボタンは、図 27-11 に示すように、通常のトグルとは異なる形をしています。
オンとオフの状態を表わすために、引っ込んだり、飛び出したりするプッシュボタンに似た外観のものを、トグルボタンを使用して実現することもできます。これを行うには、以下のようにします。
Microsoft Windows モードの Sun WorkShop Visual で選択できる Motif ウィジェットと、それらがどの Microsoft Windows クラスに変換されるかを以下に示します。
親がスクロールウィンドウ、メインウィンドウまたはシェルである場合を除き (Microsoft Windows では無視されるため)、CWnd に変換されます。その他の場合は、C++ クラスとして構成されます。
Microsoft Windows はリソースを使用しますが、その使用方法は X/Motif とは異なります。Microsoft Windows で使用されるリソースは、コンパイル時にアプリケーションに組み込まれます。また、Motif よりもその設定は厳密になっています。
Sun WorkShop Visual は、ビットマップ、アイコンおよびアクセラレータのみを Microsoft Windows リソースとして生成します。その他の Motif リソースは、表示されるウィンドウの属性に変換されるか、ソースコードに書き込まれます。
Microsoft Windows オブジェクトの作成時には、複数のウィンドウスタイルを指定することができます。これらは、ビットフラグで or されます。以下に、トグルボタンの作成方法を示します。
Create ( "Classical", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTORADIOBUTTON, rect, this, IDC_shell_classical);
基底 MFC クラスから継承されるメソッドへの 2 番目の引数がウィンドウスタイルです。Sun WorkShop Visual でリソースを設定すると、自動的に適切なウィンドウスタイルが選択されます。Microsoft Windows オブジェクトに変換できる各ウィジェットに対して使用可能なウィンドウスタイルのリストを、以下に示します。また、使用される状況および対応する Motif リソースも示しています。
他のすべてのオブジェクト同様、これらのウィジェットは Microsoft Windows 上ではウィンドウではなく、CMenu オブジェクトです。Cmenu は、Cwnd から派生していません。つまり、これらには関連するウィンドウスタイルはありません。その子 (カスケードボタンの場合は、メニューの子) は、それぞれの子の AppendMenu への呼び出しによって生成されます。子の種類により、AppendMenu には以下のフラグが渡されます。
これは、CFileDialog クラスに変換されます。Createメソッドは、CFileDialog に対しては明示的に呼び出されないため (InitDialog と DoModal が呼び出される) 、スタイルは一切存在しません。ただし、リソースは New メソッドに渡される引数に変換されます。