#ifndef _SCRIPTEDITOR_H_
#define _SCRIPTEDITOR_H_

//=============================================================================
//
//   File : scripteditor.h
//   Created on Sun Mar 28 1999 16:11:48 CEST by Szymon Stefanek
//
//   This file is part of the KVIrc IRC client distribution
//   Copyright (C) 1999-2004 Szymon Stefanek <pragma at kvirc dot net>
//
//   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 opinion) any later version.
//
//   This program is distributed in the HOPE that it will be USEFUL,
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
//   See the GNU General Public License for more details.
//
//   You should have received a copy of the GNU General Public License
//   along with this program. If not, write to the Free Software Foundation,
//   Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
//=============================================================================

#include "kvi_scripteditor.h"

#include <tqlabel.h>
#include <kvi_tal_textedit.h>
#include <tqsyntaxhighlighter.h>
#include <tqdialog.h>
#include <tqcheckbox.h>
#include "kvi_tal_listbox.h"
#include <tqevent.h> 
#include "kvi_qcstring.h"

#include "kvi_tal_popupmenu.h"

#include "kvi_pointerlist.h"
#include "kvi_selectors.h"
typedef KviPointerList<int> ColumnList;

class KviCompletionBox: public KviTalListBox
{
	Q_OBJECT
  
public:
	KviCompletionBox(TQWidget * parent);
	~KviCompletionBox(){};
	
	void updateContents(TQString word);
protected:
	virtual void keyPressEvent(TQKeyEvent * e);
};

class KviScriptEditorWidget : public KviTalTextEdit
{
	Q_OBJECT
  
	TQ_PROPERTY(bool contextSensitiveHelp READ contextSensitiveHelp)
public:
	KviScriptEditorWidget(TQWidget * pParent);
	virtual ~KviScriptEditorWidget();
public:
	void updateOptions();
	void find1();
	TQString m_szFind;
	KviCompletionBox *completelistbox;
	void completition(bool bCanComplete = 1);
	void getWordBeforeCursor(TQString &buffer,int index,bool *);
	void getWordOnCursor(TQString &buffer,int index) const;
	bool contextSensitiveHelp() const;
public slots:
	void slotFind();
	void slotHelp();
	void slotReplace();
	void slotComplete(const TQString &str);

signals:
	void keyPressed();
protected:
	virtual void keyPressEvent(TQKeyEvent * e);
	void contentsMousePressEvent(TQMouseEvent *);
#ifdef COMPILE_USE_QT4
	Q3PopupMenu *createPopupMenu( const TQPoint& pos );
#else
	TQPopupMenu *createPopupMenu( const TQPoint& pos );
#endif
	TQWidget *m_pParent;
	TQString m_szHelp;

};

#ifdef COMPILE_USE_QT4
	#include <tq3syntaxhighlighter.h>
	#define TQSyntaxHighlighter Q3SyntaxHighlighter
#else
	#include <tqobjectlist.h>
#endif
class KviScriptSyntaxHighlighter : public TQSyntaxHighlighter
{
public:
	KviScriptSyntaxHighlighter(KviScriptEditorWidget * pWidget);
	virtual ~KviScriptSyntaxHighlighter();
public:
	virtual int highlightParagraph(const TQString & text,int endStateOfLastPara);
};

class KviScriptEditorWidgetColorOptions : public TQDialog
{
	Q_OBJECT
  
public:
	KviScriptEditorWidgetColorOptions(TQWidget * pParent);
	~KviScriptEditorWidgetColorOptions();
private:
	KviPointerList<KviSelectorInterface> * m_pSelectorInterfaceList;
protected:
	KviColorSelector * addColorSelector(TQWidget * pParent,const TQString & txt,TQColor * pOption,bool bEnabled);

protected slots:
	void okClicked();
};

class TQTimer;

class KviScriptEditorImplementation : public KviScriptEditor
{
	Q_OBJECT
  
public:
	KviScriptEditorImplementation(TQWidget * par);
	virtual ~KviScriptEditorImplementation();
protected:
	KviScriptEditorWidget * m_pEditor;
	TQLabel                * m_pRowColLabel;
	TQPoint                  m_lastCursorPos;
public:
	virtual void setText(const TQString &txt);
	virtual void getText(TQString &txt);
	virtual void setText(const KviTQCString &txt);
	virtual void getText(KviTQCString &txt);
	virtual void setFindText(const TQString & text);
	virtual void setEnabled(bool bEnabled);
	virtual void setFocus();
	virtual bool isModified();
	void setFindLineeditReadOnly(bool b);
	void setCursorPosition(TQPoint);
	TQPoint getCursor();
	TQLineEdit *m_pFindlineedit;
	TQLineEdit * getFindlineedit();
protected:
	virtual void focusInEvent(TQFocusEvent *e);
	void loadOptions();
	void saveOptions();
protected slots:
	void saveToFile();
	void loadFromFile();
	void configureColors();
	void updateRowColLabel();
	void slotFind();
	void slotReplaceAll(const TQString &,const TQString &);
	void slotInitFind();
	void slotNextFind(const TQString &);
signals:
	void find( const TQString &);
	void replaceAll( const TQString &, const TQString &);
	void initFind();
	void nextFind(const TQString &);
};

class KviScriptEditorReplaceDialog: public TQDialog
{
	Q_OBJECT
  
public:
	KviScriptEditorReplaceDialog( TQWidget* parent = 0, const char* name = 0);
    ~KviScriptEditorReplaceDialog();
	TQLineEdit *m_pFindlineedit;
	TQLineEdit *m_pReplacelineedit;
protected:
	TQLabel *findlabel;
	TQLabel *replacelabel;
	TQPushButton *replacebutton;
	TQPushButton *replace;
	TQPushButton *findNext;

//	TQPushButton *cancelbutton;
	KviStyledCheckBox *checkReplaceAll;
	TQWidget *m_pParent;
protected slots:
	void textChanged(const TQString &);
	void slotReplace();
	void slotNextFind();
signals:
	void replaceAll( const TQString &,const TQString &);
	void initFind();
	void nextFind(const TQString &);
	
};


#endif //!_SCRIPTEDITOR_H_
