#ifndef KXSLDBGKPART_H
#define KXSLDBGKPART_H

#include <kparts/part.h>
#include <tqvariant.h>
#include <tqdict.h>
#include <tqmainwindow.h>
#include "xsldbgdebugger.h"
#include "xsldbginspector.h"
#include <dcopclient.h>
#include "kxsldbg_partif.h"
#include <ktexteditor/document.h> 
#include <ktexteditor/view.h> 

class TQVBoxLayout;
class TQHBoxLayout;
class TQGridLayout;
class TQAction;
class TQActionGroup;
class TQToolBar;
class TQPopupMenu;
class TQTextBrowser;
class TQLineEdit;
class TQDockWindow;
class TQWidgetStack;

class XsldbgBrkStatusView;
class QXsldbgDoc;
class XsldbgOutputView;
class XsldbgConfigImpl;

class TQWidget;
class TQPainter;
class KURL;
class TQMultiLineEdit;
class KAboutData;

typedef TQDict<QXsldbgDoc> XsldbgDocDict;

/**
 * This is a "Part".  It that does all the real work in a KPart
 * application.
 *
 * @short Main Part
 * @author Keith Isdale <k_isdale@tpg.com.au>
 * @version 0.1
 */
class KXsldbgPart : public KParts::ReadOnlyPart, public KXsldbgPartIf 
{
    Q_OBJECT
  

public:
    /**
     * Default constructor
     */
    KXsldbgPart(TQWidget *parentWidget, const char *widgetName,
                    TQObject *parent, const char *name, const TQStringList &args);

    /**
     * Destructor
     */
    virtual ~KXsldbgPart();

    static KAboutData *createAboutData();


   /** Checks the debugger, if it is not ready then
     *      display a error in a message box
     *
     * @returns TRUE if debugger is ready, otherwise FALSE
     */
    bool checkDebugger();
    void lookupSystemID(TQString systemID);
    void lookupPublicID(TQString publicID);
    void createInspector();

public slots:
    virtual bool openURL(const KURL &url);
    virtual bool closeURL();
    void quit();
    void emitOpenFile(TQString file, int line, int row);
    void slotLookupSystemID();
    void slotLookupPublicID();
    void walkCmd_activated();
    void walkStopCmd_activated();
    void traceCmd_activated();
    void traceStopCmd_activated();
    void configureEditorCmd_activated(); 

  //Tool bar commands
    void configureCmd_activated();
    void inspectorCmd_activated();
    void runCmd_activated();
    void stepCmd_activated();
    void nextCmd_activated();
    void continueCmd_activated();
    void stepupCmd_activated();
    void stepdownCmd_activated();
    void sourceCmd_activated();
    void dataCmd_activated();
    void outputCmd_activated();
    void refreshCmd_activated();
    void enableCmd_activated();
    void breakCmd_activated();
    void deleteCmd_activated();

    /** Evaluate expression entered */	
    void evaluateCmd_activated();

    /** Goto/display file XPath entered */
    void gotoXPathCmd_activated();

    virtual void lineNoChanged( TQString fileName, int lineNumber,
				bool breakpoint );

    void addBreakPoint(int lineNumber);
    void enableBreakPoint(int lineNumber);
    void deleteBreakPoint(int lineNumber);

    /** Evaluate expression entered in expressionEdit */
    void slotEvaluate();

    /** Goto/display file that matches XPath specified in xPathEdit */
    void slotGotoXPath();

     /** Run search on data base , see search.dtd for DTD of search database */
    void slotSearch();

    /* Process the the URI for SystemID or PublicID requested */
    void slotProcResolveItem(TQString URI);

    /* used to get breakpoint list notfication */
    void breakpointItem(TQString fileName, int  lineNumber ,
			TQString /*templateName*/, TQString /* modeName */,
			bool  enabled , int /* id */);

    void cursorPositionChanged();
    void docChanged();
    
    void debuggerStarted();

protected:
    /**
     * This must be implemented by each part
     */
    virtual bool openFile();
    bool fetchURL(const KURL &url);

protected slots:
    void fileOpen();

private:
    QXsldbgDoc *currentDoc;
    TQWidgetStack *mainView;

    TQPushButton *xPathBtn, *searchBtn, *evaluateBtn;
    TQLineEdit *newXPath, *newSearch, *newEvaluate;
    TQGridLayout* qxsldbgLayout;

    uint currentLineNo, currentColumnNo;
    XsldbgDocDict docDictionary;
    XsldbgInspector *inspector;
    XsldbgDebugger *debugger;
    XsldbgConfigImpl *configWidget;
    TQString currentFileName;

    XsldbgOutputView *outputview;
};

#endif // KXSLDBGPART_H
