The major changes which are likely to affect existing users are the following:
Addition of a new library class "gui" which replaces the existing "tkobjc" library.
All direct references to any Tcl/Tk code such as the "globalTkInterp" variable have been completely removed from any library code and should not be used in any application.
Splitting of simtools into two separate libraries: simtools and simtoolsgui. Classes that intrinsically depend on a GUI toolkit being present (either Tcl/Tk or Java AWT) were put into simtoolsgui. This allows a user who never intends to use a GUI toolkit, to be able to compile, link and run Swarm applications without any GUI toolkit installed at all. This was not previously possible.
The above change has been made possible by the fact that the dependency of Tcl/Tk in the Probing mechanism has been completely removed. It has been replaced by the libffi/ffcall libraries. Other than the fact that the user will need to install this new library if they are not using a binary distribution, this new dependence should not break any user code.
The header file to the random library is no longer included in simtools.h you need to explicitly import random.h when you use a default random number generator.
The XColormap class is now just Colormap to divorce it from its association with X-Windows. Similarly, BLTGraph is now just Graph.
The class named Histo is now named Histogram.
Certain classes now enforce their defining by the
protocol method. For example an instance of the Raster
class must be defined as (id Raster
r)
rather than (Raster *
r)
.
Backwardly-compatible references to the old swarmobject library are no longer supported. You should always use objectbase.
Always use the "gui" protocol when calling doing any GUI events:
Replace all occurences of tkobjc.h with gui.h
never explicitly reference any Tcl/Tk-specific code, in particular module with a call to globalTkInterp will no longer compile.
Using simtools/simtoolsgui:
Add the header file simtoolsgui.h to your list of imports whenever you are referencing any of the following classes:
ActionCache, ControlPanel, SimpleProbeDisplay, ActionHolder, GUIComposite, VarProbeWidget, ActiveGraph, GUISwarm, ClassDisplayWidget, MessageProbeWidget, CommonProbeDisplay, ProbeDisplay, CompleteProbeDisplay, ProbeDisplayManager
Explictly import the header when you are subclassing from a given class:
You also need to import the header file for any class for which you are subclassing. In particular, when you are creating a GUISwarm you are subclassing from GUISwarm so you need to explicitly import both simtoolsgui.h AND simtoolsgui/GUISwarm.h. The same is true for objectbase/SwarmObject.h and objectbase/Swarm.h
Colormap class name change:
Change all references of XColormap to Colormap as it is no longer specific to X11.
Change all method references to set the Colormap for the Value2dDisplay class ([Value2dDisplay -Colormap]) to lowercase ([Value2dDisplay -colormap]) to avoid namespace conflicts with Colormap class. For example, in heatbugs:
[heatDisplay setDisplayWidget: worldRaster Colormap: colormap]; should now be: [heatDisplay setDisplayWidget: worldRaster colormap: colormap];
Ensure that all required classes conform to their protocol:
Make all occurences of (Raster *) to the protocol i.e. (id Raster)
Similarly change any references to Colormap, ZoomRaster, InFile and OutFile.
Import random.h explicitly:
The header file random.h is no longer included by simtools.h should always explicitly reference the random library if you use it in a given module (.m) file. This again reduces the inter-library dependence, if you don't need to use the random library in your application, you shouldn't be including it.
ActionCache and ControlPanel:
Make all references to -doTkEvents and -waitForControlEvent be to actionCache NOT controlPanel.
To help users port their applications to 1.1, I have
included a checklist of changes that were required to update
heatbugs from 1.0.5 to 1.1. This
may help some users as a kind of "template" for changes they
may require for their applications. The
ChangeLog
entries in in the heatbug-1.1 distribution also provide further
specific information.
Heatbug.h
Replace tkobjc/Raster.h> with gui.h> (*)
Make all occurences of (Raster *) to the protocol (id Raster>) (*)
Heatbug.m
Make all occurences of (Raster *) to the protocol (id Raster>) (*)
Removed simtools.h> altogether - not used. (*)
Added random.h> - no longer included by simtools.h> - should always explicitly reference the random library if you use it in your code. (*)
HeatbugBatchSwarm.h
Changed swarmobject.h> to objectbase.h> (*)
HeatbugBatchSwarm.m
Removed redundant collections.h> (x)
HeatbugModelSwarm.h
Removed tkobjc.h> irrelevant in this context - tkobjc should never be included directly in any case, if required use gui.h> (*)
Changed swarmobject.h> to objectbase.h>. (*)
Note we need to separately include objectbase/Swarm.h> since you always need to the header file for a class if you need to subclass from it. (*)
HeatbugModelSwarm.m
Include random.h> explicitly since we use the default random number generators. (*)
HeatbugObserverSwarm.h
Change simtools.h> to simtoolsgui.h> since we are using GUI widgets (*)
Explicitly import simtoolsgui/GUISwarm.h> since we subclass from it (*)
Remove: swarmobject.h> space.h> activity.h> collections.h> all are irrelevant in the header file. (x)
tkobjc.h> has been relocated to the (.m) file as no gui classes are referenced directly in the header (.h) file. It is now changed to gui.h. (*)
Change all references of XColormap to Colormap and use protocol form: (*)
XColormap * colormap TO id Colormap> colormap
Make ZoomRaster conform to protocol, ie: (*)
ZoomRaster * worldRaster TO id ZoomRaster> worldRaster
HeatbugObserverSwarm.m
Change swarmobject to objectbase (*)
Import the gui.h> in the implementation file - since it is not referenced in the header file (*)
Change XColormap to Colormap - no longer specific to X11 - so name should not suggest so. (*)
Message to set colormap for worldRaster changed name from (uppercase) Colormap to (lowercase) colormap.(*)
Call -enableDestroyNotification method on worldRaster after createEnd. (x)
main.m
Need to import simtoolsgui.h in addition to simtools.h since we reference GUISwarm methods. (*)