/* ====================================================================
* Copyright (c) 2003-2006, Martin Hauner
* http://subcommander.tigris.org
*
* Subcommander is licensed as described in the file doc/COPYING, which
* you should have received as part of this distribution.
* ====================================================================
*/
#ifndef _TEXTWIDGET_H
#define _TEXTWIDGET_H
// sc
#include "sublib/BlockInfo.h"
#include "sublib/Cursor.h"
#include "util/types.h"
class TextModel;
class Line;
class TextPositionCalculator;
// qt
#include <qwidget.h>
class TextWidget : public QWidget
{
typedef QWidget super;
Q_OBJECT
public:
TextWidget( QWidget *parent=0, const char *name=0 );
virtual ~TextWidget();
void setModel( TextModel *model, TextModel* diff );
void setModelSize( sc::Size columns, sc::Size lines );
TextModel* getModel() const;
void setBlockSelection( int block );
void clearBlockSelection();
int getBlockSelection() const;
int calcLineY( int line, bool optimize = false );
void setEditable( bool editable );
bool isEditable() const;
void setRightColMark( int column );
void enableRightColMark( bool b = true );
//void enableCursor( bool enable );
void enableSelection( bool enable );
void dragEnterEvent(QDragEnterEvent* e);
void dropEvent(QDropEvent* e);
public slots:
void setScrollPosY(int y);
void setScrollPosX(int x);
void timerSelection();
void timerCursor();
QSize sizeHint() const;
signals:
void blockChanged( int b );
//void widthChanged( int w );
//void heightChanged( int h );
void xChanged( int x );
void yChanged( int y );
void sizeChanged();
void mouseLine( int y );
void fileDropped( const QString& f );
protected:
//void resizeEvent( QResizeEvent * );
bool event( QEvent* e );
void paintEvent( QPaintEvent* );
void keyPressEvent( QKeyEvent* );
void keyReleaseEvent( QKeyEvent* );
void mousePressEvent( QMouseEvent* );
void mouseReleaseEvent( QMouseEvent* );
void mouseDoubleClickEvent( QMouseEvent* e );
void mouseMoveEvent( QMouseEvent* );
void focusInEvent( QFocusEvent* );
void focusOutEvent( QFocusEvent* );
//int width() const;
//int height() const;
private:
void drawLine( QPainter& pp, int x, int y, const Line& line );
QRect calcCursorRect( const TextPositionCalculator& calc, const Cursor& c );
QRect calcCursorRect( const Cursor& c );
QRect calcBlockRect( const TextPositionCalculator& calc );
QRect calcBlockRect();
QRect calcHighlightedRect();
Cursor calcCursorPos( int x, int y );
//QString getHighlightedText() const;
void setScrollPosCursor( const Cursor& oc, const Cursor& nc );
void moveCursorRight();
void moveCursorLeft();
void moveCursorDown();
void moveCursorUp();
void updateCursor();
private:
TextModel* _model; // data source
TextModel* _diff; // diff model for calculating line diffs
sc::Size _columns; // pretend to have this number of columns
sc::Size _lines; // pretend to have this number of lines
int _xpos; // scroll position x
int _ypos; // scroll position y
bool _enableRightColMark; // draw right column mark?
int _rightColMark; // column for right column mark
QTimer* _tSel; // block selection stuff
int _tSelCnt;
bool _drawSel;
int _selBlockNr;
BlockInfo _selBlock;
QTimer* _tCursor; // cursor blink timer
bool _shiftKey; // shift key pressed?
bool _cntrlKey; // control key pressed?
// configuration
bool _editable;
bool _enableSelection;
};
#endif // _TEXTWIDGET_H
syntax highlighted by Code2HTML, v. 0.9.1