Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

osg::QMFieldView Class Reference

QT Widget to display an OpenSG MField.

#include <OSGQFieldView_qt.h>

Inheritance diagram for osg::QMFieldView:

osg::QFieldViewBase List of all members.

Public Slots

virtual void beginEdit (UInt32 uiIndex)
virtual void endEdit (void)

Signals

void clicked (FieldContainerPtr pFC, UInt32 uiFieldId, UInt32 uiIndex, ButtonState button)
void doubleClicked (FieldContainerPtr pFC, UInt32 uiFieldId, UInt32 uiIndex, ButtonState button)

Public Member Functions

 QMFieldView (FieldContainerPtr pFC, UInt32 uiFieldId, UInt32 uiAspect, QWidget *parent, const char *name=NULL)
virtual ~QMFieldView (void)
virtual void setAll (FieldContainerPtr pFC, UInt32 uiFieldId, UInt32 uiAspect)
virtual void setFieldContainer (FieldContainerPtr pFC)
virtual void setFieldId (UInt32 uiFieldId)
virtual void setAspect (UInt32 uiAspect)
virtual QSize sizeHint (void) const
virtual QSize minimumSizeHint (void) const
virtual QSizePolicy sizePolicy (void) const
FieldContainerPtrgetFieldContainer (void)
const FieldContainerPtrgetFieldContainer (void) const
UInt32 getFieldId (void) const
UInt32 getAspect (void) const
FieldgetFieldPtr (void)
const FieldgetFieldPtr (void) const

Protected Slots

virtual void onEditorDone (void)
virtual void onFieldUpdated (UInt32 uiIndex)
void onSBValueChanged (int value)

Protected Member Functions

virtual void paintEvent (QPaintEvent *pEvent)
virtual void resizeEvent (QResizeEvent *pEvent)
virtual void wheelEvent (QWheelEvent *pEvent)
virtual void mousePressEvent (QMouseEvent *pEvent)
virtual void mouseDoubleClickEvent (QMouseEvent *pEvent)

Private Types

typedef QFieldViewBase Inherited
typedef std::list< QFieldValueLabelBase * > PoolLabelList
typedef std::list< QFieldValueLabelBase
* >::iterator 
PoolLabelListIt
typedef std::map< UInt32,
LabelInfo
IndexLabelMap
typedef std::map< UInt32,
LabelInfo >::iterator 
IndexLabelMapIt
typedef std::map< UInt32,
LabelInfo >::const_iterator 
IndexLabelMapConstIt

Private Member Functions

void initSelf (void)
void initScrollbar (void)
UInt32 pointToIndex (const QPoint &pos, bool &bValid)
QFieldValueLabelBaseacquireLabel (UInt32 uiIndex)
void releaseLabel (QFieldValueLabelBase *pLabel)
void releaseAllLabels (void)
void deleteAllLabels (void)
void redrawUnchanged (QPaintEvent *pEvent, QPainter *pPainter)
void redrawChanged (QPaintEvent *pEvent, QPainter *pPainter)

Private Attributes

QScrollBar * _pScrollbar
QFieldEditorBase_pEditor
PoolLabelList _poolLabels
IndexLabelMap _usedLabels
bool _bContentsChanged
UInt32 _uiBeginIndex
UInt32 _uiEndIndex

Classes

class  LabelInfo

Detailed Description

Definition at line 178 of file OSGQFieldView_qt.h.


Member Typedef Documentation

typedef QFieldViewBase osg::QMFieldView::Inherited [private]
 

Reimplemented from osg::QFieldViewBase.

Definition at line 220 of file OSGQFieldView_qt.h.

typedef std::list<QFieldValueLabelBase *> osg::QMFieldView::PoolLabelList [private]
 

Definition at line 242 of file OSGQFieldView_qt.h.

typedef std::list<QFieldValueLabelBase *>::iterator osg::QMFieldView::PoolLabelListIt [private]
 

Definition at line 243 of file OSGQFieldView_qt.h.

