osg::QMatrixFieldValueLabel< MatrixTypeT > Class Template Reference

Flyweight label, specialized for Matrix fields.

#include <OSGQMatrixFieldValueLabel.h>

Inheritance diagram for osg::QMatrixFieldValueLabel< MatrixTypeT >:

osg::QFieldValueLabelBase

List of all members.

Public Types

typedef MatrixTypeT MatrixType
typedef MatrixTypeT::ValueType ValueType

Public Member Functions

 QMatrixFieldValueLabel (QFieldViewBase *pView, UInt32 uiIndex)
virtual ~QMatrixFieldValueLabel (void)
virtual void paint (QPainter *pPainter, const QColorGroup &colGrp, const QRect &rect)
virtual QSize sizeHint (void)
virtual QSize minimumSizeHint (void)
virtual void valueChanged (void)
void setIndex (UInt32 uiIndex)
UInt32 getIndex (void) const

Static Public Member Functions

static QFieldValueLabelBase * create (QFieldViewBase *pView, UInt32 uiIndex)

Protected Member Functions

const QString & getCachedValue (UInt32 uiRow, UInt32 uiCol)
const QSize & getCachedSize (void)
QFieldViewBase * getFieldView (void)
const QFieldViewBase * getFieldView (void) const
FieldContainerPtr & getFieldContainer (void)
const FieldContainerPtr & getFieldContainer (void) const
UInt32 getFieldId (void) const
UInt32 getAspect (void) const
Field * getFieldPtr (void)
const Field * getFieldPtr (void) const

Private Types

typedef QFieldValueLabelBase Inherited

Private Member Functions

void updateCache (void)

Private Attributes

QString _strCachedValues [16]
QSize _cachedSize
bool _bCacheValid


Detailed Description

template<class MatrixTypeT>
class osg::QMatrixFieldValueLabel< MatrixTypeT >

Definition at line 54 of file OSGQMatrixFieldValueLabel.h.


Member Typedef Documentation

template<class MatrixTypeT>
typedef MatrixTypeT osg::QMatrixFieldValueLabel< MatrixTypeT >::MatrixType

Definition at line 58 of file OSGQMatrixFieldValueLabel.h.

template<class MatrixTypeT>
typedef MatrixTypeT::ValueType osg::QMatrixFieldValueLabel< MatrixTypeT >::ValueType

Definition at line 59 of file OSGQMatrixFieldValueLabel.h.

template<class MatrixTypeT>
typedef QFieldValueLabelBase osg::QMatrixFieldValueLabel< MatrixTypeT >::Inherited [private]

Definition at line 81 of file OSGQMatrixFieldValueLabel.h.


Constructor & Destructor Documentation

template<class MatrixTypeT>
osg::QMatrixFieldValueLabel< MatrixTypeT >::QMatrixFieldValueLabel ( QFieldViewBase *  pView,
UInt32  uiIndex 
) [inline]

Definition at line 57 of file OSGQMatrixFieldValueLabel.inl.

00059     : Inherited   (pView, uiIndex),
00060       _cachedSize (              ),
00061       _bCacheValid(false         )
00062 {
00063 }

template<class MatrixTypeT>
osg::QMatrixFieldValueLabel< MatrixTypeT >::~QMatrixFieldValueLabel ( void   )  [inline, virtual]

Definition at line 66 of file OSGQMatrixFieldValueLabel.inl.

00067 {
00068 }


Member Function Documentation

template<class MatrixTypeT>
QFieldValueLabelBase * osg::QMatrixFieldValueLabel< MatrixTypeT >::create ( QFieldViewBase *  pView,
UInt32  uiIndex 
) [inline, static]

Definition at line 72 of file OSGQMatrixFieldValueLabel.inl.

00074 {
00075     return (new QMatrixFieldValueLabel<MatrixType>(pView, uiIndex));
00076 }

template<class MatrixTypeT>
void osg::QMatrixFieldValueLabel< MatrixTypeT >::paint ( QPainter *  pPainter,
const QColorGroup &  colGrp,
const QRect &  rect 
) [inline, virtual]

Implements osg::QFieldValueLabelBase.

Definition at line 80 of file OSGQMatrixFieldValueLabel.inl.

References osg::QMatrixFieldValueLabel< MatrixTypeT >::getCachedValue().

