00001 #ifndef _QDBTBASECELL_H 00002 #define _QDBTBASECELL_H 00003 00004 #include <qdbt/qdbtglobal.h> 00005 #include <qdbt/qdbtsingleton.h> 00006 00007 class QColor; 00008 class QFont; 00009 class QFontMetrics; 00010 class QKeyEvent; 00011 class QMouseEvent; 00012 class QPainter; 00013 class QRect; 00014 class QString; 00015 class QWidget; 00016 00017 class QdbtBaseTabular; 00018 class QdbtLineEdit; 00019 class QdbtTable; 00020 class QdbtPImpl; 00021 class QdbtEditorBase; 00022 00023 class QDBT_EXPORT QdbtBaseCell 00024 { 00025 short _cellFlags; 00026 00031 friend class QdbtTable; 00032 friend class QdbtEditorBase; 00033 00034 public: 00035 virtual ~QdbtBaseCell(); 00036 00037 virtual QdbtBaseCell *clone( QdbtBaseTabular * ) const = 0; 00038 00039 virtual int widthHint( const QFontMetrics &fm ) const; 00040 virtual int heightHint( const QFontMetrics &fm ) const; 00041 00042 virtual const QColor &color( QdbtBaseTabular * ) const; 00043 virtual const QColor &background( QdbtBaseTabular * ) const; 00044 00045 virtual QString text() const; 00046 00047 virtual void setEditable( bool state ); 00048 bool isEditable() const; 00049 00050 virtual void paint( QPainter *p, QdbtBaseTabular *t, const QRect & r, 00051 bool selected, bool editing = FALSE ); 00052 virtual void paintFocus( QPainter *p, QdbtBaseTabular *t, const QRect & r, 00053 bool selected, bool editing = FALSE ); 00054 00055 virtual QRect getTextArea() const; 00056 virtual QRect getEditArea( int width ) const; 00057 00058 void rightButtonClicked( QdbtBaseTabular *tab, int row, int col ) const; 00059 00060 protected: 00061 QdbtBaseCell(); 00062 00063 virtual QWidget *editor( QdbtBaseTabular * ) const; 00064 00065 virtual bool beginEdit( QdbtBaseTabular *, int row, int col, 00066 const QRect cellGeometry ) const; 00067 virtual bool acceptEdit( QdbtBaseTabular *, int row, int col ); 00068 virtual bool cancelEdit( QdbtBaseTabular *, int row, int col ); 00069 00070 virtual bool mouseEvent( QdbtBaseTabular *, int row, int col, 00071 QMouseEvent *e, const QRect cellGeometry ); 00072 virtual bool keyEvent( QdbtBaseTabular *, int row, int col, 00073 QKeyEvent *e, const QRect cellGeometry ); 00074 00075 00076 virtual void setEditorEnabled( QdbtBaseTabular *, bool ) const; 00077 00078 virtual void moveEditor( QdbtBaseTabular *, const QRect cellGeometry ) const; 00079 00080 bool aboutToBeEdited( QdbtBaseTabular * ) const; 00081 void notifyOnEditResult( QdbtBaseTabular *tab, int row, int col, 00082 int result, QString oldText ); 00083 QFont font( QdbtBaseTabular * ) const; 00084 bool prepareEditor( QdbtBaseTabular * tab, const QRect & geom ) const; 00085 bool cleanupEditor( QdbtBaseTabular * tab ) const; 00086 00087 static int MASK_EDITABLE; 00088 static int MASK_SELECTABLE; 00089 static int MASK_SELECTED; 00090 static int bw; 00091 00092 private: 00093 const QdbtPImpl * pimpl( QdbtBaseTabular * tab ) const; 00094 }; 00095 00096 00097 class QDBT_EXPORT QdbtNoCell : public QdbtBaseCell 00098 { 00099 public: 00100 QdbtNoCell() : QdbtBaseCell() 00101 { 00102 } 00103 QdbtNoCell( const QdbtNoCell & ) : QdbtBaseCell() 00104 { 00105 } 00106 virtual ~QdbtNoCell() 00107 { 00108 } 00109 00110 inline virtual QString text() const 00111 { 00112 return ""; 00113 } 00114 00115 protected: 00116 virtual void paint( QPainter *p, QdbtBaseTabular *t, const QRect & r, 00117 bool selected, bool editing = FALSE ); 00118 virtual QdbtBaseCell *clone( QdbtBaseTabular * ) const 00119 { 00120 return new QdbtNoCell( *this ); 00121 } 00122 }; 00123 00124 #endif