typedef std::map<UInt32, LabelInfo> osg::QMFieldView::IndexLabelMap [private]
 

Definition at line 245 of file OSGQFieldView_qt.h.

typedef std::map<UInt32, LabelInfo>::iterator osg::QMFieldView::IndexLabelMapIt [private]
 

Definition at line 246 of file OSGQFieldView_qt.h.

typedef std::map<UInt32, LabelInfo>::const_iterator osg::QMFieldView::IndexLabelMapConstIt [private]
 

Definition at line 247 of file OSGQFieldView_qt.h.


Constructor & Destructor Documentation

QMFieldView::QMFieldView FieldContainerPtr  pFC,
UInt32  uiFieldId,
UInt32  uiAspect,
QWidget *  parent,
const char *  name = NULL
 

Definition at line 308 of file OSGQFieldView_qt.cpp.

References _pScrollbar, initScrollbar(), initSelf(), and onSBValueChanged().

00312     : Inherited        (pFC, uiFieldId, uiAspect, parent, name),
00313       _pScrollbar      (NULL                                  ),
00314       _pEditor         (NULL                                  ),
00315       _poolLabels      (                                      ),
00316       _usedLabels      (                                      ),
00317       _bContentsChanged(true                                  ),
00318       _uiBeginIndex    (0                                     ),
00319       _uiEndIndex      (0                                     )
00320 {
00321     initSelf     ();
00322     initScrollbar();
00323 
00324     connect(_pScrollbar, SIGNAL(valueChanged(int)),
00325             this,        SLOT  (onSBValueChanged(int)));
00326 }

QMFieldView::~QMFieldView void   )  [virtual]
 

Definition at line 328 of file OSGQFieldView_qt.cpp.

References deleteAllLabels(), and endEdit().

00329 {
00330     endEdit();
00331 
00332     deleteAllLabels();
00333 }


Member Function Documentation

void QMFieldView::setAll FieldContainerPtr  pFC,
UInt32  uiFieldId,
UInt32  uiAspect
[virtual]
 

Reimplemented from osg::QFieldViewBase.

Definition at line 336 of file OSGQFieldView_qt.cpp.

References _bContentsChanged, _pEditor, deleteAllLabels(), endEdit(), initScrollbar(), initSelf(), and osg::QFieldViewBase::setAll().

00337 {
00338     endEdit();
00339 
00340     deleteAllLabels();
00341     delete _pEditor;
00342 
00343     Inherited::setAll(pFC, uiFieldId, uiAspect);
00344 
00345     initSelf     ();
00346     initScrollbar();
00347     
00348     _bContentsChanged = true;
00349 }

void QMFieldView::setFieldContainer FieldContainerPtr  pFC  )  [virtual]
 

Reimplemented from osg::QFieldViewBase.

Definition at line 352 of file OSGQFieldView_qt.cpp.

References _bContentsChanged, _pEditor, deleteAllLabels(), endEdit(), osg::QFieldViewBase::getFieldContainer(), initScrollbar(), initSelf(), and osg::QFieldViewBase::setFieldContainer().

00353 {
00354     if(pFC == getFieldContainer())
00355         return;
00356 
00357     endEdit();
00358 
00359     deleteAllLabels();
00360     delete _pEditor;
00361 
00362     Inherited::setFieldContainer(pFC);
00363 
00364     initSelf     ();
00365     initScrollbar();
00366 
00367     _bContentsChanged = true;
00368 }

void QMFieldView::setFieldId UInt32  uiFieldId  )  [virtual]
 

Reimplemented from osg::QFieldViewBase.

Definition at line 371 of file OSGQFieldView_qt.cpp.

References _bContentsChanged, _pEditor, deleteAllLabels(), endEdit(), osg::QFieldViewBase::getFieldId(), initScrollbar(), initSelf(), and osg::QFieldViewBase::setFieldId().