00082 {
00083     QRect drawRect(0, 0, rect.width()/4, rect.height()/4);
00084 
00085     pPainter->save();
00086 
00087     pPainter->setBrush(colGrp.base());
00088 
00089     pPainter->translate(rect.x(), rect.y());
00090 
00091     for(UInt32 row = 0; row < 4; ++row)
00092     {
00093         pPainter->save();
00094 
00095         for(UInt32 col = 0; col < 4; ++col)
00096         {
00097             pPainter->setPen  (colGrp.background());
00098             pPainter->drawRect(drawRect           );
00099             pPainter->setPen  (colGrp.text()      );
00100 
00101             pPainter->drawText (drawRect, AlignVCenter, 
00102                                 getCachedValue(row, col));
00103             pPainter->translate(rect.width()/4, 0       );
00104         }
00105         
00106         pPainter->restore  (                    );
00107         pPainter->translate(0, rect.height() / 4);
00108     }
00109 
00110     pPainter->restore();
00111 }

template<class MatrixTypeT>
QSize osg::QMatrixFieldValueLabel< MatrixTypeT >::sizeHint ( void   )  [inline, virtual]

Implements osg::QFieldValueLabelBase.

Definition at line 115 of file OSGQMatrixFieldValueLabel.inl.

References osg::QMatrixFieldValueLabel< MatrixTypeT >::getCachedSize().

00116 {
00117     return QSize(getCachedSize().width()  + 8,
00118                  getCachedSize().height() + 8 );
00119 }

template<class MatrixTypeT>
QSize osg::QMatrixFieldValueLabel< MatrixTypeT >::minimumSizeHint ( void   )  [inline, virtual]

Implements osg::QFieldValueLabelBase.

Definition at line 123 of file OSGQMatrixFieldValueLabel.inl.

References osg::QMatrixFieldValueLabel< MatrixTypeT >::getCachedSize().

00124 {
00125     return getCachedSize();
00126 }

template<class MatrixTypeT>
void osg::QMatrixFieldValueLabel< MatrixTypeT >::valueChanged ( void   )  [inline, virtual]

Implements osg::QFieldValueLabelBase.

Definition at line 130 of file OSGQMatrixFieldValueLabel.inl.

References osg::QMatrixFieldValueLabel< MatrixTypeT >::_bCacheValid.

00131 {
00132     _bCacheValid = false;
00133 }

template<class MatrixTypeT>
const QString & osg::QMatrixFieldValueLabel< MatrixTypeT >::getCachedValue ( UInt32  uiRow,
UInt32  uiCol 
) [inline, protected]

template<class MatrixTypeT>
const QSize & osg::QMatrixFieldValueLabel< MatrixTypeT >::getCachedSize ( void   )  [inline, protected]

template<class MatrixTypeT>
void osg::QMatrixFieldValueLabel< MatrixTypeT >::updateCache ( void   )  [inline, private]

Definition at line 155 of file OSGQMatrixFieldValueLabel.inl.

References osg::QMatrixFieldValueLabel< MatrixTypeT >::_bCacheValid, osg::QMatrixFieldValueLabel< MatrixTypeT >::_cachedSize, osg::QMatrixFieldValueLabel< MatrixTypeT >::_strCachedValues, osg::endLog(), osg::QFieldValueLabelBase::getFieldPtr(), osg::QFieldValueLabelBase::getFieldView(), osg::QFieldValueLabelBase::getIndex(), osg::SField< FieldTypeT, fieldNameSpace >::getValue(), osg::osgMax(), osg::FieldType::SINGLE_FIELD, and SWARNING.

Referenced by osg::QMatrixFieldValueLabel< MatrixTypeT >::getCachedSize(), and osg::QMatrixFieldValueLabel< MatrixTypeT >::getCachedValue().

00156 {
00157     typedef TypeTraits<ValueType> TTraits;
00158 
00159     if(_bCacheValid)
00160         return;
00161 
00162     if(getIndex() >= getFieldPtr()->getSize())
00163     {
00164         SWARNING << "QMatrixFieldValueLabel<>::updateCache(): "
00165                  << "getIndex >= getFieldPtr()->getSize()" << endLog;
00166 
00167         for(UInt32 i = 0; i < 16; ++i)
00168         {
00169             _strCachedValues[i] = "";
00170         }
00171 
00172         _cachedSize.setWidth (4 * 10                                );
00173         _cachedSize.setHeight(getFieldView()->fontMetrics().height());
00174         
00175         _bCacheValid = true;
00176 
00177         return;
00178     }
00179 
00180     Int32 widthOfCol [4] = { 0, 0, 0, 0 };
00181 
00182     if(getFieldPtr()->getCardinality() == FieldType::SINGLE_FIELD)
00183     {
00184         SField<MatrixType> *pSF =
00185             dynamic_cast<SField<MatrixType> *>(getFieldPtr());
00186 
00187         for(UInt32 row = 0; row < 4; ++row)
00188         {
00189             for(UInt32 col = 0; col < 4; ++col)
00190             {
00191                 _strCachedValues[4 * row + col] =
00192                     TTraits::putToString(
00193                         pSF->getValue().getValues()[4 * col + row]
00194                                         ).c_str();
00195 
00196                 widthOfCol[col] = osgMax(widthOfCol[col], 
00197                                          getFieldView()->fontMetrics().width(
00198                                              _strCachedValues[4 * row + col]));
00199             }
00200         }
00201     }
00202     else
00203     {
00204         MField<MatrixType> *pMF =
00205             dynamic_cast<MField<MatrixType> *>(getFieldPtr());
00206 
00207        for(UInt32 row = 0; row < 4; ++row)
00208         {
00209             for(UInt32 col = 0; col < 4; ++col)
00210             {
00211                 _strCachedValues[4 * row + col] =
00212                     TTraits::putToString(
00213                         (*pMF)[getIndex()].getValues()[4 * col + row]
00214                                         ).c_str();
00215 
00216                 widthOfCol[col] = osgMax(widthOfCol[col], 
00217                                          getFieldView()->fontMetrics().width(
00218                                              _strCachedValues[4 * row + col]));
00219             }
00220         } 
00221     }
00222 
00223     _cachedSize.setWidth (    widthOfCol[0] + widthOfCol[1] +
00224                               widthOfCol[2] + widthOfCol[3]         );
00225     _cachedSize.setHeight(4 * getFieldView()->fontMetrics().height());
00226     
00227     _bCacheValid = true;
00228 }

