Gadgets > ViewFile アプリケーション:シンプルなファイル・ブラウザーの作成 > 手順 1:ブラウザー・ウィンドウの構築
 
手順 1:ブラウザー・ウィンドウの構築
この最初の手順では、ファイル階層を表示するウィンドウの作成方法を説明します。
次のタスクを実行する方法を紹介します。
*アプリケーションに適切なガジェットを選択する
*コンテナーの選択
*アプリケーションの作成
*アプリケーションのプレビュー
アプリケーションに適切なガジェットを選択する
アプリケーション・ウィンドウは、2 つの部分から構成されています。
*ウィンドウの左側は、ハードディスク内のフォルダをツリー構造で表示します。
*ウィンドウの右側は、左側で開かれたフォルダに含まれるファイルを表示します。
Rogue Wave® Views では、アイテムの階層リストは、クラス IlvTreeGadget によって表現されます。このクラスは、ウィンドウの左側を構築するために使用されます。ウィンドウの右側を表現するには、IlvSheet が使用されます。このクラスのインスタンスは各種情報を表示できるため、表示オブジェクトの種類を変更することなくデータ表示を変更することができます。
Rogue Wave Views は多くのガジェットを提供しているため、アプリケーションに最適なガジェットを見つけのるが困難な場合もあるかもしれません。Rogue Wave Views Gadgets の主要プロパティーの一覧は、Rogue Wave Views Gadgets の概要の章を参照してください。各ガジェットについては、Rogue Wave Views Gadgets ユーザー・マニュアルの関連するセクションに詳細があります。
ニーズにあったガジェットが見つからない場合、既存のガジェットをサブクラス化してそのルックあるいは振る舞い、またはその両方を変更することができます。
コンテナーの選択
IlvTreeGadget および IlvSheet オブジェクトは、これらを表示するコンテナーに追加します。複数の種類からコンテナーを選択できますが、ViewFile アプリケーションに適しているのは 2 つのみ、IlvGadgetContainer および IlvPanedContainerです。
IlvGadgetContainer は、ガジェットを格納する IlvContainer のサブクラスです。これは、キーボード・フォーカスおよびアタッチメントを処理します。これら 2 つの機能に関しては、ガジェットの理解を参照してください。
IlvPanedContainerIlvGadgetContainer のサブクラスです。ガジェット・コンテナーとは異なり、ペイン・コンテナーはグラフィック・オブジェクトを処理しません。代わりに、IlvPane クラスの特殊オブジェクトを処理します。ペイン・コンテナーの水平または垂直方向に応じて、ペインは左から右、あるいは上から下へと配列されます。IlvPane は、2 つの定義済みサブクラスを持ち、そのうち 1 つはグラフィック・オブジェクトを格納する IlvGraphicPane クラスです。ペインの詳細については、ペインを参照してください。
IlvPanedContainer は、このアプリケーションにより適しています。これにより同じ高さの隣接する 2 つのペインから構成されるウィンドウを作成することができるからです。1 つはツリー・ガジェットを保持し、もう 1 つはシートを保持するためのものです。また、IlvGadgetContainer によって提供される複雑なアタッチメント・モデルは必要ありません。しかし、どちらのタイプのコンテナーも、同じアプリケーションに組み合わせることができます。
たとえば、ダイアログ・ボックスおよび複雑なグラフィック・パネルの構築にガジェットを使用でき、それによりこれらが有する精巧なアタッチメント・モデルを利用することができます。さらに、これらをグローバル・アプリケーション・レベルでペインにカプセル化できます。
メイン・ウィンドウの実装
メイン・ウィンドウは、IlvPanedContainer のサブクラスである FileViewerWindow クラスで実装します。このクラスは、viewerw.h ファイルで宣言し、viewerw.cpp ファイルで定義します。
ペインの作成
FileViewerWindow クラスは、自動的に 2 つのグラフィック・ペインを作成します。1 つはツリーのカプセル化、もう 1 つはシートのカプセル化用です。これらのペインは、ここに示すように FileViewerWindow::initLayout メンバー関数で作成されます。(このメンバー関数は、FileViewerWindow コンストラクターから呼び出されます)。
void
FileViewerWindow::initLayout(const IlvRect& size)
{
// Create the tree gadget in which the folder hierarchy will
// be displayed.
IlvTreeGadget* tree =
new IlvTreeGadget(getDisplay(),
IlvRect(0,
0,
IlvMax((IlvDim)100,
(IlvDim)(size.w()/3)),
size.h()));
// Encapsulate the tree gadget into a graphic pane and name it
// DirectoryHierarchy.
IlvGraphicPane* treePane = new IlvGraphicPane("DirectoryHierarchy", tree);
// The pane is set to resizable.It is possible to
// resize it using a splitter interactively.
treePane->setResizeMode(IlvPane::Resizable);
// Set also a minimum size on the horizontal direction.
treePane->setMinimumSize(IlvHorizontal, 100);
// Add the pane to the container.
addPane(treePane);
 
// Create the sheet.
IlvSheet* sheet =
new IlvSheet(getDisplay(),
IlvRect(0, 0, size.w(), size.h()),
1,
1,
size.w()/4,
25,
2,
IlvFalse,
IlvFalse);
// Encapsulate it into a graphic pane giving FileList as name.
IlvGraphicPane* listPane = new IlvGraphicPane("FileList", sheet);
// The sheet is elastic:when the container will be resized, only the
// sheet will be resized (because the tree is only resizable, not elastic).
listPane->setResizeMode(IlvPane::Elastic);
// Add the pane to the container.
addPane(listPane);
// Update the container.
updatePanes();
}
initLayout メンバー関数は、まずツリー・ガジェットを作成します。次に、これをグラフィック・ペインにカプセル化して、ペイン・コンテナーに追加します。同様に、シートを作成して、グラフィック・ペインにカプセル化して、ペイン・コンテナーに追加します。
メモ: シートには、 行列が 1 つしかありません。この段階ではブラウズするファイルが表示されたときにシートがどのように見えるのかはっきりしないためです。このシートは伸縮自在でツリーが残したスペースを占めるため、パラメーター (size.w(),4) で指定されたシートの幅は、無意味であることに注意してください。
メンバー関数 IlvPanedContainer::updatePanes は、2 つのグラフィック・ペインの追加を有効にするために呼び出されます。詳細については、ペインの「ペイン・コンテナーのレイアウトを変更する」のセクションを参照してください。
メモ: メンバー関数 IlvPanedContainer::updatePanes を呼び出すと、スライダー・ペインをツリーとシート・ペインの間に挿入します。この 2 つはリサイズ可能なため自動的に挿入されます。
アプリケーションの作成
これでファイル階層表示用クラスが完成し、インスタンス化できます。これをインスタンス化するには、IlvApplication のサブクラスである FileViewerApplication を使用します。IlvApplication は、1 セットのパネルから構成される基本的なアプリケーションを表します。Rogue Wave® Views  Studio では、アプリケーションのコード生成にこれを使用します。
FileViewerApplication クラスは、viewfile.h ファイルで宣言し、viewfile.cpp ファイルで定義します。
メイン・ウィンドウの作成
IlvApplication クラスは、プログラムの最初にアプリケーション・パネルを作成するために呼び出される makePanels仮想メンバー関数を含んでいます。
void
FileViewerApplication::makePanels()
{
// Initialize the main window.
initMainWindow();
// Show it.
getMainWindow()->show();
}
メンバー関数 FileViewerApplication::initMainWindow は、FileViewerWindow のインスタンスを作成します。
void
FileViewerApplication::initMainWindow()
{
// Create the main window.
IlvRect rect(0, 0, 500, 300);
IlvContainer* mainWindow = createMainWindow(rect);
// Name it to be able to retrieve it.
mainWindow->setName(getName());
// Quit the application when the user asks for termination.
mainWindow->setDestroyCallback(IlvAppExit);
// Add the panel to the application.
addPanel(mainWindow);
}
メンバー関数 createMainWindow は、クラス FileViewerWindow のインスタンスを返します。
IlvContainer*
FileViewerApplication::createMainWindow(const IlvRect& rect) const
{
return new
FileViewerWindow(getDisplay(),getName(),getName(),rect,IlvFalse);
}
アプリケーションのインスタンス化
FileViewerApplication クラスは、主要エントリー・ポイントでインスタンス化されます。
int main(int argc, char* argv[])
{
IlvSetLocale();
FileViewerApplication* appli =
new FileViewerApplication("VIEWFILE Sample", 0, argc, argv);
if (!appli->getDisplay())
return -1;
appli->run();
return 0;
}
メモ: IlvSetLocale への呼び出しは、単に Rogue Wave Views に現在の場所を使用するように伝えます。アプリケーションをローカライズしたい場合は、この関数を呼び出さなくてはなりません。詳細については、Rogue Wave Viewsの「国際化」にある「ローカライズされた環境で実行するプログラムの作成」を参照してください。
アプリケーションのプレビュー
これで手順 1 は完了です。アプリケーションは次のように見えるはずです。
図 1.2   手順 1 完了後の ViewFile アプリケーション

Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.