Software License Agreement
GraphPro™ is Copyright ©2008 by MacSOS.
You must purchase a separate copy of the software for each Macintosh it is used on.
Unless explicitly stated in writing, MacSOS does not grant permission to distribute
this source code for profit in any form, including but not limited to,
electronic information service distribution, bulletin board distribution,
and magnetic or optical medium distribution.
MacSOS is not responsible for any damage to the purchaser's computer system or data and in no event will MacSOS,
its officers, directors, employees or agents be responsible to the purchaser for any consequential,
incidental, or indirect damages (including damages for loss of business profits, business interruption,
loss of business information and the like) arising out of the use or inability to use the MacSOS product,
even if MacSOS has been advised of the possibility of such damages.


Graph Pro History:

v1.0 Released 19 July 2000
v1.1 Released 26 July 2000

-Axes can have defined formats (eg $, %, scientific notation)
-AXIS labels are now draggable.
-Nodes can be added more easily.
-The graph bounds are now live.

v1.2 Beta Released 27/7/2000

[bug] Changed SyncAXISwithCurve to be SyncCurveWithAXIS. This fixed the problem with AXIS not representing the actual state of the graph.
[bug] Fixed the YLowerLimit cap size which was not being scaled properly.
[Chg] Default plot is an all white background
[Chg] Documentation updated slightly
[Chg] Added "Simple Graph" checkbutton to illustrate a simpler graph

v1.3 Released 2/8/2000
[New] Added NodeDoubleClick event. NodeDoubleClick(CurveIndex as integer, NodeIndex as Integer, X as Integer, Y as Integer, theNode as CNode) as Boolean
[New] Horizontal and Vertical dashed (AXIS coloured) GridLines. Simpy set GP.ShowHorizontalGrid as Boolean
[Bug] Fixed centering for Y and Y2 Major Tick label
[Bug] ShowX, ShowX2, ShowY and ShowY2 now work better at run-time.
[Chg] Changed method name from ClearAllCurvesNodes to be CurveClearAllNodes()
[New] Method ChangeNodeTitle(theNewStr as string, theNodeIndx as integer, theCurveIndx as integer)
[New] Method AxesAutoSize(on as boolean)
[New] Method HideAllCurves()
[New] Zooming In (with pseudo "Marching Ants Marquee") is now enabled (as well as UNDO). Hold down the command key and drag out an area and the graph will zoom in. Hold down the command and Option keys and click in the graph region to UNDO the zoom in action.
[Nte] Zooming out is not yet enabled.
[New] Area under curve can now be filled with a solid color. The colour is set by GP:CurveChangeColour(theCurveName a string, c as color)
[New] Curves can be toggled invisible. GP:CurveVisible(theCurveName as stirng, v as boolean)
[New] When dragging a CGraphObjects around the cursor now changes to a 'grasping hand'.
[Nte] Curves which generate or contain INF's or NAN's will have undefined effects.
[New] A single user definable hairline can be displayed for each AXIS. The colour of this line is set by the DarkHightLight variable from the Appearance Manager

v1.4 Released 22/8/2000
....Many Changes.....
[New] Many (many!) new get/set methods are now available at the cGraphPro object level. I am attempting to make all the internal CGRaphObjects private variables to the cGraphPro Object. Your access will be via these methods in the cGraphPro object.
[Chg] Removed the ShowXaxis, ShowX2axis, ShowYaxis, ShowY2axis properties. Use AXISSetVisible(AXISName as string, on as Boolean) instead.
[New] Axes can now autosize upper and lower bounds.
[New] The drag direction for axis labels can now be constrained to specific planes.
[New] Background pictures and coloured gradients for plots, legends, axes and nodes
[New] Complex styled AXIS labels, including Symbols, SuperScript and Subscript. See the cStyledText object.
[New] Custom, front-to-back ordering, of curves.
[New] Line of Best fit (ie "trend Lines") for individual curves.
[Chg] Changed cAXIS:SyncAXISwithCurve() to be cGraphPro:SyncWithAxes and moved it to the cGraphPro object space. This is where it will probably stay.
[Chg] Added lots of comments in the code.
[Chg] Expanded preliminary documentation. It will continue to be expanded with every release.
[New] Added a licence to help protect me and my kids from nasty people.

v1.5 Released 1/5/2003
[New] Carbonized
[New] Compatible with RB4.5 and greater
[New] Added first pass at Pie and Column graph types
[Chg] Improved tweaks to the example application
[New] Added data spreadsheet view to example application
[Chg] Modules are now external to the project.

v1.6 Released 11/10/2004
[New] Compatible with RB3-5.5 and greater
[New] Polygons and pictures now rotate.
[Chg] Demo project now shows an example of graphing real-time data.
[Fix] Bug in theRepositionNodes method of cCurve class. Thanks Ben Rancourt.