void QFieldValueLabelBase::setIndex ( UInt32  uiIndex  )  [inherited]

Definition at line 81 of file OSGQFieldValueLabel.cpp.

References osg::QFieldValueLabelBase::_uiIndex, and osg::QFieldValueLabelBase::valueChanged().

Referenced by osg::QMFieldView::acquireLabel().

00082 {
00083     _uiIndex = uiIndex;
00084 
00085     valueChanged();
00086 }

UInt32 osg::QFieldValueLabelBase::getIndex ( void   )  const [inline, inherited]

QFieldViewBase * osg::QFieldValueLabelBase::getFieldView ( void   )  [inline, protected, inherited]

const QFieldViewBase * osg::QFieldValueLabelBase::getFieldView ( void   )  const [inline, protected, inherited]

Definition at line 58 of file OSGQFieldValueLabel.inl.

References osg::QFieldValueLabelBase::_pView.

00059 {
00060     return _pView;
00061 }

FieldContainerPtr & osg::QFieldValueLabelBase::getFieldContainer ( void   )  [inline, protected, inherited]

Definition at line 64 of file OSGQFieldValueLabel.inl.

References osg::QFieldValueLabelBase::_pView, and osg::QFieldViewBase::getFieldContainer().

00065 {
00066     return _pView->getFieldContainer();
00067 }

const FieldContainerPtr & osg::QFieldValueLabelBase::getFieldContainer ( void   )  const [inline, protected, inherited]

Definition at line 70 of file OSGQFieldValueLabel.inl.

References osg::QFieldValueLabelBase::_pView, and osg::QFieldViewBase::getFieldContainer().

00071 {
00072     return _pView->getFieldContainer();
00073 }

UInt32 osg::QFieldValueLabelBase::getFieldId ( void   )  const [inline, protected, inherited]

Definition at line 76 of file OSGQFieldValueLabel.inl.

References osg::QFieldValueLabelBase::_pView, and osg::QFieldViewBase::getFieldId().

00077 {
00078     return _pView->getFieldId();
00079 }

UInt32 osg::QFieldValueLabelBase::getAspect ( void   )  const [inline, protected, inherited]

Definition at line 82 of file OSGQFieldValueLabel.inl.

References osg::QFieldValueLabelBase::_pView, and osg::QFieldViewBase::getAspect().

00083 {
00084     return _pView->getAspect();
00085 }

Field * osg::QFieldValueLabelBase::getFieldPtr ( void   )  [inline, protected, inherited]

const Field * osg::QFieldValueLabelBase::getFieldPtr ( void   )  const [inline, protected, inherited]

Definition at line 94 of file OSGQFieldValueLabel.inl.

References osg::QFieldValueLabelBase::_pView, and osg::QFieldViewBase::getFieldPtr().

00095 {
00096     return _pView->getFieldPtr();
00097 }


Member Data Documentation

template<class MatrixTypeT>
QString osg::QMatrixFieldValueLabel< MatrixTypeT >::_strCachedValues[16] [private]

template<class MatrixTypeT>
QSize osg::QMatrixFieldValueLabel< MatrixTypeT >::_cachedSize [private]

template<class MatrixTypeT>
bool osg::QMatrixFieldValueLabel< MatrixTypeT >::_bCacheValid [private]


The documentation for this class was generated from the following files:

Generated on Mon Mar 17 12:26:17 2008 for OpenSG by  doxygen 1.5.5