00372 {
00373     if(uiFieldId == getFieldId())
00374         return;
00375 
00376     endEdit();
00377 
00378     deleteAllLabels();
00379     delete _pEditor;
00380 
00381     Inherited::setFieldId(uiFieldId);
00382 
00383     initSelf     ();
00384     initScrollbar();
00385 
00386     _bContentsChanged = true;
00387 }

void QMFieldView::setAspect UInt32  uiAspect  )  [virtual]
 

Reimplemented from osg::QFieldViewBase.

Definition at line 390 of file OSGQFieldView_qt.cpp.

References _bContentsChanged, _pEditor, deleteAllLabels(), endEdit(), osg::QFieldViewBase::getAspect(), initScrollbar(), initSelf(), and osg::QFieldViewBase::setAspect().

00391 {
00392     if(uiAspect == getAspect())
00393         return;
00394 
00395     endEdit();
00396 
00397     deleteAllLabels();
00398     delete _pEditor;
00399 
00400     Inherited::setAspect(uiAspect);
00401 
00402     initSelf     ();
00403     initScrollbar();
00404 
00405     _bContentsChanged = true;
00406 }

QSize QMFieldView::sizeHint void   )  const [virtual]
 

Implements osg::QFieldViewBase.

Definition at line 409 of file OSGQFieldView_qt.cpp.

References _pScrollbar, _usedLabels, osg::QFieldLabelFactory::createLabel(), osg::QFieldViewBase::getFieldPtr(), osg::osgMax(), osg::QFieldValueLabelBase::sizeHint(), and osg::QFieldLabelFactory::the().

Referenced by minimumSizeHint().

00410 {
00411     QMFieldView          *pThis         = const_cast<QMFieldView *>(this);
00412     QFieldValueLabelBase *pLabel;
00413     QSize                 labelSize( 0,  0);
00414     QSize                 retSize  (10, 10);
00415     bool                  bReleaseLabel = false;
00416 
00417     if(_usedLabels.size() != 0)
00418     {
00419         pLabel = (*_usedLabels.begin()).second.getLabel();
00420     }
00421     else
00422     {
00423         pLabel        = QFieldLabelFactory::the().createLabel(pThis, 0);
00424         bReleaseLabel = true;
00425     }
00426 
00427     labelSize = pLabel->sizeHint();
00428 
00429     retSize.setHeight(
00430         osgMin<UInt32>(5, getFieldPtr()->getSize()) * labelSize.height());
00431 
00432     retSize.setWidth(
00433         osgMax(retSize.width(), labelSize.width() + _pScrollbar->width()));
00434 
00435     
00436     retSize.setWidth (osgMax(retSize.width(),  10*fontMetrics().width("W")));
00437     
00438     retSize.setHeight(osgMax(retSize.height(),    fontMetrics().height()  ));
00439 
00440     if(bReleaseLabel)
00441         delete pLabel;
00442 
00443     return retSize;
00444 }

QSize QMFieldView::minimumSizeHint void   )  const [virtual]
 

Implements osg::QFieldViewBase.

Definition at line 447 of file OSGQFieldView_qt.cpp.

References sizeHint().

00448 {
00449     return sizeHint();
00450 }

QSizePolicy QMFieldView::sizePolicy void   )  const [virtual]
 

Implements osg::QFieldViewBase.

Definition at line 453 of file OSGQFieldView_qt.cpp.

00454 {
00455     return QSizePolicy(QSizePolicy::MinimumExpanding, 
00456                        QSizePolicy::MinimumExpanding );
00457 }

void QMFieldView::beginEdit UInt32  uiIndex  )  [virtual, slot]
 

Implements osg::QFieldViewBase.

Definition at line 460 of file OSGQFieldView_qt.cpp.

References _pEditor, osg::QFieldEditorBase::activate(), endEdit(), osg::QFieldViewBase::getFieldPtr(), osg::Field::getSize(), and osg::QFieldEditorBase::setIndex().

00461 {
00462     if(uiIndex >= getFieldPtr()->getSize())
00463         return;
00464 
00465     endEdit();
00466 
00467     _pEditor->setIndex(uiIndex);
00468     _pEditor->activate(       );
00469 
00470     update();
00471 }

