/***************************************************************************
             mpagecollection.cpp  -  Kugar report page collection
             -------------------
   begin     : Fri Aug 20 1999
   copyright : (C) 1999 by Mutiny Bay Software
   email     : info@mutinybaysoftware.com
***************************************************************************/

#include "mpagecollection.h"
#include "mreportengine.h"

#include <kdebug.h>

namespace Kugar
{

/** Constructor */
MPageCollection::MPageCollection( TQObject *parent ) : TQObject( parent )
{
    // Set page list to AutoDelete
    pages.setAutoDelete( true );

    // Set the metrics
    size = MReportEngine::Letter;
    orientation = MReportEngine::Portrait;
    dimensions.setWidth( 0 );
    dimensions.setHeight( 0 );
    m_ref = 1;
}

/** Copy constructor */
MPageCollection::MPageCollection( const MPageCollection& mPageCollection )  /*: TQObject((TQObject &) mPageCollection)*/
{
    copy( &mPageCollection );
}

/** Assignment operator */
MPageCollection MPageCollection::operator=( const MPageCollection& mPageCollection )
{
    if ( &mPageCollection == this )
        return * this;

    // Copy the derived class's data
    copy( &mPageCollection );

    // Copy the base class's data
    //((TQObject &) *this) = mPageCollection;

    return *this;
}

/** Destructor */
MPageCollection::~MPageCollection()
{
    pages.clear();
    kdDebug(31000) << k_funcinfo << endl;
}

/** Clears the page collection */
void MPageCollection::clear()
{
    pages.clear();
}

/** Appends a new page to the page collection */
void MPageCollection::appendPage()
{
    pages.append( new TQPicture() );
}

/** Gets the current page in the page collection,
  * the current page may be null
  */
TQPicture* MPageCollection::getCurrentPage()
{
    return pages.current();
}

/** Gets the first page in the page collection,
  * returns NULL if the list is empty
  */
TQPicture* MPageCollection::getFirstPage()
{
    return pages.first();
}

/** Gets the next page in the page collection,
  * returns NULL if the end of the list has been reached
  */
TQPicture* MPageCollection::getNextPage()
{
    return pages.next();
}

/** Get the previous page in the page collection,
  * returns NULL if the beginning of the list has been reached
  */
TQPicture* MPageCollection::getPreviousPage()
{
    return pages.prev();
}

/** Gets the last page in the page collection,
  * returns NULL if the list is empty
  */
TQPicture* MPageCollection::getLastPage()
{
    return pages.last();
}

/** Get the index of the current page */
int MPageCollection::getCurrentIndex()
{
    return pages.at();
}

/** Set the current page to page at idx */
void MPageCollection::setCurrentPage( int idx )
{
    pages.at( idx );
}

/** Sets the page size */
void MPageCollection::setPageSize( int s )
{
    size = s;
}

/** Sets the page orientation */
void MPageCollection::setPageOrientation( int o )
{
    orientation = o;
}

/** Sets the page dimensions  */
void MPageCollection::setPageDimensions( TQSize dim )
{
    dimensions = dim;
}

/** Returns the page size */
int MPageCollection::pageSize()
{
    return size;
}

/** Returns the page orientation */
int MPageCollection::pageOrientation()
{
    return orientation;
}

/** Returns the page dimensions  */
TQSize MPageCollection::pageDimensions()
{
    return dimensions;
}

/** Returns the number of pages in the page collection */
int MPageCollection::pageCount()
{
    return pages.count();
}

/** Copies member data from one object to another.
  Used by the copy constructor and assignment operator */
void MPageCollection::copy( const MPageCollection* mPageCollection )
{
    // Copy the page collection
    pages = mPageCollection->pages;

    // Copy the page metrics
    dimensions = mPageCollection->dimensions;
    size = mPageCollection->size;
    orientation = mPageCollection->orientation;
    m_ref = 1;
}

void MPageCollection::addRef()
{
    m_ref++;
}
void MPageCollection::removeRef()
{
    m_ref--;
    if ( !m_ref )
        deleteLater();
}

}
