00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #include "OSGQFieldContainerView_qt.h"
00040 #include "OSGQFieldView_qt.h"
00041
00042 #include <OSGField.h>
00043
00044 #include <qpalette.h>
00045 #include <qevent.h>
00046 #include <qrect.h>
00047 #include <qsize.h>
00048
00049 OSG_USING_NAMESPACE
00050
00051 #ifdef __sgi
00052 #pragma set woff 1174
00053 #endif
00054
00055 namespace
00056 {
00057 static Char8 cvsid_cpp[] = "@(#)$Id: OSGQFieldContainerView_qt.cpp,v 1.2 2003/05/11 10:33:26 dirk Exp $";
00058 static Char8 cvsid_hpp[] = OSGQFIELDCONTAINERVIEW_HEADER_CVSID;
00059 static Char8 cvsid_inl[] = OSGQFIELDCONTAINERVIEW_INLINE_CVSID;
00060 }
00061
00062 #ifdef __sgi
00063 #pragma reset woff 1174
00064 #endif
00065
00066 QFieldContainerView::QFieldContainerView(QWidget *parent, const char *name)
00067 : Inherited (parent, name ),
00068 _pFC (NullFC ),
00069 _uiAspect (Thread::getCurrent()->getAspect()),
00070 _bShowTypeColumn(true )
00071 {
00072 _pTable = new QTable(this, "QFieldContainerView::_pTable");
00073
00074 _pTable->setNumCols (3 );
00075 _pTable->setReadOnly (true );
00076 _pTable->setSelectionMode(QTable::NoSelection);
00077 }
00078
00079 QFieldContainerView::QFieldContainerView( FieldContainerPtr pFC,
00080 UInt32 uiAspect,
00081 QWidget *parent,
00082 const char *name )
00083 : Inherited (parent, name ),
00084 _pFC (NullFC ),
00085 _uiAspect (uiAspect ),
00086 _bShowTypeColumn(true )
00087 {
00088 _pTable = new QTable(this, "QFieldContainerView::_pTable");
00089
00090 _pTable->setNumCols (3 );
00091 _pTable->setReadOnly (true );
00092 _pTable->setSelectionMode(QTable::NoSelection);
00093
00094 setFieldContainer(pFC);
00095 }
00096
00097 QFieldContainerView::~QFieldContainerView(void)
00098 {
00099 }
00100
00101 void
00102 QFieldContainerView::setFieldContainer(FieldContainerPtr pFC)
00103 {
00104 clearTable();
00105
00106 fillTable(pFC, _uiAspect);
00107
00108 _pFC = pFC;
00109 }
00110
00111 void
00112 QFieldContainerView::setAspect(UInt32 uiAspect)
00113 {
00114
00115
00116 _uiAspect = uiAspect;
00117
00118 clearTable();
00119
00120 fillTable(getFieldContainer(), _uiAspect);
00121 }
00122
00123 void
00124 QFieldContainerView::setShowTypeColumn(bool bShowTypeColumn)
00125 {
00126 _bShowTypeColumn = bShowTypeColumn;
00127
00128 if(_bShowTypeColumn)
00129 {
00130 _pTable->showColumn (TypeColumn);
00131 _pTable->adjustColumn(TypeColumn);
00132 }
00133 else
00134 {
00135 _pTable->hideColumn(TypeColumn);
00136 }
00137 }
00138
00139 void
00140 QFieldContainerView::beginEdit(UInt32 uiFieldId, UInt32 uiIndex)
00141 {
00142 if((uiFieldId < 1) || (uiFieldId > _pFC->getType().getNumFieldDescs()))
00143 return;
00144
00145 QFieldViewBase *pFView =
00146 dynamic_cast<QFieldViewBase *>(_pTable->cellWidget(uiFieldId-1,
00147 ValueColumn ));
00148
00149 if(pFView)
00150 pFView->beginEdit(uiIndex);
00151 }
00152
00153 void
00154 QFieldContainerView::endEdit(void)
00155 {
00156 int numRows = _pTable->numRows();
00157
00158 for(int i=0; i < numRows; ++i)
00159 {
00160 QFieldViewBase *pFView =
00161 dynamic_cast<QFieldViewBase *>(
00162 _pTable->cellWidget(i, ValueColumn));
00163
00164 if(pFView)
00165 pFView->endEdit();
00166 }
00167 }
00168
00169 void
00170 QFieldContainerView::endEdit(UInt32 uiFieldId)
00171 {
00172 if((uiFieldId < 1) || (uiFieldId > _pFC->getType().getNumFieldDescs()))
00173 return;
00174
00175 QFieldViewBase *pFView =
00176 dynamic_cast<QFieldViewBase *>(_pTable->cellWidget(uiFieldId - 1,
00177 ValueColumn ));
00178
00179 if(pFView)
00180 pFView->endEdit();
00181 }
00182
00183 void
00184 QFieldContainerView::resizeEvent(QResizeEvent *pEvent)
00185 {
00186 _pTable->resize(pEvent->size());
00187 }
00188
00189 void
00190 QFieldContainerView::onClicked(FieldContainerPtr pFC,
00191 UInt32 uiFieldId,
00192 UInt32 uiIndex,
00193 ButtonState button )
00194 {
00195 emit clicked(pFC, uiFieldId, uiIndex, button);
00196 }
00197
00198 void
00199 QFieldContainerView::onDoubleClicked(FieldContainerPtr pFC,
00200 UInt32 uiFieldId,
00201 UInt32 uiIndex,
00202 ButtonState button )
00203 {
00204 emit doubleClicked(pFC, uiFieldId, uiIndex, button);
00205 }
00206
00207 void
00208 QFieldContainerView::clearTable(void)
00209 {
00210 UInt32 rows = _pTable->numRows();
00211
00212 for(UInt32 i = rows; i > 0; --i)
00213 {
00214 _pTable->removeRow(i-1);
00215 }
00216 }
00217
00218 void
00219 QFieldContainerView::fillTable(const FieldContainerPtr &pFC, UInt32 uiAspect)
00220 {
00221 UInt32 uiNumFields = pFC->getType().getNumFieldDescs();
00222
00223 _pTable->setNumRows(uiNumFields);
00224
00225 for(UInt32 i = 0; i < uiNumFields; ++i)
00226 {
00227
00228 if(pFC->getField(i+1)->getCardinality() == FieldType::SINGLE_FIELD)
00229 {
00230 QSFieldView *pSFView = new QSFieldView(pFC, i+1, uiAspect, this);
00231
00232 _pTable->setCellWidget(i, ValueColumn, pSFView );
00233
00234 #if (QT_VERSION < 0x030301) || (QT_VERSION < 304)
00235 _pTable->setItem (i, ValueColumn,
00236 new QWidgetTableItem(_pTable));
00237 #endif
00238
00239 connect(pSFView,
00240 SIGNAL(clicked (FieldContainerPtr, UInt32,
00241 UInt32, ButtonState)),
00242 this,
00243 SLOT (onClicked (FieldContainerPtr, UInt32,
00244 UInt32, ButtonState)));
00245 connect(pSFView,
00246 SIGNAL(doubleClicked (FieldContainerPtr, UInt32,
00247 UInt32, ButtonState)),
00248 this,
00249 SLOT (onDoubleClicked(FieldContainerPtr, UInt32,
00250 UInt32, ButtonState)));
00251 _pTable->setText(i, NameColumn,
00252 pFC->getType().getFieldDescription(i+1)->getCName());
00253 }
00254 else
00255 {
00256 QMFieldView *pMFView = new QMFieldView(pFC, i+1, uiAspect, this);
00257
00258 _pTable->setCellWidget(i, ValueColumn, pMFView );
00259
00260 #if (QT_VERSION < 0x030302) || (QT_VERSION < 304)
00261 _pTable->setItem (i, ValueColumn,
00262 new QWidgetTableItem(_pTable));
00263 #endif
00264
00265 connect(pMFView,
00266 SIGNAL(clicked (FieldContainerPtr, UInt32,
00267 UInt32, ButtonState)),
00268 this,
00269 SLOT (onClicked (FieldContainerPtr, UInt32,
00270 UInt32, ButtonState)));
00271 connect(pMFView,
00272 SIGNAL(doubleClicked (FieldContainerPtr, UInt32,
00273 UInt32, ButtonState)),
00274 this,
00275 SLOT (onDoubleClicked(FieldContainerPtr, UInt32,
00276 UInt32, ButtonState)));
00277
00278 QString s(pFC->getType().getFieldDescription(i+1)->getCName());
00279
00280 if(pMFView->getFieldPtr()->getSize() >= 2)
00281 {
00282 s += "\n";
00283
00284 QString num;
00285 num.setNum(pMFView->getFieldPtr()->getSize());
00286 s += num;
00287 }
00288 _pTable->setText(i, NameColumn, s);
00289 }
00290
00291 _pTable->setText(i, TypeColumn,
00292 pFC->getField(i+1)->getType().getCName());
00293 }
00294
00295 for(UInt32 i=0; i<uiNumFields; ++i)
00296 _pTable->adjustRow(i);
00297
00298 _pTable->adjustColumn(NameColumn );
00299 _pTable->adjustColumn(ValueColumn);
00300
00301 if(_bShowTypeColumn)
00302 {
00303 _pTable->showColumn (TypeColumn);
00304 _pTable->adjustColumn(TypeColumn);
00305 }
00306 else
00307 {
00308 _pTable->hideColumn(TypeColumn);
00309 }
00310 }
00311
00312
00313
00314
00315
00316 QFieldContainerView::QWidgetTableItem::QWidgetTableItem(QTable *pTable)
00317 : Inherited(pTable, Never, "")
00318 {
00319 setEnabled(false);
00320 }
00321
00322 QFieldContainerView::QWidgetTableItem::~QWidgetTableItem(void)
00323 {
00324 }
00325
00326 void
00327 QFieldContainerView::QWidgetTableItem::paint(
00328 QPainter *OSG_CHECK_ARG(pPainter),
00329 const QColorGroup &OSG_CHECK_ARG(cg),
00330 const QRect &OSG_CHECK_ARG(cr),
00331 bool OSG_CHECK_ARG(selected))
00332 {
00333 QWidget *pWidget = table()->cellWidget(row(), col());
00334
00335 if(pWidget)
00336 pWidget->repaint();
00337 }
00338
00339 QSize
00340 QFieldContainerView::QWidgetTableItem::sizeHint(void) const
00341 {
00342 QWidget *pWidget = table()->cellWidget(row(), col());
00343
00344 if(pWidget)
00345 return pWidget->sizeHint();
00346 else
00347 return QSize(10, 10);
00348 }
00349
00350 #include "OSGQFieldContainerView_qt_moc.cpp"