PPBrowserの構造
PPBrowserってどうなってるの!
モジラには、Macintoshでのエンベッディングのお手本として、Conrad Carlen氏のPPBrowserがあります。
ここでは、このPPBrowserを解析し、モジラエンベッディングの構造を探っていきます。
◆ ビルド ◆
ソースは、本体のモジラソースに含まれており、既にチェックアウト済みです。
mozilla/embedding/browser/powerplant/
下記のCodeWarriorプロジェクトにより、ビルドできます。
mozilla/embedding/browser/powerplant/PPBrowser.mcp
下記の場所にビルド結果の実行形式が出力されます。
mozilla/dist/viewer/PP Browser
mozilla/dist/viewer_debug/PP BrowserDebug
【PPBrowserのスクリーンショット】

◆ ソース構造 ◆
■ Application
CBrowserApp.cp - アプリケーションクラス (CBrowserApp)
CBrowserShell.cpp - ブラウザシェルクラス (CBrowserShell)
CBrowserWindow.cp - ウィンドウクラス (CBrowserWindow)
CFindComponent.cpp - Find Componentクラス (CFindComponent)
CThrobber.cpp - Throbberクラス (CThrobber)
CUrlField.cp - Url Fieldクラス (CUrlField)
CWebBrowserChrome.cpp - ブラウザクロームクラス (CWebBrowserChrome)
UMacUnicode.cpp - Unicode変換用ユーティリティ
Browser.ppob - PowerPlant Object リソース
Browser.rsrc - その他のリソース
cfmAlias.rsrc - Release Build用Aliasリソース [※1]
cfmAliasDebug.rsrc - Debug Build用Aliasリソース [※1]
■ Embed API [※2]
EmbedAPI.mcp - Embedding Library用プロジェクト
EmbedAPI.o - Release Build用Embedding Library
EmbedAPIDebug.o - Debug Build用Embedding Library
■ PowerPlant
■ PowerPlant Resources
■ PowerPlant Appearance
使用するPowerPlantクラスの為のソース&リソース
■ System Libraries
使用するMacintosh Shlb用スタッブライブラリ
■ NS Libraries - モジラ用ライブラリ (Release/Debug共通)
NSAppStartup.o - モジラ用スタートアップ (mozilla/dist/mac/lib/) [※3]
■ NS Libraries/Release - モジラ用ライブラリ (Release用) [※4]
appfilelocprovider.o - (mozilla/modules/appfilelocprovider/)
mpfilelocprovider.o - (mozilla/modules/mpfilelocprovider/)
gfx.shlb - (mozilla/dist/viewer/Essential Files/)
NSRuntime.shlb- (mozilla/dist/viewer/Essential Files/)
NSStdLib.shlb- (mozilla/dist/viewer/Essential Files/)
NSPR20.shlb- (mozilla/dist/viewer/Essential Files/)
RaptorShell.shlb- (mozilla/dist/viewer/Essential Files/)
widget.shlb- (mozilla/dist/viewer/Essential Files/)
xpcom.shlb- (mozilla/dist/viewer/Essential Files/)
■ NS Libraries/Release - モジラ用ライブラリ (Debug用) [※4]
appfilelocproviderDebug.o - (mozilla/modules/appfilelocprovider/)
mpfilelocproviderDebug.o - (mozilla/modules/mpfilelocprovider/)
gfxDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
NSRuntimeDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
NSStdLibDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
NSPR20Debug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
RaptorShellDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
widgetDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
xpcomDebug.shlb - (mozilla/dist/viewer_debug/Essential Files/)
【※1】
cfmAlias.rsrc、cfmAliasDebug.rsrcは、モジラ実行形式が使用するShlbのパス指定を行う為のAliasリソースを含みます。
- cfmAlias.rsrc - resType = 'alis'、resID = 129
- cfmAliasDebug.rsrc - resType = 'alis'、resID = 128
このAliasリソースのリソースID を、PPC PEF Setting の Library Folder ID: に指定することにより、Shlb の相対パスを設定します。


