/*
**************************************************************************
                                 description
                             --------------------
    copyright            : (C) 2002 by Luis Carvalho
    email                : lpassos@mail.telepac.pt
**************************************************************************

**************************************************************************
*                                                                        *
*  This program is free software; you can redistribute it and/or modify  *
*  it under the terms of the GNU General Public License as published by  *
*  the Free Software Foundation; either version 2 of the License, or     *
*  (at your option) any later version.                                   *
*                                                                        *
**************************************************************************/

#ifndef PMLIBRARYOBJECT_H
#define PMLIBRARYOBJECT_H

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <tqstring.h>
#include <tqmap.h>
#include <tqvaluelist.h>
#include <kstaticdeleter.h>
#include <tqstringlist.h>

class KURL;
class KArchive;
class KTar;
class TQImage;

/**
 * This class implements a library object.
 *
 * A library object has a name, a textual description, a graphical 
 * preview and the object data, of course. It also contains a collection of
 * keywords.
 *
 * When an instance of PMLibraryObject is created, the objects description is
 * loaded.
 *
 * The graphical preview and the objects data are loaded only if needed.
 *
 */
class PMLibraryObject
{
public:
   /** 
    * Constructor for the library object. Creates an empty library object. 
    */
   PMLibraryObject( );
   /** 
    * Constructor for the library object. 
    * Loads the object data from the specified library object file.
    */
   PMLibraryObject( KURL u );
   /** 
    * Destructor 
    */
   ~PMLibraryObject( );

   /** 
    * Name of the library object. 
    */
   TQString name( ) const { return m_name; }
   /** 
    * Textual description of the library object. 
    */
   TQString description( ) const { return m_description; }
   /** 
    * List of keywords for search of the library object. 
    */
   TQString keywords( ) const { return m_keywords; }
   /** 
    * Graphical Preview. 
    */
   TQImage* preview( );
   /**
    * True is the preview has been loaded.
    */
   bool isPreviewLoaded( ) const { return m_previewLoaded; }
   /** 
    * Objects for the scene 
    */
   TQByteArray* objects( );
   bool areObjectsLoaded( ) const { return m_objectsLoaded; }

   /** 
    * Set the library object name 
    */
   void setName( const TQString& str );
   /** 
    * Set the library object description 
    */
   void setDescription( const TQString& str );
   /** 
    * Set the library object keywords 
    */
   void setKeywords( const TQString& str );
   /** 
    * Set the preview image 
    */
   void setPreview( const TQImage& img );
   /** 
    * Set the object data 
    */
   void setObjects( const TQByteArray& obj );

   /** 
    * Save the library object to a file 
    */
   void save( const TQString& fileName );

private:
   void loadLibraryInfo( );
   void saveLibraryInfo( );
   void savePreview( );
   void saveObjects( );

   bool        m_previewLoaded;
   bool        m_objectsLoaded;
   TQString     m_name;
   TQString     m_description;
   TQString     m_keywords;
   KTar*       m_data;
   TQImage*     m_preview;
   TQByteArray* m_objects;
   TQStringList m_extraFiles;
};

#endif