XmScrolledWindow(3XM) — NEWS-OS Programmer’s Manual
名称
XmScrolledWindow — ScrolledWindow widget クラス
形式
#include <Xm/ScrolledW.h>
解説
ScrolledWindow widget は、1 つ以上の ScrollBar widget と見えているエリアとを結びつけ、他の (ふつうはより大きな) データ表示の上にデータを見るための領域を実現します。 ウィンドウのうち見えている部分は、ScrollBar で大きな表示を通してスクロールすることができます。
ScrolledWindow を使うには、アプリケーションはまず、ScrolledWindow widget 、必要な ScrollBar widget、望むデータを表示できる widget を、ScrolledWindow のワークエリアとして作成します。 Scrolledwindow はワークエリア widget を配置し、要求があれば ScrollBar を表示します。 ユーザが ScrollBar に何らかの操作を行うと、アプリケーションは、通常の ScrollBar のコールバックインターフェースを通して通知されます。
ScrolledWindow は自動的に操作できるようにコンフィギュレートできるので、スクロールや表示の操作すべてを、アプリケーションプログラムの中に書く必要はまったくありません。 同様に、最小限の機能だけを提供するようにコンフィギュレートすることも可能です。 この場合は、アプリケーションはユーザのすべての入力を処理し、その入力に応じて表示されているデータを視覚的に変化させる必要があります。
ScrolledWindow が自動的にスクロールすると、クリッピングウィンドウを作ることがあります。 概念的には、このウィンドウはユーザがその下にある大きなデータエリアを調べるために使うビューポートとなります。 アプリケーションは必要なデータを生成し、それを ScrolledWondow のワークエリアにするだけです。 ユーザがスライダを動かして表示されているデータを変化させると、ワークスペースが見えているエリアの下に移動して、新しいデータの部分が見えるようになります。
アプリケーションが大きなデータスペースを生成したり、小さなクリッピングウィンドウを通して単純に表示させることが不可能な場合もあります。 そのひとつの例がテキストエディタで、大きなファイルを構成するデータエリアを 1 つ作るのにも、予期できないほどの量のオーバーヘッドが生じる可能性があります。 アプリケーションが ScrolledWindow の概念 (大きなデータに対する小さなビューポート) を使うことが望ましいけれども、ユーザがビューポートをスクロールしたことを知って記憶領域からさらにデータを取ってきてディスプレイエリアを更新することはしたくない場合があります。 こうした場合には、視覚的にレイアウトを行う機能だけを提供するよう、ScrolledWindow をコンフィギュレートすることができます。 クリッピングウィンドウが作られないので、アプリケーションはユーザが ScrollBar に入力するたびにワークエリアに表示されているデータを維持しなくてはなりません。
クラス
Scrolledwindow は、Core、Composite、constraint、XmManager クラスの動作とリソースを継承します。
クラスのポインタは xmScrolledWindowWidgetClass です。
クラス名は XmScrolledWindow です。
新しいリソース
次の表は、データを指定するのに用いる widget リソースの一覧です。 継承されたクラスのリソースの値もまた widget の属性として設定することができます。 .Xdefaults ファイルの中で名前やクラスでリソースを参照する場合は、語頭の XmN または XmC を取り除いた名称を用いてください。 .Xdefaults ファイルの中でリソースに定義された値を設定するには、語頭の Xm を取り除いた名称を用いてください。 (大文字と小文字は区別されませんが、語間のアンダースコアは必要です。 ) 「アクセス」欄の文字は、与えられたリソースを、widget 生成時に設定できるか (C)、XtSetValues で設定できるか (S)、XtGetValues で取り出すことができるか (G)、あるいは利用できないか (N/A) を示します。
| XmScrolledWindow リソース一覧 | ||||
| 名称 | クラス | 型 | デフォルト | アクセス |
| XmNclipWindow | XmCClipWindow | Widget | NULL | G |
| XmNhorizontalScrollBar | XmCHorizontalScrollBar | Widget | NULL | CSG |
| XmNscrollBarDisplayPolicy | XmCScrollBarDisplayPolicy | unsigned char | XmSTATIC | CG |
| XmNscrollBarPlacement | XmCScrollBarPlacement | unsigned char | XmBOTTOM_RIGHT | CSG |
| XmNscrolledWindowMarginHeight | XmCScrolledWindowMarginHeight | Dimension | 0 | CSG |
| XmNscrolledWindowMarginWidth | XmCScrolledWindowMarginWidth | Dimension | 0 | CSG |
| XmNscrollingPolicy | XmCScrollingPolicy | unsigned char | XmAPPLICATION_DEFINED | CG |
| XmNspacing | XmCSpacing | Dimension | 4 | CSG |
| XmNverticalScrollBar | XmCVerticalScrollBar | Widget | NULL | CSG |
| XmNvisualPolicy | XmCVisualPolicy | unsigned char | XmVARIABLE | CG |
| XmNworkWindow | XmCWorkWindow | Widget | NULL | CSG |
XmNclipWindow
クリッピングエリアの widget ID を指定します。 クリッピングエリアは、XmNvisualPolicy リソースが XmCONSTANT に設定されていて、かつ、アプリケーションだけが読むことができる場合に ScrolledWindow によって自動的に作られます。 このリソースを新しい値に設定しようとすると、スクロールウィンドウに警告メッセージが表示されます。 XmNvisualPolicy が XmVARIABLE に設定されている場合は、このリソースは NULL に設定され、クリッピングウィンドウは作られません。
XmNhorizontalScrollBar
水平方向の ScrollBar の widget ID を指定します。
XmNscrollBarDisplayPolicy
ScrollBar の自動的な配置をコントロールします。 これが XmAS_NEEDED に設定されていて、XmNscrollingPolicy が XmAUTOMATIC に設定されていると、ScrollBar はワークスペースが 1 方向または 2 方向でクリッピングエリアを超えた場合にだけ表示されます。 XmSTATIC のリソース値は、クリッピングエリアとワークエリアの関係にかかわらず、ScrollBar が管理されている間はいつでも、ScrolledWindow に ScrollBar を表示させます。 XmNscrollingPolicy が XmAPPLICATION_DEFINED に設定されている場合は、このリソースは XmSTATIC でなければなりません。
XmNScrollBarPlacement
ワークウィンドウに関係する ScrollBar の位置を指定します。 次の値のいずれかです。
•XmTOP_LEFT — 水平方向の ScrollBar はワークウィンドウの上に位置し、垂直方向の ScrollBar はワークウィンドウの左に位置します。
•XmBOTTOM_LEFT — 水平方向の ScrollBar はワークウィンドウの下に位置し、垂直方向の ScrollBar はワークウィンドウの左に位置します。
•XmTOP_RIGHT — 水平方向の ScrollBar はワークウィンドウの上に位置し、垂直方向の ScrollBar はワークウィンドウの右に位置します。
•XmBOTTOM_RIGHT — 水平方向の ScrollBar はワークウィンドウの下に位置し、垂直方向の ScrollBar はワークウィンドウの右に位置します。
XmNscrolledWindowMarginHeight
ScrolledWindow の上端と下端のマージンを指定します。
XmNscrolledWindowMarginWidth
ScrolledWindow の右端と左端のマージンを指定します。
XmNscrollingPolicy
アプリケーションからの対話なしで自動的にワークエリアをスクロールします。 このリソースの値が XmAUTOMATIC なら、ScrolledWindow は自動的に ScrollBar を作り、ScrollBar にコールバックをアタッチし、視覚上のポリシー (visual policy) を XmCONSTANT に設定します。 これによって、ユーザが ScrollBar を操作すると、クリッピングウィンドウを通してワークエリアが自動的に移動します。 また、アプリケーションは自分のコールバックを ScrollBar に付け加えることができます。 これにより、アプリケーションはレイアウトに関する手続きを実行しないで、スクロールのイベントを知ることができます。
注意: ScrolledWindow が ScrollBar にコールバックを付加するので、アプリケーションは ScrollBar widget 上では、XtRemoveAllCallbacks を実行してはなりません。
XmNscrollingPolicy が XmAPPLICATION_DEFINED に設定されている場合、アプリケーションはすべてのスクロールの状況に対応する必要があります。 アプリケーションは ScrollBar を作り、ユーザの入力に対応して、ワークエリア内を視覚的に変化させる必要があります。
このリソースは、ScrolledWindow が作成された時に必要なポリシーに設定しなければなりません。 SetValues を通して変更することはできません。
XmNspacing
ワークウィンドウと ScrollBar とを分ける距離を指定します。
XmNverticalScrollBar
垂直方向の ScrollBar の widget ID を指定します。
XmNvisualPolicy
ScrolledWindow をワークエリアのサイズに合うように拡大するか、あるいは大きなデータスペースへのスタティックなビューポートとして使います。 視覚上のポリシー (visual policy) が XmVARIABLE の場合、ScrolledWindow は ScrollBar の display policy を強制的に XmSTATIC にし、ワークエリアがいつでも拡大あるいは縮小して、新しいサイズに合うレイアウトに調整できるようにします。 ポリシーが XmCONSTANT の場合、ワークエリアは要求にしたがって拡大あるいは縮小しますが、クリッピングウィンドウは見える部分のサイズを固定にして、不変性を保ちます。 見えているエリアが拡大できるのは、ScrolledWindow の親からのリサイズに対応する場合のみです。
注意: このリソースは、ScrolledWindow が作成された時に必要なポリシーに設定する必要があります。 SetValues を通して変更することはできません。
XmNworkWindow
見えているエリアの widget ID を指定します。
継承されるリソース
ScrolledWindow は、次のスーパークラスの動作とリソースを継承します。 これらのリソースの完全な解説は、各スーパークラスに関するマニュアルページを参照してください。
| XmManager リソース一覧 | ||||
| 名称 | クラス | 型 | デフォルト | アクセス |
| XmNbottomShadowColor | XmCForeground | Pixel | dynamic | CSG |
| XmNbottomShadowPixmap | XmCBottomShadowPixmap | Pixmap | XmUNSPECIFIED_PIXMAP | CSG |
| XmNforeground | XmCForeground | Pixel | dynamic | CSG |
| XmNhelpCallback | XmCCallback | XtCallbackList | NULL | C |
| XmNhighlightColor | XmCForeground | Pixel | Black | CSG |
| XmNhighlightPixmap | XmCHighlightPixmap | Pixmap | dynamic | CSG |
| XmNshadowThickness | XmCShadowThickness | short | 0 | CSG |
| XmNtopShadowColor | XmCBackground | Pixel | dynamic | CSG |
| XmNtopShadowPixmap | XmCTopShadowPixmap | Pixmap | XmUNSPECIFIED_PIXMAP | CSG |
| XmNunitType | XmCUnitType | unsigned char | XmPIXELS | CSG |
| XmNuserData | XmCUserData | caddr_t | NULL | CSG |
| Composite リソース一覧 | ||||
| 名称 | クラス | 型 | デフォルト | アクセス |
| XmNinsertPosition | XmCInsertPosition | XmRFunction | NULL | CSG |
| Core リソース一覧 | ||||
| 名称 | クラス | 型 | デフォルト | アクセス |
| XmNaccelerators | XmCAccelerators | XtTranslations | NULL | CSG |
| XmNancestorSensitive | XmCSensitive | Boolean | True | G |
| XmNbackground | XmCBackground | Pixel | dynamic | CSG |
| XmNbackgroundPixmap | XmCPixmap | Pixmap | XmUNSPECIFIED_PIXMAP | CSG |
| XmNborderColor | XmCBorderColor | Pixel | Black | CSG |
| XmNborderPixmap | XmCPixmap | Pixmap | XmUNSPECIFIED_PIXMAP | CSG |
| XmNborderWidth | XmCBorderWidth | Dimension | 0 | CSG |
| XmNcolormap | XmCColormap | Colormap | XtCopyFromParent | CG |
| XmNdepth | XmCDepth | int | XtCopyFromParent | CG |
| XmNdestroyCallback | XmCCallback | XtCallbackList | NULL | C |
| XmNheight | XmCHeight | Dimension | 0 | CSG |
| XmNmappedWhenManaged | XmCMappedWhenManaged | Boolean | True | CSG |
| XmNscreen | XmCScreen | Pointer | XtCopyScreen | CG |
| XmNsensitive | XmCSensitive | Boolean | True | CSG |
| XmNtranslations | XmCTranslations | XtTranslations | NULL | CSG |
| XmNwidth | XmCWidth | Dimension | 0 | CSG |
| XmNx | XmCPosition | Position | 0 | CSG |
| XmNy | XmCPosition | Position | 0 | CSG |
コールバック情報
ScrolledWindow は、新しいコールバックの構造体は定義しません。 アプリケーションは ScrollBar のコールバックを使って、ユーザの入力を知る必要があります。
動作
ScrolledWindow は、XtQueryGeometry の機能を拡張的に使って、アプリケーションレベルの間でジオメトリに関する通信を容易にします。 スクロールのポリシーが XmAPPLICATION_DEFINED のとき、ScrolledWindow がサイズを変えようとすると、WorkWindow の問い合わせのプロシージャが ScrolledWindow によって呼び出されます。 widget はワークスペースエリアの可能な最大のサイズを計算し、このサイズを WorkWindow の問い合わせのプロシージャに渡します。 問い合わせのプロシージャはこの新しいサイズを調べ、ScrollBar を管理するかどうかというような、変更が必要か決定します。 問い合わせのプロシージャは必要な操作を行って、ScrolledWindow に返ります。 ScrolledWindow は ScrollBar を管理する必要があるか調べて、見えている空間の一部を ScrollBar に対して割り当て、残りの空間に合うように WorkWindow のサイズを変更します。
スクロールのポリシーが XmCONSTANT である場合、与えられた方向に最適なサイズを返すよう、ScrolledWindow に問い合わせることができます。 最適なサイズは、WorkWindow を包含するサイズと定義されています。 このメカニズムを用いて、アプリケーションは ScrolledWindow のサイズを設定することができるので、必要なのは 1 方向の ScrollBar を表示することだけです。 ScrolledWindow の問い合わせのプロシージャが XtQueryGeometry を通して呼び出されると、 問い合わせが幅あるいは高さを指定するものであるか否かを調べ、そうであれば、呼び出されたルーチンは与えられた方向を基本として計算をします。 WorkWindow をぴったり包含するような、他の方向についての最小値を決定し、返す構造体中のエレメントに適切な値を代入し、呼び側のプログラムに戻ります。 まれに、特定の幅あるいは高さと、他の最小の次元を使うと、ScrollBar が表示されないことがあります。 この場合、問い合わせのプロシージャは幅と高さのフィールドを設定して、この場合の理想的なサイズがどの方向においても変更を生じさせることを示します。 呼び側のアプリケーションが幅および高さのフィールドを設定した場合、ScrolledWindow は両方の方向に対する最小のサイズを決定し、それらを返す構造体に代入して返します。
キーボードトラバース
キーボードトラバースに関しては、XmManager(3XM) の マニュアルページと、その「動作」および「デフォルトのトランスレーション」 のセクションを参照してください。
関連事項
Cmposite(3X), Constraint(3XM), Core(3XM), XmCreateScrolledWindow(3XM), XmManager(3XM), XmScrolledWindowSetAreas(3XM)
NEWS-OSRelease 4.2.1R