v1.7 Released 1/12/2004
[Nte] Now requires RB 5.5
[Fix] Windows DoubleClick time is now returned in ticks rather than milliseconds. Also added LINUX support here when compiled with RB 5.5.4.
[Opt] Faster node scanning on all platforms.
[Opt] Faster node tooltip scanning on all platforms.
[Chg] The node tooltip under Windows now looks like a normal windows help tag.
[Fix] The node tooltip under MacOS now appears inthe correct position on multi-screen computers.
[Chg] Changed the Pie Drawing code to use Object2d.
[Fun] Added a "Spin Pie Graphs" checkbox in the demo app and changed the default so that it spins at launch time.
[New] Now builds under Linux with RB 5.5.4.
[Chg] The base Graph Objects now have textSize and TextFont properties .
[Chg] cText - Removed the now superfluous textSize and TextFont properties.

v2.0 Released 25 April 2005
[Fix] Removed the CSV import button in the demo app - RB2005 didn't like it.
[New] GraphPro::Copy This method copies the graph to the clipboard
[New] cCurve.PieShowPerc as boolean. This writeable property determines if the pie labels show the percentage.
[New] cCurve.PieShowLabel as boolean. This writeable property determines if the pie labels are displayed.
[New] GraphPro::DrawGraph - This can be called to quickly refresh the graph without an erasebackground call. The alternative is to call ChartResized which is the complete refresh including a recalculation of some statistical parameters.
[Opt] Faster node scanning on all platforms.
[New] New cCurve property, PieScale as double. Allows the pie graph scaling to be changed (see the demo app).
[Chg] Demo app has a more sensible icon.
[New] New popup menu class added.
[Fix] Marching Ants selection lasso now works when dragged up.
[Chg] The text of the legend can be overridden by simply changing the legend.text as string property.
[New] New add node method - GraphPro.AddNode(X as double, Y as double, NodeName as string)
[New] New add cCurve property - cCurve.pieYTotal as double. If you want to set an artificial Y total (rather than the summation total) then you can change this number and it will be used as the total in calculating the pie arcs.
[Chg] Reverted to the v1.5 Pie drawing algorithm. This allowed MouseOverNode events to fire correctly.
[Chg] Temporarily disabled some Pie graphs features, namely spin, Tilt and depth options.
[New] Added new polygon node shapes; linkedBoxes.rbo Arrow.rbo xCross.rbo Star.rbo Cross.rbo nonconvex_four_Point_star.rbo
[Fix] The cNode constructor now resizes Polygon nodes to the values of the supplied width and height.
[Nte] RB2005 compatible


v2.1 Released 3 May 2005
[Fix] 2D Column spacing graph fixed.
[New] Added new Graph examples "ShareMarket", "Silly", "Bubbles" and "Box With Errors"
[Chg] Curves line are now drawn under the nodes.
[New] Added Zoom In (Command drag) and Zoom out (Command+Option click) cursors for MacOS.


v2.2 Released 7 July 2005
[New] QuickSOrt added to cCurve class. Sorts the X values into ascending order and redraws the graph. Useful for pie graphs.
[Fix] 2D Column spacing Help tags now work better.
[New] New property cAxis.MajorTickStrings(-1) as string. This array of strings will be drawn at the Major Tick Marks if it is populated. This property is set via the method cGraphPro::AXISSetMajorTickStrings(theAxis as string, vList() as string)
[New] cCurve.PieCentreX as integer This is the centre of the pie graph. Only positive values are valid, otherwise the pie graph is drawn in the centre.
[New] cCurve.PieCentreY as integer This is the centre of the pie graph. Only positive values are valid, otherwise the pie graph is drawn in the centre.
[New] Bar Curves can now show the node label on top of each column.
[Fix] Thick curve lines now join the dots from the centre of the line.
[New] New Function cGraphPro::DrawLegend(g as graphics, theLegend as cLegend) As boolean. Return true to completely override the drawing of the cLegend. You can draw anything you want into this graphics port.
[New] New bar graph examples in the demo application.
[New] New floating Pie Graph Example.
[New] Pie graphs can now display node text above and below columns.
[Fix] Nodes on the edge of the graph now display in the correct place.
[New] Added "Show Volt Graph" submitted by David Graham - Thanks.
[New] Demo app now has example code on how to draw a custom Legend.

v2.31 Released 12 September 2005
[Fix] X-axis tick marks now draw in the correct order (was reversed).
[New] Added Mach-O GetDblTime function call (from CarbonLib) in cGraphPro.
[New] Added "Print" menu option and example print code.
[Chg] Removed the CachePrintingPicture as boolean property. The Graph is always cached in the CachePicture as Picture property of cGraphPro.
[Ref] Re-worked the relationship between Curves and Axes. Now Curves can have their own axes. See the "Voltage Graph" for an example implementation of two curves having independant axies on the same graph. Now curves have a Horizontal and a Vertical axis, as well a PixelPerUnit as double property. By default these are the X and Y axes respectively. In previous versions, PixelPerUnit had been a property of the cGraphPro object.
[Chg] Changed the demo application to more easily allow extra future graph types.

