Gadgets > ViewFile アプリケーション:シンプルなファイル・ブラウザーの作成 > 手順 4:ビュー・フレームの追加
 
手順 4:ビュー・フレームの追加
この最後の手順では、ビュー・フレーム・サポートを ViewFile アプリケーションに追加する方法を説明します。ビュー・フレームをアプリケーションに含めると、ファイルの複数の階層リストを同時に表示してブラウズすることができるようになります。詳細については、ビュー・フレームを参照してください。
この手順で加えられるすべての変更は、ファイル viewfile.cppに反映されます。
この手順では、次のタスクを実行する方法を紹介します。
*デスクトップ・ビューの選択
*ビュー・フレームの作成
*新しいメニューおよびアイテムをビュー・フレームへ追加する
*アプリケーションのプレビュー
デスクトップ・ビューの選択
ビュー・フレームは、デスクトップ・ビュー内に表示されます。最初の操作は、ビュー・フレームが表示される場所でデスクトップ・ビューを選択することです。デスクトップ・ビューを配置する最適の場所は、固有のファイル・ビューアーが手順 3:ドッキング・バーの追加に表示されるメイン作業領域のビュー・ペインです。すべてのビュー・フレームを管理するデスクトップ・マネージャーは、このビューから作成することができます。
デスクトップ・マネージャーの作成
FileViewerApplication::makePanels メンバー関数は、メイン作業領域のビュー・ペインを使用してデスクトップ・マネージャーを作成する initDesktopManager への呼び出しを含むように変更されなくてはなりません。
void
FileViewerApplication::makePanels()
{
// Initialize the main window.
initMainWindow();
 
// Initialize the desktop manager.
initDesktopManager();
 
// Initialize the panes.
initPanes();
 
// Initialize the application.
configureApplication();
 
// Update the main window layout.
getMainWindow()->updatePanes(IlvTrue);
 
// Show it.
getMainWindow()->show();
}
次は、initDesktopManager の詳細です。
void
FileViewerApplication::initDesktopManager()
{
createDesktopManager(getMainWindow()->
getMainWorkspaceViewPane()->getView());
}
ファクトリー・メンバー関数 FileViewerApplication::createDesktopManager は、IlvDesktopManager クラスのインスタンスを返します。
IlvDesktopManager*
FileViewerApplication::createDesktopManager(IlvView* view) const
{
return new IlvDesktopManager(view);
}
デスクトップ・マネージャーの初期化
デスクトップ・マネージャーを初期化するために FileViewerApplication::configureApplication も変更しなくてはなりません。
void
FileViewerApplication::configureApplication()
{
// The desktop manager is maximized by default.
getDesktopManager()->
makeMaximizedStateButtons((IlvToolBar*)
((IlvGraphicPane*)getMainWindow()->
getPane("Menu Bar", IlvTrue))->getObject());
getDesktopManager()->maximize(0);
 
// Create a frame initialized at "/".
getDesktopManager()->setCurrentFrame(createNewFrame(IlvRect(0,
0,
400,
200), "/"));
}
makeMaximizedStateButtons は、ビュー・フレームのボタンが最大化されたときに、どこに表示されるべきかを指定します。
ビュー・フレームの「ビュー・フレームの最大化」を参照してください。
ボタンは、次に示すように、メニュー・バー内部に表示されます。
次に、デスクトップ・マネージャーが最大化され、デフォルト・フレームが FileViewerApplication::createNewFrame によって作成されます。
ビュー・フレームの作成
メンバー関数 FileViewerApplication::createNewFrame は、ファイル・ビューアーおよびその関連するウィンドウをカプセル化する新しいフレームを作成します。
IlvViewFrame*
FileViewerApplication::createNewFrame(const IlvRect& rect,
const char* path) const
{
// Create a view frame in the desktop manager view.
IlvViewFrame* vframe = new IlvViewFrame(getDesktopManager()->getView(),
path,
rect,
IlvFalse);
vframe->setDestroyCallback(DestroyFrame);
// Create a file viewer window inside the view frame.
FileViewerWindow* viewerWindow = createFileViewerWindow(vframe, rect);
// Create the file viewer in the file viewer window.
FileViewer* viewer = createFileViewer(viewerWindow);
// Associate the viewer window with the viewer.
SetFileViewer(viewerWindow, viewer);
// Initialize the file viewer.
viewer->init(IlvPathName(path));
return vframe;
}
メンバー関数 IlvView::setDestroyCallback は、作成したフレームの削除を処理する破壊コールバックを設定します。ビュー・フレームの「ビュー・フレームを閉じる」を参照してください。
次に、ファイル・ビューアー・ウィンドウをビュー・フレームのサブビューとして作成します。ビュー・フレームの「クライアント・ビューの作成」を参照してください。最後に、ファイル・ビューアーはビュー・フレームに接続され、初期化されます。
新しいメニューおよびアイテムをビュー・フレームへ追加する
新しいメニュー・アイテムをメニュー・バーに追加するには、メンバー関数 FileViewerApplication::initMenuBar を次のように変更しなくてはなりません。
void
FileViewerApplication::initMenuBar()
{
// The menu bar is in fact an IlvToolBar.
IlvToolBar* menubar = new IlvToolBar(getDisplay(), IlvPoint(0, 0));
// Add three items.
menubar->addLabel("File");
menubar->addLabel("Windows");
menubar->addLabel("Help");
// Create the pane that will encapsulate the menu bar.
IlvGraphicPane* menubarPane = new ApplicationMenuBarPane("Menu Bar",
menubar);
// Change the mode of the menu bar to make it show items on several
// rows, if needed.
menubar->setConstraintMode(IlvTrue);
// Add the pane to the application on top of the main workspace.
getMainWindow()->addRelativeDockingPane(menubarPane,
IlvDockableMainWindow::
GetMainWorkspaceName(),
IlvTop);
// Now fill the menus with popup menus.
IlvPopupMenu* menu;
// Menu File:New / Separator / Exit.
menu = new IlvPopupMenu(getDisplay());
menu->addLabel("New (Ctrl+N)");
menu->getItem(0)->setBitmap(getBitmap("newBm"));
menu->getItem(0)->setCallback(AddNewFrame);
menu->getItem(0)->setClientData(this);
menu->getItem(0)->setAcceleratorText("Ctrl+N");
menu->getItem(0)->setAcceleratorKey(IlvCtrlChar('N'));
menu->addItem(IlvMenuItem());
menu->addLabel("Exit");
menu->getItem(2)->setCallback(ExitApplication);
menu->getItem(2)->setClientData(this);
menubar->getItem(0)->setMenu(menu, IlvFalse);
// Menu Windows:Cascade / Tile Horizontally / Tile Vertically.
menu = new IlvPopupMenu(getDisplay());
menu->addLabel("Cascade");
menu->getItem(0)->setCallback(CascadeFrames);
menu->getItem(0)->setClientData(this);
menu->addLabel("Tile Horizontally");
menu->getItem(1)->setCallback(TileHorizontallyFrames);
menu->getItem(1)->setClientData(this);
menu->addLabel("Tile Vertically");
menu->getItem(2)->setCallback(TileVerticallyFrames);
menu->getItem(2)->setClientData(this);
menubar->getItem(1)->setMenu(menu, IlvFalse);
// Menu Help:About.
menu = new IlvPopupMenu(getDisplay());
menu->addLabel("About");
menubar->getItem(2)->setMenu(menu, IlvFalse);
menu->getItem(0)->setCallback(ShowAboutPanel);
menu->getItem(0)->setClientData(this);
}
メニュー・バーには、次の図に示すように、サブアイテムを含む Windows メニューがあります。
Windows メニューによって使用されるコールバックは、対応するメンバー関数をデスクトップ・マネージャーで呼び出します。
static void
CascadeFrames(IlvGraphic* g, IlvAny arg)
{
FileViewerApplication* application = (FileViewerApplication*)arg;
application->getDesktopManager()->cascadeFrames();
}
 