void QMFieldView::endEdit void   )  [virtual, slot]
 

Implements osg::QFieldViewBase.

Definition at line 474 of file OSGQFieldView_qt.cpp.

References _pEditor, osg::QFieldEditorBase::deactivate(), and osg::QFieldEditorBase::getActive().

Referenced by beginEdit(), onEditorDone(), setAll(), setAspect(), setFieldContainer(), setFieldId(), and ~QMFieldView().

00475 {
00476     if(_pEditor && _pEditor->getActive())
00477         _pEditor->deactivate();
00478 
00479     update();
00480 }

void QMFieldView::paintEvent QPaintEvent *  pEvent  )  [protected, virtual]
 

Implements osg::QFieldViewBase.

Definition at line 483 of file OSGQFieldView_qt.cpp.

References _bContentsChanged, osg::endLog(), redrawChanged(), redrawUnchanged(), and SNOTICE.

00484 {
00485     SNOTICE << "QMFieldView::paintEvent()" << endLog;
00486 
00487     QPainter painter;
00488 
00489     painter.begin(this);
00490 
00491     if(_bContentsChanged)
00492         redrawChanged  (pEvent, &painter);
00493     else
00494         redrawUnchanged(pEvent, &painter);
00495 
00496     painter.end();
00497 }

void QMFieldView::resizeEvent QResizeEvent *  pEvent  )  [protected, virtual]
 

Definition at line 500 of file OSGQFieldView_qt.cpp.

References _bContentsChanged, and _pScrollbar.

00501 {
00502 //    SNOTICE << "QMFieldView::resizeEvent()" << endLog;
00503 
00504     _bContentsChanged = true;
00505 
00506     _pScrollbar->setGeometry(
00507         width() - _pScrollbar->sizeHint().width(), 0,
00508         _pScrollbar->sizeHint().width(),           height());
00509 
00510 //    _pScrollbar->move  (width()-_pScrollbar->sizeHint().width(), 0);
00511 //    _pScrollbar->resize(_pScrollbar->sizeHint().width(),height()); 
00512 }

void QMFieldView::wheelEvent QWheelEvent *  pEvent  )  [protected, virtual]
 

Definition at line 515 of file OSGQFieldView_qt.cpp.

References _pScrollbar.

00516 {
00517     if(_pScrollbar->isEnabled())
00518     {
00519         _pScrollbar->setValue(
00520             static_cast<int>(-pEvent->delta() / 60) + _pScrollbar->value());
00521     }
00522 }

void QMFieldView::mousePressEvent QMouseEvent *  pEvent  )  [protected, virtual]
 

Definition at line 525 of file OSGQFieldView_qt.cpp.

References osg::QFieldViewBase::clicked(), osg::QFieldViewBase::getFieldContainer(), osg::QFieldViewBase::getFieldId(), osg::QFieldViewBase::getFieldPtr(), osg::Field::getSize(), and pointToIndex().

00526 {
00527     bool   bValid  = false;
00528     UInt32 uiIndex = pointToIndex(pEvent->pos(), bValid);
00529     
00530     if(bValid && (uiIndex < getFieldPtr()->getSize()))
00531     {
00532         emit clicked(getFieldContainer(), getFieldId(),
00533                      uiIndex,             pEvent->button());
00534     }
00535 }

void QMFieldView::mouseDoubleClickEvent QMouseEvent *  pEvent  )  [protected, virtual]
 

Definition at line 538 of file OSGQFieldView_qt.cpp.

References osg::QFieldViewBase::doubleClicked(), osg::QFieldViewBase::getFieldContainer(), osg::QFieldViewBase::getFieldId(), osg::QFieldViewBase::getFieldPtr(), osg::Field::getSize(), and pointToIndex().

00539 {
00540     bool   bValid  = false;
00541     UInt32 uiIndex = pointToIndex(pEvent->pos(), bValid);
00542 
00543     if(bValid && (uiIndex < getFieldPtr()->getSize()))
00544     {
00545         emit doubleClicked(getFieldContainer(), getFieldId(), 
00546                            uiIndex,             pEvent->button());
00547     }
00548 }