v2.5 Released 21 Sept 2005
[New] Added new horizontal column bar graph, Column2DHorizontal. This uses the Xvalues as the main point whereas the vertical bar graphs use the Yvalue.
[New] Added new demo graph 'Pumpin'
[New] Added a LittleArrows control to make it really easy to change between the demo graphs.

v3.0 Released 12 Oct 2005
[Fix] Lines joining nodes are only draw to visible nodes.
[New] Added the 'BarGraphOffset as integer' property. This allows grouping of Bar Graph columns. See "Bar Graph 2" example
[New] Added the 'ShowColumnTextRotationRadians as double' property. This rotates the Major Tick text for Bar Graphs
[New] Added the 'ShowNodeRotationRadians as double' property. This rotates the node text for Bar Graphs
[New] Added the 'ShowNodeValue as Boolean' property. This displays the y-Value for Horzontal Bar graphs and the y-Value for vertical bar graphs.
[New] Added an alternative and simpler cNode constructor.
[Chg] Removed cCurve.GetMaxYValue as double. Just use cCurve.MaxYValue.
[Chg] Removed cCurve.GetMaxXValue as double. Just use cCurve.MaxXValue.
[Chg] Removed cCurve.GetMinYValue as double. Just use cCurve.MinYValue.
[Chg] Removed cCurve.GetMinXValue as double. Just use cCurve.MinXValue.
[New] New Polar Graph Type added (k2Dpolar).
[Nte] Added "Print" menu option and example print code.
[New] Added new Graph Example 'Radar Graph'. A silly radar tracking screen monitoring the Red baron's increasingly erratic flight path.

v3.1 Released 21 March 2006
[Imp] Lines joining nodes are only draw to visible nodes or to the edge of the inner graph region
[New] New Example graph 'AB Reversal Graph", with Intervention line (See cCurveSeparator)
[New] New Example graph 'ABA Reversal Graph", with two Intervention line (See cCurveSeparator)
[Dep] Deprecated curve.SortNumeric
[New] Added curve.Sort
[New] Added curve.ShowCurveLabel as boolean. Controls the display of the cCurve.text as string property. It is displayed just above the maximum Y node.
[New] Added simple cCurve.Constructor(Name as string)
[New] Added cGraphPro.CurveSeparator as cCurveSeparator. This is a vertical (or horizontal) line that separates two curves. See the example code.
[Chg] Removed all the Mac Cursor reources as they caused confusion for Win32 and Linux users.
[Nte] Added Destructor method to some internal classes to explicitly set certain property objects to Nil. No known memory leaks had been reported but this just makes sure.
[Chg] Changed the keyboard combination for ZoomIn and Zoomout. Now it is Control Click to Zoom in, and Control + Option/Alt to Zoom out.
[Fix] Fixed the demo application so that changing the node value (via a double click) refreshes the graph immediately.
[Nte] Compiled with RB2006r2b3.

v3.2 Not Released
[Nte] Several private betas were released. Upgrade to v3.3.

v3.3 Released 8 August 2006
[Fix] Bar curves now display tall columns only up to the top edge of the inner graph region, rather than not displaying them at all.
[New] Added cCurve.DrawInflectionPlaneY as Boolean and UseInflectionPlaneY as Boolean. The inflection plane is set at the zero on the Y-axis. This is used for Bar graph to invert if the Y-value is negative. See the example "Bar Graph" in the demo app.
[Chg] Removed cCurve.AutoSizeMinBuffer as double
[Chg] Renamed cCurve.AutoSizeMaxBuffer to cCurve.AutoSizeAxisBufferRatio as double. This continues to take a value from 1.0. (eg 1.2 would be make the resulting axis to be 20% bigger than the max and min of the associated curve). The default value for AutoSizeAxis is 1.1 so an extra 10% is added to the Max and Min values of the auto-sized axis. Cool.
[Nte] Demo Compiled with RB2006r3.
v3.5 Released 18 September 2007
[Fix] Nodes now longer always display as Squares....
[Chg] Nodes now default to being filled (ie cNode.transparent = false in the constructor)
[Chg] Added one line to copying the buffer image to the clipboard to fix a Win32 bug : c.Text = "" // clear text or it will not work
[New] [Mac] Added a Magnifying Glass option to the cGraphProCanvas: ShowMagnifyingGlass As Boolean = false. Currently only available on Macintosh.
v3.6 Released accidently in Oct-Nov 2007
[New] Added a constant "version as double" to the cGraphPro class.
[New] Axes for Cartesian Graph can now have rotated major Tick marks.
[Fix] Demo app uses X date data correctly.
[Fix] Axis can now display many more data formats.
[Fix] Moved the axis init code to occurr before the cGraphPro calls the open event in the instantiated class.
v3.7 Released 13 Feb 2008
[New] Added a new node shape "Ring" - see AB graph example
[Ref] Changed isCMMclick to IsContextualClick
[Chg] cLegend now uses the TextColor property when drawing text