Gadgets > ViewFile アプリケーション:シンプルなファイル・ブラウザーの作成 > 手順 3:ドッキング・バーの追加
 
手順 3:ドッキング・バーの追加
この手順では、ドッキング・バー (メニュー・バーおよびツールバー) を ViewFile アプリケーションに追加する方法を説明します。ドッキング・ペインについては、ペインおよびコンテナーのドッキングを参照してください。
この手順では、次のタスクを実行する方法を紹介します。
*メイン・ウィンドウのドッキングを準備する
*ドッキング・ツールバーの作成
*ドッキング・メニュー・バーの作成
*アプリケーションに変更を統合する
*アプリケーションのプレビュー
この手順で加えられるすべての変更は、ファイル viewfile.cpp に反映されます。
メイン・ウィンドウのドッキングを準備する
ドッキング・ペインおよびドッキング・ツールバーとメニュー・バーは、ドッキング可能コンテナーにドッキングする必要があります。つまり、アプリケーション・メイン・ウィンドウはドッキング操作を可能にするように変更されなくてはなりません。
メイン・ウィンドウの変更
IlvDockableContainerIlvPanedContainer のサブクラスは、ドッキング・ペイン処理のベース・クラスです。この手順では、メイン・ウィンドウはメンバー関数 FileViewerApplication::createMainWindowIlvDockableMainWindow オブジェクトとして定義されています(メイン・ウィンドウの作成を参照)。IlvDockableMainWindow は、ドッキング・ペインを組み込んでいるアプリケーション用標準レイアウトを実装する IlvDockableContainer のサブクラスです。ドッキング・ペインおよびコンテナーの「ドッキング・ペインがある標準的アプリケーションの作成」を参照してください。
IlvContainer*
FileViewerApplication::createMainWindow(const IlvRect& rect) const
{
return new IlvDockableMainWindow(getDisplay(),
getName(),
getName(),
rect,
0,
IlvFalse);
}
これでドッキング・ペインをアプリケーションに追加することができます。
ペイン作成の準備
メンバー関数 FileViewerApplication::makePanels は、ペイン、およびペイン・コンテナー・レイアウトを更新する updatePanes を作成する initPanes への呼び出しを含むように変更しなくてはなりません。ペインの「ペイン・コンテナーのレイアウトを変更する」のセクションを参照してください。
void
FileViewerApplication::makePanels(){
// Initialize the main window.
initMainWindow();
// Initialize the panes.
initPanes();
// Initialize the application.
configureApplication();
// Update the main window layout.
getMainWindow()->updatePanes(IlvTrue);
// Show it.
getMainWindow()->show();
}
initPanes メンバー関数は、メニュー・バーを作成する initMenuBar およびツールバーを作成する initToolBar を呼び出します。
void
FileViewerApplication::initPanes()
{
// Initialize the menu bar.
initMenuBar();
// Initialize the toolbar.
initToolBar();
}
ドッキング・ツールバーの作成
initToolBar メンバー関数で、ツールバーを作成します。
void
FileViewerApplication::initToolBar()
{
IlvToolBar* toolbar = new IlvToolBar(getDisplay(), IlvPoint(0, 0));
// Item Up One Level.
toolbar->insertBitmap(getBitmap("upBm"));
toolbar->getItem(0)->setCallback(UpOneLevel);
toolbar->getItem(0)->setClientData(this);
toolbar->getItem(0)->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);
}
ツールバーには、「レベルを 1 つ上げる」アイテムのみが含まれています。選択されると、このアイテムは選択されたフォルダの親を探索しようとします(選択されたフォルダのアイテムは、ファイル・ブラウザーの右側のシートに表示されます)。「レベルを 1 つ上げる」アイテムは、ツールチップに関連付けられています。ツールバーは、メイン・ウィンドウの作業領域の上に追加されるタイプ IlvAbstractBarPane の特殊グラフィック・ペインにカプセル化されます。
詳細については、メニュー、メニュー・バー、およびツールバーの「ツールバーでツールチップを使用する」およびドッキング・ペインおよびコンテナーの「IlvAbstractBarPane クラスの使用」を参照してください。
メモ: アイテムのクライアント・データは this に設定され、アプリケーションへのポインターをそのコールバック関数から取得できるようにします(クライアント・データは、アイテムがアクティブにされるときに呼び出されるコールバックの 2 番目のパラメーターです)。
static void
UpOneLevel(IlvGraphic* g, IlvAny arg)
{
// Retrieve a pointer on the application.
FileViewerApplication* application = (FileViewerApplication*)arg;
// Retrieve a pointer on the main window.
FileViewerWindow* window = (FileViewerWindow*)
application->getMainWindow()->getMainWorkspaceViewPane()->getView();
// Retrieve a pointer on the file viewer.
FileViewer* viewer = FileViewerApplication::GetFileViewer(window);
if (viewer) {
// Find the last selected item of the tree.
IlvTreeGadgetItem* item =
viewer->getTreeGadget()->getLastSelectedItem();
// And select its parent.
if (item && item->getParent() && item->getParent()->getParent())
viewer->getTreeGadget()->selectItem(item->getParent(),
IlvTrue,
IlvTrue,
IlvTrue);
}
}
ドッキング・メニュー・バーの作成
initMenuBar メンバー関数で、メニュー・バーを作成します。
void
FileViewerApplication::initMenuBar()
{
// The menu bar is in fact an IlvToolBar.
IlvToolBar* menubar = new IlvToolBar(getDisplay(), IlvPoint(0, 0));
// Add two items
menubar->addLabel("File");
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("Exit");
menu->getItem(0)->setCallback(ExitApplication);
menu->getItem(0)->setClientData(this);
menubar->getItem(0)->setMenu(menu, IlvFalse);
// Menu Help:About.
menu = new IlvPopupMenu(getDisplay());
menu->addLabel("About");
menubar->getItem(1)->setMenu(menu, IlvFalse);
menu->getItem(0)->setCallback(ShowAboutPanel);
menu->getItem(0)->setClientData(this);
}
メニュー・バーが作成され、2 つのアイテム、ファイルおよびヘルプが初期化されます。次に、バーの向きに応じてラベルの向きを変更する IlvAbstractBarPane クラスのサブクラスである ApplicationMenuBarPane クラスのペインにカプセル化されます。
ドッキング・ペインおよびコンテナーのセクション「ドッキング・バーのカスタマイズ」を参照してください。
メニュー・バーのヘルプ・アイテムには、バージョン情報アイテムを含むサブメニューがあります。このアイテムは、アプリケーション名を示すダイアログ・ボックスを表示するコールバックに付加されます。
void
FileViewerApplication::showVersion()
{
IlvIInformationDialog dialog(getDisplay(), "VIEWFILE Tutorial");
dialog.moveToMouse();
dialog.showModal();
}
詳細については、ダイアログ を参照してください。
アプリケーションに変更を統合する
最後の手順は、ファイル・ビューアーのビューをアプリケーション・メイン・ウィンドウのメイン作業領域へ含めるためにメンバー関数 FileViewerApplication::configureApplication を変更することです。この作業領域は、デフォルトで作成されたビュー・ペインによって表され、IlvDockableMainWindow::getMainWorkspaceViewPane を使用して取得することができます。
ドッキング・ペインおよびコンテナーの「IlvDockableMainWindow クラスの使用」を参照してください。
void
FileViewerApplication::configureApplication()
{
// Create the file viewer window.
FileViewerWindow* window = createFileViewerWindow(getMainWindow(),
IlvRect(0, 0, 400, 200));
// Replace the view of the main workspace pane with the file viewer window.
getMainWindow()->getMainWorkspaceViewPane()->setView(window);
// Create the file viewer using the file viewer window.
FileViewer* viewer = createFileViewer(window);
// Link the file viewer with its window.
// This is used in the UpOneLevel callback.
SetFileViewer(window, viewer);
// Initialize the file viewer.
viewer->init(IlvPathName("/"));
}
ファクトリー・メンバー関数 createFileViewerWindow は、FileViewerWindow オブジェクトを提供されたビューのサブ・ビューとして作成します。作成されたビューは、メイン作業領域を表すビュー・ペインとして設定されています。最後に、FileViewer オブジェクトが以前の手順と同じメソッドを使用して作成され、初期化されます。
アプリケーションのプレビュー
これで手順 3 は完了です。アプリケーションは次のように見えるはずです。
図 1.5   手順 3 完了後の ViewFile アプリケーション

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