【※2】
Embedding Library (EmbedAPI.o,EmbedAPIDebug.o)は、本体のモジラビルドでは作成されません。本体モジラビルド後、mozilla/embedding/base/macbuild/EmbedAPI.mcpプロジェクトにより、出力されます。PPBrowserでは、このEmbedAPI.mcpをサブプロジェクトとして取り込み、Embedding Libraryを出力しています。最終的に必要なものは、EmbedAPI.o,EmbedAPIDebug.oです。
【※3】
モジラでは独自のスタートアップコードを使用しています。
これは通常のスタートアップ処理に加え、GC (Garbege Collector)用の初期化/終了処理を追加したものです。
mozilla/lib/mac/NSStartup/NSStartup.mcp
これをリンクし、PPC Linker Setting で、Initialization: __NSInitialize、Termination: __NSTerminateを指定します。

【※4】
これらの内、Shlbは実際にリンクされる訳では無く、参照解決されるだけです。モジラで使用されるShlbは、
- mozilla/dist/viewer/Essential Files/ - Release用必須Shlb
- mozilla/dist/viewer/Components/ - Release用コンポーネントShlb
- mozilla/dist/viewer_debug/Essential Files/ - Debug用必須Shlb
- mozilla/dist/viewer_debug/Components/ - Debug用コンポーネントShlb
に存在しますが、これらはエイリアスで、実体は各モジュールのディレクトリ以下に存在します。
mozilla/dist/viewer/ 以下のみで、モジラの実行環境となりますが、ここにはShlbを始め多くのエイリアスを含むので、製品化の折りには、これらのエイリアスを実体解決しなければなりません。
◆ ビジュアル構造 ◆
PPBrowserはPowerPlantアプリケーションであるので、メインウインドウのビジュアル構造は、Browser.ppob内のLayoutリソース (ID=129)で静的に定義されています。
Constructorでのメインウインドウのレイアウトは、以下のようなものです。


以下にこれらの内、重要なものを示します。
■ LWindow
( class_ID='BroW', class=CBrowserWindow )
メインウィンドウ
■ CBrowserShell
( class_ID='BroS', pain_ID='WebS'、class=CBrowserShell )
ブラウザコントロール (HTML部分)
■ LEditText
( class_ID='UrlF', pain_ID='gUrl'、class=CUrlField )
URLコントロール (LocationBar)
■ LStaticText
( class_ID='UrlF', pain_ID='Stat'、class=LStaticText )
ステータスコントロール
■ LBevelButton
( class_ID='bbut', pain_ID='Back'、class=LBevelButton )
■ LBevelButton
( class_ID='bbut', pain_ID='Forw'、class=LBevelButton )
■ LBevelButton
( class_ID='bbut', pain_ID='Stop'、class=LBevelButton )
Back、Forward、Stopボタン
■ LProgressBar
( class_ID='pbar', pain_ID='Prog'、class=LProgressBar )
プログレスバーコントロール
■ CThrobber
( class_ID='Thrb', pain_ID='THRB'、class=CThrobber )
スロッバーコントロール (ネット処理時アニメするピクチャー)
◆ クラス構造 ◆
■ CBrowserApp (CBrowserApp.cp、CBrowserApp.h)
アプリケーションのクラスです。
■ CBrowserWindow (CBrowserWindow.cp、CBrowserWindow.h)
メインウィンドウのクラスです。
■ CBrowserShell (CBrowserShell.cp、CBrowserShell.h)
ブラウザコントロール (HTML部分)のクラスです。
■ CWebBrowserChrome (CWebBrowserChrome.cp、CWebBrowserChrome.h)
ブラウザクロームのクラスです。必要なインターフェースを装備しブラウザコントロールと表裏一体となることで、ブラウザクラスと他のモジラ部分とのやりとりの中継基地的存在として動作します。
■ CUrlField (CUrlField.cp、CUrlField.h)
URLコントロール (LocationBar)のクラスです。
■ CThrobber (CThrobber.cp、CThrobber.h)
スロッバーコントロール (ネット処理時アニメするピクチャー)のクラスです。
■ CFindComponent (CFindComponent.cp、CFindComponent.h)
ファインドコンポーネントのクラスです。
その他に、PowerPlantの既存クラスで処理されるものがあります。
- Back、Forward、Stopボタン - LBevelButton
- ステータスバー - LStaticText
- プログレスバー - LProgressBar
|