/**********************************/
/*	Headers fo library definition */
/**********************************/

#ifndef CLASS_LIBRARY_H
#define CLASS_LIBRARY_H


#include "class_libentry.h"

WX_DECLARE_LIST( EDA_LibComponentStruct, LIB_CMP_LIST );


/******************************/
/* Classe to handle a library */
/******************************/

class LibraryStruct
{
public:
    int            m_Type;          /* type indicator */
    wxString       m_Name;          /* Library file name (without path). */
    wxString       m_FullFileName;  /* Full File Name (with path) of library. */
    wxString       m_Header;        /* first line of loaded library. */
    int            m_NumOfParts;    /* Number of parts this library has. */
    PriorQue*      m_Entries;       /* Parts themselves are saved here. */
    LibraryStruct* m_Pnext;         /* Point on next lib in chain. */
    int            m_Modified;      /* flag indicateur d'edition */
    int            m_Size;          // Size in bytes (for statistics)
    unsigned long  m_TimeStamp;     // Signature temporelle
    int            m_Flags;         // variable used in some functions
    bool           m_IsLibCache;    /* False for the "standard" libraries,
                                     * True for the library cache */

public:
    LibraryStruct( int type, const wxString& name, const wxString& fullname );
    ~LibraryStruct();

    /**
     * Function SaveLibrary
     * writes the data structures for this object out to 2 file
     * the library in "*.lib" format.
     * the doc file in "*.dcm" format.
     * creates a backup file for each  file (.bak and .bck)
     * @param aFullFileName The full lib filename.
     * @return bool - true if success writing else false.
     */
    bool SaveLibrary( const wxString& aFullFileName );
    bool ReadHeader( FILE* file, int* LineNum );


private:
    bool WriteHeader( FILE* file );

    /* NOTE: For future expansion, do not delete. */
public:
    LibraryStruct( const wxChar* fileName = NULL );

    bool Save( const wxString& saveAsFile );

    wxString GetName();

protected:
    wxFileName     m_fileName;       /* Library file name. */
    wxDateTime     m_DateTime;       /* Library save time and date. */
    wxString       m_Version;        /* Library save version. */
    LIB_CMP_LIST   m_componentList;  /* List of components in this library. */

    friend class EDA_LibComponentStruct;
};

#endif  //  CLASS_LIBRARY_H