void QMFieldView::onEditorDone void   )  [protected, virtual, slot]
 

Implements osg::QFieldViewBase.

Definition at line 551 of file OSGQFieldView_qt.cpp.

References endEdit().

Referenced by initSelf().

00552 {
00553     endEdit();
00554 }

void QMFieldView::onFieldUpdated UInt32  uiIndex  )  [protected, virtual, slot]
 

Implements osg::QFieldViewBase.

Definition at line 557 of file OSGQFieldView_qt.cpp.

References _usedLabels.

Referenced by initSelf().

00558 {
00559     IndexLabelMapIt iterLabel = _usedLabels.find(uiIndex);
00560 
00561     if(iterLabel != _usedLabels.end())
00562         (*iterLabel).second.getLabel()->valueChanged();
00563 }

void QMFieldView::onSBValueChanged int  value  )  [protected, slot]
 

Definition at line 566 of file OSGQFieldView_qt.cpp.

References _bContentsChanged.

Referenced by QMFieldView().

00567 {
00568     _bContentsChanged = true;
00569     
00570     update();
00571 }

void QMFieldView::initSelf void   )  [private]
 

Definition at line 574 of file OSGQFieldView_qt.cpp.

References _pEditor, osg::QFieldEditorFactory::createEditor(), onEditorDone(), onFieldUpdated(), and osg::QFieldEditorFactory::the().

Referenced by QMFieldView(), setAll(), setAspect(), setFieldContainer(), and setFieldId().

00575 {
00576     _pEditor = QFieldEditorFactory::the().createEditor(
00577         this, "QMFieldView::_pEditor");
00578 
00579     connect(_pEditor, SIGNAL(editorDone    (void  )),
00580             this,     SLOT  (onEditorDone  (void  )));
00581 
00582     connect(_pEditor, SIGNAL(fieldUpdated  (UInt32)),
00583             this,     SLOT  (onFieldUpdated(UInt32)));
00584 }

void QMFieldView::initScrollbar void   )  [private]
 

Definition at line 587 of file OSGQFieldView_qt.cpp.

References _pScrollbar, osg::QFieldViewBase::getFieldPtr(), and osg::Field::getSize().

Referenced by QMFieldView(), setAll(), setAspect(), setFieldContainer(), and setFieldId().

00588 {
00589     if(_pScrollbar == NULL)
00590     {
00591         _pScrollbar = new QScrollBar(Vertical, this, 
00592                                      "QMFieldView::_pScrollbar");
00593     }
00594 
00595     _pScrollbar->setGeometry(
00596         width()-_pScrollbar->sizeHint().width(), 0,
00597         _pScrollbar->sizeHint().width(),         height());
00598 
00599     if(getFieldPtr()->getSize() <= 2)
00600     {
00601         _pScrollbar->hide       ( );
00602         _pScrollbar->setMinValue(0);
00603         _pScrollbar->setMaxValue(0);
00604     }
00605     else
00606     {
00607         _pScrollbar->show       (                            );
00608         _pScrollbar->setMinValue(0                           );
00609         _pScrollbar->setMaxValue(2*getFieldPtr()->getSize()-2);
00610     }
00611 }

UInt32 QMFieldView::pointToIndex const QPoint &  pos,
bool &  bValid
[private]
 

Definition at line 614 of file OSGQFieldView_qt.cpp.

References _usedLabels.

Referenced by mouseDoubleClickEvent(), and mousePressEvent().

00615 {
00616     IndexLabelMapIt iter = _usedLabels.begin();
00617     IndexLabelMapIt end  = _usedLabels.end();
00618 
00619     for(; iter != end; ++iter)
00620     {
00621         if( ((*iter).second.getRect().top()     <= pos.y()) &&
00622             ((*iter).second.getRect().bottom()  >= pos.y())   )
00623         {
00624             bValid = true;
00625 
00626             return (*iter).first;
00627         }
00628     }
00629 
00630     bValid = false;
00631 
00632     return 0;
00633 }

