/***************************************************************************
             mreportsection.h  -  Kugar report section
             -------------------
   begin     : Mon Aug 23 1999
   copyright : (C) 1999 by Mutiny Bay Software
   email     : info@mutinybaysoftware.com
   copyright : (C) 2002-2004 Alexander Dymo
   email     : cloudtemple@mksat.net
***************************************************************************/

#ifndef MREPORTSECTION_H
#define MREPORTSECTION_H

#include <tqptrlist.h>
#include <tqobject.h>

#include "mlineobject.h"
#include "mlabelobject.h"
#include "mspecialobject.h"
#include "mcalcobject.h"
#include "mfieldobject.h"

/**Kugar report section
  *@author Mutiny Bay Software
  */

namespace Kugar
{

class MReportSection : public TQObject
{

public:
    /** Section print frequency constants */
    enum PrintFrequency { FirstPage = 0, EveryPage, LastPage };

    /** Constructor */
    MReportSection();
    /** Copy constructor */
    MReportSection( const MReportSection& mReportSection );
    /** Assignment operator */
    MReportSection operator=( const MReportSection& mReportSection );
    /** Destructor */
    virtual ~MReportSection();

protected:
    /** Sections's height */
    int height;
    /** Sections's level in hierarchy */
    int level;
    /** Section print frequency */
    int frequency;
    /** Page number - used by special fields */
    int pageNumber;
    /** Report date - used by special fields */
    TQDate reportDate;

    /** Section's line collection */
    TQPtrList<MLineObject> lines;
    /** Section's label collection */
    TQPtrList<MLabelObject> labels;
    /** Section's special field collection */
    TQPtrList<MSpecialObject> specialFields;
    /** Section's calculated field collection */
    TQPtrList<MCalcObject> calculatedFields;
    /** Section's field collection (for use as report variables) */
    TQPtrList<MFieldObject> fields;

public:
    /** Adds a new line object to the section's line collection */
    void addLine( MLineObject* line );
    /** Adds a new label object to the section's label collection */
    void addLabel( MLabelObject* label );
    /** Adds a new field object to the section's field collection */
    void addField( MFieldObject* field );
    /** Adds a new special field object to the section's special field collection */
    void addSpecialField( MSpecialObject* special );
    /** Adds a new calculated field object to the section's calculated field collection */
    void addCalculatedField( MCalcObject* calc );
    /** Sets the height of the section */
    void setHeight( int h );
    /** Gets the height of the section */
    int getHeight();
    /** Sets the level of the section */
    void setLevel( int l );
    /** Gets the level of the section */
    int getLevel();
    /** Set the current page number - used by special fields */
    void setPageNumber( int page );
    /** Set the current date - used by special fields */
    void setReportDate( TQDate date );
    /** Sets the print frequency of the section */
    void setPrintFrequency( int printFrequency );
    /** Returns the print frequency of the section */
    int printFrequency();
    /** Returns the name of the bound field for the calculated field object at the given index */
    TQString getCalcFieldName( int idx );
    /** Returns the index of the calculated field object for the given bound field */
    int getCalcFieldIndex( TQString field );
    /** Sets the data for the specified calculated field */
    void setCalcFieldData( int idx, TQString data );
    /** Sets the data for the all calculated fields - list size must match number of calculated fields */
    void setCalcFieldData( TQPtrList<TQMemArray<double> >* values );
    /** Returns the number of calculated fields in the section */
    int getCalcFieldCount();
    /** Sets the field data */
    void setFieldData( TQString name, TQString data );
    /** Draws the section to the specified painter & x/y-offsets */
    virtual void draw( TQPainter* p, int xoffset, int yoffset );
    /** Frees all resources allocated by the report section */
    virtual void clear();

protected:
    /** Frees base resources allocated by the report section */
    void clearBase();
    /** Draws the section base objects to the specified painter & x/y offsets */
    void drawObjects( TQPainter* p, int xoffset, int yoffset );

private:
    /** Copies member data from one object to another.
      * Used by the copy constructor and assignment operator
      */
    void copy( const MReportSection* mReportSection );
};

}

#endif