Blob Blame Raw


#ifndef DVTEXTEDIT_H
#define DVTEXTEDIT_H

#ifdef WIN32
#pragma warning(disable : 4251)
#endif

#include "tcommon.h"
#include "tpixel.h"

#include <QWidget>
#include <QString>
#include <QTextEdit>

class QLabel;
class QLineEdit;
class QToolBar;
class QAction;
class QActionGroup;
class QFontComboBox;
class QComboBox;
class QImage;

#undef DVAPI
#undef DVVAR
#ifdef TOONZQT_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif

//=============================================================================

namespace DVGui
{

class ColorField;
//-----------------------------------------------------------------------------

class DvMiniToolBar : public QFrame
{
	QPoint m_dragPos;

public:
	DvMiniToolBar(QWidget *parent = 0);
	~DvMiniToolBar();

protected:
	void mousePressEvent(QMouseEvent *);
	void mouseMoveEvent(QMouseEvent *);
};

//-----------------------------------------------------------------------------

class DvTextEditButton : public QWidget
{
	Q_OBJECT

public:
	DvTextEditButton(QWidget *parent = 0);
	~DvTextEditButton();

protected:
	void paintEvent(QPaintEvent *);
	void mousePressEvent(QMouseEvent *);

signals:
	void clicked();
};

//-----------------------------------------------------------------------------

class DVAPI DvTextEdit : public QTextEdit
{
	Q_OBJECT

	bool m_paintMode;

	bool m_miniToolBarEnabled;

	QPoint m_mousePos;

	QComboBox *m_sizeComboBox;
	QFontComboBox *m_fontComboBox;

	QActionGroup *m_alignActionGroup;

	QAction *m_boldAction,
		*m_italicAction,
		*m_underlineAction,
		*m_alignLeftAction,
		*m_alignRightAction,
		*m_alignCenterAction;

	ColorField *m_colorField;

	DvMiniToolBar *m_miniToolBar;
	DvTextEditButton *m_button;

public:
	DvTextEdit(QWidget *parent = 0);
	~DvTextEdit();

	void setMiniToolBarEnabled(bool value) { m_miniToolBarEnabled = value; }
	void changeFont(const QFont &f);

protected:
	void createActions();
	void createMiniToolBar();

	void showMiniToolBar(const QPoint &pos);
	void hideMiniToolBar();

	void mousePressEvent(QMouseEvent *);
	void mouseMoveEvent(QMouseEvent *);
	void mouseReleaseEvent(QMouseEvent *);
	void wheelEvent(QWheelEvent *);

	void focusInEvent(QFocusEvent *);
	void focusOutEvent(QFocusEvent *);

	void dragMoveEvent(QDragMoveEvent *);

private:
	void fontChanged(const QFont &f);
	void colorChanged(const QColor &c);
	void alignmentChanged(Qt::Alignment a);

	void mergeFormatOnWordOrSelection(const QTextCharFormat &format);

protected slots:

	void onCurrentCharFormatChanged(const QTextCharFormat &format);
	void onCursorPositionChanged();
	void onSelectionChanged();

	void onShowMiniToolBarClicked();

	void setTextFamily(const QString &);
	void setTextColor(const TPixel32 &color, bool isDragging);
	void setTextBold();
	void setTextItalic();
	void setTextUnderline();
	void setTextSize(const QString &p);
	void setTextAlign(QAction *);

signals:

	void focusIn();
};

//-----------------------------------------------------------------------------
} //namespace DVGui
//-----------------------------------------------------------------------------

#endif //DVTEXTEDIT_H