QFieldValueLabelBase * QMFieldView::acquireLabel UInt32  uiIndex  )  [private]
 

Definition at line 636 of file OSGQFieldView_qt.cpp.

References _poolLabels, _usedLabels, osg::QFieldLabelFactory::createLabel(), osg::endLog(), osg::QFieldValueLabelBase::getIndex(), PNOTICE, osg::QFieldValueLabelBase::setIndex(), SNOTICE, and osg::QFieldLabelFactory::the().

Referenced by redrawChanged().

00637 {
00638     SNOTICE << "QMFieldView::acquireLabel(" << uiIndex << ")\n";
00639 
00640     QFieldValueLabelBase *retVal    = 0;
00641 
00642     IndexLabelMapIt       iterLabel = _usedLabels.find(uiIndex);
00643 
00644     if(iterLabel != _usedLabels.end())
00645     {
00646         PNOTICE << "from usedLabels: " << iterLabel->second.getLabel()
00647                 << endLog;
00648         
00649         return iterLabel->second.getLabel();
00650     }
00651 
00652     if(!_poolLabels.empty())
00653     {
00654         retVal = _poolLabels.back    ();
00655         
00656         _poolLabels.pop_back();
00657 
00658         PNOTICE << "from pool: " << retVal 
00659                 << "was index "  << retVal->getIndex()
00660                 << endLog;         
00661 
00662         retVal->setIndex(uiIndex);
00663 
00664         return retVal;
00665     }
00666     
00667     retVal = QFieldLabelFactory::the().createLabel(this, uiIndex);
00668 
00669     PNOTICE << "from factory: " << retVal << endLog;
00670 
00671     return retVal;
00672 }

void QMFieldView::releaseLabel QFieldValueLabelBase pLabel  )  [private]
 

Definition at line 675 of file OSGQFieldView_qt.cpp.

References _poolLabels, _usedLabels, osg::endLog(), osg::QFieldValueLabelBase::getIndex(), SNOTICE, and SWARNING.

Referenced by redrawChanged().

00676 {
00677     SNOTICE << "QMFieldView::releaseLabel(" << pLabel << ") "
00678             << "index : "                   << pLabel->getIndex()
00679             << endLog;
00680 
00681     IndexLabelMapIt iterLabel = _usedLabels.find(pLabel->getIndex());
00682 
00683     if(iterLabel == _usedLabels.end())
00684     {
00685         SWARNING << "QMFieldView::releaseLabel: pLabel is not used." 
00686                  << endLog;
00687         return;
00688     }
00689 
00690     _usedLabels.erase    (iterLabel);
00691     _poolLabels.push_back(pLabel   );
00692 }

void QMFieldView::releaseAllLabels void   )  [private]
 

Definition at line 695 of file OSGQFieldView_qt.cpp.

References _poolLabels, and _usedLabels.

Referenced by redrawChanged().

00696 {
00697     QFieldValueLabelBase *pLabel;
00698     IndexLabelMapIt       iter = _usedLabels.begin();
00699     IndexLabelMapIt       end  = _usedLabels.end();
00700 
00701     for(; iter != end; ++iter)
00702     {
00703         pLabel = (*iter).second.getLabel();
00704         _poolLabels.push_back(pLabel);
00705     }
00706     _usedLabels.clear();
00707 }

void QMFieldView::deleteAllLabels void   )  [private]
 

Definition at line 710 of file OSGQFieldView_qt.cpp.

References _poolLabels, _usedLabels, osg::endLog(), osg::QFieldValueLabelBase::getIndex(), PNOTICE, and SNOTICE.

Referenced by setAll(), setAspect(), setFieldContainer(), setFieldId(), and ~QMFieldView().

