#ifndef __KDEVHTMLPART_H__
#define __KDEVHTMLPART_H__

#include <stdlib.h>

#include <tqdatetime.h>

#include <tdehtml_part.h>

/**
@file kdevhtmlpart.h
Customized TDEHTML part for KDevelop.
*/

class TDEAction;
class TDEToolBarPopupAction;

struct DocumentationHistoryEntry {
    KURL url;
    int id;
    
    DocumentationHistoryEntry() {}
    DocumentationHistoryEntry( const KURL& u ): url( u ) 
    {
        id = abs( TQTime::currentTime().msecsTo( TQTime() ) );	// nasty, but should provide a reasonably unique number
    }
};

/**
Customized TDEHTML part for KDevelop.
Used as HTML documentation and file viewer. 

Represents customized BrowserViewGUI mode of TDEHTMLPart. Provides also actions for:
- reload;
- stop;
- duplicate;
- print;
- copy text;
- back;
- forward.
.
It has it's own popup menu and font/zoom settings.
*/
class KDevHTMLPart : public TDEHTMLPart
{
    TQ_OBJECT
  

public:
    
    enum Options { CanDuplicate=1, CanOpenInNewWindow=2 };

    KDevHTMLPart();
    
    void setContext(const TQString &context);
    TQString context() const;
    virtual bool openURL(const KURL &url);
    static TQString resolveEnvVarsInURL(const TQString& url);
    
    void setOptions(int options) { m_options = options; }

signals:
    void fileNameChanged(KParts::ReadOnlyPart *part);

protected slots:

    void slotStarted(TDEIO::Job *);
    void slotCompleted();
    void slotCancelled(const TQString &errMsg);
    
    void openURLRequest(const KURL &url);
    void popup( const TQString & url, const TQPoint & p );
    
    void slotReload();
    void slotStop();
    virtual void slotDuplicate() = 0;
    virtual void slotOpenInNewWindow(const KURL &url) = 0;
    void slotPrint();
    void slotCopy();
    void slotSelectionChanged();

    void slotBack();
    void slotForward();
    void slotBackAboutToShow();
    void slotForwardAboutToShow();

    void slotPopupActivated( int id );
    void addHistoryEntry();
  
  
private:

    TQValueList< DocumentationHistoryEntry > m_history;
    TQValueList< DocumentationHistoryEntry >::Iterator m_Current;

    TDEToolBarPopupAction* m_backAction;
    TDEToolBarPopupAction* m_forwardAction;
    
    bool m_restoring;

    TQString m_context;
    TDEAction *stopAction;
    TDEAction *reloadAction;
    TDEAction *duplicateAction;
    TDEAction *printAction;
    TDEAction *copyAction;
    
    int m_options;
};

#endif