static void
TileHorizontallyFrames(IlvGraphic* g, IlvAny arg)
{
FileViewerApplication* application = (FileViewerApplication*)arg;
application->getDesktopManager()->tileFrames(IlvHorizontal);
}
 
static void
TileVerticallyFrames(IlvGraphic* g, IlvAny arg)
{
FileViewerApplication* application = (FileViewerApplication*)arg;
application->getDesktopManager()->tileFrames(IlvVertical);
}
メンバー関数 FileViewerApplication::initToolBar も、選択されたときに新しいフレームを作成する「新規作成」アイテムを含むように変更されています。
void
FileViewerApplication::initToolBar()
{
IlvToolBar* toolbar = new IlvToolBar(getDisplay(), IlvPoint(0, 0));
// Item New.
toolbar->insertBitmap(getBitmap("newBm"));
toolbar->getItem(0)->setCallback(AddNewFrame);
toolbar->getItem(0)->setClientData(this);
toolbar->getItem(0)->setToolTip("New");
// Separator.
toolbar->addItem(IlvMenuItem());
// Item Up One Level.
toolbar->insertBitmap(getBitmap("upBm"));
toolbar->getItem(2)->setCallback(UpOneLevel);
toolbar->getItem(2)->setClientData(this);
toolbar->getItem(2)->setToolTip("Up One Level");
// Encapsulate the toolbar into a graphic pane.
IlvGraphicPane* toolbarPane = new IlvAbstractBarPane("Toolbar", toolbar);
// Add the pane to the application on top of the main workspace.
getMainWindow()->addRelativeDockingPane(toolbarPane,
IlvDockableMainWindow::
GetMainWorkspaceName(),
IlvTop);
}
新しいアイテムによってトリガーされたコールバックは、メンバー関数 FileViewerApplication::createNewFrame を呼び出し、新しいフレームをアクティブにします。
static void
AddNewFrame(IlvGraphic* g, IlvAny arg)
{
FileViewerApplication* application = (FileViewerApplication*)arg;
IlvViewFrame* vframe =
application->createNewFrame(IlvRect(0, 0, 400, 200), "/");
application->getDesktopManager()->setCurrentFrame(vframe);
}
メモ: 「新規作成」アイテムは、アクセラレーター・キーに関連付けられており、Ctrl+N キーを押すと新しいフレームを作成できます。メニュー、メニュー・バーとツールバーの「アクセラレーターをメニュー・アイテムに関連付ける」を参照してください。
アプリケーションのプレビュー
これで、チュートリアルが完了しました。アプリケーション・ウィンドウは、次のように見えるはずです。
図 1.6   最終 ViewFile アプリケーション

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