00711 {
00712     SNOTICE << "QMFieldView::deleteAllLabels():\n";
00713 
00714     QFieldValueLabelBase *pLabel;
00715 
00716     IndexLabelMapIt       usedIter = _usedLabels.begin();
00717     IndexLabelMapIt       usedEnd  = _usedLabels.end();
00718 
00719     PNOTICE << "used <" << _usedLabels.size() << "> ";
00720 
00721     for(; usedIter != usedEnd; ++usedIter)
00722     {
00723         pLabel = (*usedIter).second.getLabel();
00724 
00725         PNOTICE << " iter.first: "       << (*usedIter).first
00726                 << " pLabel->getIndex() " << pLabel->getIndex()
00727                 << " pLabel "            << pLabel
00728                 << "\n";
00729         delete pLabel;
00730     }
00731     _usedLabels.clear();
00732 
00733     PoolLabelListIt poolIter = _poolLabels.begin();
00734     PoolLabelListIt poolEnd  = _poolLabels.end();
00735     
00736     PNOTICE << "pool <" << _poolLabels.size() << "> ";
00737 
00738     for(; poolIter != poolEnd; ++poolIter)
00739     {
00740         pLabel = *poolIter;
00741 
00742         PNOTICE << " pLabel->getIndex() " << pLabel->getIndex()
00743                 << " pLabel "            << pLabel
00744                 << "\n";
00745 
00746         delete pLabel;
00747     }
00748 
00749     _poolLabels.clear();
00750 
00751     PNOTICE << endLog;
00752 }

void QMFieldView::redrawUnchanged QPaintEvent *  pEvent,
QPainter *  pPainter
[private]
 

Definition at line 755 of file OSGQFieldView_qt.cpp.

References _usedLabels, osg::endLog(), and SNOTICE.

Referenced by paintEvent().

00756 {
00757     SNOTICE << "QMFieldView::redrawUnchanged()" << endLog;
00758 
00759     IndexLabelMapIt begin = _usedLabels.begin();
00760     IndexLabelMapIt end   = _usedLabels.end();
00761 
00762     for(; begin != end; ++begin)
00763     {
00764         pPainter->setClipRect(
00765             (*begin).second.getRect().intersect(pEvent->rect()));
00766 
00767         (*begin).second.getLabel()->paint(
00768             pPainter, palette().active(), (*begin).second.getRect());
00769     }
00770 }

void QMFieldView::redrawChanged QPaintEvent *  pEvent,
QPainter *  pPainter
[private]
 

Definition at line 773 of file OSGQFieldView_qt.cpp.

References _bContentsChanged, _pScrollbar, _uiBeginIndex, _uiEndIndex, _usedLabels, acquireLabel(), osg::endLog(), osg::QFieldViewBase::getFieldPtr(), osg::QFieldValueLabelBase::getIndex(), osg::Field::getSize(), osg::osgMin(), osg::QFieldValueLabelBase::paint(), releaseAllLabels(), releaseLabel(), osg::QFieldValueLabelBase::sizeHint(), and SNOTICE.

Referenced by paintEvent().

