
//***************************************************
// Generalised Bitmap Module C++ adapter for GBM plugins
//
// Requires: GBM.DLL version 1.35 or higher (with multipage support)
//
// Copyright (C) 2006-2008 Heiko Nitzsche
//
//   This software is provided 'as-is', without any express or implied
//   warranty.  In no event will the author be held liable for any damages
//   arising from the use of this software.
//
//   Permission is granted to anyone to use this software for any purpose,
//   including commercial applications, and to alter it and redistribute it
//   freely, subject to the following restrictions:
//
//   1. The origin of this software must not be misrepresented; you must not
//      claim that you wrote the original software. If you use this software
//      in a product, an acknowledgment in the product documentation would be
//      appreciated but is not required.
//   2. Altered source versions must be plainly marked as such, and must not be
//      misrepresented as being the original software.
//   3. This notice may not be removed or altered from any source distribution.
//
//***************************************************

#ifndef __CLASS_GBM_DOCUMENT__
    #define __CLASS_GBM_DOCUMENT__

#include "GbmException.hpp"
#include "GbmDocumentPage.hpp"
#include "GbmRenderer.hpp"
#include "GbmAccessor.hpp"

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

class GbmDocument
{
    private:

        // --- data definitions ---

        const GbmAccessor &  mGbmAccessor;
        GbmDocumentPage   ** pages;
        int                  numPages;
        char              *  filename;
        BOOLEAN              force24bpp;
        int                  gbmFileType;
        GBMFT                formatDescription;

        GbmRenderer          renderer;

        // --- functions ---

        GbmDocument();
        GbmDocument(const GbmDocument & doc);
        GbmDocument & operator = ( const GbmDocument & doc );

        void deleteAllPages();

        void readFileFormatDescriptionFromFile() throw ( GbmException );
        int  readNumberOfPagesFromFile() const   throw ( GbmException );


    public:

        GbmDocument(const GbmAccessor & accessor);
        virtual ~GbmDocument();

        BOOLEAN isSupportedFormat(const char * filename,
                                  const char * fileExtension) const;

        BOOLEAN hasContent() const;

        void setDocumentFile(const char    * filename,
                             const char    * fileExtension,
                             const BOOLEAN   allowDelayedDataLoading,
                             const BOOLEAN   force24bpp) throw ( GbmException );

        void writeDocumentPageToFile(const char * filename,
                                     const char * options,
                                     const int    pageNumber) throw ( GbmException );

        const GbmAccessor     & getGbmAccessor();
              GbmRenderer     & getRenderer();
              GbmDocumentPage & getPage(const int pageNumber) throw ( GbmException );

        int getNumberOfPages() const;

        const char * getShortDescription() const;
        const char * getLongDescription()  const;
        const char * getExtensions()       const;
};

#endif


