既存ユーザにおそらく影響する主な変更点は以下の通りです。
新しいライブラリクラス"gui"を追加しました。既存の"tkobjc"ライブラリはこれに置き換えられます。
"globalTkInterp"変数のようなあらゆるTcl/Tkコードへの直接リファレンスは、どのライブラリコードからも完全に削除されました。アプリケーションでこれを使用してはいけません。
simtoolsを2つのライブラリ、simtoolsとsimtoolsguiに分割しました。本質的にGUIツールキット(Tcl/Tk、Java AWTのどちらか)に依存するクラスはsimtoolsguiに置かれました。これにより、GUIツールキットを使用するつもりのないユーザは、以前はできませんでしたが、GUIツールキットを一切インストールせずに、Swarmアプリケーションをコンパイル、リンク、実行できます。
上記の変更は、プロービングメカニズムでのTcl/Tkの依存性が完全になくなり、libffi/ffcallライブラリに置き換えられたことで可能になりました。バイナリ配布を使用していないユーザは、新しいライブラリをインストールしなければなりません。しかし、この新しい依存関係がユーザのコードを破壊するようなことはありません。
randomライブラリへのヘッダファイルは、simtools.hにインクルードされなくなりました。デフォルトの乱数ジェネレータを利用するとき、明示的にrandom.hをインポートする必要があります。
XColormapクラスはColormapとなり、X Windowsとの関連がなくなりました。同様にBLTGraphはGraphになりました。
Histoクラスは、Histogramに改名されました。
特定のクラスがプロトコルメソッドによる定義を強制されるようになりました。たとえば、Rasterクラスのインスタンスは、(Raster * r)でなく(id <Raster> r)として定義しなければなりません。
かつてのSwarmobjectライブラリへ下位互換のあったリファレンスがサポートされなくなりました。常にobjectbaseを使用しなければなりません。
どのGUIイベントの実行を呼び出すときも、常に"gui"プロトコルを利用してください。
存在するtkobjc.hをすべてgui.hに置き換えてください。
いかなるTcl/Tk-specificコードも決して明示的に参照せず、特にglobalTkInterpへの呼び出しを伴うモジュールは、もはやコンパイルしなくなります。
simtools/simtoolsguiの使用:
以下のクラスのどれかを参照しているときは、かならずインポートリストにヘッダファイルsimtoolsgui.hを加えてください。
ActionCache, ControlPanel, SimpleProbeDisplay, ActionHolder, GUIComposite, VarProbeWidget, ActiveGraph, GUISwarm, ClassDisplayWidget, MessageProbeWidget, CommonProbeDisplay, ProbeDisplay, CompleteProbeDisplay, ProbeDisplayManager |
あるクラスからサブクラス化しているときは、明示的にヘッダをインポートしてください。
また、サブクラス化しているどのクラスにも、ヘッダファイルをインポートしなければなりません。特に、GUISwarmからサブクラス化しているGUISwarmを作成しているときは、<simtoolsgui.h>と<simtoolsgui/GUISwarm.h>の両方を明示的にインポートしなければなりません。同様のことが<objectbase/SwarmObject.h>と<objectbase/Swarm.h>にも言えます。
Colormapクラス名の変更:
XColormapのリファレンスをすべてColormapに変更してください。X11には限定されなくなりました。
Value2dDisplayクラスにColormap([Value2dDisplay -Colormap])をセットするメソッドリファレンスを、小文字の[Value2dDisplay -colormap]に変更し、Colormapクラスと名前空間が矛盾しないようにしてください。たとえば、heatbugsでは、
[heatDisplay setDisplayWidget: worldRaster Colormap: colormap]; は以下のように修正してください。 [heatDisplay setDisplayWidget: worldRaster colormap: colormap]; |
必要なクラスがすべて、それらのプロトコルに従っていることを確認してください。
(Raster *)はすべてプロトコル(id <Raster>)に修正してください。
同様に、Colormap、ZoomRaster、InFile、OutFileへのすべてのリファレンスを変更してください。
random.hの明示的なインポート:
ヘッダファイル<random.h>は、<simtools.h>にインクルードされなくなりました。モジュール(.m)ファイルでそれを使用したいときは、常にrandomライブラリを明示的にリファレンスしなければなりません。これは内部ライブラリの依存性を減少させるもので、あなたのアプリケーションがrandomライブラリを利用しないならインクルードは不要です。
ActionCacheとControlPanel:
-doTkEventsと-waitForControlEventへのすべてのリファレンスを、controlPanelでなくactionCacheに修正してください。
ユーザのアプリケーションが容易に1.1へ移行できるよう、我々はheatbugsの1.0.5から1.1への更新で必要な変更点のチェックリストを用意しました。これは、あなたがアプリケーションを修正するときの"テンプレート"として役に立つことでしょう。heatbug-1.1にあるChangeLogも、詳しい情報を提供しています。
Heatbug.h
<tkobjc/Raster.h>を<gui.h>に置き換えてください。 (*)
(Raster *)をすべてプロトコル(id <Raster>)に修正してください。(*)
Heatbug.m
(Raster *)をすべてプロトコル(id <Raster>)に修正してください。(*)
<simtools.h>は不要です。すべて削除してください。(*)
<random.h>を加えてください(<simtools.h>にはインクルードされていません)。これをあなたのコードに使う場合は、randomライブラリを明示的に参照してください。(*)
HeatbugBatchSwarm.h
<swarmobject.h>を<objectbase.h>に変更してください。(*)
HeatbugBatchSwarm.m
余分な<collections.h>を削除してください。(x)
HeatbugModelSwarm.h
tkobjcは直接インクルードしてはいけません。このコンテキストに関連のない<tkobjc.h>は削除してください。必要なら<gui.h>を利用します。(*)
<swarmobject.h>を<objectbase.h>に変更してください。(*)
<objectbase/Swarm.h>を個別にインクルードしなければならないことに注意してください。あるクラスからサブクラス化する場合、常にそのクラスのヘッダファイルに必要となります。(*)
HeatbugModelSwarm.m
デフォルトの乱数ジェネレータを使用するので、<random.h>は明示的にインクルードしてください。(*)
HeatbugObserverSwarm.h
GUIウィジットを使用しているため、<simtools.h>を<simtoolsgui.h>に変更してください。(*)
明示的に<simtoolsgui/GUISwarm.h>をインポートしてください。それからサブクラス化するためです。(*)(*)
ヘッダファイルにある無関係な<swarmobject.h> <space.h> <activity.h> <collections.h>をすべて削除してください。(x)
ヘッダファイル(.h)が直接参照するguiクラスは存在しないため、<tkobjc.h>は(.m)ファイルに再ロケートされました。それは<gui.h>に変更されます。(*)
XColormapのリファレンスをすべてColormapに変更し、以下のプロトコルフォームを使ってください。(*)
XColormap * colormap TO id <Colormap> colormap |
ZoomRasterを以下のようにプロトコルに従わせてください。(*)
ZoomRaster * worldRaster TO id <ZoomRaster> worldRaster |
HeatbugObserverSwarm.m
swarmobjectをobjectbaseに変更してください。(*)
<gui.h>はヘッダファイルで参照されないため、実装ファイルでインポートしてください。(*)
XColormapをColormapに変更してください。X11に限定されなくなったので、以前の名前は使わないでください。(*)
worldRasterにcolormapをセットするメッセージを、大文字のColormapから小文字のcolormapに変更してください。(*)
createEndの後で、worldRasterに-enableDestroyNotificationメソッドを呼び出してください。(x)
main.m
GUISwarmメソッドを参照するため、<simtools.h>に加えて<simtoolsgui.h>をインポートしてください。(*)