00774 {
00775     SNOTICE << "QMFieldView::redrawChanged()" << endLog;
00776 
00777     UInt32                currIndex;
00778     Int32                 drawTop;
00779 
00780     QRect                 drawRect;
00781     QSize                 drawSize;
00782 
00783     bool                  doneDraw = false;
00784 
00785     QFieldValueLabelBase *pLabel;
00786 
00787     _uiBeginIndex = _pScrollbar->value()/2;
00788     _uiEndIndex   = _uiBeginIndex;
00789     currIndex     = _uiBeginIndex;
00790 
00791     if(_uiBeginIndex >= getFieldPtr()->getSize())
00792     {
00793         releaseAllLabels();
00794         return;
00795     }
00796 
00797     pLabel   = acquireLabel   (_uiEndIndex++);
00798     drawSize = pLabel->sizeHint(             );
00799     drawTop  = ((_pScrollbar->value() % 2) == 0) ? 0 : -drawSize.height()/2;
00800 
00801     drawRect = QRect(0, drawTop,
00802                      width()-_pScrollbar->width(), 
00803                      osgMin(drawSize.height(), height()            ) );
00804 
00805     while(!doneDraw)
00806     {
00807         pPainter->setClipRect(drawRect.intersect(pEvent->rect()));
00808 
00809         pLabel->paint(pPainter, palette().active(), drawRect);
00810         
00811         _usedLabels[currIndex].setLabel(pLabel  );
00812         _usedLabels[currIndex].setRect (drawRect);
00813               
00814         drawTop += drawRect.height();
00815         
00816         if((_uiEndIndex >= getFieldPtr()->getSize()) ||
00817            (drawTop     >= height()                )   )
00818         {
00819             doneDraw = true;
00820         }
00821         else
00822         {
00823             currIndex = _uiEndIndex++;
00824             pLabel    = acquireLabel    (currIndex);
00825             drawSize  = pLabel->sizeHint(         );
00826 
00827             drawRect  = QRect(0, drawTop,
00828                               width()-_pScrollbar->width(),
00829                               osgMin(drawSize.height(), height()));
00830         }
00831     }
00832 
00833     IndexLabelMapIt   begin = _usedLabels.begin();
00834     IndexLabelMapIt   end   = _usedLabels.end();
00835 
00836     for(; begin != end; ++begin)
00837     {
00838         pLabel = begin->second.getLabel();
00839 
00840         if( (pLabel->getIndex() <  _uiBeginIndex) ||
00841             (pLabel->getIndex() >= _uiEndIndex  )   )
00842         {
00843             releaseLabel(pLabel);
00844 //            _usedLabels.erase(begin);
00845 //            _poolLabels.push_back(pLabel);
00846         }
00847     }
00848 
00849     _bContentsChanged = false;
00850 }

FieldContainerPtr & osg::QFieldViewBase::getFieldContainer void   )  [inline, inherited]
 

Definition at line 44 of file OSGQFieldView_qt.inl.

References osg::QFieldViewBase::_pFieldCon.

Referenced by osg::QFieldValueLabelBase::getFieldContainer(), osg::QFieldEditorBase::getFieldPtr(), mouseDoubleClickEvent(), osg::QSFieldView::mouseDoubleClickEvent(), mousePressEvent(), osg::QSFieldView::mousePressEvent(), setFieldContainer(), and osg::QSFieldView::setFieldContainer().

00045 {
00046     return _pFieldCon;
00047 }

const FieldContainerPtr & osg::QFieldViewBase::getFieldContainer void   )  const [inline, inherited]
 

Definition at line 50 of file OSGQFieldView_qt.inl.

References osg::QFieldViewBase::_pFieldCon.

00051 {
00052     return _pFieldCon;
00053 }

UInt32 osg::QFieldViewBase::getFieldId void   )  const [inline, inherited]
 

Definition at line 56 of file OSGQFieldView_qt.inl.

References osg::QFieldViewBase::_uiFieldId.

Referenced by osg::QFieldValueLabelBase::getFieldId(), mouseDoubleClickEvent(), osg::QSFieldView::mouseDoubleClickEvent(), mousePressEvent(), osg::QSFieldView::mousePressEvent(), setFieldId(), and osg::QSFieldView::setFieldId().

00057 {
00058     return _uiFieldId;
00059 }

UInt32 osg::QFieldViewBase::getAspect void   )  const [inline, inherited]
 

Definition at line 62 of file OSGQFieldView_qt.inl.

References osg::QFieldViewBase::_uiAspect.

Referenced by osg::QFieldValueLabelBase::getAspect(), setAspect(), and osg::QSFieldView::setAspect().

00063 {
00064     return _uiAspect;
00065 }

Field * osg::QFieldViewBase::getFieldPtr void   )  [inline, inherited]
 

Definition at line 68 of file OSGQFieldView_qt.inl.

References osg::QFieldViewBase::_pFieldCon, osg::QFieldViewBase::_uiAspect, osg::QFieldViewBase::_uiFieldId, osg::FieldContainerPtrBase::getAspectCPtr(), and