/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
 *
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/
#ifndef __EXCCRTS_HXX__
#define __EXCCRTS_HXX__

#include "fltglbls.hxx"

#include <tools/debug.hxx>
namespace binfilter {

// ----------------------------------------------- class ColRowSettings --
class ColRowSettings
    {
    // ACHTUNG:     Col-/Row-Angaben in TWIPS
    //              ExcelKoordinaten -> Klasse( -> SwKoordinaten )
    private:
        INT32   *pWidth;
        INT32   *pHeight;
        BOOL    *pColHidden;
        BOOL    *pRowHidden;
        BOOL    *pColUsed;
        BOOL    *pRowUsed;
        USHORT  nDefWidth;
        USHORT  nDefHeight;
        USHORT  nAktTab;
        USHORT  nTabLimit, nColLimit, nRowLimit;
    public:
        ColRowSettings();
        ~ColRowSettings();
        void NewTab( USHORT nNew );
        void Apply();
#ifdef USED
        void HideColRange( USHORT nColFirst, USHORT nColLast );
        void HideRowRange( USHORT nRowFirst, USHORT nRowLast );
#endif
        void SetWidthRange( USHORT nColF, USHORT nColL, USHORT nNew );
        void SetDefaults( USHORT nWidth, USHORT nHeight )
            {
            nDefWidth = nWidth;
            nDefHeight = nHeight;
            }

        void SetDefWidth( USHORT nNew ) { nDefWidth = nNew; }

        void SetDefHeight( USHORT nNew ) { nDefHeight = nNew; }

        void SetWidth( USHORT nCol, INT32 nNew )
            {
            pExcGlob->NormalizeCol( nCol );

            DBG_ASSERT( nCol < nColLimit,
                "+ColRowSettings::SetWidth(): ungueltige Column" );
            if( nCol < nColLimit )
                {
                pWidth[ nCol ] = nNew;
                pColUsed[ nCol ] = TRUE;
                }
            }

        void SetHeight( USHORT nRow, INT32 nNew )
            {
            pExcGlob->NormalizeRow( nRow );

            DBG_ASSERT( nRow < nRowLimit,
                "+ColRowSettings::SetHeight(): ungueltige Row" );
            if( nRow < nRowLimit )
                {
                pHeight[ nRow ] = nNew;
                pRowUsed[ nRow ] = TRUE;
                }
            }

        void Used( USHORT nCol, USHORT nRow )
            {
            pExcGlob->Normalize( nCol, nRow );

            DBG_ASSERT( nRow < nRowLimit,
                "+ColRowSettings::Used(): ungueltige Row" );
            DBG_ASSERT( nCol < nColLimit,
                "+ColRowSettings::Used(): ungueltige Column" );
            if( nCol < nColLimit && nRow < nRowLimit )
                {
                pColUsed[ nCol ] = TRUE;
                pRowUsed[ nRow ] = TRUE;
                }
            }

        void ColUsed( USHORT nCol )
            {
            pExcGlob->NormalizeCol( nCol );

            DBG_ASSERT( nCol < nColLimit,
                "+ColRowSettings::ColUsed(): ungueltige Column" );
            if( nCol < nColLimit ) pColUsed[ nCol ] = TRUE;
            }

        void RowUsed( USHORT nRow )
            {
            pExcGlob->NormalizeRow( nRow );

            DBG_ASSERT( nRow < nRowLimit,
                "+ColRowSettings::RowUsed(): ungueltige Row" );
            if( nRow < nRowLimit ) pRowUsed[ nRow ] = TRUE;
            }

    };

// ---------------------------------------------------- class FltColumn --

class FltColumn
    {
    //  ACHTUNG:    SwKoordinaten -> Klasse( -> SwKoordinaten )
    private:
        USHORT *pData;      // Daten-Array fuer XF-Indizes
        USHORT nSize;       // Groesse des pData-Arrays, teilbar durch 2
        USHORT nLastRow;
        USHORT nCol;        // Column-Nummer
        static USHORT nTab; // Tabellen-Nummer

        static const USHORT nDefSize;
        static const USHORT nLevelSize;
        static UINT32 nDefCleared;

        void Grow( USHORT nRecIndex );
    public:
        FltColumn( USHORT nNewCol );
#ifdef USED
        FltColumn( USHORT nNewCol, USHORT nNewSize );
#endif

        ~FltColumn() { delete[] pData; }

        void SetXF( USHORT nRow, USHORT nNewXF )
            {
            if( nRow < pExcGlob->AnzRows() )
                {
                if( nRow >= nSize ) Grow( nRow );
                if( nRow > nLastRow ) nLastRow = nRow;

                DBG_ASSERT( nRow < nSize,
                    "-FltColumn::SetXF(): nSize nicht an nRow angepasst!" );

                pData[ nRow ] = nNewXF;
                }
            }

        void SetTab( USHORT nNewTab )
            {
            nTab = nNewTab;
            }

        void Settings( USHORT nNewTab )
            {
            nTab = nNewTab;
            }

#ifdef USED
        void Reset( USHORT nNewTab );
#endif
        void Reset();
        void Apply();
    };

// --------------------------------------------------- class FltTabelle --

class FltTabelle
    {
    //  ACHTUNG:    ExcelKoordinaten -> Klasse( -> SwKoordinaten )
    private:
        FltColumn **pData;  // Array mit Column-Daten
        USHORT nSize;
        USHORT nLastCol;
    public:
        FltTabelle();
        ~FltTabelle();
        void Settings( USHORT nTab );
        void SetXF( USHORT nCol, USHORT nRow, USHORT nNewXF );
#ifdef USED
        void Reset( USHORT nTab );
#endif
        void Apply();
    };

// -----------------------------------------------------------------------

} //namespace binfilter
#endif


/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
