#ifndef TEXTEDITOR_H 
#define TEXTEDITOR_H

#include <QtGui>
#include <QMainWindow>

class QTextEdit;
class QComboBox;

#include "vymtext.h"

enum EditorState {inactiveEditor,emptyEditor,filledEditor};

class TextEditor : public QMainWindow
{    Q_OBJECT
public:
    TextEditor();
    ~TextEditor();

    void init(const QString &ename);
    bool isEmpty();
    void setEditorName( const QString & );
    void setEditorTitle(const QString &);
    QString getEditorTitle();
    void setFont (const QFont &);
    void setFontHint(const QString&);
    QString getFontHint();
    QString getFontHintDefault();
    void setFilename (const QString&);
    QString getFilename ();
    void setFilenameHint (const QString&);
    QString getFilenameHint ();
    QString getText();
    VymText getVymText();

    bool findText(const QString &, const QTextDocument::FindFlags &); 
    bool findText(const QString &, const QTextDocument::FindFlags &,int i); 
    void setTextCursor (const QTextCursor & cursor );
    QTextCursor getTextCursor();
    void setFocus();

protected:
    void setupFileActions();
    void setupEditActions();
    void setupFormatActions();
    void setupSettingsActions();
    void closeEvent( QCloseEvent* );
    bool eventFilter(QObject *obj, QEvent *ev);

public slots:
    void editorChanged();	    // received when text() changed
    void setRichText(const QString &t);
    void setPlainText(const QString &t);
    void setTextAuto(const QString &);  // set Text and autodetect mode
    void setVymText(const VymText &vt);
    void setInactive();		    // Nothing can be entered
    void editCopyAll();
    void reset();

signals:
    void textHasChanged();
    void windowClosed();
    void fontFamilyHasChanged();
    void fontSizeHasChanged();
    
private slots:
    void textLoad();
    void textSaveAs();
    void textSave();
    void textExportAsASCII();
    void textPrint();
    void textEditUndo();
    void toggleFonthint();
    void setRichTextMode(bool b);
    void toggleRichText();
    void setFixedFont();
    void setVarFont();
    void textBold();
    void textUnderline();
    void textItalic();
    void textFamily( const QString &f );
    void textSize( const QString &p );
    void textColor();
    void textAlign(QAction*);
    void textVAlign();
    void fontChanged( const QFont &f );
    void colorChanged( const QColor &c );
    void formatChanged (const QTextCharFormat &f);
    void alignmentChanged( int a );
    void verticalAlignmentChanged(QTextCharFormat::VerticalAlignment);
    void updateActions();
    void setState (EditorState);
    void setEmptyEditorColor();
    void setInactiveEditorColor();
    void setFilledEditorColor();
    void setFontColor();

protected:
    QString shortcutScope;  // used for settings and shortcut scopes
    QTextEdit *e;
    QPoint lastPos;	    // save last position of window
    QString editorName;     // Name of editor, e.g. note editor, heading editor, ...
    QString editorTitle;    // window title: Editor name + selected branch
    QString filename;
    QString filenameHint;

    QBrush emptyPaper;	    // setting the background color
    QBrush filledPaper;	    // depending on the state
    QBrush inactivePaper;   // depending on the state
    EditorState state;
    bool blockChangedSignal;

    QColor colorEmptyEditor;
    QColor colorFilledEditor;
    QColor colorInactiveEditor;
    QColor colorFont;

    QFont varFont;
    QFont fixedFont;
    QComboBox *comboFont, *comboSize;
    
    QToolBar *editToolBar;
    QToolBar *fontToolBar;
    QToolBar *fontHintsToolBar;
    QToolBar *formatToolBar;

    QAction *actionFileLoad,
    *actionFileSave,
    *actionFileSaveAs,
    *actionFilePrint,
    *actionFileDeleteAll,
    *actionEditUndo,
    *actionEditRedo,
    *actionEditCopy,
    *actionEditCut,
    *actionEditPaste,
    *actionFormatUseFixedFont,
    *actionFormatRichText,
    *actionSettingsVarFont,
    *actionSettingsFixedFont,
    *actionSettingsFonthintDefault,
    *actionEmptyEditorColor,
    *actionFilledEditorColor,
    *actionInactiveEditorColor,
    *actionFontColor;

    QAction *actionTextBold,
    *actionTextUnderline,
    *actionTextItalic,
    *actionTextColor,
    *actionAlignSubScript,
    *actionAlignSuperScript,
    *actionAlignLeft,
    *actionAlignCenter,
    *actionAlignRight,
    *actionAlignJustify;
};

#endif
