/*
**************************************************************************
                                 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 PMLIBRARYOBJECTPREVIEW_H
#define PMLIBRARYOBJECTPREVIEW_H

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

#include <tqwidget.h>
#include <tqimage.h>

#include <kurl.h>

class TQLabel;
class TQLineEdit;
class TQMultiLineEdit;
class TQPushButton;
class TQFrame;
class PMPart;
class PMTreeView;

/**
 * Preview widget for Library Objects and sub Libs.
 */
class PMLibraryEntryPreview: public TQWidget
{
   TQ_OBJECT
  
public:
   /** Constructor */
   PMLibraryEntryPreview( TQWidget *parent );
   /** Destructor */
   ~PMLibraryEntryPreview( );

   /**
    * Called to show the file preview.
    * @param url The path to the file
    * @param readOnly Whether the top library is read only
    * @param subLib Whether this is a sub library to preview
    * @Return true if the previous file was saved to disk.
    */
   bool showPreview( KURL url, bool readOnly, bool subLib );
   /**
    * Clears the preview
    */
   virtual void clearPreview( );

   /**
    * Save the object, if needed.
    * @param forceSave If true don't ask about changes just save them
    * @Return true if a save was performed.
    */
   bool saveIfNeeded( bool forceSave = false );

signals:
   /** Emitted when the object name has been changed */
   void objectChanged( );

protected:
   virtual void dragEnterEvent( TQDragEnterEvent* event );

   virtual void dropEvent( TQDropEvent* event );

private slots:
   /** Called when description or keywords are changed */
   void slotTextChanged( );
   /** Called when the name is changed */
   void slotTextChanged( const TQString& s );
   /** Called when the set preview button is clicked */
   void slotPreviewClicked( );
   /** Called when the apply button is clicked */
   void slotApplyClicked( );
   /** Called when the cancel button is clicked */
   void slotCancelClicked( );

private:
   /** Called to load the object tree. */
   void loadObjects( TQByteArray* obj );
   /** Sets whether the object is read only or not */
   void setReadOnly( bool b );
   /** Sets whether the object is modified or not */
   void setModified( bool modified );

   PMPart*         m_pPart;
   TQLineEdit*      m_pName;
   TQMultiLineEdit* m_pDescription;
   TQLabel*         m_pKeywordsLabel;
   TQMultiLineEdit* m_pKeywords;
   TQLabel*         m_pContentsLabel;
   PMTreeView*     m_pContentsPreview;
   TQPushButton*    m_pSetPreviewImageButton;
   TQPushButton*    m_pApplyChanges;
   TQPushButton*    m_pCancelChanges;

   TQImage          m_image;
   KURL            m_currentURL;

   bool m_modified;
   bool m_readOnly;
   bool m_subLib;
};

#endif
