Motif では、ウィジェットの外観や動作はそのリソースによって制御されます。リソースには、色、フォント、イメージ、テキスト、タイトル、ウィンドウやウィジェットの位置およびサイズ、コールバック、インタフェースの動作に影響するその他すべてのカスタマイズ可能な引数が含まれます。リソースは直接的な影響とともに、間接的な影響を持つ場合があります。たとえば、ボタンのラベルを変更すると、新しいラベルのためのスペースを空けるようにボタンのサイズが一緒に変更されます。
ウィジェットをデザイン階層に加える場合、Sun WorkShop Visual はそのウィジェットのすべてのリソースにデフォルト値を使用します。しかし、多くの場合、ウィジェットを有効にするためにはユーザーがいくつかのリソースを明示的に設定する必要があります。これらのリソース設定を容易にするため、リソースパネルと呼ばれるダイアログ内には、いくつかのリソースがまとめられています。
リソースパネルの種類には、「ウィジェット」と「コア」の 2 つがあります。ウィジェットリソースパネルには、選択したウィジェットのクラスに関連したリソースが含まれています。ウィジェットのすべてのクラスに共通するリソースは基底クラス
(コア、プリミティブ、マネージャ) に適用されるので、コアリソースパネルに表示されます。すべてのウィジェットクラスはコアクラスから派生しており、その大部分はプリミティブクラスまたはマネージャクラスからも派生しています。コアリソースパネルについては、「コアリソースパネル」を参照してください。
デザインのソースコードを生成する際は、X リソースファイルも生成するよう選択することができます。これは独立したファイルで、一般ユーザーが変更可能なリソース設定を含んでいます。リソースファイルとその生成については、「X リソースファイルの設定」を参照してください。リソースファイル内に生成するリソースの制御以外に、Sun WorkShop Visual は緩い結合と密な結合による制御方法も提供しています。この方法を使用すると、デザイン内のウィジェットにリソースを割り当てる方法を一括して管理できます。詳細は、「リソースの結合」を参照してください。
リソースパネルに加え、Sun WorkShop Visual はフォーム内でのウィジェットの配置、フォントおよびピックスマップの設定、 XmString (Motif コンパウンド文字列) の編集および色の選択を行うための特殊なエディタを用意しています。配置エディタについては 第 4 章「配置エディタ」を、フォント、カラー、ピックスマップ、コンパウンド文字列のエディタについては第 5 章「その他のエディタ」を参照してください。
学習用インタフェースを作成するには、すべてのラベルとボタンのテキストをデフォルト以外に設定する必要があります。まず、ローカラムウィジェットにある 3 個のラベルを、 以下に示すように変更します。
1. ローカラムウィジェットの下にある最初のラベルをダブルクリックします。
ラベルをダブルクリックすると、図 3-2 のようなリソースパネルが表示されます。
リソースパネルは通常、複数のページで構成されています。パネルの左上隅にある「オプション」メニューで、リソースパネルのページを選択することができます。
3. 「ラベル」の右側にあるテキストボックスをダブルクリックします。
これらのボックス内でのテキスト編集は、ウィジェット名を割り当てる場合と同様の効果があります。ダブルクリックすると、ボックス内のテキストが強調表示されます。
注 - ここでは <Return> を押さないでください。ラベルは複数行を含むことができるため、ここで <Return> を押すとラベルに改行文字が挿入されることになります。誤って <Return> を押してしまった場合は、<Back Space> を使用して改行文字を削除することができます。
「適用」コマンドは、新しいリソース値を設定します。「適用」をクリックすると、ダイナミックディスプレイに新しいラベルテキストが表示されます。
注 - デフォルトのロケールが「C」以外で、かつラベルに国際的テキストを使用している場合は、フォントリストリソースを使用言語用に設定しない限り、そのテキストは正しく表示されません。詳細は、「アプリケーションのフォントリソースの設定」を参照してください。正しいリソース設定がわからない場合は、第 22 章「国際化」を参照してください。
ウィジェットのクラスが異なる場合は、リソースパネルも異なりますが、すべてのリソースパネルは同じ基本構造になっています。
リソースを変更すると、図 3-3 の「ラベル」リソースの横に示されるように、リソースパネルの右端に傍線が表示されます。
Java コードに加えられることになるリソースには、図 3-3 に示したように、リソースパネルの横にコーヒーカップの絵が表示されます。Sun WorkShop Visual を使用した Java コードの生成の詳細については、第 10 章「Java 用のデザイン」を参照してください。
図 3-3 に示されるチェックマークと×印は、Microsoft Windows モードで動作中の場合に限り表示されます。チェックマークはリソースが Microsoft Windows でも適用可能であることを示し、×印は適用できないことを示します。詳細は、「準拠か非準拠かの表示」を参照してください。
リソース名はリソースパネルの左側に表示されます。リソース名は単純なラベルである場合と、リソース名自体がボタンになっている場合があります。リソース名のボタンを押すとそのリソースに関連するダイアログが表示されます。図 3-2 のリソースパネルでは、すべてのリソース名がボタンになっています。選択されたウィジェットに適用されないリソースは、グレー表示されます。
現在のリソース値は右側のボックスに表示されます。これらのボックスは単一行のテキストフィールド、または複数行のテキストボックス、またはメニューオプションになっています。リソースの設定は、これらのボックスにキーボードから入力するか、オプションメニューから撰択します。デフォルト値は括弧内に表示されます。
各リソース名の左側に、ラベルの付いていないトグルがあります。これは、コード生成段階で X リソースファイル内外のリソースをマスクするために使用するマスクトグルです。この項目については、「リソースのマスク」で説明します。リソース値を設定するためにこれらのトグルを設定する必要はありません。
通常、リソースパネルの主要部分は複数のページで構成されています。パネル上部にあるオプションメニューは、ページセレクタです。ページセレクタを使用して、ページ間を移動することができます。ラベルのリソースパネルには、そのウィジェットをガジェットとして指定するために使用するトグルスイッチも含まれています。ウィジェットクラスに対応するガジェットがある場合は、ウィジェット/ガジェット・トグルが他のウィジェットクラスのリソースパネルに表示されます。ウィジェットクラスによっては、そのクラスに適したその他のトグルスイッチを持つ場合もあります。
「元に戻す」は、編集したすべての設定を、最後に適用された設定に戻します。「閉じる」は、リソースパネルの表示を終了します。「ヘルプ」は、適切なヘルプ画面を表示します。
図 3-3 で「適用」ボタンが強調表示されていることに注意してください。リソースパネルが入力フォーカスを持っている場合に <Return> を押すと、通常は強調表示されているコマンドが実行されます。しかし、複数行のテキストボックス内で入力を行なっている場合に <Return> を押すと、この <Return> は改行文字として処理されるため、強調表示されているコマンドは実行されません。
次に、他の 2 個のラベルウィジェットに対してテキストを設定します。ラベルのリソースパネルを閉じる必要はありません。ただし、リソースパネルが構成領域を覆っている場合には移動させてください。
ウィジェットを複数選択している場合でも、コアリソースパネルとウィジェットリソースパネルの両方でリソースを設定することができます。この場合は、選択したウィジェットすべてに関連するリソースに限って設定することができます。Sun WorkShop Visual は、選択したウィジェットすべてに共通するウィジェットクラスを見つけることによって、関連するリソースを特定します。たとえばボタンとメニューバーのように、ウィジェット同士が大きく異なる場合は、共通に持っているクラスは、下位レベルのコアウィジェットクラスだけです。このような場合は、変更できるのはコアリソースだけになります。
Microsoft Windows モードの場合、Sun WorkShop Visual は、作成しているデザインが確実に Microsoft Windows 準拠となるようにします。Motif リソースは、 Microsoft Windows に直接変換を行いません。Microsoft Windows 上で類似したリソース (必ずしもリソースである必要はありません) に変換されるリソースもありますが、変換が不可能なリソースもあります。
Microsoft Windows に変換されないリソースは、次の 2 通りの方法で特定されます。
Microsoft Windows に変換されないリソースは、リソースパネル内のフィールドがピンク色で表示されます。これらのフィールドに値を入力した場合、Motif に対してはリソースが生成されますが、Microsoft Windows に対しては何も生成されません。これらの Microsoft Windows では適用されないリソースのフィールドを示す色は、Sun WorkShop Visual アプリケーションリソースファイルにある項目を変更して行うことができます。「Microsoft Windows 上のオブジェクトではない宛て先ウィジェット」を参照してください。
同じ手順を使用して、トグルボタン、カスケードボタン、プッシュボタンのラベルを設定します。図 3-4 に示すように、トグルボタンのラベルを設定します。
トグルボタンとラベルは、共通のリソースパネルを使用しています。これは、Motif ではトグルボタンウィジェットクラスはラベルウィジェットクラスから派生しているためです。言い換えると、トグルボタンはラベルの特殊な種類、つまりサブクラスです。反対に、ラベルはトグルボタンのスーパークラスです。
トグルボタンクラスは、ほとんどのリソースを含む多くの特性をラベルクラスから継承しています。継承により、すべての Motif ウィジェットクラスはクラス階層と呼ばれる階層に組織化されます。クラス階層は、使用可能なウィジェットクラスの抽象的な階層であるため、画面上で構築しているデザイン階層とは区別して考えます。
いくつかの型のボタン、つまりトグルボタン、プッシュボタン、カスケードボタン、描画ボタンは、ラベルクラスから派生しています。これらのクラスのすべてのウィジェットのテキストは、閉じて再度開くという動作を繰り返すことなく、同一のラベルリソースパネルを使用して設定することができます。
図 3-5 に示すように、ラジオボタン (ラジオボックスにあるトグルボタン) のラベルを設定します。
1. ラジオボックスにある最初のトグルボタンをダブルクリックして、リソースパネルを表示します。
2. 「ラベル」ボックスをダブルクリックして次のように入力します。
Large
デフォルトよりも長いラベルをラジオボタンに割り当てると、新しい幅に対応するようにフレーム・ウィジェットのサイズが変更されます。これは、長いテキスト文字列を収めるためにトグルボタンのサイズが変更されると、それに対応してその親であるラジオボックス、さらにその親であるフレームのサイズも変更される、という連鎖反応を示します。Motif は、この動作を自動的に行います。この動作は学習用の配置ではあまり目立ちませんが、図 3-6 のような結果になります。
同じラベルリソースパネルを使用して、図 3-7 のようにカスケードボタンのラベルリソースを設定します。
最後に、ボタンボックス内の 3 個のプッシュボタンのラベルを、図 3-8 のように設定します。プッシュボタンは、ラベルを収めるために自動的にサイズ変更を行います。
リソースを設定した後は、必ず「適用」をクリックしてください。「適用」をクリックしないと、新しい設定は有効になりません。新しい設定を適用する前に別のウィジェットを選択すると、図 3-9 に示すような警告が表示されます。
次に、メニューバーのメニューにあるボタンに対するリソースを設定します。現時点では、カスケードボタンのラベルが設定されているだけなので、メニューは図 3-10 のように表示されます。
1. 最初のメニューウィジェットの子である 1 番目のプッシュボタンを選択します。
2. 「ラベル」リソースを次のように変更します。
Wash Dishes...
省略符号 (...) は、メニュー項目がコマンドを実行する前に別のダイアログボックスが表示されることを示します。
3. 2 番目のプッシュボタンを選択し、次のラベルを割り当てます。
Count Money
4. 3 番目のプッシュボタンを選択し、次のラベルを割り当てます。
Exit
現段階でプルダウンメニューは、図 3-11 のようになります。
アクセラレータおよびニーモニックは、ラベルリソースパネルの別のページにあるキーボード・リソースで設定します。以下の手順に従って、「Help」 カスケードボタンにニーモニック「H」を設定します。
図 3-12 に示されるような「キーボード」ページが表示されます。グレー表示されていないリソースが、カスケードボタンクラスに適用されます。
Sun WorkShop Visual では、Sun WorkShop Visual インタフェースのニーモニックと同様に作動するキーボードニーモニックを設定することができます。ニーモニックには、ラベルで使用されていない文字も含め、任意の文字を指定することができます。ラベルに使用される文字の 1 つ、特に最初の文字を使用すると、一般ユーザーには便利なものになります。ニーモニックは、 1 つのメニューバーあるいはメニューの中で同じ文字を使用することはできません。
「H」と「A」の文字が下線付きで表示されるようになります。これは、Motif でニーモニックを示す手法です。この段階で、マウスを使用する、あるいは <Meta-H> <A> を押すという 2 通りの方法で「About This Layout」コマンドを呼び出せるようになりました。
ダイナミックディスプレイでニーモニックを表示する場合は、ウィジェットをリセットする必要があります。これを行うには、カスケードボタンが選択されていることを確認して、ツールバーのリセットボタンを押すか、ウィジェットメニューから「リセット」を選択します。
次に、「Exit」ボタンにキーボード・アクセラレータを追加します。Sun WorkShop Visual の場合と同様、アクセラレータは、メニューが表示されている場合でも表示されていない場合でも、メニューコマンドを即座に実行します。
これらの手順により、アクセラレータが有効になります。インタフェースの実行時には、<Ctrl-E> は「Exit」ボタンと同じ効果を持ちます。アクセラレータの場合は正確な構文が重要です。構文エラーがある場合に適用を行おうとすると、図 3-13 に示されるエラーメッセージが表示されます。
アクセラレータ構文は、トランスレーション・テーブルに使用される構文と同じです。この項目については、「トランスレーションとアクション」で説明します。
関連するリソースは、アクセラレータテキストです。このリソースは、 メニューオプションの右側に追加のテキストを表示して、アクセラレータが何であるかを示します。アクセラレータテキストは、ただ表示を行うだけであるため、特定の構文を使用する必要はありません。「Control+E」、「Ctrl-E」および「^E」といった形式が一般に使用されます。
左のメニューをプルダウンすると、図 3-14 に示されるように、すべてのボタンには新しいラベルが、「Exit」ボタンには指定されたアクセラレータが一緒に表示されます。
『Motif スタイル・ガイド』では、メニューバーの子であるカスケードボタンの 1 つをヘルプウィジェットとして指定することを推奨しています。ヘルプウィジェットは、常にメニューバーの右端に表示します。
1. メニューバーをダブルクリックして、リソースパネルを表示します。
メニューバーはローカラムの一種なので、ローカラムのリソースが適用されます。グレー表示されていないリソースが、メニューバーに適用されます。
メニューバーにあるカスケードボタンの 1 つをヘルプウィジェットにします。カスケードボタンの変数名は正確に入力しなければなりません。正確に入力を行わないと、 Sun WorkShop Visual はその入力を受け付けません。
ダイナミックディスプレイは、この変更を自動的には表示しません。ヘルプウィジェットを指定した効果を確認するには、ダイナミックディスプレイのサイズを変更してください。
ローカラムウィジェットのデフォルト設定は、垂直方向に 1 列の配置です。そのリソースを設定することにより、デフォルトの状態から図 3-16 に示すような 3 個の水平な行の配置に変更することができます。
図 3-16 に示すような配列にするには、テキストフィールドのサイズを設定する必要があります。
1. 階層の 3 個のテキストフィールド・ウィジェットを選択します。
これを行うには、ウィジェットを囲むように矩形をドラッグするか、ウィジェットを 1 つ選択してから、Shift キーを押したまま残りの 2 つを選択します。
テキストフィールドウィジェットを選択すると、画面に表示されているローカラムリソースパネルは無効になります。「適用」ボタンはグレー表示され、テキストフィールドへ入力しようとすると、ビープ音が鳴ります。このパネルはローカラムウィジェットと同じ基底クラスを持つウィジェットが選択された場合に、再び有効になります。
2. テキストフィールドウィジェットのリソースパネルを表示し、「表示」ページを選択します。
テキストフィールドウィジェットの 1 つをダブルクリックするか、「ウィジェット」メニューから「リソース」を選択するか、ツールバー上の「リソース」アイコンを押して、リソースパネルを呼び出します。
テキストフィールドウィジェットは、テキストウィジェットの変形であり、多くのリソースがテキストウィジェットと共通しています。ただし、テキストウィジェットが複数行のテキストを含むことができるのに対し、テキストフィールドウィジェットは単一行だけを含むという点が異なっています。これらのクラスは対応するガジェットを持たないため、このリソースパネルにはウィジェット/ガジェットのトグルがありません。その代わりに、ウィジェットをテキストフィールドかテキストに変更するためのトグルがあります。このトグルを使用すると、階層またはリソース設定に影響することなく、あるテキストウィジェットの変形から別のものへ変更することができます。
テキストフィールド・ボックスの幅を狭くする必要があります。テキストフィールド・ボックスのサイズは、テキストフィールドの「桁数」リソースおよび親であるローカラムが強制する規則の 2 種類の要因によって決定されます。まず、「桁数」リソースを小さな値に設定します。
テキストフィールドまたはテキストウィジェットの「桁数」リソースは、ボックスのサイズに影響するだけで、ユーザーが入力可能な文字数には影響しません。入力を特定の文字数に制限する場合は、「最大長」がデフォルトで非常に大きな数に設定されているのでこれを変更します。
3 個の行を水平に配置するためには、ローカラムのリソースを設定する必要があります。
メニューバーのリソースパネルをすでに画面上に表示している場合は、そのパネルが再度有効になります。ただし、リソースパネルのタイトルは「ローカラム」に変更されます。画面上にパネルが表示されていない場合は、ローカラムをダブルクリックして表示してください。
図 3-18 に示される「設定」ページは、指定可能な値が限られているリソースを表示します。右側の列にはテキストフィールドの代わりにオプションメニューがあります。
4. 「間隔設定方法」オプションメニューで、「列」を選択します。
「水平」方向は、ローカラムを列ではなく行に配置します。 ローカラムに複数の行または列を持たせる場合には、「列」間隔設定方法を選択する必要があります。これらの 2 つのリソースの効果を確認するには次のようにします。
この時点で、ローカラムはすべて同じサイズのセルを持つ水平な行で表示されます。「配置方向」が「水平」である場合、行および列の意味は逆になります。したがって、3 個の行を作成するためには、「列数」リソースを設定する必要があります。
7. 「列数」ボックスをダブルクリックし、次のように入力します。
3
結果は図 3-19 のようになります。
シェルウィジェットは、第 1 にアプリケーションと X ウィンドウシステムとの間のインタフェースとして存在します。その動作はおもにウィンドウマネージャと、含まれるウィジェットにより制御されます。ただし、シェルウィジェットには、いくつかの特殊なリソースがあります。
このパネルの上部には、シェルウィジェットの型を設定するトグルスイッチがあります。ウィジェットパレットには 3 つのシェルウィジェットがありますが、トグルの設定が異なるだけで、すべて同じウィジェットです。
すべてのウィンドウはシェルウィジェットで始まりますが、ウィンドウおよびシェルウィジェットにはいくつかの種類があります。Sun WorkShop Visual には、以下に示すシェルウィジェットがあります (図 3-20 参照)。
注 - 上記の動作は、 mwm を使用した場合のものです。 twm の場合は、シェル動作は同じですが外観が異なります。これは、 twm がダイアログシェルを擬似アイコンに変えてサイズを小さくするためです。擬似アイコンは、ディスプレイを整理して見やすくするためのものです。内部では、本物のアイコンと擬似アイコンは区別されており、画面上での外観は異なっています。
アプリケーションシェルを閉じると、デザイン内のすべてのウィンドウが閉じられます。
種々の型のシェルの例として、Sun WorkShop Visual インタフェースを見てみましょう。ウィジェットパレットおよび構成領域を持つメインウィンドウがアプリケーションシェルです。ダイアログ、リソースパネル、配置エディタウィンドウはすべてダイアログシェルです。これらのウィンドウは、ウィンドウマネージャを使用して個別にアイコン化することはできません。
これらのウィンドウをディスプレイから消すためには、ウィンドウマネージャを使用するか、「閉じる」ボタンをクリックしてウィンドウを閉じます。「閉じる」ボタンは、「活性化 (activate)」コールバックを使用して内部的にウィンドウを閉じます。メインウィンドウがアイコン化される場合、開いていたすべてのダイアログシェルは消去されます。メインウィンドウが復元されると、 ダイアログシェルも再び表示されます。
「ヘルプ」メニューの「ウィジェトパレット」で表示される「ウィジェットパレットの情報」パネルは、最上位シェルの例です。このパネルは Sun WorkShop Visual の起動時には自動的に表示されませんが、いったん表示すると、個別にアイコン化することができます。「ウィジェットパレットの情報」パネルのポップアップ・サブウィンドウは、その他すべてのダイアログシェルと同様にメインアプリケーションシェルの子であるため、「ウィジェットパレットの情報」パネルを使用して閉じたり、アイコン化することはできません。
シェルの型は、ダイナミックディスプレイ内には反映されません。ダイナミックディスプレイに対して作成されるすべてのウィンドウは、実際にはダイアログシェルであるため、個別にアイコン化することはできません。Sun WorkShop Visual の構成を変更して、ダイアログシェルではなく、最上位シェルを使用することができます。この操作については、付録 D「アプリケーションのデフォルト」を参照してください。各ウィンドウに対してユーザーが指定したシェルの型は、実行時に生成コードによって作成されます。
各デザインには、1 つ以上のアプリケーションシェルが必要です。デザイン内にアプリケーションシェルがない場合には、そのアプリケーションではウィンドウは一切表示されません。Sun WorkShop Visual は、アプリケーションシェルが存在しない場合にはコード生成時に警告メッセージを発します。
1 つのデザインには、2 個以上のアプリケーションシェルを持たせることができます。この場合には、Sun WorkShop Visual が生成する main() プログラムによってすべてのアプリケーションシェルが作成されますが、その中の 1 つだけが表示されます。
Sun WorkShop Visual は、どのシェルを最初に表示する必要があるかを判断することはできません。デザイン内に 2 個以上のアプリケーションシェルを持たせる場合には、独自の main() プログラムを作成するか、または適切なアプリケーションシェルを起動するように生成された main() プログラムを編集する必要があります。同様の効果を確実に実現するためには、最初のウィンドウにアプリケーションシェルを 1 つだけ持たせ、その他の一次ウィンドウに最上位シェルを使用します。そしてコールバックまたはリンクを使用して最初のウィンドウを除くすべてのウィンドウを表示するようにします。複数のアプリケーションシェルの使用はお勧めできません。
それぞれのアプリケーションは、最低 1 個 (通常は 1 個のみ) のアプリケーションシェルを必要とします。アプリケーションシェルはメインウィンドウとして、さらにアプリケーションと X ウィンドウシステム間のインタフェースとして機能します。
従属するウィンドウは、ダイアログシェルまたは最上位シェルのどちらかにすることができます。この相違点については、「シェルの型」を参照してください。
デザインのメインシェルである myFirstShell はアプリケーションシェルになっているので、タイトルを変更するだけです。
この段階で、配置は図 3-22 のようになります。
Motif は非常に多くのリソースを持っているため、Sun WorkShop Visual は複数のページで構成されるリソースパネルを使用して画面上にリソースを表示します。リソースパネルの構造が理解できたら、ウィジェットクラスおよびページ別のリソースの一覧が記載されている、第 27 章「ウィジェット・リファレンス」を参照することをお勧めします。
ウィジェットクラスのリソースパネルで使用できないリソースは、「コアリソースパネル」にあります。
通常は、複数の選択肢があるリソース、つまり設定値が限定されているリソースは、「設定」のページにあり、オプションメニューを使用して設定することができます。その他の、新しい値の入力を必要とするリソースや、別のダイアログを呼び出して新しい値を設定するリソースは、すべて別のページに分かれています。「設定」ページの場合を除いては、リソースはおおまかな項目別に編成されています。
Sun WorkShop Visual は、これらの広域なスーパークラスのリソースへのアクセスを可能にするコアリソースパネルという単一のリソースパネルを用意しています。特定のウィジェットに対してコアリソースパネルを表示するには、次のようにします。
2. 「ウィジェット」メニューをプルダウンし、「コアリソース」を選択します。
図 3-23 に、コアリソースパネルのページを示します。
コアリソースパネルの「表示」ページには、基本の色とピックスマップリソースがあります。たとえば、ウィジェットの前景、背景、強調表示、シャドウの色を設定することができます。これは、第 5 章「その他のエディタ」で実際に行います。
「寸法」ページには、ウィジェットの画面上の位置やサイズに影響するリソースがあります。クラス固有の寸法リソースは、コアパネルの設定を書き換える場合もあります。 テキストフィールドの「シャドウの厚さ」またはプッシュボタンの「強調表示の厚さ」を設定して、その効果を試してみると良いでしょう。
「設定」ページでは、ほとんどのウィジェットクラスに適用する設定を行うことができます。これらの設定には複数の選択肢が設けられています。また、「マネージ時にマップ」設定を変更することもできます。この設定は「マネージトグル」で説明するように、マネージトグルと連動しています。
「コード生成」ページでは、コード生成に関して大幅に制御を行うことができます。たとえば、特定のウィジェットを静的、局所的、大域的に指定することができます。ウィジェットの呼び出しを変更する理由については、「コールバックのウィジェットへのアクセス」を参照してください。C++ を使用している場合には、ウィジェットを限定公開、非公開、公開として指定することもできます。C++ での呼び出しについては、「ウィジェットメンバーのアクセス制御」で説明しています。さらに、「コード生成」ページを使用すると、独自の派生 C++ クラスを生成することができます。詳細は、「C++ クラス」で説明します。
マネージトグルは、「コード生成」ページにも表示されます。デフォルトでは、すべてのウィジェットがマネージとして生成されます。ただし、ダイアログシェルの子ではない選択ボックス内の「適用」ボタンはマネージされません。マネージされている状態から変更するには、コアリソースパネルの「コード生成」ページにある「マネージ」トグルを使用します。
これによって通常は、生成されたコードからウィジェットをマネージするコードが省略されます。ただし、コンポジットウィジェットの構成要素であるウィジェットまたはガジェットの場合は、トグルがオフのときは生成されたコードはウィジェットを明示的にアンマネージ (マネージ解除) します。これは、ツールキットがこれらのウィジェットを常にマネージとして作成するためです。選択ボックスの「適用」ボタンの場合は、トグルがオンのときはボタンを明示的にマネージするコードが生成されます。ウィジェットの操作方法については、「ウィジェットの操作」を参照してください。
「リソースの結合にインクルード」というラベルが付けられたトグルは、選択されたウィジェットのリソースの生成を参照します。詳細は、「密な結合」で説明します。
「ドロップサイト」ページでドロップサイトを指定することができます。ドロップサイトとは、Motif 1.2 で導入されたドラッグ&ドロップ機能を使用して、別のウィジェットからある種のデータを受け取るために用意されたウィジェットです。ドラッグ&ドロップ機能を使用すると、マウスでデータを選択してドラッグすることによって、ウィジェット間でデータを受け渡すことができます。
ドラッグの初期化は、通常はコールバックまたはアクション関数内から行われるダイナミック関数によって行われます。Sun WorkShop Visual は、ドロップの受け取りに対しては単純なサポートを行なっていますが、ドラッグのソースに対してはサポートしていません。
ウィジェットをドロップサイトとして設定する方法については、「ドラッグ & ドロップ」を参照してください。
Motif には、コンストレイント・ウィジェットと呼ばれる 2 種類のウィジェットクラス (区画ウィンドウおよびフォーム) があります。これらのクラスのウィジェットは、コンストレイント・リソースと呼ばれる一連の特殊なリソースを持っています。これらのリソースは、子のサイズや位置を制御します。コンストレイント・ウィジェットは、その子に対してそれぞれ別々のコンストレイント・セットを持っています。Sun WorkShop Visual では、それらのリソースを子のリソースであるかのように設定することができます。
コンストレイント・ウィジェットの子に対するコンストレイント・リソースを表示するには、次のようにします。
図 3-25 は、学習用配置のフォームの子であるフレームに対するデフォルトのコンストレイント・リソースパネルです。このパネルでは、フレームの上部がフォームの上部に、左端がフォームの左端に、0 ピクセルのオフセットで接続 (アタッチ) されていることを示しています。このため、フレームはフォームの左上に配置されています。フレームの下部および右端は制約されていません。
フォームがその子に強制するコンストレイント・リソースは、複雑に相互作用するため、第 4 章「配置エディタ」で説明する配置エディタを使用して設定を行うと良いでしょう。コンストレイント・パネルは、おもに配置エディタの補助として、すでに設定されているコンストレイントを表示するのに便利です。上級ユーザーは、パネルそのものに値を設定することもできます。このパネルへの値の設定は、その他のリソースパネルの場合と同様に、新しい値を入力して「適用」をクリックすることにより実行できます。
区画ウィンドウ・ウィジェットの子に対するコンストレイント・リソースパネルは、異なる値の集合を表示します。このパネルについては、 「区画ウィンドウ (PanedWindow)」で説明します。
Sun WorkShop Visual はデフォルトのリソース設定を括弧内に表示します。ユーザーがインタフェースを構築する場合の値と同じであっても、デフォルト設定は、明示的に設定する値とは異なります。デフォルト設定は、生成されたコードまたは X リソースファイルに追加されないという点が異なっています。インタフェースでデフォルト設定を使用し、そのインタフェース設計時に使用したものを異なるマシン上で実行する場合には、実行しているマシンに対しての Motif デフォルトが使用されます。
プッシュボタンのラベル、またはローカラムの列数などの多くのリソースでは、移植性の問題が生じることはまずありません。寸法や色などのその他のリソースは、マシンによって異なります。インタフェースに移植性を持たせるためには、そのようなリソースにデフォルト値を使用するか、あるいはコード生成時にそれらのリソースを X リソースファイルに入れて、各マシンに対して編集できるようにする必要があります。これについては、「X リソースファイルの設定」で説明します。
図 3-26 に、これまでの節で明示的に設定されたリソースを持つリソースパネルを示します。明示的な設定は、変更傍線でマークされています。
明示的に設定したリソースをデフォルト設定に戻すには、次のようにします。
1. リソースパネル上のリソーステキストフィールドにあるすべてのテキストを削除します。
「設定」のページで、あるリソースに対してデフォルト値を選択するには、次のようにします。
3. オプションメニューから、括弧内に表示されているオプションを選択します。
注 - この場合、現段階のダイナミックディスプレイで使用されている値、つまり最後にリソースに対して割り当てられた値がデフォルトの値になります。アプリケーションを Sun WorkShop Visual 内からではなく単独で実行する場合は、システムのデフォルト値が使用されます。Sun WorkShop Visual 内でシステムのデフォルトを確認するには、対象となるウィジェットをリセットする必要があります。
なんらかのリソースを設定する場合には、Sun WorkShop Visual はダイナミックディスプレイで選択されたウィジェットにその値を適用しようとします。ダイナミックディスプレイに表示されるものは、ウィジェットのインスタンスの集まりであることに注意してください。Sun WorkShop Visual はただウィジェットの絵を描画するわけではなく、実際に Motif 関数呼び出しを行なってウィジェットの作成を行います。Sun WorkShop Visual がリソースを設定する場合は、適切な Motif 関数呼び出しを作成してそのウィジェットに対するリソースの値を設定します。
通常、値を設定した結果は、最初にその値を使用してウィジェットを作成した場合と同じです。しかし、これが必ずしも当てはまるわけではありません。Sun WorkShop Visual のウィジェットメニューには、選択されたウィジェットとその子を破壊して、最後に適用されたリソース設定を使用してウィジェットおよびその子を作成し直す「リセット」 (<Ctrl-T>) というコマンドがあります。配置が意図した通りに表示されない場合は、「リセット」コマンドを使用してください。以下の手順では、「リセット」が必要とされる例を示します。
1. 階層で「ヘルプ」カスケードボタンウィジェットをダブルクリックして、リソースパネルを表示します。
3. 「ニーモニック」テキストフィールドからすべてのテキストを削除して、以前に設定したニーモニックを削除します。
この時点で、「ニーモニック」テキストフィールドは <デフォルト> 設定に戻ります。しかし、ダイナミックディスプレイの「ヘルプ」ボタンには、もう存在していないニーモニックを表わす下線の付いた「H」が表示されたままです。表示を更新するためには次のようにします。
リセットは、選択されたウィジェットとその子にのみ影響します。階層の下の方のウィジェットをリセットする場合、ダイナミックディスプレイ上の位置が不正確なまま残されることがあります。たくさんのリソースを設定する場合には、シェルをリセットして、リソースの設定による結果が確実に表示されるようにすることをお勧めします。
「リセット」コマンドは、フォーム・ウィジェットおよびそのアタッチメントリソースを使用している場合に特に役に立ちます。これについては、第 4 章「配置エディタ」で説明します。
Motif およびその他のウィジェットツールキットには、リソースの有効な設定を制御する規則があります。また、Sun WorkShop Visual はシミュレーションではなくウィジェットの実際のインスタンスを使用して動作するため、ツールキットの持つ規則に合わない新しいリソース設定は拒否されてしまいます。規則には、特定のウィジェットに対しての有効な値、 ローカラムなどの親ウィジェットの必要条件、そしてデザインを構築するために使用しているマシンの必要条件が含まれています。
たとえば、大画面ワークステーションで使用するためのインタフェースを設計している場合は、寸法のリソースを大きなピクセル数に設定する必要があります。小画面マシンで設計を行なっている場合は、インタフェースが将来大画面のマシンで実行することになっていても、必要な値を設定することができません (この場合には、X リソースファイルを使用することによって必要な幅を設定することが可能です)。
Motif が新しいリソース設定を拒否する場合、以前の設定には戻さずに、デフォルトと階層内の他のリソース設定にもとづいて新しい値を計算します。この新しい値は、リソースパネルおよびダイナミックディスプレイに反映されます。
本章の前半で各ウィジェットに対してリソースを設定する方法を説明しました。デザインで設定したリソースすべてを含むリソースファイルを Sun WorkShop Visual がどのように生成するかについては、「X リソースファイルの設定」で説明します。
リソースとウィジェットの結び付きは通常、結合と呼ばれます。各リソースには、明示的に設定され、ソースファイル内に生成するようユーザーが要求したリソース設定が 1 行生成されます。リソースファイルの形式については、「リソースファイルの構文」を参照してください。どのリソースをリソースファイル内に生成するかを指定する方法については、「コード生成オプション」を参照してください。
Sun WorkShop Visual では、リソースは次の 2 つの方法で設定します。
どちらの方法を選択するかは、リソースを使用したいウィジェットの数によって決まります。大規模なデザインでは、特定クラスのすべてのウィジェットを同じ外観にしたい場合があります (すべてのボタンを緑色にするなど)。緩い結合を使用して、このような設定を行うことができます。各リソースに適用されるリソースは、リソースパネルを使用して設定する必要があります。
密な結合は、アプリケーションのリソースファイルで矛盾が発生することを防ぐために使用します。これは、「密な結合」で詳細に説明します。
緩い結合を設定すると、明示的に設定しているリソースがない場合に使用される、デフォルトリソースを指定することができます。緩い結合ダイアログは柔軟性に富んでいます。「緩い結合」ダイアログでは、ウィジェット名、クラス名、さらには記述と一致するあらゆるウィジェットが適用されることを示すワイルドカードを使用して、ウィジェットを参照することができます。また、結合を行う「汎用性」を指定することもできます。この汎用性については、以下の例で詳細に説明します。緩い結合は、次のような場合に便利です。
上記を実現するには、緩い結合を設定します。次に簡単な例を紹介します。
1. 図 3-27 に示すように、各種シェル、フォーム、もう 1 つのフォーム、3 個のプッシュボタンを含むウィジェット階層を作成します。
2. 図 3-27 に示すように、シェルに「MyShell」、フォームの 1 つに「MyForm」と名前を付けます。
リソースでは、ウィジェット名が使用されます。ただし、変数名を設定すると、ウィジェット名も同じ名前に設定されます。
3. シェル、「MyForm」と名前を付けたフォーム、最初のボタンを選択します。
ウィジェットを 1 つ選択して、Shift キーを押したまま残りの 2 つを選択します。
図 3-28 に示す「緩い結合」ダイアログには、次のような領域があります。
このメニューバーには、「ファイル」、「編集」、「オプション」の 3 つのメニューがあります。「ファイル」メニューには、外部リソースファイルからの結合の読み込み、マージ、継承を行うためのコマンドがあります。これらの操作については、「外部リソースファイルからのリソース」で詳細に説明します。「編集」メニューを使用すると、結合をカット、コピー、ペーストに加えて、削除することもできます。リスト内には生成された順序で結合が表示されるため、カット機能およびペースト機能は重要です。また、ファイルは X ツールキットによって順に読み取られるため、リソースファイル内のリソースの順序は重要です。互いに矛盾するリソースがある場合は、後で生成されたリソースが以前に生成されたリソースを上書きします。「オプション」メニューには、「継承された結合を使用」というコマンドがあります。このコマンドで、「緩い結合」リストに表示される継承された結合を使用するかどうかを選択できます。
1. 「緩い結合」ダイアログ内のオプションメニューを、ドットがそれぞれアスタリスクで置換されるように変更します。
これは、シェルおよび1つのフォームを名前で参照し、ボタンをその Motif クラス名で参照する結合を示しています。つまり、その結合が命名したフォームの下にあるボタンをすべて参照することを意味します。「新規の緩い結合」領域のオプションで、各ウィジェットの間にアスタリスク (*) を選択しています。これは、命名した各ウィジェットの間に別のウィジェットが存在し得ることを意味しています。この例では、他のフォームも含めることができます。
3. ラベルリソースを「 Bound 」に設定し、「適用」を押して、リソースパネルを閉じます。
「リソース名」テキストボックスには、X ウィンドウが認識するラベルリソースの名前である「labelString」という文字列が入っています。「リソース値」テキストボックスには、リソースパネルに入力した値である「Bound」という文字列が入っています。次の行が緩い結合リストに追加されます。
XApplication*MyShell*MyForm.XmPushButton.labelString: Bound
次回リソースファイルを生成する際には、この行が生成されたリソースファイルに含まれます。この行の意味は、次のとおりです。
「XApplication」クラスのアプリケーション内にある「MyShell」というシェルの子孫 (間に存在するウィジェットの数に関係なく) である「MyForm」というフォームの
(間に存在するウィジェットの数に関係なく)子孫であるプッシュボタンウィジェットは、すべて、そのラベルが「Bound」に設定されます。
「緩い結合」ダイアログの「ファイル」メニューには、以下の 3 つの項目があります。
「結合を読み込む」または「結合をマージ」を選択すると、リソースファイル名の入力を要求するファイル選択ボックスが表示されます。「ファイル」メニューから「結合を継承」を選択すると、「継承された緩い結合」ダイアログが表示されます。
「継承された緩い結合」ダイアログには、テキストボックスとボタンの 2 つの領域があります。これらの領域を使用して、最後に撰択したファイルから結合および結合のリストを継承することができます。この結合リストは、読み取り専用のリストです。「リソースファイル」というラベルの付いたボタンを押すとファイル選択ボックスが表示され、リソースファイルを指定することができます。
このダイアログに表示されている結合を継承するには、「オプション」メニューの「継承された結合を使用」トグルをオンにします。
次回リソースファイルを生成する際に「オプション」メニューのトグルボタンが設定されていると、命名したリソースファイルへの参照が生成されます。これによって、実際に 「継承された緩い結合」ダイアログに一覧されているすべてのリソースが継承されます。リソースを継承したくない場合は、「継承された結合を使用」トグルをオフにします。トグルボタンをオフにすると、リソース結合は継承されません。
「緩い結合の例」で紹介している例は、単純なものです。「緩い結合」ダイアログでリソース結合を変更する方法は他にもあります。現在定義されている結合内の各要素は、図 3-30 に示すように対応するオプションメニューを使用して変更することができます。
これらのオプションメニューを使用して、結合を調整することができます。調整方法には、次の 3 種類があります。
各ウィジェット名の間に、ワイルドカード文字があります。これは、ピリオド (.) またはアスタリスク (*) です。ピリオドは、右側のウィジェットが左側のウィジェットの直系の子孫であるという意味です。アスタリスクは、左側と右側のウィジェットの間に命名していない別のウィジェットがいくつかあり得るという意味です。
複数のウィジェットが同じアプリケーションクラス内に同じウィジェット名を持っている場合は、Sun WorkShop Visual が生成するデフォルトのリソース結合が曖昧なものになる可能性があります。密な結合とは、曖昧になる可能性を減らすために、リソース結合に特別なウィジェットを命名する方法です。リソースファイル内に存在するリソース結合の構造は、「リソースファイルの構文」で説明します。図 3-31 に示す階層に対して Sun WorkShop Visual が生成したデフォルトのリソース結合は次のとおりです。
この例では、ウィジェット名が「OkButton」という、1 つのウィジェット (「リーフ」ウィジェット) だけを明示的に取り上げています。
アプリケーションで、同じウィジェット名を持つリーフウィジェットを複数持っている場合があります。ただし、個々のウィジェットに異なるリソース設定が必要な場合は、上述のデフォルトのリソース構文は使用しないでください。この構文では、同じ名前を持つすべてのウィジェットのリソースに対して同じ設定が適用されるため、一部のウィジェットのリソース設定が失われます。リソース結合で明示的に指定するウィジェットの数が多いほど、リソースファイルでウィジェット名に関して矛盾が発生する可能性は低くなります。
図 3-31 の例を使用して、名前は同じでラベルが異なるリーフウィジェット (この場合は PushButton) を複数持つことができることを説明します。
1. 図 3-30 に示すような階層を作成します。名前は、ウィジェット名として表示されたものを使用してください。
2. パレットから別のシェル (任意の型) を選択し、図 3-32 に示すような 2 番目の階層を作成します。ボタンには「OkButton」というウィジェット名を指定し、最初の階層内のボタンと同じウィジェット名になるようにします。
3. 最初の階層のボタンのラベルを次のように指定します。
Ok
4. 2 番目の階層のボタンにラベルを次のように指定します。
Apply
5. 最初の階層で「FirstShell」を選択し、そのコアリソースパネルを表示します。
7. 「リソースの結合にインクルード」というラベルが付いたトグルを設定します。
XApplication*FirstShell*OkButton.labelString: Ok
XApplication*SecondShell*OkButton.labelString: Apply
図 3-27 に示す緩い結合の例の最初のボタンのラベルリソースを明示的に設定しても、緩い結合を設定していないとリソースファイル内に次の行が生成されます。
XApplication*button1.labelString:Bound
「密な結合」で説明している密な結合を使用して、シェル (MyShell) に密な結合を設定しても、緩い結合を指定していないとリソースファイルには次の行が生成されます。
XApplication*MyShell*button1.labelString:Bound
「緩い結合の例」で説明したように、すべてのボタンを包含するために緩い結合を設定すると、リソースファイル内に次の行が生成されます。
XApplication*MyShell*MyForm*XmPushButton.labelString:Bound
ウィジェットリソースの詳細は、第 27 章「ウィジェット・リファレンス」を参照してください。「ウィジェット・リファレンス」では、各 Motif ウィジェットクラスに対して最もよく使用されるリソースについて記述しています。リソースを設定する前に、この概要情報をご覧になることをお勧めします。
Motif ウィジェットリソースの詳細については、Motif プログラミング・マニュアルなどの参考文献が多く発売されていますので参照してください。その他の参考文献については、付録 E「参考資料」をご覧ください。
他のウィジェットを用いて Sun WorkShop Visual を使用している場合には、ウィジェットの開発元で提供している資料も参照してください。
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |