
What is new in KD Chart 2.0 
===========================


  Note: The file doc/GettingStartedGuide.txt is a good
        starting point to learn how to use KD Chart 2.0.

        To browse the API Reference Documentation
        start with this file:

        doc/refman/index.html

        To browse the programmer's manual

        doc/manual/index.html or 
        doc/manual/kdchart.pdf



The following is a short list of the most important new
implementation / fixed issues in KD Chart 2.0,
compared to the Beta release:



Compiling / Linking
-------------------

* On Windows, KD Chart is using an appended 'd' (file name is
  kdchartd.dll for the debug version, to avoid clashes when
  compiling with debug+release.

* KD Chart's global file qmake configuration variables.pri has
  been adjusted to support static builds.



General Ownership Policy
------------------------

* Small change in the general policy: For the component classes
  (like diagrams, axes, legends ...) we had (and we still have)
  this rule:
  1. Ownership is passed to the receiving class, if an add...()
     setter method is called.
     Thus, the chart will become the owner of the HeaderFooter
     if you call addHeaderFooter( pointer ).
  Due to this, you are not allowed to delete a component, once
  you have added it to one of KD Chart's classes.

  We now are introducing a second rule, to increase usefulnes:
  2. By calling the respective take...() method, you can get
     ownership of a component back.

  This allows for things like this:
     myChart->addHeaderFooter( myHeader );
     (...)
     myChart->takeHeaderFooter( myHeader );
     (...)
     myOtherChart->addHeaderFooter( myHeader );

  Note: Listening to our beta users' wishes, we have also
        changed the respective replace...() methods, to make
        them use two pointers instead of an index, so they
        are more convenient to use now.



Data Models / Proxies
---------------------

* KD Chart can handle data models with zero values in all cells.

* To increase responsiveness on large datasets, delayed computation
  has been introduced in the views.

* Changed the way proxies are used:
  DefaultsModel has been merged with AttributesModel;
  DatasetProxyModel is now a model that the user can explicitly
  create.
  The AttributesModel of each diagram is now private to that diagram
  per default, but it can be set to be shared between diagrams
  by the user. Note that you  must instantiate your own AttributesModel
  in order to share it, it is not valid to share one diagram's built-in
  AttributesModel with another diagram.

* Data model now supports more than one dimension:
  AbstractDiagram now has a datasetDimension property, which
  determines how may columns per datapoint the view expects to
  get from the model.
  If the dimensionality is 1 (the default), automatic values are used
  for the Abscissa axis.



Positioning and specifying of sizes
-----------------------------------

* New class KDChart::Position allows different ways of relative
  (and/or absolute, resp.) positioning.

* New class KDChart::Measure allows different ways of relative
  (and/or absolute, resp.) measure specifications.

* New class KDChart::RelativePosition to be used together with
  the two before mentioned classes.



Relative font sizes
-------------------

* All displayed texts can be shown in relative font sizes (or, if
  you prefer, in absolute font sizes, resp.).
  See the KDChartTextAttributes class, normally used for this,
  allowing to specify both, a normal font size, and a minimal
  font size: the later often will be an absolute size.



Coordinate planes and the grid
------------------------------

* You now can set horizontal and vertical ranges on a cartesian
  coordinate plane.
  The plane now first takes the union of all diagram data
  boundaries, and then applies the specified range limits.
  Next, the internal grid calculation might adjust these raw
  boundaries and define the new boundaries, for drawing the grid
  lines (and sub-grid lines, if any).
  All of the axes then adjust their label positions to these
  new boundaries and display themselves accordingly.

* A new class KDChart::GridAttributes was introduced to specify
  grid attributes used by coordinate planes.
  This involves several different options, please read the API
  documentation; we suggest you start with the API documentation
  for KDChart::AbstractCoordinatePlane::setGlobalGridAttributes().

* Fix the grid start/end/stepWidth calculation.
  The general rule:
      Make the difference between displayed range and
      raw data range as small as possible, while still
      making sure, that the number of grid steps is
      between minSteps and maxSteps.
  For now, minSteps is 2, maxSteps 12, but (if required) this
  could be made configurable by the user.

  see KDChart::GridAttributes::setGridGranularitySequence()



Axes
----

* User defined axis labels / short axis labels now supported
  for Abscissa axes (Ordinate axes will be supported soon).

* Abscissa axis labels are now using the data model's
  header texts, if no user-defined labels were specified:
  In this case, the *item* labels are now shown correctly
  (dataset labels were previously incorrectly shown instead).

* Abscissa axes now can handle large numbers of items: If
  there are too many labels they will show item numbers from
  10, 20, 30, ...  (or 100, 200, 300, ..., or ...) depending
  on the total number of labels.

* Zero lines are drawn correctly now.

* Both the top-most and the bottom-most ordinate axis label
  are now shifted a bit, so they do not get cut through in
  half due to axis area clipping.

* Right-sided ordinate axes are now showing their labels
  right-aligned, to have trailing digits shown exactly in
  one vertical line.



Bar charts
----------

* Data labels are now shown at different positions, according to
  the respective user settings.



Line charts
-----------

* Supporting two dimensional data models.
  (as of yet for Normal mode only, not for percent/stacked mode yet)



Three-D charts
--------------

* setDepth() can be used to specify the depth of the 3D effect.
  (as of yet for normal charts only, but not for percent/stacked)

* Large amounts of 3D bars can be displayed on Windows,
  without Windows running out of shared GUI objects.



Legends
-------

* Legend are showing *dataset* labels now (previously, item labels
  were incorrectly shown instead).

* Separator lines can be displayed optionally, both for vertical
  and for horizontal legends.

* Use the new class KDChart::Position, to define the place within
  the 3x3 fields grid containing the Legend(s) and the Data+Axes:
  Data+Axes are in the center field, Legend(s) can be in one or
  several of the eight other fields.

* Use a Qt::Alignment, to specify its horizontal/vertical alignment
  within the field specified by the setPosition().

* You may now have more that one legend in the same field, both
  using the same (or different, resp.) alignment flags: Legends
  will then be positioned within a small, invisible box layout.

* When legends are using relative font sizes (for the title font
  and/or for the normal text font), the font size is automatically
  adjusted to changing view sizes.

* Default font size settings are depending on the orientation.
  Horizontal legends:
      relative to the reference area width
  Vertical legends:
      relative to the reference area's qMin(width, height).



Headers / Footers
-----------------

* Use the new KDChart::Position class to store their position.



The KDChart::Widget
-------------------

* addHeaderFooter( const QString& text, ...) and also
  addHeaderFooter( HeaderFooter * header ) now working.

* New method resetData() can be used to remove all data.



Example programs
----------------

* Many New examples

Miscellaneous
--------------
* Many bugs have been fixed.
* Many details adjusted 



Best regards,
The KD Chart Support Team at Klarälvdalens Datakonsult AB
